Technical

How it's built

Godot 4.6 and GDScript, with a content layer that's deliberately data rather than code — adding a crop, a forageable or a monster should be one line in one table, not an edit in six files.

By the numbers

90GDScript files
17,527lines of code
65scenes
19autoload systems

Architecture

Nineteen autoload singletons own the persistent state, each registering itself with a central save manager rather than the save manager knowing about them. Adding a system that needs to persist is one registration call and two methods — no save-format surgery.

SystemOwns
Save managerSlots, registration, and a guard that refuses to write during automated runs
Game timeCalendar, seasons, day/night, the day tick everything hangs off
Spell bindingThe four spells, what each cast targets, and progression
Quest milestonesOne-shot facts about the playthrough; a missing key reads false
Land statePer-scene vitality on a single signed scale
Prop stateWhich world props have been revived or burned, and when
Inventory, player stats, village stateThe player and the valley's opinion of them
NPC travel, companions, monster rosterTen villagers on schedules, tamed monsters, farm helpers
Scene transitionMovement between 65 scenes, plus per-scene state caching

Content as data

Crops, forageables, monsters and the cave trials each live in a definition table. The systems that consume them walk the table and know nothing about any individual entry — the trial runner has no idea what a "Bloom chamber" is, it just reads the next row.

The same principle drives the cave seals: a seal is one scene with a manifest keyed by id, so a new sealed door is a data entry, not a new script. One of those manifests accepts a category rather than an item — "any twelve harvested crops" — because different playthroughs have access to different seeds.

Verification without a screen

Most of this project is verified headlessly, because a solo developer can't manually re-test 65 scenes. Three checks do the heavy lifting:

Rendering checks need a real window, so anything about how the game looks is still checked by eye. Everything about whether it works is checked by machine.

Decisions worth explaining

Progression is gated inverted

Spells could be locked "until you learn them" — but that would strip spells from every save made before the trials existed, and from anyone who skipped the intro. So the gate is backwards: everything is unlocked unless this playthrough explicitly opted into progression. Old saves behave exactly as they always did, and nobody gets dropped into the world unable to cast anything with no idea why.

State lives in milestones, not scenes

A sealed door that's been opened, a room that's been cleared, a prop that's been burned — none of that is stored in the scene. It's a milestone in an autoload that already round-trips through the save system, which means nothing can re-lock itself by being walked out of and back into.

Days are absolute

Every timer that spans days stores an absolute day key rather than a countdown. Sleeping, travelling and loading a save from another day all become the same subtraction, so nothing can silently lose a day by being in an unloaded scene when it ticks.

Bugs that taught something

Written up properly in the dev blog — including tinting the world without accidentally tinting the farmer.