Lootable Corpse
Updated October 20, 2026
Turn a ragdolled character into a lootable corpse with AC_CH_Lootable_Corpse and BP_Lootable_Corpse.
For shared setup guidance, see the Migration Guide and Integration Guide. Use the System Atlas to look up functions, variables, events, components, and ownership references. Use this page for Lootable Corpse-specific setup, runtime behavior, extension points, and integration notes.
Demo Overview

Figure 1. Example map overview panel describing the intended gameplay behaviour of the Lootable Corpse system.
Introduction
The Lootable Corpse system is a compact, multiplayer-aware Blueprint setup that turns a ragdolled character into a world loot container once the ragdoll has settled. The implementation shown here is intentionally split into two responsibilities: a character-side component that detects the ragdoll freeze and spawns the corpse actor, and a dedicated corpse actor that presents the final pose, holds the copied inventory, and exposes the interaction behaviour.
In practice, this means the owning character does not need bespoke death-to-loot scripting every time. As long as the required components are present and the owner can provide the expected ragdoll integration, the component can listen for the ragdoll freeze, resolve the final mesh to use, spawn the corpse actor, and hand off the inventory data.
| Design intent Corpse pose and location can resolve locally on clients, while inventory logic remains server-authoritative. Clients may therefore see slightly different corpse positions. |
Adding Lootable Corpse to a Character
The implementation documented here uses only two system-owned Blueprint assets: AC_CH_Lootable_Corpse and BP_Lootable_Corpse. AC_CH_Lootable_Corpse is added to the character that can ragdoll. BP_Lootable_Corpse is the spawned world actor that players interact with after the ragdoll settles.
| Asset | Role | Notes |
|---|---|---|
| AC_CH_Lootable_Corpse | Character-side controller | Binds to ragdoll freeze, resolves mesh choice, spawns the corpse actor, sets corpse lifespan, and performs the handoff back to the original owner. |
| BP_Lootable_Corpse | World corpse actor | Displays the corpse pose, receives the copied inventory, exposes the loot interaction, and handles save/load conversion behaviour. |
| Owner character requirements | Integration dependency | Character needs the Lootable Corpse component, a compatible inventory component, and a ragdoll source that the component can bind to via Get Ragdoll / ragdoll frozen event. |
In the supplied example, AC_CH_Lootable_Corpse is attached directly to the example character Blueprint. The other components visible on the example character are part of other systems and are out of scope for this document.

Figure 2. Example character setup showing AC_CH_Lootable_Corpse attached to the character and exposing its core settings in the Details panel.
Required integration pieces:
- A compatible inventory component on the owner character so the corpse can copy the live item state into the spawned corpse actor.
- A ragdoll source or ragdoll component that exposes the frozen/settled event the component binds to on Begin Play.
- A skeletal mesh to copy. The system can use the character mesh directly, a child skeletal mesh, or an optional visual override path when configured.
Details Panel / Important Variables
Set Use Child Skeletal Mesh and Lootable Corpse Lifespan on AC_CH_Lootable_Corpse to control the mesh source and cleanup time.
| Variable | Type | Purpose | When to change it |
|---|---|---|---|
| Use Child Skeletal Mesh | Boolean | Changes the mesh-selection logic so the component uses a child skeletal mesh instead of the main character mesh. | Enable this when the visible corpse mesh is not the owner’s main mesh component, for example when presentation lives on a child actor or specialised child mesh. |
| Lootable Corpse Lifespan | Float | Sets the lifespan applied to the spawned corpse actor. | Increase this for slower cleanup or persistent-feeling worlds. Reduce it for performance-heavy scenarios or fast PvP cleanup. |
System Scope and Asset Roles
The corpse workflow connects AC_CH_Lootable_Corpse and BP_Lootable_Corpse to your project’s inventory and ragdoll systems. Start by connecting the ragdoll event and inventory reference, then configure the mesh source and lifespan.
BP_Lootable_Corpse inherits its base interaction behavior from its parent. Customize corpse-specific behavior through the child overrides described below.
AC_LOOTABLE_CORPSE Explained
AC_CH_Lootable_Corpse is the system’s entry point on the living character. It contains a very small surface area: three Event Graph entries and two helper functions. Its job is to wait until the ragdoll has stabilised, choose the right mesh, spawn BP_Lootable_Corpse, and then begin handing off responsibility to the spawned corpse actor.
| Item | Type | Purpose |
|---|---|---|
| Event Begin Play | Event Graph | Runs on the authority path and binds the component to the ragdoll frozen event so the corpse spawn only happens once the ragdoll snapshot is ready. |
| Ragdoll_Freezed_Event | Custom Event | Executes after the ragdoll freeze signal, waits a short delay, resolves the mesh to use, and spawns BP_Lootable_Corpse with the owner and inventory references. |
| Lootable_Corpse_Initialized_Event | Custom Event | Receives the spawned corpse’s initialization callback so the original actor can be scheduled for cleanup. |
| Find Skeletal Mesh To Use | Function | Returns the main character mesh or the first child skeletal mesh depending on the Use Child Skeletal Mesh setting. |
| Try Get Visual Override Mesh | Function | Looks for a child actor component tagged VisualOverride and, if found, extracts a skeletal mesh component from it. |

