[Open-Source] Active Ragdoll Module for R6 (Corpse, Physics, Euphoria Animations!)

Hey everyone!
I’m excited to share my fully modular, optimized Active Ragdoll System designed specifically for R6 rigs – ideal for both player and NPC ragdolling with physics-enhanced behavior, corpse creation, and animation blending. :collision:




:hammer_and_wrench: Features

:white_check_mark: Works with R6 Characters
:white_check_mark: Supports NPCs and Players
:white_check_mark: Real Physics-Based Ragdoll via Spring + Align Constraints
:white_check_mark: Client and Server Setup Examples Included
:white_check_mark: Euphoria-like limb control (Enable/Disable)
:white_check_mark: Corpse Cloning System with Timed Cleanup
:white_check_mark: Air & Ground Detection (IsFalling / IsRolling)
:white_check_mark: Fully Configurable via Config Module
:white_check_mark: Uses Attachments & Constraints for clean joint replacement
:white_check_mark: Grabbing system for players (Grab terrain/baseparts)
:white_check_mark: Fast object impact hook

:package: What You’ll Get

  • :file_folder: Active Ragdoll ModuleScript
  • :man_standing: Preloaded dummy rig (used for clone overlay physics)
  • :gear: Example usage in PlayerAdded, RemoteEvents, and more
  • :coffin: Corpse system (with customizable duration + clone logic)

:camera_with_flash: How It Works

  • When ragdoll is toggled, original Motor6Ds are disabled
  • Attachment-based SpringConstraint + AlignPosition/Orientation take over
  • A cloned version of the character (YourName-clone) handles physics while staying in sync
  • You can track air/floor states, impact speed, and even toggle euphoria mode dynamically
  • When euphoria mode is activated, your character will blend animation with the clone

:speech_balloon: How to Use

  1. Ungroup the ActiveRagdoll module.
  2. Set up the ragdoll for the characters like this:
local ActiveRagdoll = require(game.ReplicatedStorage:WaitForChild("Active Ragdoll"))
ActiveRagdoll.SetUp(character)
ActiveRagdoll.SetRagdollEnabled(character, true)
  1. To play/stop ragdoll animations:
ActiveRagdoll.PlayRagdollAnimation(character, "rbxassetid://YOUR_ANIM_ID", 1, true)
ActiveRagdoll.StopRagdollAnimation(character)
  1. To use the corpse system(make sure to run after the character’s death):
ActiveRagdoll.MakeCorpse(character, 15) -- seconds

If you’re still confused, I’ve provided an example uncopylocked place:

Or watch this tutorial video: https://www.youtube.com/watch?v=DcxQlEKYXIU&t=7s

:wrench: Configuration

Located in the Active Ragdoll/Config module, you can toggle:

Config.EnableRagdoll = true;
Config.CorpseEnabled = true;
Config.HookDeathForCorpse = true;
Config.AirCheck = true;
Config.GetPhysicalState = true;
Config.EnableGrab = true;

:inbox_tray: Get It Now

:brick: https://create.roblox.com/store/asset/130147289400556/Nicks-R6-ActiveEuphoria-Ragdoll
:star: Free to use, credit appreciated but not required!

:handshake: License & Credit

Feel free to use this in free or paid games.
All code is written by Nickk (Roblox: @vnmeee, Discord: @nickroblox2)
Original/unmodded version of R6Ragdoll can be find here
Subscribe for more devlogs & systems → YouTube Channel
My community server: Discord


Let me know if you have bugs, ideas, or want to improve it together!
Happy ragdolling! :skull:

NOTE

There isn’t any note here
Feel free to post your version here

57 Likes

This is just the first version of the Module, so bugs are expected.

IF YOU WANT TO MODIFY IT

Beware of:

  1. CollisionGroup:
  • Your Gun System or game mechanic can set the character’s parts collision group to something else
  1. Character’s Attachment Placement:
  • Your game system/mechanic can set a different position for the character’s attachment, like “Hip” or “Neck”. This will heavily affect the visual performance of the ragdoll or ragdoll animations.
  1. Nothing left ig
1 Like

This looks really great! Definitely something I have been looking for a long time. One thing though, could you provide some videos or pictures showcasing the ragdolls?
Other than that, thank you so much!

