most ragdoll systems just replace Motor6D’s with ballsocketconstraints, you could just log all the Motor6Ds in a script and then when you wish to undo a ragdoll, deleted all ballsocketconstraints and reparent the Motor6Ds
That would be unable to achieve what I want. I want the ragdoll to be able to play animations while being simulated realistically. There’s a clip of that somewhere here:
This is the link in the post, but it looks like the one in the post broke. Sorry about that
i feel like with the amount of physics updates roblox have applied its possible in some way shape or form, MAYBE? but not to the degree of other game platforms (unity, unreal, etc) atm. it’d be something you’d have to tinker with and its a lot of toying with roblox physics and body movers trying to apply forces to an object to keep it upright whilst ragdolled. however playing anims on a ragdolled rig, to my knowledge currently, i think is entirely impossible unless u hardcode it into the ragdoll movement system
for index, joint in pairs(script.Parent:GetDescendants()) do
if joint:IsA("Motor6D") then
if joint.Part1.Name == "HumanoidRootPart" or joint.Part1.Name == "Torso" or joint.Part1.Name == "Head" or joint.Part1.Name == "Right Leg" or joint.Part1.Name == "Left Leg" then
warn("Skipped: "..joint.Part1.Name)
else
local BS = Instance.new("BallSocketConstraint")
local A0 = Instance.new("Attachment")
local A1 = Instance.new("Attachment")
BS .LimitsEnabled = true
BS .TwistLimitsEnabled = true
BS .TwistUpperAngle = 0
A0.Parent = joint.Part0
A1.Parent = joint.Part1
BS .Parent = joint.Parent
BS .Attachment0 = a0
BS .Attachment1 = a1
A0.CFrame = joint.C0
A1.CFrame = joint.C1
wait() --Im not sure how long roblox default wait is but i like to include it before deleting something
joint:Destroy()
end
end
end
and just add some kind of animations when player is meant to hold an item or “Part”
im not sure if this will help but when i recreated Ragdoll Universe it worked well for me, of course you still need to edit it alot…
Make the actual player invisible and make a copy of the player and replace all motor 6d With ballsocketconstraints and like try to make it like mimic the actual player and make the actual player invisible and put them in different collision groups so they don’t collide with each other because I have experience and that looks really weird and finally like use a align position and align rotation to mimic the player I I’m working on a system like that right now but yeah I’m not making much progress right now it’s it works but it hits very buggy and I like try to make this crime a little bit yes so experiment with it and try different things and like be creative you can’t do it like it’s perfect as like games like fall guys And like other big record games because like roblox yes it has physics but yeah they are not so good I hope I could help you and yes try it out 0 and it would be nice if you like take me if you like have some questions because like I’m working on it but I’m not the most experienced programmer because I’m only 13 and yes what should you expect but I think I’m doing pretty good maybe so try it out!
Sorry for all the typos I’m using The speech to text tool from Windows and it’s improving but it’s not understanding me as well as I’m just typing it, ok just sorry
local function getdecandantsmass(target)
local mass = 0
for _1 , decandant in ipairs(target:GetDescendants()) do
if decandant:IsA("Part") or decandant:IsA("MeshPart") then
mass += decandant:GetMass()
end
end
return mass
end
local function setupdollconstraints() -- makes the doll ragdoll
local upforce = getdecandantsmass(doll)*workspace.Gravity
local downforce = upforce/-2
local headforce = doll:WaitForChild("Head"):GetMass()*workspace.Gravity
local vecforceleftfoot = Instance.new("VectorForce")
vecforceleftfoot.Parent = doll:WaitForChild("Left Leg")
vecforceleftfoot.Attachment0 = doll:FindFirstChild("LeftFootAttachment",true)
vecforceleftfoot.RelativeTo = Enum.ActuatorRelativeTo.World
vecforceleftfoot.Force = Vector3.new(0,downforce,0)
-------------
local vecforcerightfoot = Instance.new("VectorForce")
vecforcerightfoot.Parent = doll:WaitForChild("Right Leg")
vecforcerightfoot.Attachment0 = doll:FindFirstChild("RightFootAttachment",true)
vecforcerightfoot.RelativeTo = Enum.ActuatorRelativeTo.World
vecforcerightfoot.Force = Vector3.new(0,downforce,0)
-------------
local vecforcehead = Instance.new("VectorForce")
vecforcehead.Parent = doll:WaitForChild("Head")
vecforcehead.Attachment0 = doll:FindFirstChild("HairAttachment",true)
vecforcehead.RelativeTo = Enum.ActuatorRelativeTo.World
vecforcehead.Force = Vector3.new(0,headforce,0)
-------------
local vecforcetorso = Instance.new("VectorForce")
vecforcetorso.Parent = doll:WaitForChild("Torso")
vecforcetorso.Attachment0 = doll:FindFirstChild("NeckAttachment",true)
vecforcetorso.RelativeTo = Enum.ActuatorRelativeTo.World
vecforcetorso.Force = Vector3.new(0,upforce,0)
end
I am working on making the ragdoll able to move like walking jumping and a few more other things
I think there actually is a way to do this but it might be a bit clunky at best.
So in Roblox, have your player in a state where they’re always ragdolled, always have ball socket contraints active.
But underneath their rig (on the client of course because otherwise it would lag too much)
have a invisible dummy rig that plays the actual animations.
And you can weld the player’s limbs to the invisible animation dummy using position / orientation aligners and whatnot or manually apply force to the player’s body parts so their ragdoll tries to align and follow along the movements of the invisible dummy.
Ah, unfortunately this method does not allow you to walk properly or smoothly atleast in a realistic manner, i’d suggest trying to hook up an Inverse Kinematics module to calculate limb manipulation to be able to correct to nodes that will guide the foot where to place.
So when stumbling the character will actually use the foot to stabilise itself of jittering around and relying on its torso.