Skip to main content

Event Reference

GCS ยท Events

All 43 built-in events: constant, string value, payload type, every payload field, and what usually subscribes to each.

Keep this open while wiring listeners. Every row matches the shipped GCSEventNames and GCSEventArgs source.

This page tabulates every constant in GCSEventNames and every payload class in GCSEventArgs.cs: 43 events across six groups. String values follow one rule, the constant's name prefixed with GCS_, so OnCardPlayed broadcasts as GCS_OnCardPlayed.

These are the same names the Game Card Monitor prints on its Event tab. The fastest way to learn which events a card actually raises is to play it once in Play Mode with the Monitor open:

Game Card Monitor Event tab listing raised GCS event names in chronological order during a battle

Battle and turn eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnBattleStartedGCS_OnBattleStartedNoneNoneInitial HUD refresh, battle start animation.
OnTurnStartedGCS_OnTurnStartedTurnEventArgsTurnNumberStart-turn UI refresh.
OnEnemyTurnStartedGCS_OnEnemyTurnStartedTurnEventArgsTurnNumberEnemy phase banner or input lock.
OnTurnEndedGCS_OnTurnEndedTurnEventArgsTurnNumberEnd-turn cleanup and logs.
OnDrawPhaseGCS_OnDrawPhaseTurnEventArgsTurnNumberDraw-phase UI and draw count effects.
OnDiscardPhaseGCS_OnDiscardPhaseTurnEventArgsTurnNumberDiscard-phase UI and cleanup.
OnBattleEndedGCS_OnBattleEndedBattleEndedEventArgsWonVictory or defeat overlay.

Card eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnCardPlayedGCS_OnCardPlayedCardPlayedEventArgsCard, InstanceId, TargetUnitIdCombat log, play animation, combo counters.
OnCardModifiedGCS_OnCardModifiedCardModifiedEventArgsInstanceIdRefresh cost, upgrade, or transformed card UI.
OnCardDrawnGCS_OnCardDrawnCardLifecycleEventArgsInstanceId, CardDraw animation and hand refresh.
OnCardDiscardedGCS_OnCardDiscardedCardLifecycleEventArgsInstanceId, CardDiscard animation and pile refresh.
OnCardExhaustedGCS_OnCardExhaustedCardLifecycleEventArgsInstanceId, CardExhaust animation and pile refresh.
OnCardRetainedGCS_OnCardRetainedCardLifecycleEventArgsInstanceId, CardRetain feedback.
OnCardAddedToHandGCS_OnCardAddedToHandCardLifecycleEventArgsInstanceId, CardGenerated-card UI.
OnCardAddedToDeckGCS_OnCardAddedToDeckCardLifecycleEventArgsInstanceId, CardRun deck or deck-add feedback.
OnDrawPileShuffledGCS_OnDrawPileShuffledNoneNoneShuffle animation or pile counter refresh.

Unit, HP, armor, damage, and energy eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnUnitHpChangedGCS_OnUnitHpChangedUnitHpChangedEventArgsUnitId, CurrentHp, MaxHp, CurrentArmor, PreviousHp, PreviousArmorHP and armor bars.
OnUnitDiedGCS_OnUnitDiedUnitDiedEventArgsUnitId, TierDeath animation, rewards, target cleanup.
OnDamageDealtGCS_OnDamageDealtDamageEventArgsSourceUnitId, TargetUnitId, Amount, LethalOutgoing damage log and hit feedback.
OnDamageTakenGCS_OnDamageTakenDamageEventArgsSourceUnitId, TargetUnitId, Amount, LethalIncoming hit reactions.
OnArmorGainedGCS_OnArmorGainedArmorChangedEventArgsUnitId, Amount, CurrentArmorArmor floating text and armor bar refresh.
OnArmorLostGCS_OnArmorLostArmorChangedEventArgsUnitId, Amount, CurrentArmorArmor break feedback.
OnEnergyChangedGCS_OnEnergyChangedEnergyChangedEventArgsCurrentEnergy, MaxEnergyEnergy UI refresh.
OnEnergyGainedGCS_OnEnergyGainedEnergyDeltaEventArgsAmount, CurrentEnergyEnergy gain feedback.
OnEnergySpentGCS_OnEnergySpentEnergyDeltaEventArgsAmount, CurrentEnergyCard spend feedback.

Status eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnStatusChangedGCS_OnStatusChangedStatusChangedEventArgsUnitId, Status, StacksRefresh status widget.
OnStatusTickedGCS_OnStatusTickedStatusTickedEventArgsUnitId, Status, Timing, StacksBefore, StacksAfter, HpBefore, HpAfterTick animation and combat log.
OnStatusInflictedGCS_OnStatusInflictedStatusTransitionEventArgsUnitId, Status, Stacks, SourceUnitIdStatus apply animation.
OnStatusExpiredGCS_OnStatusExpiredStatusTransitionEventArgsUnitId, Status, Stacks, SourceUnitIdNatural expiration animation.
OnStatusRemovedGCS_OnStatusRemovedStatusTransitionEventArgsUnitId, Status, Stacks, SourceUnitIdCleanse or removal animation.