2 Likes

This looks amazing and way better than anything I’ve made. I might use this for me next game actually.

10/10 Resource.

1 Like

definitely using this today, nice work!

1 Like

It looks amazing! However could you pls explain how can we actually make this work for the player because i dont know how to implement it! Thanks

1 Like

Update log #1

– Update published and overwrote the previous module.
– These changes are available in the provided example place, too.

  • Bug fixed:
    ~fixed EnableEuphoria on the testing Rig
    ~fixed SetLimbEnabled() to not enable or disable the arm’s springs
  • Improvement/ Added:
    ~Improve the character’s Euphoria behaviors by temporarily disabling the Torso—>Clone’s Torso Align Orientation.
    ~Added EnableGrab configuration in the config module
    ~Added Grabbing Module
    ~Added Grabbing Handler/Local

Grabbing Module

  • Nothing new yet lol just GrabbingModule.Grab(character , targetpart , targetPosition)
  • GrabModule uses the RopeConstraint; you can change it to ballsocket or springs.
  • GrabModule automatically chooses the random arms and creates attachments or constraints.
  • Grab Local script is just a “press E to grab” script.

Update Note:

  • THE GRABBING MODULE IS NOT IMPLEMENTING ANY EFFICIENT METHOD TO CLEANUP YET; USE IT WISELY OR IT WILL IMPACT THE PERFORMANCE.

I’m not really good at explaining but here’s my examples on implement it to players.

Server-Side Script Example

local ActiveRagdoll = require(game.ReplicatedStorage:WaitForChild("Active Ragdoll"))
local AnimID = "rbxassetid://?????????"
local Speed = 1 -- any number value from 0 to 1; negate the number to reverse the animation
local Looped = true -- boolean
game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		ActiveRagdoll.SetUp(character) -- SET UP THE CHARACTER WHEN JOINED
	end)
end)

-- Trigger ragdoll
game.ReplicatedStorage.RagdollRemote.OnServerEvent:Connect(function(player)
	local character = player.Character
	if character then
		ActiveRagdoll.SetRagdollEnabled(character, true) --  ragdoll must be set to true before using euphoria
		ActiveRagdoll.SetEuphoriaEnabled(character, true)-- enable euphoria
        ActiveRagdoll.PlayRagdollAnimation(character, AnimID, Speed, Looped)
	end
end)

-- Unragdoll
game.ReplicatedStorage.UnragdollRemote.OnServerEvent:Connect(function(player)
	local character = player.Character
	if character then
		ActiveRagdoll.SetRagdollEnabled(character, false)-- do the same as previous but set boolean to false
		ActiveRagdoll.SetRagdollEnabled(character, false)
        ActiveRagdoll.StopRagdollAnimation(character) -- stop all the ragdoll animations
	end
end)

You can also hook into Respawn Event or MakeCorpse, which are already implemented in the provided model if you’re using CleanUp() and corpse features.
I’ve provided a Respawn Time NumberValue in the ReplicatedStorage part of the model, too.

-- Respawn support
game.Players.RespawnTime = game.ReplicatedStorage["Respawn Time"].Value +0.12
ReplicatedStorage["Respawn Event"].OnServerEvent:Connect(function(player)
	warn(player, "Respawn")
	ActiveRagdoll.MakeCorpse(player.Character,60) -- MakeCorpse(character,Lifetime)
	ActiveRagdoll.Cleanup(player.Character)
	task.wait(0.1)
	player:LoadCharacter()--respawn
end)


Client Example

Here’s a client script example:

local rs = game:GetService("ReplicatedStorage")
local userInput = game:GetService("UserInputService")

local ragdollRemote = rs:WaitForChild("RagdollRemote")
local unragdollRemote = rs:WaitForChild("UnragdollRemote")
local getState = rs:WaitForChild("GetState")
-- This is in case you have a remote for ragdoll and unragdoll
userInput.InputBegan:Connect(function(input, processed)
	if processed then return end
	if input.KeyCode == Enum.KeyCode.R then
		ragdollRemote:FireServer()
	elseif input.KeyCode == Enum.KeyCode.T then
		unragdollRemote:FireServer()
	end
end)

