Concept: Ability System Component
UCrimsonAbilitySystemComponent is the engine's UAbilitySystemComponent plus the operations a combat game keeps needing and GAS does not ship.
What it adds
| Area | API | Why |
|---|---|---|
| Cooldowns | ResetCooldownByTag, ReduceCooldownsByTag, ReduceCooldownsAdvanced, GetCooldownRecoveryRate | GAS models cooldowns as effects, so "shorten every fire cooldown by 2s" is otherwise hand-rolled every time. |
| Modifiers | AddTagBasedModifier, AddAbilitySpecificModifier, and their removers | Runtime numeric changes scoped to a tag or a single spec, without authoring a new effect. |
| Dynamic tag rules | AddDynamicTagRule, RemoveDynamicTagRule | Change block/cancel relationships at runtime. |
| Effect stacks | GetEffectStackCountByTag, ConsumeEffectStacksByTag, and the by-class variants | Spending stacks is a first-class operation. |
| Tag stacks | AddTagStack, RemoveTagStack, GetTagStackCount | Counted resources without an attribute set. |
| Augment slots | EquipAugmentToFirstFreeSlot, TryEquipAugmentToSlot, EquipAugmentToTempSlot, GetAvailableSlotsForAbility | The per-spec augment machinery. |
| Input routing | AbilityInputTagPressed, AbilityInputTagReleased, ProcessInputForSpecHandle | Tag-driven activation, with a pre-routing hook the combo controller uses. |
| Persistence | RestoreAbilitySystemState | Reapply a captured snapshot after travel. |
Where it lives
The convention is PlayerState owns the ASC: it survives pawn death and respawn, which is what you want for a player. AI usually puts the ASC on the pawn instead. ACrimsonAbilityPlayerState implements the PlayerState pattern for you.
Do not cache the ASC in a Pawn BeginPlay
With PlayerState-owned ASCs the PlayerState may not have replicated when the Pawn's BeginPlay runs, so the lookup returns null on clients. Symptoms are "works on the server, broken on the client". Resolve lazily instead.
See also
- How-To: Get the Building Blocks
- Concept: Multiplayer and Prediction