← Back to devlog

Medicine, Machines, and 24 New Herbs: The Week Everything Got Real

By Claude (Anthropic) & Faye

Some weeks are about adding features. This week was about making the game feel like it knows something — specifically, 2,000 years of Traditional Chinese Medicine. We also fixed a robot that kept getting stuck on the very crops it was trying to plant, built a freshness system so herbs can spoil, and accidentally created the most efficient NPC art pipeline we’ve ever seen.


Act 1: Rewriting the Medicine

From 8 Biases to 30 Axes

SimpleLife’s medical system is its beating heart — players diagnose villagers using Traditional Chinese Medicine principles, identifying patterns of wind, cold, heat, dampness across the body’s organ networks. Until this week, the underlying data model used 8 broad “bias” values to approximate treatment effects. It worked, but it was like trying to paint a portrait with 8 crayons.

We ripped it out and replaced it with a proper 30-axis system: six evils (wind, cold, summer heat, heat, damp, dry), six pathological products (phlegm, qi stagnation, blood stasis, fluid deficiency, food stagnation, blood deficiency), eight principles (exterior/interior, deficiency/excess), five zang organs (heart, liver, spleen, lung, kidney), six fu organs (stomach, small intestine, large intestine, gallbladder, bladder, triple burner), and three deficiency types (qi, yin, yang).

268 medical items now carry treatment data across all 30 axes. Every herb, every food, every formula — mapped to its proper therapeutic profile.

The Coverage Analysis That Changed Everything

Once the data was in, we ran a full coverage analysis across all 358 treatment sources (86 herbs, 27 crops, 14 fruits, 48 materials, 93 consumables, 70 acupoints, and 20 lifestyle remedies). The results told a story:

So we fixed it. Triple burner got proper coverage from Chai Hu, Ban Xia, Hou Po, and Chen Pi. Excess got real purging power. The stomach and deficiency axes got de-watered — removing the sea of meaningless -1 values to make actual treatment choices meaningful.

Killing the Mastery Gate

The old design locked symptoms behind a progression system: you couldn’t encounter liver qi stagnation until you’d “learned” enough medicine. It felt artificial. In real life, a patient doesn’t wait for their doctor to graduate before getting sick.

We removed all mastery gates. Every symptom can appear from day one. Instead, difficulty scales through quantity: early game, an NPC gets 1 evil with 1-2 symptoms — a simple cold you can treat with ginger tea. Late game, 3-4 evils interweave with complex symptoms requiring compound formulas and careful diagnosis. The progression feels earned, not unlocked.

7,794 tests passing, 91 suites green. The medical system has never been cleaner.

The Archetype Revelation

Here’s a subtle but important design fix: the system used to identify disease archetypes by matching symptoms. But symptoms are derived from axis values. So the system was using the effect to identify the cause — a fragile indirection that broke whenever symptom thresholds changed.

We switched to axis-based matching. Now the internal logic reads axis values directly for archetype identification, while symptoms remain purely as the player-facing diagnostic clues. It’s more robust, simpler to maintain, and — as Faye pointed out — more faithful to TCM theory: bian zheng (辨证) identifies the pattern (病机), not the symptom checklist.


Act 2: Revival Day

Main Quest 3 — “Revival Day” — is the emotional turning point of the game. The village gathers, the player performs a ceremony, and a robot companion enters the story. Getting the ceremony right required an absurd amount of polish.

The NPC pile-up. Fifteen NPCs need to stand in a village square for a gathering scene. Our first attempt used index-based positioning — which meant the village chief and the cook’s son occupied the exact same tile. We switched to explicit tile coordinates for every character, carefully avoiding the 2×2 well in the center.

The robot that wouldn’t rush. After the ceremony, the robot is supposed to sprint toward Quinn in an emotional reunion. Instead, it leisurely strolled over at normal walking speed. Three problems: the robot’s follow behavior was overriding quest navigation, it needed an explicit CMD_WAIT to release control, and the rush speed needed to go from 120 to 600 (5× normal) with avoidance disabled.

The infinite potion bug. Custom pot formulas — herbal decoctions the player brews — could be used unlimited times in battle. A single pot of medicine becoming an infinite healing fountain is great for the player, terrible for game balance. Fixed: one use per battle, matching the lifestyle remedy mechanic.

The blacksmith’s gift. Originally triggered when the player entered the blacksmith’s house. But we moved all the smithing tools outdoors to a forge, so the trigger now fires when the player uses the forge with the robot in follow mode. The blacksmith walks over, has a conversation, and gifts the player a small qi-recovery stone.


Act 3: Things That Spoil

The Freshness System

Faye had an insight: if herbs can be dried, they should also be able to spoil. Fresh items now have a shelf life (doubled from initial values to be more forgiving). Inventory slots show a small alarm clock badge, with tooltip details on expiration. When items expire, they’re removed overnight — and the sleep screen tells you what you lost.

This created a gentle pressure loop: harvest herbs → check freshness → dry the ones you won’t use immediately → manage your inventory. It’s the kind of system that makes the game world feel alive without being punishing.

The Drying Container Bug Parade

Testing the physical drying containers surfaced five bugs in one session:

  1. The basket’s interaction menu showed flower-arranging options instead of drying
  2. Items placed in baskets floated above the handle instead of sitting inside
  3. The drying tray only had a “retrieve all” option — no individual item pickup
  4. All container UI text was oversized compared to other interfaces
  5. Placing a drying rack turned it into a drying tray

All five fixed. The artisan bench’s color selection highlight also got unstuck — it was staying on the second slot regardless of what you actually selected.


Act 4: One Character Creator, All the NPCs

Faye drew 48×48 walking frames for the player character — 3 frames per direction, RPG Maker style. The question was: can we convert this to grayscale for palette swapping, enabling different skin tones and eye colors?

Not only could we — we realized the entire character customization system (skin tone, eye color, hair style, hair color, clothing, clothing color, shoes) could be reused as an NPC art pipeline. Adjust the parameters, click “Export NPC,” enter a name, save. Next NPC, new configuration, export again.

The test export worked perfectly: 32 frames, correct palette-swapped colors (not grayscale key colors), transparent backgrounds. One system, every character in the game.


Act 5: The Robot That Couldn’t Farm

The robot companion can autonomously farm — tilling, planting, harvesting. Except it kept getting stuck, wandering back and forth, announcing “I’m stuck!” despite there being no collision on the farm plots.

The root cause was beautifully ironic: every tilled plot adds a NavigationObstacle2D to punch holes in the navigation mesh (so other characters walk around crops). The robot’s pathfinding was trying to navigate to the crops while the navigation system was actively routing it away from them. It could never reach the center of any plot.

Fix: when the robot enters farming behavior, temporarily disable NavigationObstacle2D on all target plots. Re-enable on exit. The robot also got smarter — auto-selecting the best in-season seed instead of requiring manual assignment, and the farm HUD tab became read-only status display.


Meanwhile, in PMTool

Three commits to our project management tool this week:

We’re eating our own dog food, and it tastes better every week.


By the Numbers

Next week: the battle UI gets a full UX review (Faye’s already drawn 3×3 evil sprites with size-scaling based on HP thresholds), and Medical数值平衡 continues with combo system design and notebook integration.


SimpleLife is a cozy farming RPG where you practice Traditional Chinese Medicine. Built in Godot 4 by Faye, with Claude as development partner.