API Reference

Every public type this plugin ships. Types owned by another module are marked.

Core types

TypeKindPurpose
UCrimsonAbilitySystemComponentComponentThe ASC. Cooldowns, modifiers, tag stacks, effect stacks, augment slots, input routing.
UCrimsonGameplayAbilityAbilityBase ability with activation policy/group, costs, configurable values, augment broadcast.
UK2Node_CrimsonGetConfigurableValueBlueprint nodeGet Configurable Value. Types its Default Value and Return Value pins from the property's definition in the ability's contract, then compiles into GetConfigurableValue / Int / Bool / Vector. Falls back to the node's Value Type when no contract can answer. Lives in the CrimsonAbilitySystemNodes module.
UCrimsonAbilitySystemGlobalsGlobalsMUST be registered in DefaultGame.ini. Allocates FCrimsonGameplayEffectContext.
FCrimsonGameplayEffectContextStructEffect context carrying ability source and augment provenance.
UCrimsonAttributeSetAttribute setBase for your attribute sets.
UCrimsonAbilitySystemSettingsSettingsProject Settings -> Crimson -> Crimson Ability System.
UCrimsonAbilitySystemStaticsLibraryGetSetByCallerMagnitudeFromHandle, GetAbilitySystemComponentFromTargetData, GetPredictedMontageDuration.
UCrimsonGlobalAbilitySystemSubsystemApply/remove an ability or effect across every ASC.
UCrimsonAbilityTagRelationshipMappingData assetStatic block/cancel relationships by tag.
ICrimsonAbilitySourceInterfaceInterfaceLets a damage source describe itself to calculations.
UCrimsonGameplayAbility::CooldownTagsPropertyPer-ability cooldown identity. Appended to the applied cooldown spec's DynamicGrantedTags and to GetCooldownTags(), so one shared cooldown effect can serve every ability without them sharing a cooldown. Empty by default; an ability relying on its effect's granted tags is unaffected.

Ability subclasses

TypeKey API
UCrimsonGameplayAbility_WithCastTimeUpdateAbilityCastTime, GetCalculatedCastTime (public), ECrimsonAbilityCommitTime. GetCastSpeedModifier is a BlueprintNativeEvent - override it to divide the cast by a haste stat. Events: OnCastStarted / OnCastCompleted / OnCastInterrupted (both machines) and the ...Authority variants (server only). Broadcasts FCrimsonAbilityProgressMessage.
UCrimsonGameplayAbility_ToggleActivates and deactivates on alternating presses via a replicated UAbilityTask_WaitInputPress. Configuration is entirely contract-driven: BuffEffectClassSlotTag (a Class Slot) and ToggleConfigTag (a Configuration entry holding FCrimsonToggleConfig) are the only authored properties. GetBuffEffectClass, GetPeriodicCosts, GetTickAbilities resolve them with augments folded in. CooldownPolicy (ECrimsonToggleCooldownPolicy) decides when the cooldown lands; TriggerToggleCooldown charges it on demand (authority only). Events: OnToggledOn / OnToggledOff and the ...Authority variants.
UCrimsonGameplayAbility_ChargesGetMaxCharges, GetCurrentCharges, OnChargesChanged. ChargesUsed is server-authoritative and pushed to the owning client by the reliable Client_SetChargesUsed RPC.
UCrimsonGameplayAbility_ChannelingStartChanneling (virtual), StopChanneling, GetChannelElapsed, SetChannelTickInterval, SetMaxChannelTime, SetCancelOnMovement. Events: OnChannelingStarted / OnChannelingTick / OnChannelingStopped and the ...Authority variants; NativeOnChannelingStarted is the C++ hook for the start. Broadcasts FCrimsonAbilityProgressMessage with Kind = Channel.
UCrimsonGamePhaseAbilityA phase modeled as an ability. GetGamePhaseTag.

Ability display data

Player-facing presentation authored on the ability itself, so an action bar, a skill tree node and a tooltip read one source instead of three lookup tables that drift when an ability is renamed.

