Common Symptoms
Symptom-first diagnosis: start from what is visibly wrong (no battle, no cards, a dead enemy turn) and follow the shortest check sequence to the owning system.
For anyone whose battle is misbehaving right now and wants the fastest route to the cause, not an architecture tour.Most GCS problems surface as one of about ten visible failures, and each failure has a short, ordered check list. Start from the symptom, not from the code. The Game Card Monitor (Tools/TinyGiants/GCS/Game Card Monitor) is the main instrument here: it shows the live battle state, so it can tell you which side of the problem you are on before you open a single asset.

Symptom mapโ
| Symptom | First checks |
|---|---|
| Battle does not start | Scene bootstrap, GameCardManager, database assignments, encounter reference |
| No cards appear | Starting deck, deck contents, draw rules, hand UI references |
| Card cannot be played | Battle phase, energy, target mode, target validity, Card Playable Hook statuses |
| Card plays but nothing happens | Card graph entry, node connections, target resolution |
| Enemy does nothing | Enemy behavior graph, intent pattern, enemy phase reached |
| Status does not apply | Status database, status picker value, stack rule, target |
| Status never ticks down | Decay Rule on the asset, trigger timing in the graph |
| UI does not update | Runtime state first (Monitor), presentation bindings second |
| Events do not arrive | Event name, subscription timing, payload type, disposal |
| Everything freezes mid-turn | Animation gate holder that never released (Monitor Gate tab) |
Battle does not startโ
Check in this order:
- The scene contains a
GameCardEncounterBootstrap(or your own script that callsGCSApi.StartBattle). GameCardManagerexists and has its databases assigned.- The bootstrap's Default Encounter field points at a real encounter, and Auto Start On Play is enabled if the battle should begin immediately.
- The encounter has a player unit and at least one enemy unit.
- The player unit has a starting deck.
- The Workbench validation badge shows no blocking errors.
- After entering Play Mode, the Monitor
Battletab shows an active battle.
If the Monitor never sees a battle, the problem is scene setup or bootstrap. Card logic is not even running yet, so do not debug it.
No cards appearโ
Confirm, in order: the player unit has a starting deck, the deck actually contains cards, the battle rules draw cards at battle or turn start, and the hand UI references in the scene are assigned. Then open the Monitor Pile tab.
The Pile tab answers the main question. Cards in hand there but an empty screen means a presentation problem: UI bindings, prefabs, scene references. No cards there either means the deck, database, or draw setup is broken, and no amount of UI work will help.

Card cannot be playedโ
A card play is refused when any of these fails:
- The battle is not in
PlayerPhase(readGCSApi.Phaseor the MonitorPhasetab). - The card is not actually in hand.
- Energy after cost hooks is insufficient.
- The card's target mode expects a selected target and none (or a dead one) is selected.
- A status vetoes the play through
Card Playable Hook; the demo Silence status does exactly this to Skill cards.
If the whole battle feels stuck rather than one card being refused, check the Monitor Gate tab instead. It lists animation gate holders with their acquire and release log; a holder that never releases blocks phase progress and looks superficially like "cards stopped working".
Enemy does nothingโ
Check that the enemy is alive, the battle actually reaches EnemyPhase, the enemy has a behavior graph with an enemy-turn entry, and its intent pattern nodes are configured. The Monitor Flow tab shows which graphs executed during the enemy turn; the Event tab shows what was raised.
An enemy that displays an intent but changes no state has a graph problem past the entry: open its graph in the FlowGraph editor and follow the intent's chain node by node.
Status or UI does not updateโ
Separate runtime state from presentation before touching anything:
- Open the Monitor
Unittab and read HP, armor, statuses, and stack counts. - State changed but the screen did not: the problem is presentation. Inspect UI bindings, status icons, prefabs.
- State did not change: the problem is logic. Inspect the graph execution in the
Flowtab and the target resolution in the status or card graph.
Debugging UI before confirming the runtime state wastes time in both directions. The Monitor answers the question in seconds.