Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How would I go about creating a controllable ragdoll-character?

Asked by 4 years ago

What do you want to achieve? Keep it simple and clear!

I would like to have the player’s character be a ragdoll permanently, but, still have the ability to walk around and jump. (Similar to the game characters in Ragdoll Mayhem.)

What is the issue? What solutions have you tried so far?

I have no idea where to begin, I’ve tried looking into how people have made those “ragdoll on death scripts,” but I don’t know how I would go about letting the player be in that state while keeping the ability to control their character.

Any ideas on how I could do this is appreciated, thank you for your help!

1 answer

Log in to vote
0
Answered by
WN0820 11
4 years ago
Edited 4 years ago

I have a ragdoll script you can walk around and everything, but when you die it ragdolls Here is the script


local character = script.Parent function recurse(root,callback,i) i= i or 0 for _,v in pairs(root:GetChildren()) do i = i + 1 callback(i,v) if #v:GetChildren() > 0 then i = recurse(v,callback,i) end end return i end function ragdollJoint(part0, part1, attachmentName, className, properties) attachmentName = attachmentName.."RigAttachment" local constraint = Instance.new(className.."Constraint") constraint.Attachment0 = part0:FindFirstChild(attachmentName) constraint.Attachment1 = part1:FindFirstChild(attachmentName) constraint.Name = "RagdollConstraint"..part1.Name for _,propertyData in next,properties or {} do constraint[propertyData[1]] = propertyData[2] end constraint.Parent = character end function getAttachment0(attachmentName) for _,child in next,character:GetChildren() do local attachment = child:FindFirstChild(attachmentName) if attachment then return attachment end end end character:WaitForChild("Humanoid").Died:connect(function() local camera = workspace.CurrentCamera if camera.CameraSubject == character.Humanoid then--If developer isn't controlling camera camera.CameraSubject = character.UpperTorso end --Make it so ragdoll can't collide with invisible HRP, but don't let HRP fall through map and be destroyed in process character.HumanoidRootPart.Anchored = true character.HumanoidRootPart.CanCollide = false --Helps to fix constraint spasms recurse(character, function(_,v) if v:IsA("Attachment") then v.Axis = Vector3.new(0, 1, 0) v.SecondaryAxis = Vector3.new(0, 0, 1) v.Rotation = Vector3.new(0, 0, 0) end end) --Re-attach hats for _,child in next,character:GetChildren() do if child:IsA("Accoutrement") then --Loop through all parts instead of only checking for one to be forwards-compatible in the event --ROBLOX implements multi-part accessories for _,part in next,child:GetChildren() do if part:IsA("BasePart") then local attachment1 = part:FindFirstChildOfClass("Attachment") local attachment0 = getAttachment0(attachment1.Name) if attachment0 and attachment1 then --Shouldn't use constraints for this, but have to because of a ROBLOX idiosyncrasy where --joints connecting a character are perpetually deleted while the character is dead local constraint = Instance.new("HingeConstraint") constraint.Attachment0 = attachment0 constraint.Attachment1 = attachment1 constraint.LimitsEnabled = true constraint.UpperAngle = 0 --Simulate weld by making it difficult for constraint to move constraint.LowerAngle = 0 constraint.Parent = character end end end end end ragdollJoint(character.LowerTorso, character.UpperTorso, "Waist", "BallSocket", { {"LimitsEnabled",true}; {"UpperAngle",5}; }) ragdollJoint(character.UpperTorso, character.Head, "Neck", "BallSocket", { {"LimitsEnabled",true}; {"UpperAngle",15}; }) local handProperties = { {"LimitsEnabled", true}; {"UpperAngle",0}; {"LowerAngle",0}; } ragdollJoint(character.LeftLowerArm, character.LeftHand, "LeftWrist", "Hinge", handProperties) ragdollJoint(character.RightLowerArm, character.RightHand, "RightWrist", "Hinge", handProperties) local shinProperties = { {"LimitsEnabled", true}; {"UpperAngle", 0}; {"LowerAngle", -75}; } ragdollJoint(character.LeftUpperLeg, character.LeftLowerLeg, "LeftKnee", "Hinge", shinProperties) ragdollJoint(character.RightUpperLeg, character.RightLowerLeg, "RightKnee", "Hinge", shinProperties) local footProperties = { {"LimitsEnabled", true}; {"UpperAngle", 15}; {"LowerAngle", -45}; } ragdollJoint(character.LeftLowerLeg, character.LeftFoot, "LeftAnkle", "Hinge", footProperties) ragdollJoint(character.RightLowerLeg, character.RightFoot, "RightAnkle", "Hinge", footProperties) --TODO fix ability for socket to turn backwards whenn ConeConstraints are shipped ragdollJoint(character.UpperTorso, character.LeftUpperArm, "LeftShoulder", "BallSocket") ragdollJoint(character.LeftUpperArm, character.LeftLowerArm, "LeftElbow", "BallSocket") ragdollJoint(character.UpperTorso, character.RightUpperArm, "RightShoulder", "BallSocket") ragdollJoint(character.RightUpperArm, character.RightLowerArm, "RightElbow", "BallSocket") ragdollJoint(character.LowerTorso, character.LeftUpperLeg, "LeftHip", "BallSocket") ragdollJoint(character.LowerTorso, character.RightUpperLeg, "RightHip", "BallSocket") end)

If you know how to change things here you can go ahead and do it And if you don't know where to put it then go starterplayer and go StarterCharacterScripts and set it as a script

If this is not you are looking for then I don't know what you are

Hope this helped

0
Thank you for your contribution! This, however, was not what really what I was looking for, perhaps I weren't clear? I meant that the character is in a permanent 'ragdolled state' when they are alive, but, still keep the ability to walk around and such. If you have the time, you can check a game called "Ragdoll Mayhem," I would like to create a system that is similar to that. Similaritea 58 — 4y
0
Similaritea I saw the game so you mean about a walk animation that is like ragdoll? And if is that what you are looking for is it for R15 or R6? WN0820 11 — 4y
Ad

Answer this question