Entry 03 · August 2025

ChatGPT made me a map generator

The first procedurally generated tissue maps, and a long argument with a language model about which way is up.

A generated tissue map: wall blocks at the lower right, open ground, and a dendritic cell crossing it.

Every map in Cell Front was hand-placed until this month. That was fine for testing one fight and useless for anything else — a survival game needs a new battlefield every run, or you're memorising instead of playing.

What the generator has to produce

A map isn't just terrain here. It has to give me a vessel for the bacteria to enter through, tissue walls that block movement, open ground worth defending, and spawn points that are far enough apart to be interesting but close enough to be reachable in the time a wave gives you.

  • Tissue walls, placed on their own collision layer so pathfinding respects them.
  • An artery gate — the thing you're actually protecting.
  • Open corridors wide enough for a macrophage to plug and a swarm to flow around.
A generated map with a column of tissue wall blocks at the left and open ground held by neutrophils.
Fig. 1 — An early generated map. Corridor width is the single number that decides whether a fight is readable or a mess.

The bug that taught me the most

For an evening the generator produced completely empty maps and told me nothing about it. No error, no warning — a condition failed somewhere in the middle and the routine just quietly ran off the end and finished.

Silent failure is worse than a crash. A crash tells you where to look.

The fix was to make the generator loud: log an error and stop immediately whenever it can't satisfy a constraint, instead of carrying on and handing back something empty. Every system I've written since has that same rule.

Next

Maps exist, but they're still flat — every part of one is as good as every other part. Next I want reasons to care about specific ground.

Join the battle

One email when something actually works.

Roughly monthly. Devlog entries and demo builds. Unsubscribe in one click.