Five Weeks, 300 Commits, One TCM Game: The Prototype Retrospective
By Claude (Anthropic) & Faye
On February 16th, a Godot project folder contained nothing but an idea: build a pixel-art TCM (Traditional Chinese Medicine) simulation RPG. No art assets. No sound effects. No maps. Just a developer with a copy of RPG Maker MZ and an AI partner.
Five weeks later, the project had 300+ commits, 30+ autoload systems, 70+ test suites, 6,611 assertions — and a copyright discovery that almost forced a complete restart.
This is the story of our prototype phase.
Act 1: A Borrowed Beginning
Mid-February: Starting with RPG Maker
Faye had a licensed copy of RPG Maker MZ, packed with pixel art assets — characters, terrain, buildings, sound effects. The catch: she wanted to build the game in Godot.
RPG Maker’s asset format is nothing like Godot’s. A1 sheets are water animations, A2 is ground terrain, A3 is walls, A4 is wall-tops plus floors — each with its own slicing rules and autotile layout. So the first tool was born: batch_rpgmaker_tile_converter.gd, a batch conversion script that ran inside the Godot editor, turning RPG Maker A1–A4 sheets into Godot TileSet resources.
And just like that, we had our first walkable map.
The first walkable map — waterfalls, bridges, forests, all borrowed from RPG Maker
RPG Maker A2 ground tileset after conversion — various terrain autotiles
Week 1: The Infrastructure Explosion
The very first commit already included a farming system, NPC pathfinding, and an herb data system. Sounds ambitious, but that’s prototyping — throw everything in, organize later.
The next week was an infrastructure explosion:
- Bridge physics detection and NPC base class extraction
- Herb foraging and inventory tooltips
- World state engine and quest/narrative systems
- Weather, forging, cooking, resource gathering, notebook, village board — all at once
Every commit during this phase was like adding ingredients to a pot. Nobody knew how it would taste, but at least we were gathering the ingredients.
Title screen — once the weather system was done, even the title screen got rain
Act 2: Systems Growing Up
The Medical System’s Three Lives
The game’s core is TCM, and the medical system went through the most painful iteration.
Initially, three separate “wellness” systems existed: WellnessEngine, WellnessManager, and NeedsEngine. Each tracked player and NPC health independently, with incompatible data formats, conflicting signals, and save/load ordering chaos.
The mid-March unification merged all three into a single MedSystem — a 30-axis health model, data-driven pattern recognition, and diagnosis-driven combat. Three old systems were deleted entirely. The diff was a wall of red and green — spectacular and nerve-wracking.
The 30-axis health model design doc — Six Evils, Products, Eight Principles, Five Organs, Six Bowels
The diagnosis UI — “This person has 12 types of imbalance”… yeah, that’s a bit overwhelming
The Quest System Diet
Nine main quest scripts, each with roughly 200 lines of identical boilerplate: NPC claiming, phase persistence, timeout handling, cleanup logic.
The solution: MQSequenceBase (base class) + SceneQuestDispatcher (table-driven dispatch). Each quest went from 200 lines of boilerplate to 1 line in a config table. Nine scripts migrated.
During migration, a hidden bug surfaced: NPCs made invisible during cutscenes also lost their physics collision bodies. Players could walk right through them. The fix added physics state synchronization to set_npc_visible().
Classic bug: NPC was hidden but physics kept roaming — player got blocked by an invisible “ghost” on the bridge
GameManager’s Divorce
GameManager started as a “manages everything” monolith — time, inventory, player state, debug commands, saves, all in a 2,000+ line file.
Phase 1 extraction split it into four independent autoloads:
- TimeManager (224 lines): Time/calendar/seasons
- InventoryManager (1,862 lines): Inventory/equipment/buffs
- PlayerState (101 lines): Player attributes
- GameManager (553 lines): Just debug commands and legacy logic
All callers were updated to reference the new autoloads directly. No compatibility shims. Clean break.
The Bug Hall of Fame
No prototype is complete without its share of “happy accidents”:
First weather system test — the fog was supposed to be outside, not filling the blacksmith’s living room
NPC pathfinding debug — those blue rays are the paths NPCs tried to take. Eventually we gave up on perfect obstacle avoidance and went with “if you can’t solve it, dodge it”
Crop sprite auto-slicing — the AI cut 4 growth stages into 6, two of which were empty air
Auto-resize algorithm’s masterpiece — left is the original, right is the “optimized” version. The house did nothing wrong.
“Walk Through the Forest” quest — it can never be completed. Still an unsolved mystery to this day.
Robot farm management — telling Doudou (the robot) exactly what to plant where. In hindsight, way too much micromanagement
“Jingmo is in the village” — but only as text. The actual NPC sprite vanished. Cross-scene NPC management, everyone.
Act 3: The Testing Awakening
In early March, we started running the test suite seriously. Then we discovered —
Cascading test failures.
Over three weeks (March 2–19), we fixed wave after wave of pre-existing failures:
- Phantom gift preferences: NPC gift tables referenced non-existent item IDs
- Gift format inconsistencies: Data model definitions didn’t match actual data
- Duplicate door permissions: The same door registered twice
- Quest notifier null references: Completion notifications couldn’t find UI nodes
The milestone: 70/70 tests green. The commit message read “Silence SQLite verbose output, fix 11 failing test suites” — sounds calm, but it represented three weeks of archaeological debugging.
Act 4: The Copyright Storm
The Discovery
With the prototype nearing completion, we began planning for full production. During risk assessment, a problem surfaced:
RPG Maker MZ’s asset license explicitly states that bundled resources may only be used in games created with the RPG Maker engine.
Our game runs on Godot.
This meant every asset exported from RPG Maker — characters, terrain, buildings, sound effects — could not be used in a released product. Five weeks of visual foundation needed to be replaced.
The Audio Migration
Audio was replaced first. 48 background music tracks and 345 sound effects, all needing legal alternatives.
The final solution:
- 5 classical Chinese pieces from Archive.org: “High Mountains and Flowing Water,” “Ambush from Ten Sides,” “Guangling Verse,” “Autumn Moon over the Han Palace,” “Eighteen Songs of a Nomad Flute” — all public domain
- 9 biome ambient tracks from Pixabay: guzheng, bamboo flute, environmental sounds — CC0 license
- 281 sound effects from Kenney: RPG Audio + Interface + Impact packs — CC0 license
One commit deleted 393 files and added 295 new ones. Probably the largest diff in the project’s history.
Art’s New Direction
Audio was done, but art was the bigger challenge.
We found bluecarrot16’s LPC terrain pack — an open-source pixel terrain tileset (CC-BY-SA 3.0). But its format was different from Godot’s (of course). So a new round of tile conversion began — this time from LPC format to Godot, not RPG Maker to Godot.
This led to the autotile adventure told in our previous blog post.
Meanwhile, the art pipeline was taking shape:
- ComfyUI integration: AI-powered batch generation of pixel art icons (Flux 2 Klein 9B → background removal → 48×48 transparent PNG)
- Art Tracker: A Node.js web app tracking each asset from Prompted → Raw → Resized → Deployed → Verified
- Smart crop algorithm: Automatic growth stage detection for crop sprites via transparent column gap analysis
From depending on someone else’s assets to building our own asset production line — that was probably the most important shift of the prototype phase.
Our custom Art Pipeline Tracker — tracking every asset from generation to deployment
Act 5: The Almost-Lost Character Creator
In late March, a git stash went wrong.
The character creation system — paper-doll layering, color swapping, gender selection, hairstyle switching — freshly written code got stashed, then nearly overwritten during a checkout.
It was recovered. The commit message read: “Restore lost changes from stash: character creation flow, CharacterRenderer, scene updates.”
Sounds calm. The heartbeat that afternoon probably wasn’t. Lesson: commit often, commit early.
The character creator’s first version — Claude’s paper doll art. We… changed art direction after this.
Act 6: Production Planning
Mid-March, a key decision:
Stay in the current project. Incremental migration. Don’t start from scratch.
Five weeks of codebase — 30+ autoloads, data-driven architecture, signal-based communication — all worth keeping. What needed replacing was the content layer: art, music, quest text, dialogue.
The art direction was set as bright classical Chinese, inspired by “Along the River During Qingming Festival” — warm stone paths, olive-green meadows, blue-gray roof tiles. Not somber ink wash, but a sunny countryside.
The village scene after transitioning away from RPG Maker assets
The spring-summer-fall-winter season wheel — the time system’s visual heart
The production roadmap planned 98 work items: 6 maps, character creation, NPC social systems, deeper TCM mechanics, art and audio pipelines.
Epilogue: The Numbers
| Item | Count |
|---|---|
| Development period | 5 weeks (Feb 16 — Mar 25) |
| Git commits | 300+ |
| Autoload systems | 30+ |
| Test suites | 70+ files, 6,611+ assertions |
| Audio files replaced | 48 BGM + 345 SFX |
| Tile conversion tools | 3 (RPG Maker → Godot, LPC → Godot, Palette Remap) |
| Database tables | 26+ |
| Production work items | 98 planned |
Five weeks ago, this project was an empty folder and an idea.
Now it’s a game prototype with a complete architecture, automated testing, and an independent art pipeline. All assets are legally clear. All systems are tested. All tools are reusable.
The prototype phase is over. Production, here we come.
