The video shows a night run. The game has a day/night cycle, and this time I wanted to show what night looks like. Night is more dangerous: guards go out on patrol, searchlights sweep for targets, mines go off faster. The trade-off is meant to be better loot.
Hi! This is part 5 about The Last Sand, a post-apocalyptic game Iām building with AI agents. Opus 5.5 and Codex (GPT-6 Astra) write the code and assemble scenes, models are built in Blender via MCP, and the engine is Godot.
The process has settled down by now. I rarely give ādo Xā commands. First the agent and I work out what the game needs and check it against the projectās principles and our rules for building assets, zones and locations. We donāt reinvent things: we lean on best practices that developers of similar games share publicly. That turns into a task list the agents work through on their own. They build, launch the game through Godot MCP, capture screenshots and measurements, and keep going until it meets the bar. I review the results, give feedback and make the calls.
A time bomb
Iām not a game developer, and this part is mostly about the consequences of that. Early on, Codex built the project fast but left no room for the world to grow: no streaming in small chunks, no budgets for models, no caches. Thatās not a complaint. It did what I asked, and I didnāt know to ask for any of this. While the world was small, it didnāt matter. Once I started filling it with locations and enemies, FPS dropped, and the car would hit an invisible wall at the entrance to the village.
When Opus 5.5 dug in, hereās what it found:
- a raider guard had 23 materials and 98k triangles; the pickup with its crew had 461k triangles and 33 materials;
- 78 of 192 assets were over budget, and a single campfire was made of 159 parts;
- the ground recomputed its entire formula for every pixel every frame, which took up to 15 ms of a roughly 28 ms frame;
- the world loaded in whole 240 m chunks. Until a chunk was ready, there was a wall at its edge, and the car would sit there for 8ā13 seconds;
- one drive along the test route made about 5,800 synchronous reads back from the GPU.
Opus took on the whole rework. I set one rule: no one-off fixes. You donāt fix āthis fenceā, you fix the mechanism for the whole class of objects, so new content gets the optimizations automatically.
Whatās been done
- Ground via a virtual texture. The finished ground surface is cached around the camera and drawn once per patch instead of every frame. Frames got 5ā12 ms faster with the same image, and now the ground can get more detailed without costing FPS.
- The world in 60 m cells instead of 240 m chunks. Collisions and a simplified view of the whole world are ready at load time, and detail streams in as you approach. The wall is gone. The area with the village used to take 21 s to be ready; now it takes 5.5 s. The longest frame on the drive went from 241 ms to about 60.
- Hunting stutters. The agent wrote a test drive that breaks every slow frame down by system. GPU reads went from 5,800 to 2, and frames over 33 ms from 45 to 3. The funniest find: whenever an oil-spill marker appeared, it recalculated the materials of the entire world, which ate 60 ms. On a MacBook Air M4: Low 49 ā 78 FPS, High 32ā36 ā 60.
- Grass and ground cover. Grass is painted with a brush, and the game scatters the plants itself, thicker around rocks and walls. Tufts are built from cards with an atlas rendered from 3D plants in Blender: 20 triangles instead of 380ā1500. Cars push the grass aside.
- Night lighting. A ālight thatās still aliveā set: gas station price signs, vending machines, a traffic light blinking yellow, sparking transformers, BAR and MOTEL signs, a TV showing static. Each object has its own damage story and a visible repair, and each flickers in its own way. Power lines and string lights are drawn by hand in the editor.
- Locations. A machine depot cut into a rock ridge on three levels, a dense village, and a gas station with a raider camp (the canopy turns see-through when your car is under it). The starting base moved off hardcoded logic onto the shared pipeline, and it finally feels lived-in.
- Enemies.
- A turret, a bunker with a searchlight and a patrol drone.
- A tank that visibly winds up before each shot.
- A bulldozer with a rocket pod: it marks the impact zone on the ground and rams with its blade.
- And since weāre talking bombs, an actual road mine. When itās armed, the only giveaways are an antenna and dug-up sand. Once it triggers, you have 1.7 s by day and 0.9 s at night to get away.
- The world reacts. When shooting starts, villagers run into houses or crouch with their hands over their heads. The car drives over small debris, guardrails fold under it, and it slides off rocks instead of stopping dead.
- The agent checks its own work. It has around 170 regression tests, FPS measurements along the route by day and by night, and A/B frame breakdowns by object class. I donāt have to take its word for anything anymore.
Where Iām not sure
Iād like input from people whoāve been doing this longer than I have.
- At night, the buggyās headlights (6 spotlights reaching 50 m) cost about 7 ms. The agent suggested replacing each pair with a single spotlight using a two-beam texture, and I said no. Maybe that was a mistake.
- The most expensive single item in the frame turned out to be asphalt: its shader is the full ground shader with asphalt layered on top.
- Upscaling on Mac: MetalFX Temporal smears in motion, while Spatial is sharper and even faster but leaves thin edges jagged.
- I measure everything on a fanless MacBook Air, but I want to ship on Steam for Windows. What would you pick as the minimum target machine?
And the main question
I canāt decide whatās next. I could keep polishing: water and swamps, visual upgrade levels for base buildings, sound, animations. Or I could expand the world now that the foundation can handle it: new areas, biomes, a family of enemies built on the rover. What would you do?
If youāre interested, I can show in the comments what a single task for the agent looks like, from the brief to the report with measurements.
Previous parts