How-To: Debug Combos (Dev Tools)

Goal: diagnose why a combo isn't firing using the live combo dev-tools panel.

Open the panel

Console command Crimson.AbilitySystem.DevTools, or Tools -> Crimson Ability System -> Ability Dev Tools. Switch to the Combo tab once PIE is running.

Screenshot pendingImages/CrimsonAbilitySystem/devtools-combo-tab.png
The Combo dev-tools tab: live state banner, step timeline with input-buffer look-back band, transition inspector, and manual controls.

What each section shows

SectionWhat's in it
Live StateColor-coded headline + owner/ASC names: NO ASC BOUND (red), IDLE (gray), WATCHING (amber), IN STEP PRE-WINDOW (cyan), TRANSITION WINDOW OPEN (green), POST-WINDOW (orange), RECENTLY ENDED
Active Combo StateStep timeline: phases row (Startup/Active/Recovery) -> acceptance row (amber Input Buffer look-back into green Transition Window) -> white playhead -> cyan input-buffer pips. Per-transition WOULD FIRE / waiting / WRONG DIRECTION badges
History LogScrolling event log: WATCHER ARMED, STEP ENTERED, TRANSITION FIRED, COMBO RESET, SERVER REJECTED, DYNAMIC GRANT...
Manual ControlsGrants manager, Grant Dynamic Combo form, Input Injection (action + direction), Move Input Override, Quick Diagnostics
Settings & IMC CatalogRead-only ComboInputMappingContext + action count + effective tuning defaults

Diagnosing common issues

SymptomWhere to look
Combo never starts on pressLive State should read WATCHING when the rooting ability fires. If it stays IDLE: the rooting ability has no ComboExtension.DefaultCombos, or its Transition Close is 0.
Press captured but no transition firesTransition Inspector shows each transition's WOULD FIRE NOW / Wrong direction / Cancel window not open badge. Cross-check the Input Buffer for a matches T#N descriptor.
Directional handshake won't triggerUse Move Input Override to set direction and re-press. If it fires with the override but not without, the pawn's SetMoveInputProvider lambda isn't wired, or Move Input Action is unset in Project Settings.
Server rejects every transition (MP)History Log shows SERVER REJECTED: ServerNotInCancelWindow. Likely high ping - server uses min(half-RTT, leniency cap) (default 80 ms).
NO ASC BOUND persists past spawnClick Force Bind ASC. If still red, the pawn doesn't implement IAbilitySystemInterface or its ASC isn't a UCrimsonAbilitySystemComponent.
Test without a controller
Input Injection fires any catalog action (with a chosen direction) without a real keypress. Combined with Move Override, you can fully exercise directional handshakes from the editor while iterating.