I am building a game for the kids in my family. It is a Godot 4 project, two dimensional, a side-scrolling platformer stitched to a top-down village hub in the style of the SNES role-playing games I grew up on. The story is short and finished: a star falls, a boy carries it home. The whole cast is the family, turned from photographs into game art by an offline pipeline, which is a separate post. This one is the pictures.
The repository keeps a docs/img/ folder, and the rule for it is that a
screenshot goes in when it proves something: a before and an after, a
measurement, a decision. That makes the folder a progression by accident. Here
it is, in the order the files arrived.
July: a level is a JSON file

The first screenshot is the least impressive and the most important. Every level, story node, line of dialogue, battle and cutscene is data, read by one loader. The coloured dots are entity markers: the loader knows what a “chest” or a “villager” is from a tile-id dictionary, and nothing in the level is a hand-built scene. A level authored by a script looks identical to one authored by me, which is the point.


Each place got a painted concept and a tilemap. The painting decides what the tileset needs; the tilemap is what ships. Keeping both side by side is how I caught a well that was drawn as a fountain, which the two-presentations post tells at length.
July: a cast


The cast sheet is the contract. Every character has a portrait, a hub sprite, a platformer sprite and a battle pose, and they must read as the same person. The pipeline that produces them ran on reference photographs that never leave the house; the sheet is generated art only. When a new character is added, the sheet is the QA gate.
September: a title screen and a fight




The battle system is turn based and gentle. You do not defeat the fox; you make friends with it. The before-and-after pairs exist because the UI pass was done as one sweep across six screens, and a sweep needs evidence per screen or it is a claim.

Fishing arrived as the first life skill. The design page argues for five villages, each with a skill, and fishing was the one I could build in a day: cast, wait, match four shapes, catch. The bag, the phone and the shop counter all came with it.

This one is a measurement. The platformer sprite floated a few pixels above the ground in half its frames. The fix was a per-frame foot offset written into the character package, and the sheet is the proof it holds across all eight.

The same chapter, in three dimensions
In late August I started a second Godot project that reads the same story files and the same place manifests, and presents them in 3D. It is not a port. It is the same content with a different renderer, and where the two disagreed, the disagreement was always in a picture rather than in the data.



The 2.5D crossing is the one I was sure could not exist. A side-scrolling level is an elevation; a 3D level is a plan. Then the 3D game grew a planar mode with an orthographic side camera, and the crossing is derived from the 2D level’s tilemap directly. What genuinely refused to port was one number: the jump height.






The cloak is the picture I would keep if I could keep one. It is one item in one save file, drawn by two renderers from one palette, and it is the whole argument for sharing meaning and forking the picture.
What the folder taught me
A screenshot that proves something is worth keeping; a screenshot that shows something is worth deleting. The folder has thirty-five files after two months because every one of them answers a question I had that day, and the questions turned out to be the history.