Figure 3. AC_CH_Lootable_Corpse Begin Play binding to the ragdoll frozen event on the authority path.

Figure 4. AC_CH_Lootable_Corpse corpse-spawn flow after ragdoll freeze.
Important behaviour in AC_CH_Lootable_Corpse
- The component binds on Begin Play only on authority. This keeps the actual spawn trigger controlled from the server-side path.
- A short delay is inserted after the ragdoll frozen event. Keep this delay so the final pose can settle on both the server and client before the corpse is spawned.
- When spawning BP_Lootable_Corpse, the component passes the resolved skeletal mesh, the owner, and the inventory reference that should be copied into the corpse.
- The component applies the configured corpse lifespan and listens for the corpse-initialized callback before cleaning up the original owner path.
Mesh selection helpers
The helper functions are small but important because they decide which visual source becomes the corpse.
- Find Skeletal Mesh To Use: if Use Child Skeletal Mesh is false, the function returns the standard character mesh. If true, it enumerates children of the character mesh and returns the first skeletal mesh child it finds.
- Try Get Visual Override Mesh: the function searches the owner for child actor components tagged VisualOverride. If one exists, it attempts to pull a skeletal mesh component from the first valid child actor, giving you an optional override path without rewriting the rest of the system.
BP_LOOTABLE_CORPSE Explained
BP_Lootable_Corpse is the actor players loot after the original character enters ragdoll. It sets up the corpse visuals, copies inventory, handles interaction, and converts loaded corpses with remaining items into loot bags.
| Blueprint area | What it does | Why it matters |
|---|---|---|
| Can Interact override | Combines parent interaction validity with the local Inventory Invalid flag. | Prevents players from interacting with a corpse that did not receive a valid inventory handoff. |
| Get Relative Interact Text Location | Offsets the prompt using the poseable mesh transform rather than the actor origin. | Keeps the interaction UI positioned above the visible corpse mesh instead of over an empty actor pivot. |
| Get Interact Text / Animation | Returns loot-focused prompt data and the configured interaction montage. | Gives the corpse a clear, dedicated player interaction identity. |
| Begin Play flow | Resolves the inventory component, handles remote placement, copies or builds the corpse pose, validates the inventory source, and transfers items. | This is the core initialization path that turns the spawn parameters into a working corpse actor. |
| On Load flow | After a short delay, checks whether inventory still contains items and converts the corpse into a loot bag if needed. | Supports persistence workflows without leaving invalid corpse actors behind after load. |

Figure 5. BP_Lootable_Corpse interaction overrides and initialization events.
Interaction overrides