Type or memberPurpose
UCrimsonAbilityDisplayDataInstanced UObject holding Icon (TSoftObjectPtr<UTexture2D>), DisplayName, Description and Subtitle. EditInlineNew and Blueprintable - subclass it in C++ or Blueprint to add your own fields (rarity, school, damage type) without rewriting any lookup logic. Consumers that only know the base class keep working.
UCrimsonGameplayAbility::DisplayDataEditDefaultsOnly, Instanced slot on every Crimson ability. Null until a designer picks a class - it is deliberately not created with CreateDefaultSubobject, which does not survive serialization into an instanced slot reliably. Every consumer must treat null as 'no presentation authored' and degrade gracefully.
GetAbilityDisplayData()BlueprintPure accessor. Returns null when nothing is authored.

Ability lifecycle events

Tag containers on every UCrimsonGameplayAbility that send a GAS gameplay event at a fixed lifecycle moment. Authority only. See How-To: Broadcast Ability Lifecycle Events.

Type or memberPurpose
FCrimsonAbilityEventTagsThe struct behind the ability's AbilityEventTags property (EditDefaultsOnly, category Crimson > Ability Events). Six FGameplayTagContainer fields: OnActivatedTags, OnEndedTags, OnApplyCostTags, OnApplyCooldownTags, OnSucceedTags, OnFailedTags.
ECrimsonAbilityEventTagTypeActivated, Ended, Cost, Cooldown, Succeed, Failed, END. Selector for GetEventTypeTagsByType.
GetEventTypeTagsByType(Type)BlueprintCallable, protected. Returns the container for one lifecycle moment. Use it in a subclass that needs to send a lifecycle tag from its own code path.
SendGameplayMessageToOwner(InTags, Payload)BlueprintCallable, protected. Sends each tag in the container to the owning actor as a gameplay event. Despite the name this is SendGameplayEventToActor, not the Gameplay Message Subsystem. Not authority-gated - you decide where it runs.
MakeGameplayEventDataFromEventPayload()BlueprintCallable, protected, virtual. Builds the FGameplayEventData these events carry: Instigator (owning actor), OptionalObject (UCrimsonAbilityEventPayloadBase), OptionalObject2 (the sending ability). Override to add your own fields.
UCrimsonAbilityEventPayloadBaseBlueprintType payload object with GetOwnerActor, GetOwnerPawn, GetOwnerPlayerController, GetAbilityFamilyTags, GetAbilitySpec. One instance is cached per ability and refilled per event - read it inside the handler, do not store it.

Costs

TypePurpose
UCrimsonAbilityCostBase. Override K2_CheckCost and K2_ApplyCost.
UCrimsonAbilityCost_PlayerTagStackCharges a tag-stack resource. The amount comes from the ability's Ability.Property.Cost configurable value when its contract publishes one, otherwise from the authored Quantity FScalableFloat at the ability's level. Publishing the property is what makes a cost augment-modifiable; a published 0 is honored. CheckCost and ApplyCost share one ResolveStackCount so they cannot disagree on the price.

Augments

TypePurpose
UCrimsonAbilityAugmentThe augment data asset - mutations, actions, stateful listeners.
UCrimsonAugmentSubsystemStateless helper library for augment mutation math (static functions; never instantiated per world).
UCrimsonAugmentActionOne-shot action base. Override Execute.
UCrimsonAugmentAction_GameplayCueFires a GameplayCue on the caster, each target, or a ground location. The supported way to do sound, VFX and camera shake from an augment - see How-To: Play Sound and VFX from an Augment.
FCrimsonAugmentActionContextThe shared context every action in a group runs against. TargetData, OwningAbility, EventTags, EventMagnitude, AugmentLevel, OwningAugment, PropertyOverrides, and bIsAuthority - guard authoritative work on the last one, since a predicted event runs the action on the server and the owning client both. AugmentLevel and OwningAugment are rewritten per augment as the dispatcher iterates, so read them during Execute rather than caching.
UCrimsonStatefulAugmentBaseStateful listener base. Override Initialize, HandleAbilityEvent, OnRemoved.
UCrimsonAugmentActorActor spawned by an augment. GetOwningAbility, GetSnapshotedValue.
ICrimsonAugmentSpawnedActorInterfaceInitializeAugmentActor on spawned actors.
UCrimsonAbilityContractDeclares the properties an ability exposes.
UCrimsonAbilityTask_SpawnAugmentActorAbility task for augment-owned actors.
FCrimsonAugmentBindableFloatA designer-authored number. Literal by default; optionally reads an ability property via SourceProperty. Resolve, ResolveAsInt, ToDisplayText.
FCrimsonAugmentActionGateTag query + bindable chance + bindable minimum level. Pass, IsUnconditional.
FCrimsonAugmentValueScopeRAII scope making bound values resolve to real numbers inside generated descriptions.
CrimsonAugment::ForEachBindableFloatReflective walk over every bindable value an augment holds, including instanced actions and listeners.
CrimsonAugment::FormatDescriptionTokensSubstitutes {PropertyName} tokens in an authored description, with :0 / :spaced / :lower / :upper / :title format specs.

