Cut and Fill
A Thursday
It was a Thursday, so James was at work, and the town carried on being built without him.
By now that is the normal shape of a weekday. There is one copy of Unreal Engine 5.8 on the machine at home and one graphics card with 8 GB on it, and there were several sessions of the agent - Claude Code Opus 5.5 - each holding its own part of the town and taking turns at the editor. A session takes the editor, builds its piece, tests it, saves only its own files and passes it on. Across Thursday the editor changed hands again and again. The editor itself was restarted at least four times along the way, usually because it had crept past 45 GB of memory, and once because it had crashed while a test was being stopped. The crash came from the snooker table, which was not part of the day's work.
James's part was the rulings. They came in a line or two at a time, through the day and late into the night, and most of them were about what something looked like.
Rockstar have a building full of people who check what things look like. He had a phone and snap time.
The dog that was being dragged
The first ruling of the morning was about Liz's clothes. Liz is the neighbour who walks her German Shepherd every morning, and she had been wearing garments made in-house that had never quite sat right. James said to dress her in clothes he had already bought on Fab and adjust them to fit. She came out in an olive knit jumper, charcoal cargos and dark trainers. He kept her keys, and asked for them to jangle when she walks. In the first test they jangled 71 times while the player was near her and went quiet when she moved away. The test counted them.
Two things showed up in the new clothes. Her toes poked through the front of her trainers as she walked, because the foot inside a rigid shoe still bends. The agent removed the parts of her body below 5 cm, which the shoes cover anyway, and the toes stopped coming through. Then James said the jumper looked raised above her shoulders. The agent froze her mid-step and took the jumper off to check, and her bare shoulders rose just as steeply. It was the walk, not the jumper. The shared walking clip lifts the collarbones to within 5.5 cm of the neck, and her old parka had hidden it for weeks. A copy of the walk just for her, with the shoulders dropped a few degrees, is his call and is waiting for it.
The message that mattered came in the afternoon. "The dog's legs are not animating when it walks, it's just sliding like it is being dragged on the lead."
He was right, and the cause was one word. The dog is animated the cheap way: one clip at a time, played straight on the mesh, with no animation blueprint choosing between them. To change clip, its Blueprint called SetAnimation. In that mode SetAnimation puts the new clip on the mesh and leaves it paused on its first frame. So the first clip of the day played, and every clip after it - walk, run, sit, bark - held still while the script moved the dog along the pavement. Liz had had exactly the same bug four days earlier and had been fixed with PlayAnimation. The dog's panting worked the whole time, because the panting was the one thing that used it.
The fix was one call added to the end of the dog's clip switch: if the clip changed, play it, looping. The agent compiled the dog, re-ran the setup script that a compile wipes, and tested it on the street. Every check came back playing, with the clip moving forward.

The first frames from that test were all of the dog barking at the camera. It barks at anything within 8.5 metres that counts as a person, and the agent's camera counted. The camera went back to the far kerb.
A hole in the ground
There is a cave network under the fields north of town, and it is entered down a shaft with a ladder in it. The ladder had never worked. The shaft was open to look down and closed to climb down, because the ground itself still ran across the top of it. In August a session had tried the usual way of cutting a hole in Unreal's terrain, a special hole material, and it crashed the editor three times running. After that, everybody left it alone, and a fake sky disc and a black plate were placed at the top of the shaft to hide the problem.
On Thursday evening the agent tried the method Epic now prefer. The material that colours the ground got a visibility mask node wired into its opacity mask, and its blend mode was left at Opaque. Then the editor was restarted fresh, the level loaded once, and the hole painted with the Visibility brush: brush size 125, one click, looking straight down on the well-head. No crash. The hole came out about 3 metres across, inside the stone collar, so from the surface nothing changed. With the well-head hidden, the cave rock showed through.

It also made a second hole that nobody wanted. To make sure keystrokes went to the editor, the agent clicked in the viewport, and the Visibility brush was still armed. A click there is a paint stroke, so the click punched a hole in the field about 7 metres from the well. Undo took it back and a fresh look from above showed only the one hole. From then on, the rule is to switch to Selection mode before clicking anywhere in the viewport, and to click the editor's title bar to bring it to the front. The landscape tool also opens on Sculpt with a brush 605 wide, so a stray click there would have raised a hill.
James looked at it and said it was right. Later he said to take the fake pieces out, and they went: the black plate, the sky disc, and the light that faked daylight coming down. Looking down the hatch now shows the real shaft and the real ladder, and a patch of green at the far edge where the hole's outline is ragged. "The hole looks fine," he said. It stays as it is. Climbing down it in a play test is next.
The estate on the hill
The biggest job of the day was the one with the least to look at: shaping a hill.
Bewsall is the new estate in the north-west of the map. It hangs off a roundabout on the A-roads, its street layout is modelled on a real estate, and its houses are being built from James's photographs. That is the thing GTA 6 cannot copy. A Rockstar city is a very good idea of a place. This is a place, measured. The estate's ground is not flat, though, and houses do not sit on a slope by themselves. So before anything is built, the ground has to be reshaped: cut down here, filled in there, so the roads climb no steeper than one in ten.

