[RELEASED] Game Card System (GCS) – Visual Deckbuilding & Card-Battle Framework for Unity

Hello Unity Community! :waving_hand:

After releasing GameEventSystem, I am excited to announce that my second Unity tool, Game Card System (GCS), is now officially available on the Unity Asset Store.

GCS is a visual, FlowGraph-powered framework for building deckbuilding and card-battle games in Unity. It provides a complete foundation for cards, decks, statuses, enemy intents, encounters, turn-based combat, and the many systems that connect them. Common gameplay mechanics can be created directly in the editor, without writing a separate effect script for every piece of content.

:fire: Gameplay Showcase

See the complete GCS Demo in action across 12 playable battles, four hero classes, Normal, Elite, Boss, summon, and multi-enemy encounters.

:hammer_and_wrench: Product Overview

See how GCS takes a project from visual content authoring and FlowGraph Behaviors to complete, playable card-battle gameplay.

:rocket: Release Status

Game Card System is now officially available on the Unity Asset Store!

Get GCS here:

:love_letter: A Note from the Creator

:hammer_and_wrench: GCS began with a problem from my own project.

I am developing an indie card roguelike, and as the project moved into mid-production, I could feel the battle logic gradually slipping out of control.

Each card, status, and enemy intent needed its own control logic. Turns, card piles, units, statuses, UI, and animation all maintained their own data and execution rules. A mechanic might work perfectly on its own, but once it interacted with energy costs, targeting, Hooks, status modifiers, enemy intents, summons, rewards, and presentation timing, unexpected dependencies began to appear everywhere.

:bug: Debugging became equally difficult. Many problems could only be discovered by repeatedly playing full battles, and even after reproducing a bug, it was often difficult to determine which rule, phase, condition, or waiting process had caused it.

At the beginning of the project, when there were only a few cards and mechanics, this was still manageable. Modern AI agents were also advancing rapidly, and during prototyping they were extremely useful. They could write scripts, complete missing logic, and turn an idea into something playable much faster than before.

:warning: The situation changed as the project grew.

With more cards, stacked statuses, changing costs, draw and discard rules, enemy intents, summons, rewards, and presentation flows all interacting with one another, an AI agent could still generate code quickly, but it could not reliably retain every changing dependency across the entire project. A small modification in one system could cause several unexpected reactions elsewhere.

:light_bulb: That experience taught me something important: AI can accelerate development, but it cannot replace a mature, stable, and maintainable framework.

If the underlying architecture is unclear, generating more code only makes the project harder to control. The AI may solve the immediate task while adding another special case, another hidden dependency, or another script that becomes difficult to maintain several months later.

:classical_building: The opposite is also true. When an AI agent is given a clear data model, fixed operating boundaries, documented tools, and results that can be inspected and validated, it can become much more than a temporary code generator. It can participate in real content production while working inside a structure the developer still understands and controls.

This realization became one of the main reasons I created GCS.

GCS first had to solve the problems in my current game, but I also wanted it to become a reusable foundation for the card roguelikes I may build in the future. Instead of asking an AI agent to invent another battle framework from scratch, I can let it work within the structure provided by GCS.

:gear: It can help configure the content databases, create cards, statuses, enemies, and encounters, assemble or modify FlowGraph Behaviors, adjust values, inspect references, and analyze verifiable runtime results. The content it produces becomes part of the same visible and editable assets that I use myself, rather than another collection of temporary scripts hidden throughout the project.

GCS does not include or require a particular AI model, and using AI is completely optional. Its purpose is to provide the stable structure that both developers and modern AI agents need in order to work on a growing commercial project without continuously rebuilding the foundation.

:bullseye: For me, the value is simple. Developers should be spending their time deciding whether a card is enjoyable, whether the numbers are balanced, whether two mechanics can create an interesting combination, and whether an encounter produces meaningful decisions. We should not have to spend most of that time maintaining another turn system, rewriting pile logic, adding special-case scripts, or tracing invisible dependencies.

GameEventSystem taught me how valuable it is to make invisible systems visible. GCS takes that idea further and applies it to the complete development workflow of a card roguelike.

:rocket: I built GCS because I needed it for my own game, and I continue to use it in my own development every day. Now I am sharing it with the Unity community, and I hope it can help other developers spend less time maintaining framework code and more time creating cards, balancing systems, designing encounters, and exploring new gameplay ideas.

:joker: Happy deckbuilding,

TinyGiants, from China :panda:

:glowing_star: What is GameCardSystem?

GCS is a ScriptableObject-driven card-battle framework. You author cards, decks, units, statuses, and encounters in a six-mode Workbench; you define what cards and statuses do in a visual FlowGraph; and the battle runtime β€” turn phases, card piles, targeting, rewards β€” runs out of the box.