Figure 6. Can Interact override combining the parent result with the local Inventory Invalid flag.
The corpse actor keeps its interaction logic intentionally simple. It inherits base interaction support from its parent, then adds only the corpse-specific restrictions and presentation.
- Can Interact returns true only when the parent interaction path says the actor is valid and Inventory Invalid is false.
- Get Relative Interact Text Location calculates the prompt location from the poseable mesh so the prompt appears above the corpse body rather than the actor origin.
- Get Interact Text returns Loot as the primary interaction label.
- Get Interact Animation returns the montage used when the player performs the corpse interaction.

Figure 7. Get Relative Interact Text Location using the poseable mesh transform and an offset.
Begin Play responsibilities
Begin Play initializes BP_Lootable_Corpse so it can display the copied pose and receive the source inventory.

Figure 8. Early Begin Play setup: inventory component resolution and transition into the main initialization sequence.

Figure 9. Begin Play corpse placement and pose-setup path, including the leader-pose / pose-copy handling.

Figure 10. Begin Play inventory validation and transfer into the corpse inventory component.
- The corpse resolves and stores its inventory component on Begin Play, which makes the inventory implementation easier to swap later.
- For remote contexts, the actor sets its location and rotation from the copied mesh transform. Client-side ragdoll outcomes may differ, so clients may see slightly different corpse locations.
- The actor then builds the corpse visual state. Depending on the integration path, it either follows a leader-pose style route or copies pose data onto the poseable mesh.
- If the source inventory reference is invalid, the corpse marks itself as Inventory Invalid so it cannot be looted.
- If the source inventory is valid, the actor copies the inventory name and inventory type, gathers source containers, and transfers the items into its own inventory component.
- Once initialized, the corpse notifies the spawning side so the original owner can be cleaned up on the old path.
Spawn Flow
- A character enters ragdoll and the owning Lootable Corpse component waits for the ragdoll frozen/settled signal.
- On the server-side path, AC_CH_Lootable_Corpse receives the frozen event and waits briefly so the pose is stable.
- The component selects the correct mesh source, optionally considering child skeletal meshes or a visual override mesh.
- BP_Lootable_Corpse is spawned and receives the owner reference, the skeletal mesh source, and the inventory reference to copy.
- The corpse actor initializes its pose, copies the inventory metadata and items, and becomes interactable if the handoff succeeded.
- After the corpse-initialized callback, the original character path can be hidden/cleaned up and the corpse remains for the configured lifespan.
| Why the delay exists Keep the short delay after the ragdoll freezes. Without it, the server may snapshot the corpse before the same final pose is active on the client, causing incorrect visuals or timing issues during the handoff. |
Interaction and Save / Load Behaviour
Interaction behaviour
From the player’s point of view, the corpse behaves like a specialised lootable interactable. The prompt appears above the body, the text is focused purely on looting, and the interaction can be blocked automatically if the inventory handoff failed.
Save / load behaviour

