What happens if you just ask for a 3D game

5001 Axolotlsbrowser games3D gamesThree.jsWebGLmultiplayerprocedural generationAI-assisted developmentside projects

On 2 September I committed initial version to an empty repository. The experiment was simple and slightly unserious: I wanted to find out whether an AI assistant could actually build a 3D game, as opposed to producing something that compiles and then falls over.

I picked axolotls because they are absurd. A salamander that never grows up, with feathery pink gills and a permanent smile — if you are going to spend evenings staring at a creature model, it may as well be that one.

Twenty commits later, over five weeks, the answer turned out to be yes, with a caveat I will get to.

What it became

An endless procedurally generated underwater maze. Seaweed, kelp, coral, mossy rock rooms on a seabed, and a cast of creatures wandering through it — whale, shark, seal, lamprey, octavia the octopus, blobfish, narwhal, and of course the axolotl. Each one announces its own name when you meet it, in whichever of 76 languages you are playing in.

Every so often — four percent of eligible rooms — you swim into something that was placed rather than generated:

  • A shipwreck: a beached hull with masts and rigging, crewed by zombie pirates and a zombie parrot, with its own sea shanty that fades in as you approach and periodically breaks into a spoken chorus of Fifteen Men on a Dead Man's Chest.
  • A sunken temple: weathered pillars, one fully collapsed, around a robed figure in a praying posture, with a wordless choir drone.
  • A sunken playground: swing set, slide, seesaw, and a roundabout that actually spins and carries you with it — the one piece in the game with real moving-platform physics. Beside it a small brick fortress with four walled turrets, deliberately left open at the top so that swimming up and over is the only way in. A music-box Frère Jacques drifts in as you get close.
The sunken playground: the brick fortress, swing set, roundabout, slide and seesaw.
The sunken playground: the brick fortress, swing set, roundabout, slide and seesaw.
The shipwreck, with a zombie crew and the zombie parrot on the rail.
The shipwreck, with a zombie crew and the zombie parrot on the rail.
The sunken temple's weathered pillars, one of them collapsed.
The sunken temple's weathered pillars, one of them collapsed.

My children found the playground first. Then the fortress. Then they worked out that you can get the roundabout going fast enough to be thrown off it, which was not a feature I had planned and which I have left in.

The caveat

The honest version of "AI built a 3D game" is that the assistant was extraordinarily good at the parts with known shapes and needed steering on the parts that were actually decisions.

Three examples from the commit log, which is unusually candid: big rework on 13 September, and then ui fixes six times across the following week.

The fortress windows. The collision system only understands axis-aligned boxes. A window is a hole, and a hole in a box is not a box. The obvious implementation — one solid wall with a dark rectangle painted on it — looks right in a screenshot and wrong the moment a child swims at it. Each wall is built from four separate pieces, two pillars, a lintel and a sill, framing a real gap. Nobody asks for that. You only discover it is necessary by watching someone try to swim through a picture of a window.

The temple figure. A robed praying figure is trivially easy to make accidentally specific to one religion. The version in the game is a deliberately universal orans posture with a fully shadowed, featureless hood. That is not a technical problem and no amount of model capability would have raised it; it is a judgement about what you are willing to ship to strangers' children.

The music. Everything audible in the game is either synthesised or public domain — a shanty from Treasure Island, an 18th-century French folk round. Checking that is tedious, unglamorous, and entirely on the human.

So: the assistant wrote a very large share of 28 modules of game code, fast, and the parts I had to own were the taste and the liability. That split has held for me across every project this year, and I find it more reassuring than the alternative would be.

Multiplayer, in one day

The most interesting engineering is dated 9 October — four commits, all in one go: multiplayer to web and, multiplayer to web, more fixes, more fixed.

Adding multiplayer to a procedural world normally means a second implementation. The server has to know where every creature is, which means reimplementing the maze generator, the colliders, the spawn tables and the creature AI on the server, in whatever language the server is written in — and then keeping four copies of that logic in step forever.

Instead, the simulation lives in a module that imports no rendering code and no DOM. The browser runs it. The Node server imports the exact same file and runs it too. There is one description of how a creature wanders, and both ends execute it. Deploying the server means shipping two directories.

Identity is a SHA-256 proof-of-work solved in a worker thread while the connecting spinner turns. No email, no password, nothing to type. Nicknames are assigned by the server from a word list, and there is no free text anywhere in the game — which means there is no moderation surface at all. When your users include your own children and their friends, the cheapest way to handle a hard problem is to design it out of existence.

Was the experiment a success?

It was supposed to answer a question about tooling and it ended up answering a different one.

The assistant comfortably handled things I would have budgeted weeks for: procedural generation, collision, creature behaviour, a whole audio layer, 76 locales, a Capacitor build for iOS and Android. That is genuinely new, and anyone telling you otherwise has not tried recently.

But the game is good — to the extent it is good — because of a roundabout that spins you off it, a fortress you have to swim over to enter, and a parrot that is also a zombie. None of those came out of a prompt. They came out of watching my children play, and going back in.


5001 Axolotls runs in a browser at turevskiy.com/5001axolotls, and is free on the App Store and Google Play.