Devlog

Day one: from a chat to a race generator

This started as a chat about where games are going, and I couldn’t stop thinking about one idea. I love classic real-time strategy games, and I love making my own stuff. What if your side could be whatever you describe?

A few rules came out of that first hour. No image generation, and no AI running in the game itself. A race gets put together from a kit of parts, so bodies, heads, helmets, weapons, mounts, and a culture for the colours and names. The same words build the same race on every computer, so you can share one with a friend. And balance comes from cost. You can have a ten-foot spider, it’s just going to be expensive.

By the evening the race generator worked. I put “angry swamp frogs with reed spears” on one side and “sewer rats with cheese hammers” on the other:

The first race generator: Mireborn frogs against the Scurry Pack rats, with each unit's stats

Then “centaur romans” against “flying greeks with wings”:

Maximian Senate centaurs against the Myrmidon Phalanx, Greeks with feathered wings on their backs

What went wrong

Plenty, and most of it was funny.

  • “flying greeks with wings” never said who the Greeks were, so spiders volunteered. Hellenic spiders with hoplite spears.
  • One Roman turned up as a giant with a cheese hammer.
  • Winged riders sat on ponies with no wings, so the rider hovered and the pony floated along under him.
  • I asked for the Second World War and got “No world wars yet. Issued saucepans for helmets.” I’m keeping that one.

After some fixes the centaurs got a heavy lancer, and the pegasus finally got its own wings:

Heavy lancer centaurs and a lancer on a pegasus

The game underneath

A race generator isn’t a game though, so the next job that evening was the simulation it all runs on. It’s strict on purpose. Whole numbers only, 20 ticks a second, and everything you or the computer does goes in as a command. That’s what will let two computers play the same match without drifting apart later, and it means replays come almost for free.

The test plays a 10-minute match with 200 units twice and compares the two every 30 ticks. All 400 checks matched, and a tick took 0.9 ms out of a 3 ms budget.

Frogs and rats meeting in the first simulation view, plain shapes on a grid

The first screenshot of it was completely empty though. The script passed its file path on the command line, the game read that as player one’s description, didn’t know any of the words, and the spiders volunteered again as “Gloom Spiders”. And there was nobody on the field because the armies got told to march before they’d even spawned.

An empty field: Gloom Spiders against the Scurry Horde, and not a single unit to be seen