The agent had already carved one version of the ground. It had passed its own check: every road at 10 per cent or less. It also had cliffs up to 13 metres high in the middle of 28 of the roads. The check had measured the road's planned height profile, not the ground the carving actually produced, and in one corner the carving had refused to cut because the cave network runs underneath. So the plan said one thing and the ground said another, and only the plan was ever asked. A new check now measures the finished ground every 10 metres along every road, and it runs after every carve. Version four went in clean, kept clear of the caves and nowhere near the rail tunnel.
Then all 357 of the estate's roads were painted onto it in four batches. None failed. That brought up the next fault. Where two roads met, the joins had steps in them, 30 to 90 cm high in most places, which a car would hit like a kerb. The agent put two options to him. James chose to level the junctions. Clamping the ground flat after the fact turned out to be impossible on a hill that climbs 10 per cent with junctions 30 metres apart. So the flat bits went into the shaping itself: within 8 metres of any junction, the road may climb only 4 per cent. In the agent's simulation, the median step dropped from 26 cm to 12. That cost 32 per cent more earth moved, and 104 more homes' worth of plots ruled too steep to build on. The new version was carved at twenty to eleven at night.
The junction pads it measured afterwards told a different story: a median of 34.5 cm. The agent's own note says that measurement counts the kerb lines where a pavement crosses a road, so it is not the same number. Looking at a few of the junctions is the next step, before anybody chases it.
James asked for two of the road names to be redone as innuendo. One of them is now Fondleton Vale Road. Five test buildings went up on Market Street just before midnight, square to the road and level with their pads, apart from one that sits side-on and looks odd.
Class 10
At about ten at night James sent a new brief, and it jumped the queue. "Make it as realistic as possible." It was for autograss: British grassroots racing round a mud oval, the sort that happens in a farmer's field on a Sunday. Real cars first, with mock liveries. NPCs racing so the player can stand at the fence and watch. Later, the player joins in and races for prizes. Realistic animation and sound.
The track was already under way. Its earthworks had been carved that evening, and its mud material was being made when the brief arrived. He picked the class within twenty minutes: Class 10 specials, the purpose-built buggies with bike or V8 engines, the fastest and loudest class there is. Eight cars, one class, a full grid.
The cars came from a script in Blender, run without opening Blender, checked against the real 2026 rulebook. The generator refuses to build a car that breaks one of the rules it checks: overall length, wheelbase, roof height, the size of the number panels. The sponsors are businesses that already exist in the town, and the drivers are made up. He looked at the contact sheet and said they looked good.

