Ragdoll Service For All Rig's & Temporary Ragdoll's

Kiy4ku’s Ragdoll Service


Features

Temporary Ragdoll                         "You can create temporary & permament ragdolls as you wish with Ragdoll Count extension without overwriting's."
Custom Constraints                        "You don't have to use only the constraints provided by the service, you can create and use your own constraint info table."
Easy To Use                               "Simple and elegant."
Lightweight                               "It doesn't include loops expect detecting character loaded in client side."
Configurable                              "You can configure it as you wish by changing the values in the constants module inside the service."
Not Complex Framework                     "The framework of module is not spaghetti and understandable if you want to make your own adjustments you can do it easily."
Compatible With NPCs                      "Compatible With NPCs"

Overwrite test for temp ragdoll’s:


Test with camera spring:


Usage

  • If you want ragdoll a character just add 'Ragdoll' Tag to Humanoid (it’ll auto add’s Ragdollable Tag too)
  • If you want rig a character before ragdoll just add 'Ragdollable' Tag to Humanoid
  • If you want ragdoll character on humanoid died just add 'RagdollOnHumanoidDied' Tag to Humanoid

Configuration

  • Find constants module in Ragdoll Service
    image
    image
    And configure values as you want.

Temporary Ragdolls

local tempRagdollExtension = require(script.ragdollServiceTempExtension)

tempRagdollExtension:Ragdoll(targetCharacter) -- Ragdoll's the character
task.delay(5, function() -- Wait's 5 second without yielding the rest of the script
      if targetCharacter then -- Check's targetCharacter for detect still not destroyed
            tempRagdollExtension:Unragdoll(targetCharacter) -- Unragdoll's targetCharacter
      end
end)

Information

  • If you ragdoll something and the ragdolled thing has a humanoid, i.e. is a character, don’t forget to do Humanoid:ChangeState(Enum.HumanoidStateType.Physics).

  • When a player dies, you can set player.Character = nil from the server, then delete the character. On the client side, you can clone the character at the moment it’s being deleted, enabling you to ragdoll the character without any problem. (To prevent freezing.)

  • The module detects the last word of the joints and accordingly, creates folders in RagdollConstraints Folder for example: RightShoulder → Shoulder (The joint names in the ConstraintsInfo table should also be the last word of the joint.)


Examples

Constraints Info Example
Neck = {
	NoCollisionConstraint = {},
	BallSocketConstraint = {
		LimitsEnabled = true,
		TwistLimitsEnabled = true,
		TwistLowerAngle = -40,
		TwistUpperAngle = 40
	}
},

Shoulder = {
	NoCollisionConstraint = {},
	BallSocketConstraint = {
		UpperAngle = 20,
		LimitsEnabled = true,
		TwistLimitsEnabled = true,
		TwistLowerAngle = -40,
		TwistUpperAngle = 20
	}
},

Waist = {
	NoCollisionConstraint = {},
	BallSocketConstraint = {
		LimitsEnabled = true,
		TwistLimitsEnabled = true,
		TwistLowerAngle = -40,
		TwistUpperAngle = 40
	}
},

Elbow = {
	WeldConstraint = {}
},

Wrist = {
	NoCollisionConstraint = {},
	BallSocketConstraint = {
		UpperAngle = 15,
		LimitsEnabled = true,
		TwistLimitsEnabled = true,
		TwistLowerAngle = -15,
		TwistUpperAngle = 15
	}
}
Init Ragdoll Service Server Example
require(game:GetService('ReplicatedStorage').RagdollService)

local players = game:GetService('Players')

players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		local humanoid = character:WaitForChild('Humanoid') :: Humanoid
		
		humanoid:AddTag('Ragdollable')
		humanoid:AddTag('RagdollOnHumanoidFall')
		humanoid:AddTag('RagdollOnHumanoidDied')
	end)
end)

game:GetService('ReplicatedStorage').Remote.OnServerEvent:Connect(function(player)
	if player.Character then
		if player.Character.Humanoid:HasTag('Ragdoll') then
			player.Character.Humanoid:RemoveTag('Ragdoll')
		else
			player.Character.Humanoid:AddTag('Ragdoll')
		end
	end
end)
Init Ragdoll Service Client Example
require(game:GetService('ReplicatedStorage').RagdollService)

local userInputService = game:GetService('UserInputService')
local remote = game:GetService('ReplicatedStorage').Remote

userInputService.InputBegan:Connect(function(input: InputObject, gameProcessedEvent: boolean)
	if input.KeyCode == Enum.KeyCode.R then
		remote:FireServer()
	end
end)

Demo Places

I’ll add more demo place with more feature’s later.


Information About RENDER_PLAYER_CHARACTERS_ON_CLIENT_AFTER_DIED

  • When a player dies, service set’s player.Character = nil from the server, then delete’s the character. On the client side, service clone’s the character at the moment it’s being deleted, enabling you to ragdoll the character without any problem. (To prevent freezing)

Info

If you want you can publish it in wally or another package manager as you wish, i no have time for that.

Thanks to @Quenty (i inspired cameraspring system from nevermore engine)


Downloads

GitHub | Wally | Model


18 Likes

Model is currently privated. Demo is also not uncopylocked.

Great resource though!

Yeah I can’t access it unfortunately. I’ll wait until tomorrow since this was posted not long ago

1 Like

Thank you!

In the meantime do you have a file?

Can you check links again? I fixed demo place permissions (and i made asset’s public)

Awesome resource! Will use in my own projects

1 Like

SMALL UPDATE

  • Fixed not working on R6 Rig’s
  • Fixes on getting attachment map of character

I deleted RagdollOnHumanoidFall in module (you can do that with your Temporary Ragdoll Handler), i’ll publish a demo place about that soon.

Could you animate the ragdolls for r6? I want to add a type of euphoria

This is just a ragdoll service not a euphoria ragdoll maker, but i can give hint’s. Clone character on ragdoll, and play animation on cloned character then use constraints or movers for apply animation on normal character, it’ll provide a active ragdoll.

I will tell you how that goes, also do u think maybe u could implement a feature that allows springs to be added to the ballconstraints? (if thats what this ragdoll service is based off of.)

You can already directly add spring constraints to character,

Any reason why if i reset the character just dissapears instantly?

1 Like

Yes you need require ragdoll service on client side too, and you can RENDER_PLAYER_CHARACTERS_ON_CLIENT_AFTER_DIED set false this constant (if you set false it, you need character’s humanoidrootpart’s networkownership to player on humanoid.Died. Because roblox automatically changes networkownership to server on humanoid.Died, and it’s causing delay in the ragdoll)


I’ll publish more demo place about that soon.

1 Like

just wondering but do you know why this happens after ragdolling? edit : I realized it was because I didn’t require ragdollservice from the client. Still not sure why that’d be an issue but whatever

Hey there, I’m having issues getting the ragdoll to work : Watch Project _ Jujutsu - Roblox Studio 2024-08-31 12-25-28 | Streamable

Because you need change humanoid’s state to gettingup on unragdoll (client-side)

can you send me a link to the place where this problem occurred?

1 Like

Sure, ill send you a messsage.

Add a Grab Feature, Like other players can Grab your hands when you are ragdolled