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:

FunctionDescription
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

GroupBehavior
IndependentRuns freely alongside any other ability
Exclusive_ReplaceableCancels the active ability in this group when a new one activates
Exclusive_BlockingBlocks 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

FunctionDescription
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

FunctionDescription
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:

cpp
ASC->AddTagStack(TAG_Ammo_Pistol, 30);
ASC->RemoveTagStack(TAG_Ammo_Pistol, 1);
int32 Remaining = ASC->GetTagStackCount(TAG_Ammo_Pistol);

Augment runtime (slot-based)

FunctionDescription
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

DelegateDescription
OnAbilityGrantedFires when any ability is added to this ASC
OnAbilityRemovedFires when any ability is removed
OnEffectRemoved_UIFires when any GE is removed; intended for UI cooldown updates