How-To: Create & Equip an Augment
Goal: author a UCrimsonAbilityAugment (a rune/gem) that mutates an ability through a declared slot, then equip it at runtime via the slot-based API.
UCrimsonAbilityContract assigned, and that contract declares at least one augment slot (a SlotCategory). Augments can only occupy slots the contract publishes.1. Declare an augment slot on the contract
Open the ability's contract and add an entry to AugmentSlots - a SlotCategory tag and how many augments it accepts. Augments whose SlotCategory matches can be equipped there.
Images/CrimsonAbilitySystem/howto-contract-slot.png2. Create the augment asset
Pick a compatibility mode and a slot, then add mutations.
| Field | Purpose |
|---|---|
TargetMode | SpecificContract (binds to one TargetContract) or ContractFamily (matches TargetFamilyQuery against contract IdentityTags) |
SlotCategory | Which contract slot this augment occupies (must be declared by the contract) |
SlotCost | Slot capacity consumed (>= 1) |
StatMutations | Adjust contract properties by tag (Additive / Multiplicative / Override, with a MinimumLevel) |
AttributeMutations | Adjust attributes baked into damage execution (crit, power...) |
ClassMutations / ObjectMutations | Swap a class/object slot the contract publishes (e.g. fire -> ice projectile) |
TagMutations | Add / Remove / Replace tags on the ability spec |
RequiresAugmentTags / ConflictsAugmentTags | Per-augment relationship rules enforced at equip time |
TargetMode = SpecificContract, every mutation's tag dropdown is populated from that contract's published schema - you can't target a tag the ability doesn't expose. IsDataValid fails the asset at save time if a binding is broken, so footguns surface in the editor, not at runtime.3. Equip it at runtime (server only)
Use the slot-based API on the ASC. All equip functions are BlueprintAuthorityOnly and report why an equip failed via ECrimsonEquipFailure (and a logged warning - never a silent no-op).
Images/CrimsonAbilitySystem/howto-equip-augment.pngTo remove an augment, use UnequipAugmentFromSlot(Handle, SlotCategory, SlotIndex), or UnequipAugmentBySlotAddress for an instance you got from GetAvailableSlotsForAbility / GetActiveTempAugments. For temporary, uncapped grants (e.g. a buff), use EquipAugmentToTempSlot.
ActiveAugments fast-array; stateful listeners run server-side only.GetConfigurableValue (e.g. cooldown) reflects the mutation, and any TagMutations show on the ability spec. A bad slot/relationship returns false with a descriptive ECrimsonEquipFailure.See also
- Concept: Augment System - the full model, actions, and stateful listeners
- Concept: Ability Contract - what contracts publish