File City, Under Construction
So March was about committing to code — nothing less, nothing more. I said it at the end of last month, and I meant it. Here's what actually happened.
Starting with the Digimon
The first thing I had to figure out was how to model the Digimon itself. Not visually — architecturally. In the original game, each Digimon is essentially two things: a template (its species, base stats, sleep schedule) and a live state (its current HP, how hungry it is, whether it's grumpy). I separated those into two resources: DigimonStats and DigimonCurrentState.
The reason matters. When a Digimon evolves, you don't rebuild anything — you swap the template, keep the state, and you're done. That distinction drove a lot of the decisions that followed.
The needs system
Digimon World is, at its core, a Tamagotchi. Hunger, tiredness, happiness, discipline, weight — five needs, each on its own repeating timer. Let them drain too far and HP starts dropping. Three deaths and it's game over.
What I'm most happy with here is that the tick intervals live on DigimonStats, not in the needs code. A Baby Digimon can get hungry faster than a Champion without touching any logic. The system doesn't know or care.
The night cycle pauses the tiredness timer. Day resumes it. A full night's sleep resets it entirely.
Saving the game
This one surprised me. Godot's built-in ResourceSaver looked like the obvious choice until I tried it with nested scene references — it just breaks. So saves use FileAccess and JSON instead, written atomically: temp file first, rename old save to backup, rename temp to final. If the game crashes mid-write, you don't lose everything.
The tricky part was timers. Before saving, I capture how many seconds are left on each need countdown. On load, they're restored, and a catch-up tick fires to account for real time elapsed while the game was closed. It feels seamless.
Plugging it all together, I get a test scene with this:
Rough around the edges — no animations, no sounds, placeholder everything — but as a proof that the systems hold together, it's exactly what I wanted to see.
The world and original assets
This part went better than expected, mostly because the fan community has already done remarkable preservation work. The Spriters Resource covers sprites, UI sheets, and backgrounds. 3D models for all the Digimon are up there too, and there's even a sounds archive for the music and effects. DW1ModelConverter goes further — it extracts models with their animations intact and exposes map warp data from the original binary. That's most of what I need to stay faithful to the source without reverse-engineering everything myself.
From there I built a parser for the map data — tile positions, warp zones, Digimon spawn points — all loaded from JSON files derived from the PS1 dump. A research tool overlays this data on a PS1-accurate camera projection so I can verify positions before committing them to a scene. Most maps are empty shells for now, but the structure is in place, and the content can be filled in incrementally.
Having all of this available means I can stay focused on the game itself rather than getting lost in asset archaeology.
What's next
The core loop works: your Digimon follows you around, gets hungry, needs sleep, reacts to care. That's the foundation. The next step is making it feel like the original — sounds, UI, the small details that gave Digimon World its personality.
Then there's the recruit and prosperity system, which is really what makes this a game. In the original, nearly every Digimon you encounter can be convinced to join File City. Each one adds to the town's prosperity and unlocks something new. That loop — explore, recruit, grow the city — is the heart of Digimon World. I also want to address some of the original's rough edges: it was punishingly hard, and a lot of its systems were opaque to the point of being unfair. In-game guidance on evolution paths, and reworking mechanics that never quite worked — like the training bonus and the restaurants — are things I want to get right.
April is about laying the groundwork for all of that. First, I need to finish the map system — it handles most of the heavy lifting, but warp zones, collisions, and object placement still need a manual pass for each area. Then come the poop system (yes, it has to exist), the behavior tree so the Digimon acts on its own, and the evolution sequence with its animations.