Shipped actions: _ApplyGameplayEffect, _ConsumeEffectStacks, _FindTargets, _GrantAndActivateAbility, _ModifyContext, _ModifySetByCaller, _ModifySpecAttribute, _ReduceCooldown, _SpawnActor. (_Chance and _Conditional were removed - gating is now an FCrimsonAugmentActionGate on the event group or the action itself.)

Shipped stateful listeners: _ApplyGameplayEffect, _EventTrigger, _HitCounter, _ModifyTags, _ReplaceAbility, _StackConsumer.

Tooltips

Type / functionPurpose
FCrimsonAbilityTooltipTitle, description, Stats, and one section per equipped augment.
FCrimsonTooltipStatOne published property resolved: Label, Description, ValueType, Categories, BaseValue, CurrentValue, the Bool / Vector pairs, Display, bModified, bDeclaredByAugment.
ECrimsonTooltipStatKindA stat's value shape: Float, Int, Bool, Vector, or Attribute for an ability-scoped attribute adjustment.
FCrimsonPropertyDisplayAuthored on a contract property: Suffix, bAsPercent, Decimals, bHigherIsBetter, bHideFromTooltip. Presentation only - the runtime value is untouched.
FCrimsonTooltipStatFilterWhich rows a panel wants: MatchAnyCategories, AllowedKinds, Source, bOnlyModified. Default-constructed passes everything.
FCrimsonAugmentTooltipSectionOne equipped augment: AugmentTag, SlotCategory, Title, Description, Level, Augment, bIsPreview.
FCrimsonAugmentEffectLineOne thing an augment does, as a row: Source, Text, TargetLabel, Kind, MutationType, Value. Joined, these are the generated description.
UCrimsonAbilitySystemStatics::BuildAbilityTooltipBlueprint-callable. Assembles an ability plus its equipped augments. OverrideLevel = -1 uses the ability's current level.
UCrimsonAbilitySystemStatics::BuildAugmentPreviewTooltipEditor-side preview for a single augment against its target contract, with no live ability.
UCrimsonAbilityTooltipStaticsThe a-la-carte half: find / filter / group stats, resolve one stat without the tooltip, discover what an ability publishes, format values and deltas, and preview a candidate augment against the live loadout.
UCrimsonAbilitySystemComponent::OnAbilityPropertiesChangedBlueprint-assignable. Fires on server and clients when an ability's resolved properties change - the refresh signal for anything showing its numbers.

Gameplay Effect components

TypePurpose
UCrimsonModifierGameplayEffectComponentApplies property modifiers from an effect.
UCrimsonAccumulateGameplayEffectComponentAccumulates a value across applications.
UCrimsonGameplayEffectComponent_ApplyToInstigatorAlso applies the effect to the instigator.
UCrimsonGameplayEffectStackingSubsystemStacking bookkeeping.

Combo system

