Entry Nodes
Start a graph when a battle, turn, card, unit, status, energy, or event moment occurs.
Use an Entry node as the first node in a behavior branch. Entry nodes have no input ports; connect `Out` to the first node that should run, and connect data outputs only when downstream logic needs the event value.Use an Entry node as the first node in a behavior branch. Entry nodes have no input ports; connect Out to the first node that should run, and connect data outputs only when downstream logic needs the event value.
Node Usage
On Battle Start
Available to Status graphs. It fires once for statuses already present on the player and living enemies after the opening hand is drawn and the first enemy intents are resolved. Connect Out to opening setup that genuinely belongs to a status, such as initializing a battle variable.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the opening behavior
Parameters
- None:This Entry has no configurable fields
On Battle End
Available to Status graphs. It fires for statuses on the player and living enemies when the battle enters the won or lost state; on a win it runs before rewards are rolled. Connect Out to status-owned end-of-battle cleanup or bookkeeping, not to scene-level result UI.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the end-of-battle behavior
Parameters
- None:This Entry has no configurable fields
On Turn Start
Available to Card and Status graphs. A player status fires at the start of the player turn after armor reset and energy refill; an enemy status fires at the start of that enemy's own step. Card graphs fire only for cards already in hand when the player turn starts, after player statuses and before the draw phase. Connect Out to per-turn ticks, counters, or card-in-hand reactions.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the turn-start behavior
Parameters
- None:This Entry has no configurable fields
On Turn End
Available to Card and Status graphs. At player turn end, cards currently in hand fire first, before retain, discard, or exhaust resolution; player statuses fire after the hand resolves and before status decay. An enemy status fires after that enemy acts and before its decay. Connect Out to end-of-turn work that matches the owner's side of this order.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the turn-end behavior
Parameters
- None:This Entry has no configurable fields
On Draw Phase
Available to Status graphs. It fires only for statuses on the player, at player turn start immediately before the normal per-turn draw. Turn 1 skips this timing because the opening hand was already drawn during battle setup. Connect Out to phase-wide draw preparation; use On Card Drawn for each actual card.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the draw-phase behavior
Parameters
- None:This Entry has no configurable fields
On Discard Phase
Available to Status graphs. It fires only for statuses on the player when the player turn ends, before cards in hand receive On Turn End and before retain, discard, or exhaust resolution. Connect Out to phase-wide preparation for hand cleanup.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the discard-phase behavior
Parameters
- None:This Entry has no configurable fields
On Draw Pile Shuffled
Available to Card graphs. Whenever GCS shuffles the draw pile—including initial deck setup, discard-to-draw reshuffles, and Shuffle Draw Pile—it runs this Entry once on every card instance currently in that pile. Connect Out to a shuffle reaction owned by the card; there is no Card data output, so use the graph's current card context when a downstream node supports it.
Inputs
- None:This timing starts the branch
Outputs
Out(Flow):Continues into the shuffle behavior
Parameters
- None:This Entry has no configurable fields
On Card Drawn
Available to Card and Status graphs. It fires after each card is moved from the draw pile into the player's hand; player statuses run before the drawn card's own graph. Connect Out to draw reactions and pass Card to Card Info or another CardRef input when the reaction needs the exact drawn instance.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):TheCardInstancethat was just drawnOut(Flow):Continues into the draw reaction
Parameters
- None:This Entry has no configurable fields
On Card Played
Available only to Card graphs. It fires after GCS accepts the play, spends the card's cost, resolves its target, and raises the card-played event; this is the normal root of the card's main effect. Connect Out to the first action and pass Card downstream when the behavior must inspect the played instance.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):The playedCardInstanceOut(Flow):Continues into the card's main behavior
Parameters
- None:This Entry has no configurable fields
On Card Discarded
Available only to Card graphs. It fires when end-of-turn hand resolution discards the card, and when a draw overflows the hand and sends the undrawn card to discard. A normally played non-Exhaust card moving to discard does not fire this Entry. Connect Out to discard-specific effects and use Card for the discarded instance.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):TheCardInstancemoved to discard by this timingOut(Flow):Continues into the discard reaction
Parameters
- None:This Entry has no configurable fields
On Card Exhausted
Available only to Card graphs. It fires when an Exhaust card leaves play for the exhaust pile and when an Ethereal card exhausts during end-of-turn hand resolution. Connect Out to exhaust follow-ups and use Card for the exhausted instance.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):The exhaustedCardInstanceOut(Flow):Continues into the exhaust reaction
Parameters
- None:This Entry has no configurable fields
On Card Retained
Available only to Card graphs. It fires during end-of-turn hand resolution when the card stays in hand because it has Retain or because the encounter keeps the entire hand. Connect Out to retain reactions and use Card for the retained instance.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):The retainedCardInstanceOut(Flow):Continues into the retain reaction
Parameters
- None:This Entry has no configurable fields
On Card Added To Hand
Available only to Card graphs. It fires when Add Card To Hand creates a new card instance. Its Card output is that newly created CardInstance, not the card definition. If the hand is already full, GCS places the new instance in discard but still fires this Entry because the add-to-hand operation was requested. Moving an existing instance with Move Card does not fire it.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):The newly createdCardInstance, even when a full hand redirects it to discardOut(Flow):Continues into the add-to-hand reaction
Parameters
- None:This Entry has no configurable fields
On Card Added To Deck
Available only to Card graphs. It fires when Add Card To Draw Pile creates an instance at the selected top, bottom, or random position. Its Card output is the newly created CardInstance, so connect it to Card Info when the follow-up needs that exact instance. Moving an existing card into the draw pile does not fire it.
Inputs
- None:This timing starts the branch
Outputs
Card(CardRef):The newly createdCardInstanceinserted into the draw pileOut(Flow):Continues into the add-to-deck reaction
Parameters
- None:This Entry has no configurable fields
On Damage Dealt
Available to Status graphs. It fires on statuses carried by an attacker after an attack resolves against its target; status damage has no attacker and does not fire this Entry. Amount is the resolved HP-loss value after armor and damage modifiers, not the original attack value; on a lethal hit it is not clamped to the target's remaining HP. Connect Out to post-hit effects such as lifesteal, and pass the event outputs into downstream selectors when needed.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Resolved HP-loss value after armor; it can be0or exceed the target's remaining HPSource(UnitRef):The attacking unit that owns the reacting statusTarget(UnitRef):The unit that was attackedOut(Flow):Continues into the post-damage behavior
Parameters
- None:This Entry has no configurable fields
On Damage Taken
Available to Status graphs. It fires on statuses carried by the damaged unit after attack or status damage resolves. Amount is the resolved HP-loss value after armor and modifiers and is not clamped to remaining HP on a lethal hit; Source is empty for damage that has no attacker, including status damage. Connect Out to retaliation or hit reactions; use Damage Taken Hook when the amount must change before application.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Resolved HP-loss value after armor; it can be0or exceed the owner's remaining HPSource(UnitRef):The attacker, or no unit when the damage has no attackerTarget(UnitRef):The damaged status holderOut(Flow):Continues into the damage-taken reaction
Parameters
- None:This Entry has no configurable fields
On Attack Taken
Available to Status graphs. It fires on the defender after an attacker-driven Deal Damage resolves. Status damage and direct HP loss do not qualify. Connect Out to attack-only reactions, and use the three data outputs to inspect the resolved hit.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Resolved attack HP-loss value after armor; it can be0or exceed remaining HPSource(UnitRef):The attackerTarget(UnitRef):The defending status holderOut(Flow):Continues into the attack reaction
Parameters
- None:This Entry has no configurable fields
On HP Gained
Available to Status graphs. It fires after a positive, Hook-adjusted Gain HP request reaches the max-HP clamp. A full-health target still fires this Entry with Amount = 0; the current controller does not supply a healing source, so Source is empty. Connect Out to after-heal reactions and use HP Gain Hook to alter the pending heal first.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Actual HP restored after the max-HP cap;0when the target was already fullSource(UnitRef):No unit in the currentGain HPexecution pathTarget(UnitRef):The healed status holderOut(Flow):Continues into the healing reaction
Parameters
- None:This Entry has no configurable fields
On HP Lost
Available to Status graphs. It fires when damage has a positive HP-loss portion and after direct Lose HP. Damage supplies its resolved post-armor value, which can exceed remaining HP on a lethal hit; direct Lose HP supplies the actual clamped loss. For attack damage, Source is the attacker; for direct loss or status damage it is empty. Connect Out to effects that care about HP crossing the boundary rather than merely receiving an attack.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Damage path: resolved post-armor HP loss; directLose HP: actual clamped lossSource(UnitRef):The attacker when one exists; otherwise no unitTarget(UnitRef):The status holder that lost HPOut(Flow):Continues into the HP-loss reaction
Parameters
- None:This Entry has no configurable fields
On Armor Gained
Available to Status graphs. It fires after Gain Armor adds armor to the owner. The current controller does not attach an actor to that operation, so Source is empty. Connect Out to shield-gain follow-ups and use Armor Gain Hook when the amount must be changed before it lands.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Armor actually addedSource(UnitRef):No unit in the currentGain Armorexecution pathTarget(UnitRef):The status holder that gained armorOut(Flow):Continues into the armor-gain reaction
Parameters
- None:This Entry has no configurable fields
On Armor Lost
Available to Status graphs. It fires after an explicit Lose Armor operation. Amount is the Hook-adjusted requested loss and can exceed the armor that was available before the controller clamps the final armor to zero. Armor absorbed by incoming damage and turn-start armor reset use separate paths and do not fire this Entry. Connect Out to explicit armor-break reactions.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Hook-adjusted requested armor loss, not clamped to the armor that was availableSource(UnitRef):No unit in the currentLose Armorexecution pathTarget(UnitRef):The status holder that lost armorOut(Flow):Continues into the armor-loss reaction
Parameters
- None:This Entry has no configurable fields
On Energy Gained
Available to Status graphs and dispatched only for the player. It fires after an explicit Gain Energy operation; the normal turn-start refill assigns energy directly and does not fire it. Connect Out to an energy-gain reaction.
Amount outputThe port is registered, but the current dispatch path does not seed the gained amount into the Entry context, so Amount reads 0. Do not drive calculations from this output until the runtime supplies it.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Currently0; the gained amount is not written by the dispatcherOut(Flow):Continues into the energy-gain reaction
Parameters
- None:This Entry has no configurable fields
On Energy Spent
Available to Status graphs and dispatched only for the player. It fires after an explicit Lose Energy operation. Card play subtracts its accepted cost directly, so playing a card does not fire this Entry. Connect Out to reactions to explicit energy loss; use Card Cost Hook for card costs.
Amount outputThe port is registered, but the current dispatch path does not seed the spent amount into the Entry context, so Amount reads 0. Do not drive calculations from this output until the runtime supplies it.
Inputs
- None:This timing starts the branch
Outputs
Amount(Int):Currently0; the spent amount is not written by the dispatcherOut(Flow):Continues into the energy-spend reaction
Parameters
- None:This Entry has no configurable fields
On Status Inflicted
Available to Status graphs. After a source makes a valid status-application attempt, every status already carried by that source can react through this Entry. It still runs when a Max stack rule leaves the count unchanged, but it does not run when the application has no source unit. Stacks is the target's resulting stack count after the stack rule and cap, not merely the amount added. Connect Out to source-side status synergies and use the outputs to identify the application.
Inputs
- None:This timing starts the branch
Outputs
Status(StatusRef):The status that was appliedStacks(Int):Resulting stack count on the targetSource(UnitRef):The unit that applied the statusTarget(UnitRef):The unit that received the statusOut(Flow):Continues into the source-side reaction
Parameters
- None:This Entry has no configurable fields
On Status Received
Available to Status graphs. It runs the incoming status's own graph after the application attempt and exposes the resulting stack count. It can run even when a Max stack rule leaves the existing count unchanged. When no source was supplied, Source falls back to the receiver. Connect Out to the status's apply-time behavior.
Inputs
- None:This timing starts the branch
Outputs
Status(StatusRef):The status whose graph is runningStacks(Int):Resulting stack count after the application attemptSource(UnitRef):The applier, or the receiver when no source was suppliedTarget(UnitRef):The receiving status holderOut(Flow):Continues into the received-status behavior
Parameters
- None:This Entry has no configurable fields
On Status Expired
Available to Status graphs. It runs the expiring status's own graph when per-turn decay reduces that status to zero. The status has already been removed from the holder's status map when the branch begins. Connect Out to natural-expiration behavior; use On Status Removed for cleanse or purge removal.
Inputs
- None:This timing starts the branch
Outputs
Status(StatusRef):The status that expiredTarget(UnitRef):The former status holderOut(Flow):Continues into the expiration behavior
Parameters
- None:This Entry has no configurable fields
On Status Removed
Available to Status graphs. It runs the removed status's own graph when Remove Status or a direct stack modification reduces it to zero. The status has already left the holder's map. Connect Out to cleanse or purge reactions.
Inputs
- None:This timing starts the branch
Outputs
Status(StatusRef):The status that was removedStacks(Int):0, the remaining stack count at removalTarget(UnitRef):The former status holderOut(Flow):Continues into the removal behavior
Parameters
- None:This Entry has no configurable fields
On Status Stacks Changed
Available to Status graphs. Whenever a status remains present with a different positive stack count, every status on that holder can react through this Entry. Initial application can fire it; reaching zero uses On Status Expired or On Status Removed instead. Connect Out to threshold logic and inspect Status plus the new Stacks value.
Inputs
- None:This timing starts the branch
Outputs
Status(StatusRef):The status whose stacks changedStacks(Int):The new positive stack countTarget(UnitRef):The unit carrying the changed statusOut(Flow):Continues into the stack-change reaction
Parameters
- None:This Entry has no configurable fields
On Unit Spawned
Available to Status graphs. After Spawn Unit adds an enemy, GCS broadcasts this timing to statuses on the player and every living enemy. Connect Out to a battlefield-wide summon reaction.
Unit outputThe broadcast context currently seeds each reacting status holder as Unit, not the enemy that was just spawned. The Entry timing is usable, but the port cannot identify the summoned unit until the runtime supplies that unit explicitly.
Inputs
- None:This timing starts the branch
Outputs
Unit(UnitRef):Currently the reacting status holder, not the spawned enemyOut(Flow):Continues into the spawn reaction
Parameters
- None:This Entry has no configurable fields
On Unit Died
Available to Status graphs. When a unit dies, statuses on the victim run with WasKill = false; when a distinct killer exists, statuses on that killer also run with WasKill = true. Connect Out to death or kill rewards and branch on WasKill when one graph handles both sides.
Inputs
- None:This timing starts the branch
Outputs
WasKill(Bool):falseon the victim's statuses;trueon the killer's statusesSource(UnitRef):The credited killer, or no unit when none existsTarget(UnitRef):The unit that diedOut(Flow):Continues into the death or kill reaction
Parameters
- None:This Entry has no configurable fields
On Enemy Behavior Start
Available only to Enemy graphs. Its Out edge is the root from which GCS walks Pattern nodes to a Leaf Intent while resolving the enemy's next telegraphed intent. When the enemy later acts, GCS executes the stored Leaf branch directly rather than running this Entry a second time. Connect Out to a Pattern node or directly to a Leaf Intent; ordinary action nodes should follow the Leaf.
Inputs
- None:This node anchors enemy intent planning
Outputs
Out(Flow):Leads into the enemy's Pattern orLeaf Intentpath
Parameters
- None:This Entry has no configurable fields
On Internal Event
Available to Card, Status, and Enemy graphs. Raise Internal Event immediately searches cards in hand, draw, discard, and exhaust, all current statuses, and all living enemy graphs for an exact Event value match. Connect Out to the receiver branch and use Event Arg nodes to read named arguments; this Entry itself exposes no data ports.
Inputs
- None:The matching event starts the branch
Outputs
Out(Flow):Continues into the internal-event receiver
Parameters
Event(Text):Empty;Exact, case-sensitive name matched againstRaise Internal Event
On GES Event
Available to Card, Status, and Enemy graphs when the GES bridge dispatches the selected event GUID. Active receivers are searched across all four card piles, current statuses, and living enemy graphs, just like internal events. Assign the event asset in GES Event, then connect Out to the receiver behavior.
Inputs
- None:The matching GES event starts the branch
Outputs
Out(Flow):Continues into the GES-event receiver
Parameters
GES Event(Game Event):None;Event asset whose GUID must match the dispatched GES event