CrimsonEquipment
Equip Item, Unequip Item, Swap Equipped Items, Move Equipped Item To Slot, Gather Save Data, Restore From Save Data - is BlueprintAuthorityOnly and refuses to run without authority. This plugin contains no RPCs at all: nothing carries a client's intent to the server for you. A click in your equipment UI must reach the server through a Server_ RPC your project owns (usually on the PlayerController), and that RPC calls the manager. Without it, nothing a player does reaches the equipment system. How-To: Get the Building Blocks shows the routing shape.CrimsonEquipment is a slot-based equipment system. A slot layout on the pawn declares which slots exist and how many of each; an equipment definition declares which slot it fills, which abilities, effects and attribute sets it grants, and which actors it attaches. Equipping creates one runtime instance, grants them to the pawn's Ability System Component, spawns the visual actors on every machine, and replicates through a FastArray so late joiners see the same gear.
It knows nothing about items. The object that caused an equip is stored as an opaque UObject* the plugin never inspects, and the only surface an item system talks to is ICrimsonEquipmentHost, which this plugin owns. It also ships no assets and no widgets - you bring the slot tags, the definitions, the meshes and the UI.
What's included
| System | Key types | Purpose |
|---|---|---|
| Manager component | UCrimsonEquipmentManagerComponent, FCrimsonEquipmentList, FCrimsonAppliedEquipmentEntry | The equipment: a replicated FastArray of entries, ability grants, actor spawning, save data. Implements ICrimsonEquipmentHost. |
| Slot layout | UCrimsonEquipmentSlotsComponent, FCrimsonEquipmentSlotDefinition | Declares which slot tags exist on this pawn and how many indices each has. Not replicated - both machines author the same layout. |
| Definitions | UCrimsonEquipmentDefinition, FCrimsonEquipmentActorToSpawn, ECrimsonEquipmentActorSpawnRule | One Blueprint class per piece of gear: slot tag, instance class, granted abilities / effects / attribute sets, actors to attach. |
| Runtime instance | UCrimsonEquipmentInstance | One replicated object per equipped item. Owns this machine's spawned actors and fires OnEquipped / OnUnequipped. Subclass it for per-item logic. |
| Visuals | ACrimsonEquipmentDisplayActor | A ready-made cosmetic actor for mesh-only entries - static plus skeletal mesh component, no collision, optional leader pose. You need no actor Blueprint for ordinary gear. |
| Abilities | UCrimsonGameplayAbility_FromEquipment | Ability base that can navigate back to the equipment instance that granted it, via the spec's SourceObject. |
| Messages | FCrimsonEquipmentChangedMessage | Fired on every equip and unequip (On Equipment Changed Message) alongside the source-changed and look-changed events. |
| Slot provisioning | UCrimsonGameFeatureAction_AddEquipmentSlots, FCrimsonAddEquipmentSlotsRequest | Adds the slots component (and optionally the manager) to a matched actor class from a Game Feature, and announces readiness. |
| Save data | FCrimsonEquipmentSaveData, FCrimsonEquipmentSaveEntry | A plain SaveGame-flagged snapshot plus gather / restore / deferred-flush calls. The plugin depends on no save system. |
| Settings | UCrimsonEquipmentSettings | Project Settings -> Crimson -> Crimson Equipment: the display actor class and verbose logging. |
Plugin dependencies
| Module or plugin | Group | Why |
|---|---|---|
| Crimson plugins | Crimson plugin | None. The plugin is fully standalone: it owns ICrimsonEquipmentHost and its structs, its grant types, its events and its readiness feature state. |
GameplayAbilities | Engine module | UGameplayAbility, UAbilitySystemComponent, and UAbilitySystemGlobals for ASC discovery. |
GameplayTags | Engine module | Slot tags and message channel tags. |
NetCore | Engine module | FFastArraySerializer behind FCrimsonEquipmentList. |
ModularGameplay | Engine module | UPawnComponent (the manager's base) and the component manager the Game Feature action extends actors through. |
GameFeatures | Engine module | UGameFeatureAction behind Add Equipment Slots. |
DeveloperSettings | Engine module | UCrimsonEquipmentSettings. |
Core, CoreUObject, Engine | Engine modules | Base types. |
IrisCore | Engine module (private) | Iris replication fragments on UCrimsonEquipmentInstance. |
CrimsonEquipmentTags.h: Crimson.Equipment.Message.Changed, Crimson.SystemReady.Equipment, Message.Equipment.SourceChanged, Message.Character.LookChanged. It defines no slot tags - Equipment.Slot.Weapon and friends are yours to author. ICrimsonEquipmentHost, FCrimsonEquipRequest, FCrimsonEquipResult, FCrimsonEquipmentSlotInfo, FCrimsonEquipmentSourceChangedMessage and FCrimsonCharacterLookChangedMessage ship with this plugin (it also defines Message.Equipment.SourceChanged and Message.Character.LookChanged). The ASC is found with Epic's UAbilitySystemGlobals::GetAbilitySystemComponentFromActor, so any IAbilitySystemInterface implementation works.Source/CrimsonCore/{Public,Private}/Integration/Equipment/ and .../Integration/Inventory/: UCrimsonCoreEquipmentAbilitySetSubsystem grants each definition's AbilitySetsToGrant through OnEquipmentGrantsChanged, and UCrimsonInventoryEquipmentStatics / UCrimsonInventoryIntegrationSubsystem equip inventory items. To wire it yourself, read CrimsonCommon -> Concept: Connecting Crimson Plugins; for everything CrimsonCore installs, read CrimsonCore -> Concept: The Integration Layer.