How-To: React to Combo Events
Goal: play a cue when a step starts, tell the UI when a transition window opens, and fire a gameplay event when the combo completes - without writing controller code.
1. Pick a hook
Every event object subscribes to one or more of eight hooks via its Hook Mask bitmask.
| Hook | Fires when |
|---|---|
StepEntered | The step ability activated. |
StepExited | The step ended - carries whether it was canceled. |
TransitionWindowOpened | Elapsed time crossed the step's Transition Open. Use for "press now" cues. |
TransitionWindowMissed | The window closed with nothing queued. |
TransitionFired | A transition was taken out of this step. |
ComboCompleted | An End node was reached - the clean-finish path, distinct from a timeout reset. |
PhaseEntered | The active step entered a timing phase - Context.Phase says which one. Server and owning client only. Never fires for a step that authored no phase boundaries. |
PhaseExited | The active step left a timing phase - Context.Phase carries the phase being left. Fires on every teardown path, including a prediction rollback. |
StepEntered -> PhaseEntered ... PhaseExited -> StepExited. The last phase exits when the step does, so a PhaseExited always precedes the StepExited of the same step.Set Phase Filter on the event to narrow them to one phase -
Active, for instance. Leave it at None and they fire on every phase. The other six hooks ignore it. Full recipe: How-To: Drive Behavior from Step Phases.2. Attach an event to a node
In the combo graph, right-click a Step or End node and add a sub-node. Four shipped event types cover most needs.
| Event type | Does |
|---|---|
UCrimsonComboEvent_GameplayCue | Execute, add or remove a GameplayCue. Can auto-remove on step exit. |
UCrimsonComboEvent_GameplayMessage | Broadcast an FCrimsonComboEventMessage on a message channel - the UI-facing option. |
UCrimsonComboEvent_GameplayEvent | Call HandleGameplayEvent on the ASC, so abilities with a matching trigger activate. |
UCrimsonComboEvent_Augment | Grant or remove augments with a lifetime and stacking mode. |
Select the sub-node and set Hook Mask to the hooks you want, then fill in the type-specific fields. Fire On Simulated Proxies controls whether remote clients run it - leave it on for cosmetics, off for anything authoritative. Phase Filter sits beside it and narrows On Phase Entered / On Phase Exited to a single phase; those two hooks run on the server and the owning client only, so they never reach a simulated proxy whatever Fire On Simulated Proxies says.
GameplayMessage event on StepEntered and listen for the channel. It fires once per entry into that step.3. Scale damage as the string continues
This is the common request and it needs no condition. Use an augment event with a lifetime and potency stacking - each transition re-grants, StackCount increments, and the augment's level scales as BaseLevel + (StackCount - 1).
- Add a
UCrimsonComboEvent_AugmentonStepEntered. - Set Lifetime to
UntilComboEndsso it survives the whole string. - Set Stack Mode to
Potency.
4. Add events at runtime
Progression systems can overlay events onto a baked graph without editing the asset.
Call Add Dynamic Event To Node on the combo controller with the combo, the node id, an event instance and a Source Tag you can later revoke by. Remove Dynamic Events By Source clears a whole perk in one call.
See also
- How-To: Author a Combo
- How-To: Gate Combo Branches with Conditions
- How-To: Create and Equip an Augment