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

AreaAPIWhy
CooldownsResetCooldownByTag, ReduceCooldownsByTag, ReduceCooldownsAdvanced, GetCooldownRecoveryRateGAS models cooldowns as effects, so "shorten every fire cooldown by 2s" is otherwise hand-rolled every time.
ModifiersAddTagBasedModifier, AddAbilitySpecificModifier, and their removersRuntime numeric changes scoped to a tag or a single spec, without authoring a new effect.
Dynamic tag rulesAddDynamicTagRule, RemoveDynamicTagRuleChange block/cancel relationships at runtime.
Effect stacksGetEffectStackCountByTag, ConsumeEffectStacksByTag, and the by-class variantsSpending stacks is a first-class operation.
Tag stacksAddTagStack, RemoveTagStack, GetTagStackCountCounted resources without an attribute set.
Augment slotsEquipAugmentToFirstFreeSlot, TryEquipAugmentToSlot, EquipAugmentToTempSlot, GetAvailableSlotsForAbilityThe per-spec augment machinery.
Input routingAbilityInputTagPressed, AbilityInputTagReleased, ProcessInputForSpecHandleTag-driven activation, with a pre-routing hook the combo controller uses.
PersistenceRestoreAbilitySystemStateReapply 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