A slot-based equipment system: equip a definition and it grants abilities, effects and attribute sets, spawns visual actors on sockets, and fires lifecycle hooks. Unequip and every bit of it is reversed, in a defined order, replicated.
Gameplay · Equipment · Unreal Engine 5
Equip the sword. The abilities, the mesh, the cleanup: all handled.
Two pawn components: one declares your slot layout, the other owns the replicated equipment list. Equipping a definition grants its abilities, effects and attribute sets to the pawn's ASC, spawns visual actors on every machine and fires lifecycle hooks; unequipping reverses it all in order. No Crimson dependencies.
Why CrimsonEquipment
The equip/unequip machinery every RPG rewrites, done once: replicated, and decoupled from your inventory and GAS setup.
Two components, whole system
UCrimsonEquipmentSlotsComponent declares which slot tags exist and how many indices each has. UCrimsonEquipmentManagerComponent owns the replicated equipment list and the runtime work. Add both in the Components panel, or let the Add Equipment Slots Game Feature action put them on a pawn you never open.
One Blueprint class per piece of gear
UCrimsonEquipmentDefinition is Const and Abstract: read from class defaults, never instantiated. A slot tag, an instance class, grant lists and actors to spawn, with no runtime state, so a hundred swords share one definition and per-copy state lives on the source object.
Equipping grants real abilities
On equip the manager grants the definition's GrantedAbilities, GrantedEffects and GrantedAttributeSets to the pawn's ASC; unequip revokes exactly those, nothing else. UCrimsonGameplayAbility_FromEquipment lets a shared ability read the instance that granted it, so one attack ability serves every weapon.
Visual actors, spawned and forgotten
Each definition lists actors to spawn: class, socket, transform. Leave the class empty and the shipped ACrimsonEquipmentDisplayActor carries your static or skeletal mesh, so ordinary gear needs no actor Blueprint; bUseLeaderPose drives armor from the character's skeleton. Every spawned actor is destroyed on unequip.
No hard dependencies to bridge
The manager finds the ASC through Epic's IAbilitySystemInterface, so any ASC works, including a vanilla one. Inventory items pass through as an opaque SourceObject the plugin stores, replicates and hands back but never inspects. No Crimson plugin dependency, and zero cross-plugin includes.
Multiplayer and save-game ready
The equipment list replicates via FastArray deltas, instances are replicated UObjects, and Iris fragments are registered for you. GatherSaveData / RestoreFromSaveData round-trip a plain SaveGame struct with no save-system dependency, and a restore that arrives before the ASC does is cached until you flush it.
A closer look
From an empty pawn to an equipped weapon
Author your slot tags, add the two components, create a UCrimsonEquipmentDefinition Blueprint for your sword and call EquipItem on the server. The abilities are live, the mesh is in the hand, and unequip undoes all of it.
- Ships no slot tags:
Equipment.Slot.Weaponand friends are yours to author - A definition is a slot tag, its grant lists, a mesh and a socket
- In a Blueprint-only project, ticking the plugin in Edit → Plugins is the entire install
Server-authoritative, and it ships no client routing
Every mutation (EquipItem, UnequipItem, SwapEquippedItems, the save calls) is BlueprintAuthorityOnly and refuses to run without authority. Routing player intent is the game's job, so you write the Server_ RPC that carries the click.
- No RPCs at all in the plugin: your UI's click reaches the server through your own RPC
- Usually a custom event on the PlayerController; the docs show the exact shape in Blueprint and C++
Bring your own inventory. Bring your own ASC.
EquipItem takes any UObject* as the source and hands it back through GetSourceObject; the manager never inspects it. Item systems can go further and talk only to ICrimsonEquipmentHost, which this plugin owns, so neither side includes a header from the other.
- Bridge reads (is this equipped, what's in this slot, the slot layout) are Blueprint-pure
- Mutating half is C++-only; a Blueprint-only project calls
EquipItemon the manager from its own server event - With CrimsonCore, CrimsonInventory items equip through ready-made statics and re-equip after a load
Lifecycle ordering you can build systems on
Equipping into an occupied slot applies the incoming item before removing the occupant, with an OnBeforeSwapUnequip hook in between, so a shared resource like a hotbar context or a weapon-type skill tree never briefly has zero owners.
CanEquipItem/CanUnequipItemgate the flow on your own manager subclassSwapEquippedItemsandMoveEquippedItemToSlotonly rewrite slot assignments: nothing granted, revoked, spawned or destroyed- A swap notifies clients only through
OnCharacterLookChanged, so slot-tracking UI must bind it and re-read
Technical details
- Engine
- UE 5.8
- Tested platforms
- Windows
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- Yes
- Dependencies
- GameplayAbilities, GameplayTags, ModularGameplay, GameFeatures, NetCore, DeveloperSettings, IrisCore
Frequently asked questions
Do I need C++ to use it?
UCrimsonEquipmentDefinition Blueprints, and route the player's click through a Run on Server custom event on your PlayerController. In a Blueprint-only project that is the whole build. Two honest limits: the mutating half of the ICrimsonEquipmentHost bridge is C++-only (a Blueprint equips by calling EquipItem on the manager directly), and a Blueprint child of UCrimsonEquipmentInstance cannot declare replicated variables, so per-item state that must reach clients needs a C++ subclass or lives on your source object.Does it ship any content?
Equipment.Slot.Weapon and every other slot tag is yours to author, and the same tag has to appear in the pawn's layout and in each definition that fills it. What it does ship is the Blueprint bases (Content Browser → Add → Crimson Plugins → Equipment) and ACrimsonEquipmentDisplayActor, the ready-made cosmetic actor that carries a mesh so ordinary gear needs no actor Blueprint.Does it work in multiplayer?
BlueprintAuthorityOnly; clients receive state through the FastArray-replicated equipment list, instances are replicated UObjects with SourceObject and Definition replicated, and Iris is supported. One thing to know: OnEquipped / OnUnequipped run on the server and on every client (on clients from the list's replication callbacks), so anything authoritative inside them must sit behind an authority branch. The parameterless OnEquipmentChanged delegate, by contrast, is server-only; UI binds OnEquipmentChangedMessage, which fires on the server and every client.Does it depend on other Crimson plugins?
ICrimsonEquipmentHost bridge and its grant lists. There are no cross-plugin includes. CrimsonCore, the free full-suite integration layer (it requires every Crimson plugin), adds the cross-plugin pieces automatically: a definition's AbilitySetsToGrant from CrimsonAbilitySystem, and the CrimsonInventory equip flow with equipped-flag sync and re-equip after load. Without CrimsonCore, AbilitySetsToGrant is ignored, so use the Granted* lists.Do I need CrimsonInventory or CrimsonAbilitySystem for it to work?
IAbilitySystemInterface (including a vanilla UAbilitySystemComponent) receives the granted abilities, effects and attribute sets, and the source object can be any UObject from any inventory system. Owning CrimsonInventory or CrimsonAbilitySystem does not connect them by itself: CrimsonCore is the zero-glue pairing, or you call EquipItem from your own code.What happens if I equip into a slot that is already full?
CanUnequipItem does not get a vote; an item that must never leave a slot has to refuse the incoming equip in CanEquipItem. When you equip through the ICrimsonEquipmentHost bridge, the result reports the displaced object as DisplacedSource; putting it back in the bag is the item system's job, not the equipment system's.Do I need CrimsonCommon?
Stop hand-rolling equip/unequip plumbing
Two components on your pawn, one Blueprint class per piece of gear: equipping grants abilities, spawns meshes and replicates, and unequip reverses it all in order. You write the server RPC that carries the click; the rest is done.
Pricing
CrimsonEquipment is sold on Fab under Epic’s two standard licenses. Both include the full plugin, source, and updates.
Completes your setup
Each Crimson plugin runs standalone, so add only what your game needs:
Layout-agnostic, fully replicated inventory with bags and containers.
- Pluggable Topology
- Runtime Constraints
- Scoped Containers
- No RPCs to Write
A full Gameplay Ability System layer for UE5.
- Custom ASC & Abilities
- Slot-Based Augments
- Modifiers & Phases
- Graph-Based Combos