flowchart LR
    A[Workbench<br/>edit content] --> B[FlowGraph<br/>wire behavior]
    B --> C[Play Mode<br/>run battle]
    C --> D[Monitor<br/>inspect live state]
    D --> A

Four editor surfaces cover the full workflow from setup, content editing, and behavior wiring to Play Mode inspection.

Window Open from Job
Game Card System Tools/TinyGiants/GCS/Game Card System Initialize scenes, check environment support, open tools, and jump to demo or custom folders.
Game Card Editor Tools/TinyGiants/GCS/Game Card Editor The six-mode Workbench where the card roguelike battle content is authored and configured.
Game Card Monitor Tools/TinyGiants/GCS/Game Card Monitor A live Play Mode inspector for battle state, piles, units, phases, animation gates, flow runs, and events.
FlowGraph editor Edit FlowGraph on a Behavior field The node editor for card, status, enemy behavior, and reusable group graphs.

Author Everything Visually

Feature Description
6 Database Families Encounters, Player Units, Enemy Units, Cards, Decks, Statuses β€” GUID identity, refactor-safe
Embedded Effect Graphs Card, Status, and Enemy behaviors live on the asset itself β€” no separate behavior files
Six-Mode Workbench List / inspector / preview editing with drag-reorder, copy/paste, validation, and full Undo/Redo
FlowGraph Editor Node search, snap-to-grid, align/distribute, auto-layout, groups, host-aware validation
Smart Dropdowns Value fields aggregate built-in defaults and in-use values β€” extensible by free text

A Visual Effect Engine

The built-in node set covers more than 140 nodes across entries, actions, selectors, operators, flow control, intent patterns, hooks, events, and presentation. In practical card-game terms, that means the visual system can express the common mechanics expected from full deckbuilders:

Mechanic family Examples GCS can express visually
Damage and defense Single-target damage, area damage, multi-hit attacks, armor gain/loss, bypass armor, kill, revive, delayed damage.
Cards and piles Draw, discard, exhaust, retain-style flows, shuffle, move cards between piles, add generated cards, transform cards, upgrade cards, remove cards.
Cost and energy Gain/spend energy, temporary cost changes, card-specific cost rules, energy-per-turn hooks, playable-card hooks.
Status systems Poison/burn-style ticks, strength/dexterity-style stat changes, shields, thorns, regeneration, control statuses, stack caps, stack decay.
Conditional logic HP thresholds, status checks, card/pile checks, variables, event arguments, math, comparison, branching, switching, filtering, sorting.
Randomness and choices Random targets, random cards, weighted enemy patterns, player choice branches, generated collections, shuffled collections.
Enemy behavior Sequenced intents, weighted random intents, HP-threshold phase changes, once-per-battle moves, every-N-turn specials, summoned units.
Reactions and hooks Modify incoming/outgoing damage, armor, healing, status application, draw count, hand size, card cost, and card playability.
Events and integrations Raise internal events, listen to custom events, optionally bridge to GameEventSystem when GES is installed.
Presentation VFX, SFX, floating text, unit slides, flashes, camera shake, animation wait gates, and visual feedback blocks.
Feature Description
Rich Node Library Damage, healing, armor, energy, piles, statuses, targeting, randomness, loops, choices, VFX/SFX/camera β€” connect, don’t code
Unified Targeting Every action picks its units from source/target collections β€” no per-card selector types
Cross-Turn Effects Schedule delayed effects to turn start, turn end, or the enemy phase
Card Choice & Discovery Built-in β€œpick one of three” popup with a pluggable presenter
Animation Gating Effect execution waits for your visuals β€” timing stays clean without coroutine plumbing

A Complete Battle Runtime

Feature Description
Full Phase Lifecycle BattleStart β†’ TurnStart β†’ Player β†’ Enemy β†’ TurnEnd β†’ BattleEnd, with pause/resume
6-Pile Model Draw / Hand / Discard / Exhaust, plus run-level MasterDeck and post-battle RewardPile
Post-Battle Rewards Three-choice rewards: cards, energy, permanent cost discounts β€” tracked per run
Dynamic Battlefield Summon and remove enemies mid-battle; two-phase bosses out of the box
30 Built-In Statuses 15 buffs + 15 debuffs (Strength, Vulnerable, Poison, Burn, Thorns, Lifesteal…) with stack & decay rules
Pattern-Based Enemy AI Sequence / Random / Conditional / HP-threshold intent patterns with next-turn intent preview

Presentation Included, Not Imposed

Drag-to-play fan hand with hover lift and targeting arrow, unit HP/status/intent widgets, energy and pile HUD, choice popup, reward screen, result popup β€” shipped as a demo-layer reference you can reskin or replace entirely.