Figure 11. Event On Load behaviour converting the corpse into a loot bag when a loaded corpse still contains items.
The supplied On Load flow waits briefly for the inventory to finish loading, checks the inventory array, and if items are present it spawns a loot bag and destroys the corpse actor. This is a useful persistence rule because it lets the system move loaded loot into a simpler world representation instead of rebuilding a full corpse interaction state forever.
- Delay briefly on load so the inventory has time to restore its item state.
- Read all inventory items from the corpse inventory component.
- If the inventory is not empty, spawn BP_Loot_Bag at the corpse location and pass the inventory list into that new actor.
- Destroy the corpse actor after the loot bag has been created.
Hooking Into Other Systems
The Lootable Corpse system connects death and ragdoll events to corpse visuals and inventory interaction.
| System | Integration point | Practical note |
|---|---|---|
| Ragdoll system | AC_CH_Lootable_Corpse binds to the owner’s ragdoll frozen event on Begin Play. | Your custom character must expose a compatible ragdoll component or access function. Connect the ragdoll frozen event to the component’s corpse-spawn flow. |
| Inventory system | The component passes Inventory To Copy into BP_Lootable_Corpse, which then copies metadata and items into its own inventory component. | This is the main system dependency. If your project uses a different inventory implementation, this is the seam you customise. |
| Interaction system | BP_Lootable_Corpse overrides base interaction functions from its parent. | Change the corpse-specific interaction text, prompt placement, and montage in BP_Lootable_Corpse. |
| Save / load flow | BP_Lootable_Corpse On Load can convert a loaded corpse with items into a loot bag. | Useful for persistence-heavy projects that do not want every saved corpse to remain a full corpse actor forever. |
Common Customisations
Common changes include selecting a different mesh source, adjusting cleanup time, connecting another inventory component, and changing the interaction prompt or animation.
How to add the system to a new character
- Add AC_CH_Lootable_Corpse to the character Blueprint that can enter ragdoll.
- Ensure the character also has the inventory component your project expects the corpse to copy from.
- Confirm the character can expose the ragdoll source used by Get Ragdoll and that the frozen/settled event is fired correctly.
- Set Lootable Corpse Lifespan to the cleanup window you want for your game.
- Test a death/ragdoll event in multiplayer and verify the corpse spawns after the ragdoll has settled rather than immediately on death.
How to use a child skeletal mesh instead of the main character mesh
Enable Use Child Skeletal Mesh on AC_CH_Lootable_Corpse. The mesh-selection helper then enumerates the children of the main character mesh and returns the first skeletal mesh child it finds. This is useful when your visible presentation is not the primary mesh component.
How to use a visual override mesh
The override path is driven by the tag VisualOverride. If your character uses a separate child actor for the visible corpse presentation, tag that child actor component with VisualOverride and make sure the child actor contains a skeletal mesh component that can be extracted. AC_CH_Lootable_Corpse will try this path when resolving the final source mesh.
How to change corpse cleanup time
Change Lootable Corpse Lifespan on AC_CH_Lootable_Corpse. Higher values keep corpses in the world for longer and feel more persistent. Lower values help reduce world clutter, especially in PvP or horde-heavy modes.
How to change the interact text or animation
Edit the Get Interact Text and Get Interact Animation overrides in BP_Lootable_Corpse. This is the cleanest place to change the prompt from Loot to Search, Harvest, Examine, or any project-specific label, and to swap the interaction montage to match the animation set used in your game.
How to keep corpses instead of converting them into loot bags on load
Modify or remove the Event On Load logic in BP_Lootable_Corpse. Right now, the supplied implementation converts a loaded corpse with remaining items into BP_Loot_Bag and destroys the corpse actor. If your project wants corpses to persist exactly as corpses across save/load, this is the event you should rewrite.
How to extend post-spawn initialization
Use the corpse-initialized moment as your extension point. The spawn flow already binds a callback from the spawned corpse back to the spawning component. This is a good place to add project-specific logic such as blood decals, quest state updates, corpse tagging, analytics, or faction consequences without disturbing the core handoff sequence.
Example Flows
Standard death to lootable corpse
- A character dies and enters ragdoll.
- The ragdoll eventually freezes and AC_CH_Lootable_Corpse receives the event.
- After the short stabilisation delay, the component resolves the correct source mesh and spawns BP_Lootable_Corpse.
- The corpse actor copies the inventory state, becomes interactable, and the original actor path is cleaned up.
- A player approaches, sees the Loot prompt above the body, interacts, and opens the corpse inventory.
Character with a separate visible child mesh
- The character uses a separate child skeletal mesh or child actor for its visible presentation.
- Use Child Skeletal Mesh is enabled, or a VisualOverride-tagged child actor is provided.
- When the corpse spawns, the helper function selects the visible child path rather than the default character mesh.
- The resulting corpse matches the intended presentation instead of defaulting to the wrong mesh component.
Loaded corpse converts into a loot bag
- A saved game is loaded and a corpse actor restores into the world.
- On Load waits briefly for the inventory data to finish restoring.
- The corpse finds that items still exist in its inventory.
- It spawns a loot bag and destroys itself, leaving the player with a simpler persistent loot representation.
Summary
AC_CH_Lootable_Corpse handles the transition from ragdoll to corpse. BP_Lootable_Corpse manages the pose, copied inventory, interaction, and load-time conversion. Customize mesh selection and lifespan on the component, and interaction and persistence behavior on the corpse actor.