UCrimsonAbilitySystemComponent
The runtime hub. Extends UAbilitySystemComponent with six feature regions: input handling, activation groups, tag-based modifiers, cooldown management, effect-stack utilities, and the augment runtime.
Input handling
Abilities are driven by gameplay tags, not direct bindings. Each frame, ProcessAbilityInput flushes the pressed/released queues:
| Function | Description |
|---|---|
AbilityInputTagPressed(Tag) | Marks all specs matching the input tag as pressed |
AbilityInputTagReleased(Tag) | Marks all specs matching the input tag as released |
ProcessAbilityInput(DeltaTime, bPaused) | Flushes queues, activates Tap/Hold/Toggle abilities, clears the held set |
ClearAbilityInput() | Clears all pending input queues immediately |
Activation groups
| Group | Behavior |
|---|---|
Independent | Runs freely alongside any other ability |
Exclusive_Replaceable | Cancels the active ability in this group when a new one activates |
Exclusive_Blocking | Blocks activation of other exclusive abilities while active |
Tag relationship rules (SetTagRelationshipMapping) define block/cancel behavior at the tag level, in addition to activation groups.
Cooldown API
| Function | Description |
|---|---|
ResetCooldownByTag(Tags) | Immediately removes matching cooldown GEs (server only) |
ReduceCooldownsByTag(Tags, Amount, Type) | Reduces by flat seconds, % of total, or % of remaining |
ReduceCooldownsAdvanced(Tags, Amount, Type, Mode, Max) | Targeted reduction with All/Random selection and a max-target cap |
GetTotalCooldownDurationFromHandle(Handle) | Original cooldown duration for an ability spec |
GetCooldownRecoveryRate() | Override to scale cooldown tick speed from an attribute (1.0 = normal) |
Effect-stack utilities
| Function | Description |
|---|---|
GetEffectStackCountByTag(Tag) | Current stack count for a GE identified by tag |
GetEffectStackCountByClass(Class) | Current stack count for a GE identified by class |
ConsumeEffectStacksByTag(Tag, N, bAllowPartial) | Removes up to N stacks; returns FCrimsonEffectStackConsumptionResult |
ConsumeEffectStacksByClass(Class, N, bAllowPartial) | Same, identified by class |
FCrimsonEffectStackConsumptionResult reports RequestedStacks, AvailableStacks, ConsumedStacks, with helpers WasFullyConsumed(), WasPartiallyConsumed(), HasAnyConsumed().
Tag stacks
Lightweight replicated integer counters keyed by gameplay tag - handy for charges, ammo, and resource pools:
ASC->AddTagStack(TAG_Ammo_Pistol, 30);ASC->RemoveTagStack(TAG_Ammo_Pistol, 1);int32 Remaining = ASC->GetTagStackCount(TAG_Ammo_Pistol);
Augment runtime (slot-based)
| Function | Description |
|---|---|
TryEquipAugmentToSlot(Handle, Category, Index, Augment, Level, OutReason) | Equips into an exact slot; returns bool + ECrimsonEquipFailure (server only) |
EquipAugmentToFirstFreeSlot(Handle, Augment, Level, OutReason) | Equips to the first free slot matching the augment's category |
UnequipAugmentFromSlot(Handle, Category, Index) | Removes the augment occupying that slot |
EquipAugmentToTempSlot(Handle, Category, Augment, Level, OutReason, OutAddress) | Equips into the uncapped temp pool (buffs); returns its address |
UnequipAugmentBySlotAddress(Handle, Address) | Removes the exact instance at an address (fixed or temp) |
GetAvailableSlotsForAbility(Handle) | UI-friendly view of every fixed slot + occupancy |
GetActiveTempAugments(Handle) | View of temp-pool augment instances |
Authority only
All equip/unequip functions are
BlueprintAuthorityOnly. Equipped instances replicate via the ActiveAugments fast-array (FCrimsonAugmentInstanceContainer); stateful listeners exist only on the server (Transient).Delegates
| Delegate | Description |
|---|---|
OnAbilityGranted | Fires when any ability is added to this ASC |
OnAbilityRemoved | Fires when any ability is removed |
OnEffectRemoved_UI | Fires when any GE is removed; intended for UI cooldown updates |