A day of fixes, ending by the fire
Bug fixes, a speed pass from 948 ms down to 13 ms, one shared route queue, and an evening round the campfire on logs to sit on.
This day started with a list of bugs from a code review, worked through one at a time. A system in the simulation that throws an error no longer stops the whole tick: the rest of the town keeps going and only the broken part stalls. Haulers no longer keep a claim on a pile after they stop hauling. Someone who dies puts down what they carried where they fell, and a borrowed axe goes back to its camp. The load menu in a running game shows only the saves of that town, and each save shows the time of day, not just the day. Replays now record only what the player does, from the start of the game, so I can watch a bug happen, fix it, and watch the same game play out without it. And every building model got a marked entrance point, so the game knows where the door is from the model itself.
Then the speed. I wanted numbers, so I ran a full game day without the game window: the real town of 54 people, and a test town of nine copies of it, 486 people and 549 buildings. The worst tick on the big town took 948 ms. The biggest cost was finding a route: for every tile it looked at, the pathfinder asked whether a building stood there by going through every building, and one route could cost 50 ms. Now the town keeps a map of which tiles are taken and only redraws it when a building comes, goes or changes shape. Jobs are handed out about once a game minute instead of every tick, an idle logger only searches for work again when something in the forest changed, and a lot of small throwaway lists are gone. The average tick went from 2.94 ms to 1.77 ms, the garbage per tick from 2.7 MB to under 400 KB, and the worst tick from 948 ms to 41 ms.

41 ms is still too slow, and the slowest ticks were the ones where many people needed a route at once, like the whole town going to work at 08:00. So all walking now goes through one shared route queue. Everything that needs a path asks it, the player’s own orders too, and it plans 20 routes a tick for the whole town, side by side on several cores. A person counts as walking straight away and stands still for the moment until their route comes. The worst tick on the big town went from 41 ms to about 13 ms.
While checking all this I noticed that in the evenings everyone just stood still. Work was over and nobody went anywhere. People only went looking for leisure once it dropped below 30, and new settlers start full, so nobody ever left. And the campfire was only used when there was no beer in stock.
They just need leisure time. So now every evening each free person rolls a mood for the day: three out of four go to the campfire, one in twenty goes to the trees, and the rest stroll about. Leisure refills while they do it, at half speed for a stroll. Beer is one per adult as the evening starts, while the stock lasts, and none for the kids. The start camp’s fire now starts lit, with eight wood on it.
Then came the question of where to stand. My first try was a ring of 24 spots a tile out from the fire, and people stood in each other’s faces. Twelve was better, every other cell of the tile’s three by three cells. Then I wanted logs to sit on, so the campfire grew from one tile to three by three, with a log along each side. Two people sit on each log, four more can stand at the corners, and people may walk straight across it. Every person model got a new seated pose for this, legs held out in front.
Talking was harder than sitting. At first everyone faced the fire and waved their hands, which did not look like talking at all, and they all changed at the same moment. Now neighbours pair up and turn to each other. One talks with their hands while the other listens, then they swap, sometimes they start with a handshake, and every pair keeps its own time.
The evenings also turned up a bug in the route queue from that same morning. Two loggers stood frozen all evening, boxed in by saplings they had planted themselves. The check for whether the way ahead is blocked is stricter near a sapling trunk than the route planner, so every fresh route was rejected and asked for again the next tick, and with the queue in between they never got to take a single step. Now a route is only checked again when something in the world changed since it was planned.
So the day ended where the settlers’ day ends now: by the fire. In the video it is the first evening at 21:00. The sun sets at 22:00 while the camera circles just over their heads, and then it rises over the camp in the dark.