TypePurpose
UCrimsonComboControllerThe runtime driver. Add to the pawn.
UCrimsonComboGraphAssetThe authored graph - handshake, nodes, end points. Those are baked from the editor graph on save and deliberately hidden from details panels (a hand edit would be overwritten by the next bake); only the Defaults section (buffer TTL, reset-on-damage) is editable on the asset.
UCrimsonInteractionCondition_AttributeCompare(CrimsonCore) Interaction condition: Attribute compared with Comparison (<, <=, =, >=, >) against Value on the instigator's ability system; an instigator without the attribute set fails. Gate a door or a chest on a level or a reputation. Reason "Requires <Attribute> at least <Value>"
UCrimsonComboTransitionConditionPer-step observer gating a transition's augments.
UCrimsonComboEventBaseEvent base: eight lifecycle hooks selected with HookMask, plus PhaseFilter to narrow the two phase hooks to one phase. Subclasses _Augment, _GameplayCue, _GameplayEvent, _GameplayMessage.
UCrimsonComboPathLibraryBuildComboPathTree, BuildComboPathForestFromGrants for UI.
UCrimsonInputTrigger_ComboEnhanced Input trigger with correct press/hold/release semantics.
FCrimsonComboExtensionUPROPERTY on UCrimsonGameplayAbility declaring rooted combos and the cancel window.
FCrimsonComboTransitionOne edge - input, kind, charge window, fire mode, priority, EdgeRequiredTagsQuery, conditional augments. The tag query is evaluated against the owner's ability system tags, which include the live Combo.Phase.* tag and the active node's NodeTags; an empty query always passes.
FCrimsonComboInputBindingAction + direction + modifier alternatives (ModifierAlternatives, TArray<FCrimsonComboModifierRequirement>: the press matches when ANY alternative is satisfied); the input half of a handshake or transition. Captured bindings (buffer entries, RPC payloads) carry at most one - the press-time sample (GetSampledChord).
FCrimsonComboModifierRequirementOne alternative: RequiredModifierTags (gameplay tags) and/or RequiredModifierKeys (raw FKeys) a press must hold, matched exactly. Keys are read from engine key state; tags through FCrimsonAbilitySystemIntegrationHooks::ResolveHeldComboModifierTags.
FCrimsonComboRuntimeNodeOne step - ability class, phase boundaries (StartupEnd, ActiveStart, ActiveEnd, RecoveryEnd), transition window, NodeTags applied as loose tags while the node is the active step, events.
ECrimsonComboFireModeIASA, PressBuffer, HoldBuffer.
ECrimsonComboInputKindTap, Hold, Release.
ECrimsonComboDirectionNone, Forward, Back, Left, Right, Up, Down.
ECrimsonComboResetReasonWhy a combo ended - timeout, damage, death, interruption, and so on.
ECrimsonComboPhaseNone, Startup, Active, Recovery. The timing phase of the active step. None means no combo is running, or the active step authored no phase boundaries.
ECrimsonComboEventHookThe eight hooks a combo event can subscribe to through HookMask: StepEntered, StepExited, TransitionWindowOpened, TransitionWindowMissed, TransitionFired, ComboCompleted, PhaseEntered, PhaseExited. The mask is a uint8 and all eight bits are in use.
FCrimsonComboEventContextPayload handed to every hook: controller, ASC, avatar actor, combo, node, step ability class, TargetNodeID, TriggeringInput, and Phase - set on the two phase hooks only, and on PhaseExited it is the phase being left.
FCrimsonComboEventMessagePayload broadcast by UCrimsonComboEvent_GameplayMessage: HookTag, combo, node, step ability class, avatar actor, and Phase. The event carries a ChannelTagOverride_On<Hook> and a HookTag_On<Hook> per hook, including _OnPhaseEntered and _OnPhaseExited.
FCrimsonComboUIMessagePayload on every Combo.Message.* channel: Event, Context, Snapshot, bWasCanceled, ResetReason, RejectReason.
ECrimsonComboUIEventWhich moment an FCrimsonComboUIMessage describes - including PhaseEntered and PhaseExited, whose phase rides on Context.Phase.
FCrimsonComboTelegraphSnapshotFrozen timing view of the active step, for telegraph and tutorial HUDs. Phase fields: CurrentPhase, bHasAuthoredPhases, StartupEndLocalSeconds, ActiveStartLocalSeconds, ActiveEndLocalSeconds, RecoveryEndLocalSeconds - offsets from step entry, scaled by the step's play rate, the same convention as WindowOpenLocalSeconds and WindowCloseLocalSeconds.
FCrimsonComboAvailableInputOne press the owner could make now: action, direction, kind, combo, target node, priority, bWouldFireIfPressedNow, bPressWouldBuffer, IneligibilityReason and IneligibilityCode. Returned by GetAvailableComboInputs.
ECrimsonComboIneligibilityReasonWhy a candidate press would not fire right now: None, InputActionUnset, WindowNotOpenYet, WindowClosed, WrongDirection, EdgeTagsNotSatisfied.
ECrimsonComboDriveTimingImmediate (fail if the transition window is shut) and WhenWindowOpens (latch on the active step and fire when it opens). Authority drive only - player presses go through the input buffer instead.
ECrimsonComboDriveResultOutcome of an authority drive request: Success, ComboSystemDisabled, NotAuthority, OwnerIsPlayerControlled, NoASC, ComboNotGranted, ComboNotActive, NoMatchingTransition, TargetNotReachable, WindowNotOpen, WindowClosed, EdgeTagsNotSatisfied, Latched. See How-To: Drive Combos from AI.