They went into Unreal at half eleven. All 8 cars, 9 parts each, every part the size the manifest said. The text on the liveries read the right way round on both sides, which is the first thing that goes wrong with mirrored panels. The black tyres came out white in the first capture. That was the test level being badly over-exposed by other sessions' lights, not the tyres.
The engines took the rest of the night and stayed outside the engine. The agent took ten recordings from Freesound, all under licences that allow it - a Hayabusa under load, a Chevrolet V8, a V6 coasting down. It followed one harmonic through each recording and time-stretched each slice to a steady pitch, then cut them into loops that repeat without a click, one per band of rpm. A one-minute test file, heard from the start-finish fence, has eight cars passing with Doppler, gear-change cuts and gravel. A race simulation run outside the engine laps the oval in 22 to 23 seconds, at 68 mph on the straights. James's verdict on the engine noise is the next thing in that queue. The agent's own note says the V8 is thin.
Elsewhere, the joint of meat you can win at the bingo now goes off if it is left out for four hours. Put it back in the fridge and C says "That's gone off. Bin it." The oven had been saying "Cooked to a turn. Smells lovely" all along, but the pick-up message replaced it in the same frame, so it never reached the screen. And one session spent the evening on the dark country round Oakhaven. More on that another time.
The fault
Unreal Engine 5.8 NPC slides along without animating after SetAnimation in single-node mode
A skeletal mesh animated in single-node mode (AnimationSingleNode, no animation blueprint) played its first clip, then every clip switched in by SetAnimation held its first frame while a script moved the actor. The result looked like a dog being dragged along on its lead. A sound and clip triggered elsewhere with PlayAnimation worked, which hid the pattern.
Cause: SetAnimation assigns the asset and does not start playback.
The fix
Start playback after the switch
At the end of the clip switch: Branch on "clip changed", then call Play(bLooping = true) on the mesh, or use PlayAnimation(asset, bLooping) in place of SetAnimation. Compiling resets the class defaults here, so re-run the setup script afterwards.
The guard: in a play test, read IsPlaying and the playback position twice, and check that the position has moved. Do not trust a still frame of a walking animal.
The fault
Clicking the viewport with a landscape Visibility brush armed punches a stray hole
With Landscape mode on the Visibility tool, a single click to focus the viewport painted a hole about 7 m from the intended one. The legacy hole material route had crashed the editor three times in this project.
The fix
LandscapeVisibilityMask on the landscape master, then paint once
Wire a LandscapeVisibilityMask node into Opacity Mask on the landscape's master material (blend mode left Opaque here, and the hole still cut). Restart the editor, load the level once, wait for the edit layers to merge, then paint with the Visibility tool. Collision is cut per quad, so walk the edge in a play test.
The guard: Shift+1 (Selection mode) before any viewport click, and focus the editor by its title bar. Undo reverts a stray stroke.
The fault
Road gradient check passes but the carved terrain has 13 m cliffs inside the roads
A terrain-shaping pass reported every road at 10 % or less. The carved ground had cliffs of up to 13 m in 28 roads, because the check read the designed road profile and the carve had declined to cut over a protected zone.
The fix
Check the finished ground, and put the junction plateau in the fit
Measure the final ground on 10 m chords along every road after each carve. For steps where roads meet, limit the grade within a radius of each junction inside the fit itself (4 % within 8 m here). Clamping afterwards is infeasible on a 10 % hill.
The kit
| Tool | Why this one |
|---|---|
| Unreal Engine 5.8, driven through the unreal-mcp and Monolith MCP servers | every build and play test, several sessions sharing one editor |
| Blender, run headless | Liz's refit, the estate's retaining walls and all eight buggies |
| Fab | the clothes Liz now wears, already owned |
| Freesound | the ten engine recordings, licence checked per file |
| Python with numpy and scipy, outside the engine | the earthworks, the race simulation and the engine loops |
Plain English
| Term | What it means |
|---|---|
| PIE | "Play In Editor" - pressing play inside the editor to test the game without building it first. Fast, and it behaves subtly differently from the real build. |
| Blueprint | Unreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it. |
| skeletal mesh | A 3D model with a skeleton inside it, so it can bend and animate. People and animals are skeletal meshes. |
| single-node animation | A cheap way of animating a character by playing one clip at a time straight on the mesh, with no animation blueprint deciding between them; easy to set up, and easy to leave paused. |
| landscape | Unreal's ground system - the sculpted, painted terrain the town sits on. |
| visibility mask | A node in the ground's material that lets you paint parts of the terrain invisible and walk-through, which is how Unreal cuts a hole in a landscape for a cave mouth or a tunnel. |
| material | The recipe describing how a surface looks: colour, roughness, shininess, transparency. |
| cut and fill | Reshaping ground for building: cut the high bits down, fill the low bits in, ideally so the two roughly balance. |
| autograss | British grassroots motor racing on an oval of grass or mud, usually in a farmer's field, with classes running from stripped-out hatchbacks to purpose-built buggies. |
| Fab | Epic's marketplace for ready-made game assets - models, materials, characters, clothing. Buying a garment and refitting it is how almost everyone in this game got dressed. |
| MCP server | A bridge that lets an AI agent drive another program directly. Here, two of them let the agent operate the Unreal editor. |
| handover | A running notes file for one strand of the work, written so the next session, human or AI, can pick it up cold and know what is done, what is not and what will bite. |
Things we still need to fix tomorrow:
- Liz's own copy of the walk with the shoulders dropped, once James picks it.
- Climbing down the cave ladder in a play test.
- Look at a dozen Bewsall junctions in the viewport before chasing the 34.5 cm figure.
- James's ears on the autograss engines, then a high-revving V8 recording.
- The mud track into the level, then eight cars racing round it.
- The meat in the fridge and the oven surviving a save and load.