← Back to devlog

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 map built with RPG Maker assets The first walkable map — waterfalls, bridges, forests, all borrowed from RPG Maker

RPG Maker A2 ground tileset converted to Godot format 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:

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 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 unified 30-axis health model — Six Evils, Eight Principles, Five Organs, Six Bowels The 30-axis health model design doc — Six Evils, Products, Eight Principles, Five Organs, Six Bowels

Diagnosis UI — 12 kinds of pathogenic evil is a lot to take in 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().

Ghost on the bridge — NPC was hidden but physics body kept roaming 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:

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”:

Weather system test — fog filled the blacksmith’s house First weather system test — the fog was supposed to be outside, not filling the blacksmith’s living room

NPC pathfinding debug visualization 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”

Claude cut 4 onions into 6 growth stages Crop sprite auto-slicing — the AI cut 4 growth stages into 6, two of which were empty air

The algorithm squashed a house Auto-resize algorithm’s masterpiece — left is the original, right is the “optimized” version. The house did nothing wrong.

The impossible quest “Walk Through the Forest” quest — it can never be completed. Still an unsolved mystery to this day.

Robot micromanagement Robot farm management — telling Doudou (the robot) exactly what to plant where. In hindsight, way too much micromanagement

NPC disappearing act “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:

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.


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:

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:

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.

Art Pipeline Tracker 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.

Claude’s first paper doll attempt 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.

Village scene with NPCs and environment The village scene after transitioning away from RPG Maker assets

Season/time wheel UI 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.