Combo controller functions

FunctionPurpose
HandleInputActionPressed / ReleasedRoute input. Presses for actions outside the combo catalog are ignored; the third parameter marks a press defensive.
IsComboActive / IsInCancelWindowState queries.
GetCurrentCombo / GetCurrentNodeID / GetCurrentStepHandleWhat is running now.
GrantDynamicCombo / RevokeComboGrant / UnlockComboGrant / LockComboGrantRuntime grant management. Server only.
IsComboGranted / GetGrantedCombosForGrant queries.
GrantAugmentWithLifetime / RemoveAugmentFromCurrentStep / RemoveAllAugmentsFromCurrentStepStep-scoped augment control.
AddDynamicEventToNode / RemoveDynamicEvent / RemoveDynamicEventsBySourceRuntime event overlay.
ResetComboEnd the current combo with a reason.
GetActiveHolds / GetAvailableComboInputsUI-facing state - charge bars, input prompts.
GetSaveData / ApplySaveDataPersist dynamic grants and events.
SetMoveInputProviderC++ only. Supplies directional intent.
SetModifierStateProviderC++ only, optional. Overrides how held modifiers are read (both tags and keys); left unset the controller reads keys from engine key state and tags through FCrimsonAbilitySystemIntegrationHooks::ResolveHeldComboModifierTags.
GetCurrentPhaseThe active step's timing phase. None when no combo is running, and for the whole life of a step that authored no phase boundaries.
GetTelegraphSnapshotFrozen timing view of the active step for HUDs, carrying the live phase and the four play-rate-scaled phase boundaries.
OnPhaseEnteredDelegate / OnPhaseExitedDelegateBlueprint-assignable multicast delegates, (Context, Phase). Server and owning client only. OnPhaseExitedDelegate fires before OnStepExitedDelegate on every teardown path, including a prediction rollback.
StartComboByAsset / RequestTransitionToNode / CancelPendingDriveRequestThe authority drive API for AI and scripted sequences. Authority only, and refused when the owning pawn is player-controlled. See How-To: Drive Combos from AI.
GetCompletionCounterBumped each time an End node is reached. Snapshot it before a driven combo and compare for inequality once the combo is no longer active, to tell a clean finish from a reset. The underlying value is a byte and wraps, so never compare for ordering.
GetUngrantedStepAbilities / PreloadComboAbilitiesPre-flight for a driven combo: which of the combo's step abilities are not granted on the bound ASC, and warming their classes so the first step does not blocking-load.

Persistence

TypePurpose
UCrimsonAbilityStateCarrierSubsystemGame instance subsystem holding a snapshot across travel.
UCrimsonEffectPersistenceComponentPer-effect persistence bookkeeping.
UCrimsonAbilityStatePersistenceSettingsProject Settings -> Crimson -> Ability State Persistence.
FCrimsonAbilitySystemStateSnapshotThe captured state.
FCrimsonAttributePoolPairOne pool and the attribute that caps it, listed under Pool Attributes in the settings. A listed pool is captured as a fraction of its own maximum and restored against whatever that maximum reads on the way back in, so a buff that was absent at capture time cannot shrink it.

Base actors

TypeDerives fromPurpose
ACrimsonAbilityCharacterACharacter (+ ModularGameplay receiver)Character with ASC access and init callbacks.
ACrimsonAbilityPlayerStateAPlayerState (+ ModularGameplay receiver)Owns the ASC - the recommended pattern.
ACrimsonAbilityPlayerControllerAPlayerController (+ ModularGameplay receiver)Typed ASC accessor.
ACrimsonTaggedActorAActorActor carrying gameplay tags.