-- This is for respawn
script..Parent.Humanoid.Died:Connect(function()
	print("Died")
	task.wait(game.ReplicatedStorage["Respawn Time"].Value)
	game.ReplicatedStorage["Respawn Event"]:FireServer()
end)

If you are still confused, just contact me through Discord or in this forum.

Current bug

  • Because of a misunderstanding, the BasePart is including Part and MeshPart. In the workspace folder of the model, in the Map folder, there is a script called MapCollisionGroup which needs to be fixed by only checking for BasePart, not BasePart , and MeshPart.

Small update/fix for Grabbing system!

  • Switched from getting a random arm (left/right) to getting the closest arm to the target grabbing part.
  • Added Terrain grab by creating a part in the grab position.

Added WaitUntilRagdollAnimationEnds(Character:Model) function

  • Very long name lol, and it explained the function

Added hooking for fast object impact

  • Added ActiveRagdoll.HandleImpact(Character:Model,Euphoria:boolean)
  • The character will automatically enable ragdoll/euphoria when impacted by a fast object (speed is customizable) and play ragdoll animation(this is customizable too).
  • When impacted, the character will be pushed in the direction of the push part’s path.
  • Only Basepart(meshparts,parts) with a string value named Impact can ragdoll players.
  • Added an example slingshot to impact the ExampleRig in the provided uncopylocked place.
  • This version only works with the unanchored parts.

Next Update

  • Improve the modded R6Ragdoll by changing the ragdoll settings when euphoria is enabled or disabled. For example, when euphoria is enabled, the length of the ragdoll springs will be increased and decreased when returning to normal ragdoll.
  • Add attachment position controller too.

Next showcase video will be posted here and on YouTube at the weekend :tada::tada::tada:

This update automatically overwrote the provided model.

1 Like

I forgot to Customize the character’s part physical properties lol, so the current ragdoll behavior is very stiffy

1 Like

will r15 compatibility be considered in the future? i would love to use it in one of my projects

Yes, but the R6 needs to be finished first, so it would be easier to make R15.

1 Like

This might be the last update!!

Okay, so I’ve just realized that the current ragdoll animation blending and Physics are buggy. These aspects affect the total behavior of the ragdoll, making it look very unrealistic because it depends on the clone, which is hard to control.

Updates

This update includes:

  • Added more settings to control the ragdoll behavior in config module.
  • Added PhysicalProperties settings to co config module and apply automatically to characters.

Known issues

  • Changing animations too much on the clone or character can break the humanoid states. Even if you set all states to disabled and enable the physics state, it still returns to the normal state somehow.
  • Most of the animation functions are causing bugs.

Future

  • I will make an easier-to-use ragdoll system rather than this system; the new version will not depend on the clones anymore.
  • I’m currently learning and practicing to makebalancing ragdoll.
  • R15 version Yes.

For R15 lovers

If you’re tired of waiting, then feel free to check this post: Animated Ragdolls!
To improve animation blending, instead of putting the animation part in the grip or foot, just put them into the joints like Knees or Elbows for a better result.
The best ragdoll system for R15 that works with this solution I recommend is this one Gianmarco2712's overcomplexified ragolls - realistic ragdoll joints v1.2.1

Happy ragdolling!!! :skull:
And goodbye!!

Didn’t expect my post to get linked lol, the code is very dookey right now and I’m working on a rewrite with some better functionality (joint collisions, better collision management in general, etc.)

Might take inspiration from this post too. I’ve been trying to make active ragdolls for R15 for a while and haven’t gotten it quite right. It never went through my head to just use a different rig for the animation. I’ll definitely take some inspiration from this in the future after I take care of my other projects. Thanks for the shoutout.

Edit: Scrapped the rewrite for better support on the current module. It works fine enough and I can traverse through the scripts fine so I’ll keep updating it whenever I discover any bugs.

1 Like

First attempt for balancing here, i use animation because i don’t have a foot plant system yet.
And it stopped having seizures after i re-did the settings.
This is the new ragdoll version which doesn’t require any cloned character.

1 Like


How to make it look better, this is so ugly, please help mee. :’ (

1 Like

I figured it out !!

8 Likes

Wow, thats so cool, how did you do that?

1 Like

well i use R6 inverse kinematic and pd controller to balance.

can we address the elephant in the room?? your roblox avatar???

4 Likes