RagdollService - All in one high quality ragdoll solution!

RagdollService - All in one high quality ragdoll solution!
Download | Source | Github Download

Features
  • No setup, plug and play
  • Supports R6, R15 and custom rigs. Comes with pre-made configs for both R6 and R15
  • Works on both NPCs and players out of the box
  • Supports humanoid-less characters
  • Comes with ragdoll on death example
  • Automatically fixes a lot of the issues that arise from humanoids and ragdolls
  • No external dependencies
  • Strictly typed

Showcase

Uncopylocked Place



Setup
  1. Put the module in ReplicatedStorage
  2. Require the module from both client and server

Note: To call from client the rig must be locally created by the calling client.


Documentation
-- Sets up ragdoll constraints and activates it
RagdollService.Ragdoll(character: Model, rig_type: string?): (success: boolean)
-- Deactivates ragdoll constraints and deletes them
RagdollService.Unragdoll(character: Model): (success: boolean)
-- Sets up ragdoll constraints
RagdollService.SetupRagdoll(character: Model, rig_type: string?): (success: boolean)
-- Activates the ragdoll constraints fails if ragdoll is not setup yet
RagdollService.ActivateRagdoll(character: Model): (success: boolean)
-- Deactivates the ragdoll constraints fails if ragdoll is not setup yet
RagdollService.DeactivateRagdoll(character: Model): (success: boolean)

TIP: By default R6 and R15 is detected automatically. If you don’t want to pass in the rig_type for other rigs you can either use the rig_type parameter or set an attribute on the character named “RigType”.

Rig Config Documentation

TIP: Each config is a single module script. Name of the module script is the rig_type.

Parameters

Animator → Path to animator (optional)
Humanoid → Path to humanoid (optional)
CameraSubject → Path to camera subject during ragdoll (optional)
BreakJointsOnDeath → BreakJointsOnDeath state if humanoid exists (optional)
RootPart → RootPart of the character that carries the network ownership
Joints → Each motor6d in the rig
Limbs → Each limb in the rig
Sockets → Socket config for each joint
NoCollisionConstraints → No collision constraints between limbs

TIP: Everything works on PathArrays. A PathArray is simply the directory from the character model.
For example directory of the Animator in default humanoid rigs is {"Humanoid", "Animator"}


Versions

1.0

  • Initial release

1.1

  • Fixed: Memory leak due to roblox not firing .Destroying signal on the character. Thanks to @eclipse6273094
  • Network ownership decisions are now left to the user
  • Cleaned up few unused variables and functions
  • Small tweaks to default configs

1.2

  • Fixed: Humanoid being able to walk while ragdolled.
  • Fixed: A workaround to default animate script using PlatformStanding state of humanoid.

1.3

  • Fixed: On death jagginess.

1.4

  • Added client sided ragdoll for locally created rigs
  • Added: Better humanoid death state handling
  • Fixed: NPC death jagginess. Thanks to @LucieKitsuneko
  • Fixed an issue where exiting PlatformStand state disables platform stand.
  • Fixed an issue where enabling PlatformStand would drive humanoid into PlatformStanding state and prevent it from going into Physics state.
  • Fixed: Increased safety for network owner operations

2.0

  • Full Animate script compatibility
  • Proper local character humanoid state management
  • Generic ragdolls with no config
  • No network ownership transfers
  • Client can now import the module without waiting for server
  • Improved R6 and R15 configs
  • Bunch of other small fixes and refactor

DISCLAIMERS

  • This is a passive ball socket constraint ragdoll module.
  • Roblox refuses to approve assets I publish to creator store. If the roblox download link doesn’t work you can always get the latest version from the Github Download
57 Likes

This was an interesting project as I had to combine multiple techniques Ive seen from the existing ragdoll modules to get everything working. So thanks to all the open source ragdoll community for their work. And thanks to @Rookstun and @no_l00p for their ragdoll maps.

If you enjoy my work and want to support feel free to leave a like!

As always made with :heart: by 23sinek345.

6 Likes

not currently for sale https://create.roblox.com/store/asset/138237021914694/RagdollService

2 Likes

read the disclaimer, roblox keeps denying my publishes. I’m waiting for the appeal to resolve

2 Likes

ah got it

Summary

word limit :frowning:

1 Like

are u sure thats high quality ragdoll?

2 Likes

You have something better? Feel free to share

7 Likes

i think that’s high quality ragdoll.

defo better than many others tho, that is what i can say.

2 Likes

you have the most basic ragdoll system, and its not even that good or anything.. i mean the ragdoll is as stiff as a board. I wouldnt market this as “high quality”, its more like bare minimum

1 Like

Check the code. No other ragdoll module thats publicly available has a clean api let alone supporting multiple rig types and clean code. Apart from that if you have something better feel free to share.

Also all joints are editable and configurable. Thats the point of the module. You dont need to use my premade configs.

1 Like

After just 30 seconds of tweaking the configuration values I was able to get this:

If you still don’t like what you see feel free to edit socket values yourself

2 Likes

is a ragdoll system not supposed to be basic?? huh

5 Likes

what about clean CODE?


@Yarik_superpro :trade_mark: roast this

Depends

3 Likes

how do the joints work? are they ballsocketconstraints?

1 Like

(this is me, i dont feel like switching acounts)

i already looked at the code, its clean enough ill give you that but thats not what im arguing. And the clean api is just subjective and yes, i have seen ragdoll modules that support mutliple rigs

You think this is your “gatcha” moment, but it isnt.. ive done tons of work within ragdolls.

Heres my active ragdoll:

some other ragdoll stuff

i think this clip came out nice

this one is less visually appealing because i never finished it, but this is more of the tech behind it. Its a server-client hybrid that makes all ragdolls smooth for all clients meaning no stutters/freezing, delays or anything other weird things. Just pure butter

Yours:

im not even sure how to respond to this because what are you talking about :sob: no, a ragdoll system doesnt have to be basic?? huh

1 Like

Is your system open source? I would like to see the resource and even use it myself

1 Like

Give me any other way of doing this. You realize animate needs to be disabled/enabled before setting humanoid state and tracks needs to be stopped after everything. I am unable to see how this can be simplified further. Thank you.

1 Like

Tell me how you’d write this. Ill wait. All these checks exist for a reason except the config.RootPart (I realized I made a simple error putting if config.Humanoid. Apart from that all the if checks are necessary. Let me know how you would write this. It’s simply dealing with roblox default stuff

1 Like
  1. No need for instance query..
  2. use local smth = if cat then true else false
  3. remove some of the variables, they are not that needed and could be done by just doing character.Humanoid for example, and no, --!strict is not needed in this as it doesn’t use native.
2 Likes

if that’s clean code then idk what “clean” means anymore😔

2 Likes