Settings

SettingDefaultPurpose
bEnableComboSystemfalseMaster switch. Editor restart to apply.
ComboInputMappingContextunsetThe IMC catalog the combo input picker reads. At runtime the controller ignores presses for actions not in it (IsComboInputAction); unset disables the gate.
ModifierInputMappingContextunsetDeclares which actions are chord modifiers (IsModifierInputAction) - never treated as combo inputs in their own right. Unset is valid.
MoveInputActionunsetSampled at press time for ECrimsonComboDirection.
DefaultInputBufferTTL0.1Last resort in the buffer TTL chain.
DefaultInputBufferCapacity8Ring buffer size.
MoveInputDeadZone0.3Below this, direction resolves to None.
ServerPingLeniencyCapSeconds0.08Cap on server window tolerance.
bDefaultResetOnDamageTakentrueSeeded into new combo assets.
TapMaxHoldDuration0.18Tap/Hold disambiguation threshold.
RecentlyEndedBannerSeconds1.5Dev-tools cosmetic only.

Gameplay tags this plugin defines

These are native tags declared by this plugin - you can rely on them existing.

GroupTags
Activation failureAbility.ActivateFail.Cooldown, .Silenced, .IsDead, .ActivationGroup, .Charge.OutOfCharges
Ability stateAbility.State.Casting, .Channeling, .Interrupted, .Stunned, .Silenced, .Changed, .AbilityHandleChanged
Ability propertiesAbility.Property.Cooldown, Ability.Property.PrimaryTargetCount, Ability.Property.Cost
Ability behaviorAbility.Behavior.SurvivesDeath
Augment eventsAugment.Event.OnActivate, .OnEffectApplying, .OnEffectResolved, .OnEnd, .OnGranted, .OnRemoved
Augment categoriesAugment.Category.Default, .Stat, .Behavior, .Defensive, .Trigger, .Visual
Combo step phasesCombo.Phase, Combo.Phase.Startup, Combo.Phase.Active, Combo.Phase.Recovery. Applied as loose, non-replicated tags on the owner's ability system while a phase-authored step is running - on the server and the owning client, never on a simulated proxy. Combo.Phase is the parent and is never applied on its own.
Combo phase messagesCombo.Message.PhaseEntered, Combo.Message.PhaseExited. Channels carrying an FCrimsonComboUIMessage whose Context.Phase is the phase entered, or the phase left.
PersistenceCrimson.Persistence.Persist, Crimson.Persistence.DoNotPersist
StatusStatus.Death, Status.Cheat.Invulnerable, Gameplay.AbilityInputBlocked
Augment.Event.OnActivate does not reach combo conditions
It is broadcast during the step ability's activation, before the combo controller has registered that step - so the spec filter drops it. Use OnObservationBegin instead. How-To: Gate Combo Branches with Conditions documents the full reasoning and the workarounds.

Cast and channel progress

Broadcast by UCrimsonGameplayAbility_WithCastTime and UCrimsonGameplayAbility_Channeling when a timed segment starts and again when it ends. See How-To: Make a Cast-Time Ability -> 5. Drive a cast bar.

Type / eventHomePurpose
FCrimsonAbilityProgressMessageThis plugin (AbilitySystem/)Instigator, ability handle and identity tag, StartWorldTime, Duration, Phase, Kind.
ECrimsonAbilityProgressPhaseThis pluginStarted / Completed / Interrupted.
ECrimsonAbilityProgressKindThis pluginCast / Channel.
OnAbilityProgress / OnAbilityProgressNativeUCrimsonAbilitySystemComponentThe event (channel Message.Ability.Progress). Siblings: OnAbilitySimpleFailure, OnAbilityMontageFailure, OnAbilityStateChanged.
Local broadcast
Reaches the server and the predicting client only - it never crosses the wire, so it cannot drive a bar for another player or an NPC. The gap is invisible on a listen-server host; verify from a remote client.

Ability extensions

UCrimsonGameplayAbility::Extensions holds instanced UCrimsonGameplayAbilityExtension objects (Extensions/CrimsonGameplayAbilityExtension.h). The ability calls each one's OnPawnAvatarSet, OnAbilityActivated, OnAbilityEnded and OnAbilityRemoved, so per-ability add-ons need no ability subclass. FindExtension<T>() returns one by class.

