Until this week the city came from a rough first generator, and every new city was the same map unless someone typed in a number. This week I rebuilt the thing that builds the place.
The game is about distance. Energy is spent per step, sound travels a fixed way, a building is worth what it costs to reach. None of that means anything on a small map. The city has to be big enough that crossing it is a decision, and varied enough that you know where you are without a label.

A world is a number
Give the builder a seed and it makes a city. Give it the same seed and it makes the same city, down to the last fence. That trick is older than me, but it’s the right one here: a world is a number, so a world can be shared, reproduced, and thrown away.

It goes in stages, and each stage only knows what the one before it decided.
The land, then the roads
Before there’s a single road there’s a map of how much the ground is worth. First the builder picks a spot for the centre and rates every tile by how close it is to that spot. Then water goes down, a lake and sometimes a river, and tiles near it get a bonus, and later so do tiles near a big road. High means downtown. Low means fields.

Roads go in from big to small. First a highway or two, edge to edge, jogging around the centre the way a real bypass does, with a bridge wherever it meets water. Then the main streets, spaced by the land value: close together where the ground is worth a lot, far apart where it isn’t. A ring road runs round the lot, and the little streets fill in between, with cul-de-sacs where they run out of room. A block is the piece of land left between the roads.
What a block is for
Every block reads its own land value and gets a character from it. The highest becomes the core, the tall buildings at the centre. Around that, commercial: shops, offices, hotels. Then residential, the widest band, and then suburb, out where the blocks are big and the houses have yards. Industrial follows the highway instead: every interchange sends a band of warehouses and factories out toward the edge of the map.

Then some blocks win a lottery. A residential block might become a park, a sports field or a civic building, a commercial one a car park or a plaza, and the blocks along the water lean toward parks. On top of that the builder hands out the things a city has, hospitals, police and fire stations, libraries, a city hall, a courthouse, by how many people it holds, so a small city can go without some.
Each block then splits into lots, always so that every lot touches a street, and every lot gets a building of a kind its zone allows, as tall as its land value says. A few shops are drawn already shut, and a few lots are still a fenced square of dirt where something was going to be. Out past the ring road it’s farms, patches of forest, and a few things with their own road out into nowhere: a power station, and on the biggest maps a prison.
The zones are what tell a player where to go: shops line a commercial strip, houses fill a residential band, and you can read that from above before you spend the energy walking down the street.
The doubt is the one from the first entry. The game I loved had a huge, empty city, and the empty part was the problem. I’ve just built a bigger one. The only defence is that a world here is a number, so a world can be small.