Back to Projects

Solo Developer  |  2026.05 — Present

Vox Dungeon

Vox Dungeon

Overview

A smartphone-oriented roguelike deckbuilder designed for portrait, one-handed play. I designed and implemented the core loop personally, taking inspiration from the strategic card-flow of games like Slay the Spire while optimizing for shorter play sessions. The project integrates my own foundation, TFramework, on Unity 6. It features a CSV/Excel master-data auto-generation pipeline, multi-enemy combat, Shop/Event/Reward economy systems, RunSave (progress saving and resuming), and Status/Buff effect mechanics. The current UI uses development placeholder assets, with polished visuals planned for a future pass.

Responsibilities

I am responsible for the full development flow.

  • Game design, including rules for cards, relics, maps, and economy
  • Architecture design built on TFramework’s FSM modules and R3-based event handling
  • Client implementation for battle systems, UI, scene transitions, and object pooling
  • Data pipeline: CSV/Excel master-data auto-generation via TFramework generator, with full migration from ScriptableObject mocks
  • A development workflow that uses Codex for design review, implementation speed, and debugging support

Challenges

  • FSM and async coordination: Turn-based battles combine animation, effect resolution, and state transitions running concurrently. The FSM had to remain consistent with UniTask-based async lifecycles to prevent the battle loop from racing ahead of effects or cards being played mid-transition.
  • Ordering across multiple systems: Energy, hand limits, enemy intents, and passive-effect interrupts all react to card play in chains. Ensuring predictable execution order and notification timing across these independent systems was a central challenge.
  • Balancing scope and quality in solo development: As a solo developer handling game design, architecture, and implementation in parallel, the constant tension between overengineering (slowing progress) and tactical shortcuts (accumulating tech debt) required ongoing judgment.

Solutions

  • Practical validation of TFramework: I integrated TFramework directly into the project and used it to run battle flow, scene transitions, page-stack UI management, and Addressables-based loading.
  • Strict FSM state design: BattleStart → TurnStart → PlayerAction → CardResolve → EnemyIntent → EnemyAction → TurnEnd → Victory/Defeat are modeled as explicit states, with async start and completion handling inside Enter/Exit.
  • Event-driven architecture with R3: Card play, damage, healing, energy updates, and enemy actions are all exposed as observables so UI, animation, and transition logic can react independently.
  • CSV/Excel master-data auto-generation: All parameters for cards, enemies, maps, shops, events, and reward tables are managed in CSV/Excel and auto-generated into C# code via the TFramework generator. Fully migrated from early ScriptableObject mocks to enable code-free balance tuning.
  • View/Presenter separation and service decomposition: Completed UI responsibility split aligned with TFramework’s Page/Dialog flow. Further decomposed BattleSceneFlowService into BattleRewardService, BattleShopService, BattleEventService, BattleSnapshotFactory, and BattleDisplayTextService following the single-responsibility principle.
  • Multi-enemy combat and advanced AI: Extended from single-enemy to multi-enemy formations with per-enemy HP/Block/Intent/Status/Buff management. Implemented five enemy behavior patterns: OpeningOnly, RepeatAfterOpening, AfterOpeningRandom, Random, and Cycle.

Results

Key features implemented to date:

  • Strict FSM-driven turn-based battle flow across 9 states (BattleStart → TurnStart → PlayerAction → CardResolve → EnemyIntent → EnemyAction → TurnEnd → Victory/Defeat)
  • CSV/Excel master-data auto-generation pipeline via TFramework generator (covering cards, enemies, maps, shops, events, and reward tables)
  • Multi-enemy combat with per-enemy HP/Block/Intent/Status/Buff tracking and TargetSide.AllEnemies support
  • Five enemy AI behavior patterns: OpeningOnly, RepeatAfterOpening, AfterOpeningRandom, Random, and Cycle
  • View/Presenter separation with service decomposition (BattleRewardService, BattleShopService, BattleEventService, BattleSnapshotFactory, BattleDisplayTextService)
  • RunSave for progress saving and resuming (auto-save at Map/RestShop, Save & Quit flow)
  • Shop system (card purchase, removal, sold-out display, MasterData-driven pricing)
  • Event system (branching choices, randomized event selection, localization support)
  • Reward system supporting multiple reward types (Card, Gold, Potion, Relic) with dynamic generation
  • Status effects (Weak, Vulnerable, Slimed) and Buff effects (Strength, Ritual, Enrage)
  • Combat draw and discard piles with in-battle visualization
  • Addressables-based asynchronous loading for all scenes and prefabs

In development: Relic (artifact) passive effect system. Remaining: complete UI redesign (currently grayscale development mockups), animation and presentation throughout, OutGame scenes (TitleScene / MainScene), auto-generated map nodes, rest sites (HP recovery and card upgrades).

*Image shown is illustrative.