Work / 2026 – now
Pioneer
A settlement game where every villager is an autonomous agent with a personality, needs, memories and a place in the village economy, and the village grows out of what they decide.
- Role
- Solo project, in progress.
- Built with
- C#, Godot 4, Python, GitHub Actions

The idea
Most colony games hand villagers jobs. I wanted villagers who decide for themselves: who find their own roles, trade, gossip, remember and build their own homes, so that the village emerges from them. The test is simple: do they feel like people?
What’s built
- A generated world of forest, plains, hills and crags, with rivers, ponds and terraces, saved and loaded sector by sector.
- Villagers who choose what to do. A utility-scored arbiter weighs needs, goals and strategies. Villagers hold beliefs that remember where they came from, fuzzy memories and moods, and their personalities drift slowly over time. Roles come from what they actually do; nobody is assigned one.
- A social world. Relationships, reputation that spreads through gossip, and an economy built on reciprocity: neighbours who trust each other share food, and strangers barter.
- Villagers who build. They rent plots, plan huts and build them, hauling the materials themselves.
- Conversation. Talk to any villager in plain English. Replies are grounded in what that villager really knows, owns and has seen. A language model running locally chooses the words, and deterministic rules decide anything involving numbers.
- Art made by a script. Every sprite and tile is generated, so the game contains no licensed art.
Engineering
- A headless “colony soak” runs a village with no player for days of game time, so I can measure behaviour rather than eyeball it.
- 17 times faster soaks. Profiling showed pathfinding was 96% of simulation time, mostly hopeless searches. Bounding A* and caching which cells can reach each other cut a soak from about 300 seconds to about 18, with no change in behaviour.
- Proving refactors safe. Soaks aren’t deterministic, so a self-test with around 400 checks proves behaviour hasn’t changed. CI runs it headless on every push.
- Measured, not guessed. The conversation pipeline is scored against a frozen set of 997 labelled player questions, with a held-out validation split.
- Design changes tested in the simulation. Replacing a currency-only food market with sharing between trusted neighbours took starvation in the test colony from 82 cases to none.