Enemy and delayed trigger eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnEnemyUnitIntentChangedGCS_OnEnemyUnitIntentChangedEnemyUnitIntentChangedEventArgsUnitId, IntentsIntent widget refresh.
OnEnemyUnitActingGCS_OnEnemyUnitActingEnemyUnitActingEventArgsUnitId, IntentAttack telegraphs such as the demo's lunge animation.
OnEnemyUnitSummonedGCS_OnEnemyUnitSummonedEnemyUnitSummonedEventArgsSummonerId, SummonedUnitId, TierSummon animation and layout refresh.
OnEnemyPhaseChangedGCS_OnEnemyPhaseChangedEnemyPhaseChangedEventArgsUnitId, OldIndex, NewIndexEnemy behavior phase UI.
OnDelayedTriggerScheduledGCS_OnDelayedTriggerScheduledDelayedTriggerScheduledEventArgsSourceUnitId, RemainingTurns, ActionTypeNameCountdown indicator.
OnDelayedTriggerFiredGCS_OnDelayedTriggerFiredDelayedTriggerFiredEventArgsSourceUnitId, ActionTypeNameDelayed effect activation feedback.
OnDelayedTriggerCancelledGCS_OnDelayedTriggerCancelledDelayedTriggerCancelledEventArgsSourceUnitIdRemove countdown UI.

Reward and choice eventsโ€‹

ConstantString valuePayloadFieldsTypical use
OnBattleRewardOfferedGCS_OnBattleRewardOfferedBattleRewardOfferedEventArgsCardCandidatesShow the reward picker.
OnBattleRewardSelectedGCS_OnBattleRewardSelectedBattleRewardSelectedEventArgsChoice, SelectedCardClose the reward picker and update the run deck.
OnBattleRewardSkippedGCS_OnBattleRewardSkippedNoneNoneClose the reward picker.
OnEffectChoiceOfferedGCS_OnEffectChoiceOfferedEffectChoiceOfferedEventArgsPromptText, Candidates, AllowSkipShow the FlowGraph choice picker.
OnEffectChoiceSelectedGCS_OnEffectChoiceSelectedEffectChoiceSelectedEventArgsSelectedIndexClose the choice picker and log the selection.
OnEffectChoiceSkippedGCS_OnEffectChoiceSkippedNoneNoneClose the choice picker.

Payload typesโ€‹

Payload typeFields
TurnEventArgsint TurnNumber
CardPlayedEventArgsGameCard Card, int InstanceId, int? TargetUnitId
CardModifiedEventArgsint InstanceId
UnitHpChangedEventArgsint UnitId, int CurrentHp, int MaxHp, int CurrentArmor, int PreviousHp, int PreviousArmor
UnitDiedEventArgsint UnitId, string Tier
StatusChangedEventArgsint UnitId, GameStatus Status, int Stacks
StatusTickedEventArgsint UnitId, GameStatus Status, string Timing, int StacksBefore, int StacksAfter, int HpBefore, int HpAfter
EnemyUnitIntentChangedEventArgsint UnitId, IReadOnlyList<IntentEntry> Intents
EnemyUnitActingEventArgsint UnitId, IntentTag Intent
EnemyPhaseChangedEventArgsint UnitId, int OldIndex, int NewIndex
EnergyChangedEventArgsint CurrentEnergy, int MaxEnergy
DelayedTriggerScheduledEventArgsint SourceUnitId, int RemainingTurns, string ActionTypeName
DelayedTriggerFiredEventArgsint SourceUnitId, string ActionTypeName
DelayedTriggerCancelledEventArgsint SourceUnitId
BattleRewardOfferedEventArgsIReadOnlyList<GameCard> CardCandidates
BattleRewardSelectedEventArgsRewardChoice Choice, GameCard SelectedCard
EffectChoiceOfferedEventArgsstring PromptText, IReadOnlyList<ChoiceCandidate> Candidates, bool AllowSkip
EffectChoiceSelectedEventArgsint SelectedIndex
BattleEndedEventArgsbool Won
EnemyUnitSummonedEventArgsint SummonerId, int SummonedUnitId, string Tier
CardLifecycleEventArgsint InstanceId, GameCard Card
DamageEventArgsint SourceUnitId, int TargetUnitId, int Amount, bool Lethal
ArmorChangedEventArgsint UnitId, int Amount, int CurrentArmor
EnergyDeltaEventArgsint Amount, int CurrentEnergy
StatusTransitionEventArgsint UnitId, GameStatus Status, int Stacks, int SourceUnitId

Shortcut coverageโ€‹

Every event in the tables above except one has a GCSApi shortcut with the same name, so GCSEventNames.OnUnitHpChanged pairs with GCSApi.OnUnitHpChanged(...). Four subscription forms cover everything:

  • GCSApi.OnBattleStarted(handler) and the other payload-free shortcuts take an Action.
  • GCSApi.OnUnitHpChanged(args => ...) and the other typed shortcuts take an Action<TArgs>.
  • GCSApi.Subscribe<TArgs>(GCSEventNames.SomeEvent, handler) subscribes by name with a typed handler.
  • GCSApi.Subscribe(GCSEventNames.SomeEvent, handler) subscribes by name without a payload.

The exception is OnEnemyUnitActing, which has no shortcut. Subscribe to it by name with its payload type:

var sub = GCSApi.Subscribe<EnemyUnitActingEventArgs>(
GCSEventNames.OnEnemyUnitActing,
args => PlayAttackWindup(args.UnitId, args.Intent));

Custom events raised through GCSApi.RaiseGameEvent have no shortcuts either; subscribe to them by name.


Nullability notesโ€‹

FieldCan be nullWhy
CardPlayedEventArgs.TargetUnitIdYesSome cards play without a target; the field is int?.
GameCard fields in payloadsRarely, but guard UI code anywayThe runtime skips null cards where it can; defensive UI costs nothing.
GameStatus fields in payloadsRarely, but guard UI code anywayStatus databases can change while content is being authored.
IReadOnlyList payloadsTreat as non-nullThe runtime supplies lists for every built-in event.

Event names versus FlowGraph entriesโ€‹

Graph entries and hooks (the On Card Played entry, the damage hooks, and the rest) are authoring-level timing points inside a graph, not channel broadcasts, so they have no GCSEventNames constant. This reference covers the runtime event channel only. For graph-side timing, see Entries and Hooks.