Any Good Ragdoll Systems/Modules?

Any decent & non-laggy ragdoll modules/systems?
I’m making a rogue-like game and a ragdoll on death script just won’t fill my needs.
I need a ragdoll module/system that is able to ragdoll & unragdoll, I’ve been looking for some but everyone I’ve seen has critiques about how it’s laggy or straight up doesn’t work.
SPECIFICALLY R6.
I’m not asking someone to make a system or module for me but rather if anyone has something similar that works and is functional.
Thank you.

2 Likes

depends on whether you’re using r6 or 15.

i use r6, and no plans at all to use r15 (for simplicity and preference).
here’s the one i use

for r15 ive seen some ones out there, but obviously i didnt bother taking a good look.

3 Likes

I updated my post, but i’m talking about R6 specifically.

1 Like

I’m pretty sure I looked at that one awhile ago and people in the replies were talking about it be buggy? Does it work for you well? Another thing it has a seperate NPC version, anyway to combine both?

1 Like

You could set Humanoid.RequiresNeck to false, disable all Motor6Ds and create a BallSocketConstraint for each Motor6D and mess with its properties that will make its behavior less laggy. Something like

local function ragdoll(character: Model)
	for i,v in pairs(character:GetDescendants()) do
		if v:IsA("Motor6D") then
			local ballSocketConstraint = Instance.new("BallSocketConstraint")
			local attachment0 = Instance.new("Attachment")
			local attachment1 = Instance.new("Attachment")
			attachment0.Parent = v.Part0
			attachment1.Parent = v.Part1

			ballSocketConstraint.Parent = v.Parent
			ballSocketConstraint.Attachment0 = attachment0
			ballSocketConstraint.Attachment1 = attachment1

			attachment0.CFrame = v.C0
			attachment1.CFrame = v.C1
			
			-- messing with the properties of a ballsocketconstraint I found these properties efficient for my game, you could try yourself
			ballSocketConstraint.MaxFrictionTorque = 200
			ballSocketConstraint.LimitsEnabled = true
			ballSocketConstraint.TwistLimitsEnabled = true

			v.Enabled = false
		end
	end
	character.Humanoid.RequiresNeck = false
end

and for unragdoll just reversing everything

local function unRagdoll(character)
	for i,v in pairs(character:GetDescendants()) do
		if v:IsA("BallSocketConstraint") then
			v:Destroy()
		elseif v:IsA("Motor6D") then
			v.Enabled = true
		end
	end
	character.Humanoid.RequiresNeck = true
end

You would probably want to use RunService.Heartbeat to set CanCollide on the limbs to true.

Why would i use a heartbeat to set CanCollide to true? Can’t I just set it to true once?

2 Likes

For some reason Roblox constantly changes the collisions of the body parts. You could try changing it only once but I don’t think it will work

1 Like

Would the script you gave be something that’s laggy on the server or at all? I’ve had problems with a previous one even when setting humanoidstates to work with it.

2 Likes

I’m not sure, I don’t have problems with it in my game.
I just gave you an example you can try something else if you want

2 Likes

It’s alright thanks for your help, i’ll try it out.

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.