:puzzle_piece: Built to Be Extended

Everything user-facing goes through one documented API entry point (GCSApi) β€” battle control, live state, events, and content discovery.

The public API surface is organized into six practical areas:

API area What it gives you
Battle control Start a battle, play a card, end the player turn, apply or skip rewards, and dispose battle state.
Live state reads Read current phase, battle view, hand, piles, player unit, enemies, rules, and runtime values.
Events Subscribe to battle, card, damage, armor, energy, status, reward, pile, unit, and flow events.
Content discovery Enumerate and find cards, decks, units, statuses, encounters, and active databases.
Authoring registries Discover registered card types, card tags, description tokens, and FlowGraph node types.
Integration surface Drive custom UI, map screens, save systems, encounter selection, and project-specific runtime glue.
[Serializable]
[FlowNode("Action", "Heal If Below Half")]
public sealed class HealIfBelowHalfNode : MutatorNode
{
    public UnitSource TargetSource = UnitSource.Self;
    public int HealAmount = 5;

    public override void Execute(IExecutionContext ctx)
    {
        int amount = ctx.PullInputOr(this, nameof(HealAmount), HealAmount);
        foreach (var target in ctx.ResolveUnits(this, TargetSource, nameof(TargetSource)))
        {
            if (target.IsDead || target.CurrentHp * 2 > target.MaxHp) continue;
            ctx.Controller.GainHp(target, amount);
        }
    }
}
  • Custom nodes: subclass an authoring base, add one attribute β€” the node appears in the editor menu with ports inferred automatically
  • Custom card types, tags, and description tokens via the same attribute-driven registries β€” zero manual registration
  • Copy-paste samples and a node template included

:video_game: Playable Demo Out of the Box

Hit Play and you’re in a battle β€” prebuilt hand, HUD, targeting, choices, rewards, and results, with a full audio & VFX pass.

  • 4 player classes (Warrior / Mage / Hunter / Priest) Γ— 3 tiers = 12 player units
  • 16 enemies across Normal / Elite / Boss / Phase-2 summon forms
  • 80 cards, 30 statuses, 16 decks, 12 themed encounters
  • 12 battle scenes playable immediately β€” two-phase bosses included
  • All demo content doubles as reference templates: clone and modify without touching plugin source

:gear: Platform & Compatibility

  • Unity 2021.3 LTS+, including Unity 6
  • Built-in Render Pipeline supported today; URP adaptation lands before release
  • Zero third-party runtime dependencies
  • Optional GameEventSystem bridge β€” GCS battle events on the GES event bus if you use both

:world_map: Road to Release

  • :white_check_mark: Core systems, editor toolchain, effect engine β€” complete
  • :white_check_mark: Playable demo with full audio/VFX pass β€” complete
  • :counterclockwise_arrows_button: URP pipeline adaptation β€” in progress
  • :counterclockwise_arrows_button: Final QA sweep across all 12 demo scenes
  • :package: Asset Store submission

Full documentation (English Β· δΈ­ζ–‡) ships with the release at tinygiants.tech.

:globe_with_meridians: Official Links

:handshake: Community & Support

:speech_balloon: Discord (Recommended)

Want to influence the launch feature set or get beta access? Discord is where the roadmap happens.

:backhand_index_pointing_right: Join Discord

:e_mail: Direct Support

support@tinygiants.tech β€” Response within 24-48 hours.

:gem_stone: Lifetime License

Like GES, GCS will ship with lifetime updates. No subscriptions.

Professional tools for professional developers.
[TinyGiants]

I’ve just published a detailed article explaining the workflow behind GCS and the design decisions that shaped FlowGraph.

The article follows the complete GCS authoring loop: create cards, decks, characters, enemies, statuses, and encounters in the Editor, build their runtime behavior with FlowGraph, run the battle in Play Mode, and inspect the results through Monitor.

It also looks closely at how the 145 built-in nodes work together, including dynamic inputs, Branch, Choice, Foreach, Hook, enemy Intent, FX, nested Group nodes, and runtime observation. The examples show how a simple action can gradually grow into a complete card mechanic without replacing the existing graph or writing a separate implementation for every effect.

I also explain the reasoning behind the smaller editing details, such as renaming nodes and ports, changing port order, exposing parameters from Group subgraphs, and checking node documentation directly inside the canvas. These details become especially important once a project starts maintaining larger graphs and more complex encounters.

The article includes practical FlowGraph examples and links to 103 reference recipes for cards, statuses, and enemies.

If you want to see how GCS brings content authoring, gameplay logic, execution, and validation into one workflow, this article provides the most complete overview I’ve written so far.

Questions and feedback are always welcome in this thread.