terminalCode Example

NPC Ragdoll Creation with Clothing Preservation

calendar_today May 3, 2026 schedule ~1 min read person patrickjr verified 50

NPC Ragdoll Creation with Clothing

Pattern for creating ragdolls from NPCs including clothing preservation and bone merging.

CSHARP
[Rpc.Broadcast(NetFlags.HostOnly)]
protected void CreateRagdoll(Vector3 velocity, Vector3 origin, float duration = 30)
{
    if (!Renderer.IsValid()) return;

    var go = new GameObject(true, "Ragdoll");
    go.Tags.Add("ragdoll");
    go.WorldTransform = WorldTransform;

    var mainBody = go.Components.Create<SkinnedModelRenderer>();
    mainBody.CopyFrom(Renderer);
    mainBody.UseAnimGraph = false;

    // Copy clothing with bone merge
    foreach (var clothing in Renderer.GameObject.Children
        .SelectMany(x => x.Components.GetAll<SkinnedModelRenderer>()))
    {
        if (!clothing.IsValid()) continue;

        var newClothing = new GameObject(true, clothing.GameObject.Name);
        newClothing.Parent = go;

        var item = newClothing.Components.Create<SkinnedModelRenderer>();
        item.CopyFrom(clothing);
        item.BoneMergeTarget = mainBody;
    }

    var physics = go.Components.Create<ModelPhysics>();
    physics.Model = mainBody.Model;
    physics.Renderer = mainBody;
    physics.CopyBonesFrom(Renderer, true);

    ApplyRagdollForce(physics, velocity, origin);

    // Cleanup after duration
    mainBody.Invoke(duration, mainBody.DestroyGameObject);
}

Key APIs

Was this helpful?