MemberPurpose
ExtensionsInstanced array on UCrimsonGameplayAbility (Category Crimson / Extensions).
UCrimsonGameplayAbilityExtensionAbstract, EditInlineNew. Override the four hooks; runs where the ability runs.
FindExtension<T>()C++ lookup of the first extension of a class.
(CrimsonCore) UCrimsonCoreAbilityExtension_FixedSlotUI, UCrimsonCoreAbilityExtension_PawnFacingReady-made extensions for a HUD slot and pawn facing.
(CrimsonCore) UCrimsonCoreAbilityCameraStaticsPushOverrideCameraMode, PopOverrideCameraMode, GetCurrentLockOnTarget for abilities.
Camera and HUD are integrations
This plugin has no camera, lock-on or HUD code. Those features come from extensions and statics you write, or from CrimsonCore (requires all Crimson plugins) - see Overview -> Optional integrations.

Ability identity for UI

What a HUD or action bar reads off an ability. (The per-ability HUD slot is CrimsonCore's UCrimsonCoreAbilityExtension_FixedSlotUI.)

MemberPurpose
GetPrimaryTriggerTag()The ability's trigger tag - its stable identity.
AbilityIdentifierTagOptional explicit identity tag.
GetAbilityDisplayData() / GetAbilityDisplayName()Name, description and icon for UI.
BroadcastAbilityStateFires the ASC's OnAbilityStateChanged for UI.

Contract types in this plugin, and CrimsonCore types

The first rows ship with this plugin (AbilitySystem/). CrimsonCore rows are listed for orientation only - CrimsonCore is free to download, but compiles only with all Crimson plugins installed.

TypeHomeNote
UCrimsonAbilitySetThis pluginThe data asset used to grant abilities, effects and attribute sets.
FCrimsonAbilitySet_GrantedHandlesThis pluginRevoke handle returned by a grant.
ICrimsonAbilitySystemOwnerThis pluginInterface the PlayerState implements.
ICrimsonAbilityInputRouterThis pluginImplemented by the ASC; lets other systems route slot input, charges, global cooldown and cost checks.
FCrimsonAbilitySystemIntegrationHooksThis pluginStatic hooks another system binds (ResolveHeldComboModifierTags).
UCrimsonHeroComponentCrimsonCore (requires all Crimson plugins)Turnkey input routing including the defensive-input entry points. How-To: Tune Combo Input Feel shows the standalone equivalent.
UCrimsonCoreAbilityExtension_FixedSlotUI, UCrimsonFixedAbilitySlotContextCrimsonCore (requires all Crimson plugins)Per-ability HUD slot.
UCrimsonCoreAbilityCameraStatics, UCrimsonCoreAbilityExtension_PawnFacingCrimsonCore (requires all Crimson plugins)Camera mode, lock-on target and pawn facing for abilities.
UCrimsonCoreComboModifierBridgeCrimsonCore (requires all Crimson plugins)Resolves combo modifier tags through the input plugin's registry.
UCrimsonGameplayAbility_UseObjectCrimsonCore (requires all Crimson plugins)The shared use-item ability.
UCrimsonInteractionCondition_AttributeCompareCrimsonCore (requires all Crimson plugins)Attribute requirement for interactions.

System readiness

ACrimsonAbilityPlayerState announces a ModularGameplay feature state in PostInitializeComponents: ChangeFeatureInitState(PlayerState, CrimsonAbilitySystem::SystemReadyFeatureName, ASC, SystemReady_AbilitySystem). Wait on it rather than polling: UGameFrameworkComponentManager::RegisterAndCallForActorInitState(PlayerState, CrimsonAbilitySystem::SystemReadyFeatureName, FGameplayTag(), Delegate, true); the implementer is the ASC. A player state of your own that owns an ASC should announce the same state.

Tag constantTagAnnounced when
CrimsonAbilitySystem::SystemReadyFeatureName (state tag CrimsonGameplayTags::SystemReady_AbilitySystem)Crimson.SystemReady.AbilitySystemAnnounced once the ability system component is initialized and default abilities are granted.