Party Wall
A river with nothing in it
The bug report was one line from James: the river was actually missing downstream of Radworth. He had floated down it in play. The current had carried him, and he could hear the water the whole way. There was just nothing to look at.
It was worse than he had said. The agent - Claude Code Opus 5.5, about a dozen sessions of it by the end of Sunday - photographed the river from straight above, every few hundred metres down its length. The first reach, from the spring down past Radworth, had water in it. From a culvert under the road bridge onwards, there was a channel, banks, a line of trees on each side and nothing in between. About 2.9 kilometres of river, drawing no water at all.

The reason the player could float down it is the useful part. In Unreal's water system the physics - buoyancy, the current, the query that says how deep the water is at a point - all come from the river's spline, the curve it is built along. That was right. The picture comes from something else: a simplified mesh of the river's outline that the water system keeps for drawing. That mesh still held the default shape a new river gets when it is first created, 50 triangles parked out by the middle of the map. Nobody had told it the river had moved. Every readback the agent could run agreed with every other readback, because none of them looked at the picture.
The first three attempts to make it rebuild did nothing. A refresh call, nudging one point of the spline by a centimetre, nudging the whole river. Still 50 triangles. What worked was changing one of the river's own settings in a way the editor notices - up by one, then straight back - which rebuilds the outline as a side effect. The outline came back at 698 triangles, the right count for the curve, from the bridge to the outfall. By a quarter past three on Sunday morning it was saved.

The script that builds the river now does that nudge itself and prints the triangle count, so the next one gets caught by a number rather than by somebody swimming.
Three hundred and thirty-three back doors
By the morning a different session had put a back door on every terraced house in town. Not one model of a door - a real opening cut into the back wall of each house, so the gardens could be reached from the kitchen. 333 of them, each one checked by pushing a player-sized capsule through the gap and confirming the wall either side still blocked it. The player's own back door opens with U, like the front door, which moved off E to make room.
James had also asked for the doors to go where nothing on the inside was in the way. The agent probed all 546 terrace houses for a clear path from the kitchen. Two were blocked. One of them was the player's, number 6 Radworth Road, where the cooker and the kitchen bin sit across the obvious spot. Its door went on the other side.
The cost turned up an hour later, somewhere nobody was looking. The session building the massage parlour was running the check this project does before saving the navigation data, a full set of path tests on a fresh load. One of those tests goes down the cellar stairs at number 6. It failed. The bottom of the staircase was no longer on the navmesh. Nothing that walks could get from the kitchen to the cellar.
The back-door session was the obvious suspect and it said so, then did a careful comparison of the old and new house models in Blender and reported that the cellar floor was a single untouched polygon. The evidence was against it. Two hours later the parlour session put the old house model back on number 6, in memory only, and rebuilt the navigation. The cellar came back.
The cause was a long way from the door. Cutting the opening had split edges that the back wall shared with about twenty neighbouring faces, and one of those was the cellar floor, a many-sided polygon that quietly gained a few extra points along a straight line. When Unreal turned that polygon into triangles it made a worse job of it, and the navmesh lost a strip of floor about five metres from the cut. The fix was to turn every face that had gained points into triangles in Blender before exporting, so Unreal had nothing to decide. All 333 houses were re-imported at seven minutes past twelve, the cellar test passed, and the navigation was saved four minutes later.
At a distance the simplified far-away copies of the houses still show the old back walls with no doors. That needs a rebuild with the editor closed, and he has to say yes to it first.
The wall between six and eight
The houses either side of the player's had been empty. On Sunday they got people. Shirley lives at number 4 and keeps hens in the back garden. Thomas lives at number 8.
James's instructions were short and very specific. Shirley collects the eggs. Thomas plays loud music late at night, and the player should hear it thumping through his bedroom wall.
The eggs went in first and found the back-door work's other loose end. Every citizen in the town is spawned fresh by a director, and nothing told the spawned body where it lived, so no door anywhere knew whose it was. The agent added a tag at spawn - in effect, Home: 4 Radworth Road - read straight from the citizen's own data. That made every one of the 333 back doors answerable to the people who live behind it. The other half was inside the house. On terraces built the non-mirrored way round, the front room and the kitchen were separate islands of navmesh, and a link had to be put in at numbers 4 and 8 before Shirley could reach her own back door.
In play, with three test eggs in the coop, Shirley left her kitchen just before nine in the evening, the time she gets back from the pub on a weekday, walked out through the back door into the garden, and the eggs went from three to none. She does it at one on a Sunday. The hens lay between seven and eleven, so there is always something to collect.
Thomas's music lives on the first floor of number 8, a little over five metres from the air mattress the player sleeps on next door. It plays the club tracks, and the sound is cut down to everything under 260 Hz, which is roughly what a wall lets through: the bass and the kick drum, no words. A truth table of days and hours came back eight for eight. Lying on the mattress after eleven on a weeknight and listening is next, because an editor in the background plays no sound at all.
GTA 6 will have a whole state to drive around. This has a terraced street where the bloke next door has the bass on at half eleven on a Monday and the woman two doors down goes out to the coop after the pub, and you can hear one and watch the other from your own back step. That is what British means, and it is not a skyline.
His feet were not moving
It was Sunday, which means the gym first and his parents' in the afternoon, so the editor work ran through the morning with James watching it in play when he could and the sessions queueing for their turn.
At the strip club, Knockers, he watched the doorman and the dancer arrive for the evening shift and said three things in quick succession. She was dragging the doorman along on top of her: they had walked in through the door stacked in the same place. The doorman's feet were not moving. He was only sliding, not walking at all.
The agent checked the obvious suspect first, which was the clothes. Every bone in the doorman's outfit followed his body exactly. It was the clip. The in-place walk he had been given moved each foot forward and back by about a centimetre per stride. The feet lifted and put themselves down in the same spot while the body glided forward at walking pace, and nothing in a log will tell you that, because the animation was playing perfectly.
What came out of it is worth more than the fix. The agent built a way to measure how fast a walk clip actually walks: follow whichever foot is on the ground, add up how far it travels backwards over one loop, and divide by the length of the clip. Checked against a clip whose true speed was already known, it came out at 117.2 centimetres a second against 115.8. The doorman got a walk with proper strides, and any walk clip can now be given a true speed to be moved at.
James's third ruling was that the doorman should stand outside the door, not inside. Moving him broke the ejection. Clive, as he is called, now cut straight from the pavement to the player through the front wall of the club, with his feet thirty centimetres under the floor. He goes in through the door now, at floor height.
The dancer got her own lines on James's say-so. Stand too close and she warns you, three rungs, three ways of saying each: a first warning, a last warning, and then she shouts for Clive. Her voice was picked by James from a shortlist. Clive's lines stay as text until he has found one for him. The whole ladder was played through at about ten past one and passed: the warnings, Clive coming in, the drag, the pavement, the bar. Come back after that and Clive knocks you down. That part had been built the day before, and the first version of the punch threw the player 3.8 metres into the road. It lands at 1.35 metres now, followed by a passer-by ringing 999 and a fade to Oakhaven General.

There was also a tree. A street tree had been planted before the club was built round it, and its trunk ran through the floor and the ceiling a couple of metres from the stage. James told the agent to delete it, and it did.
Most of that morning's play testing ran at about one frame a second. The editor was maximised on a 4K screen, the game was drawing every pixel of it, and the tool the agent drives the editor through kept reporting that it was not available. The editor was fine. It was too busy to answer. Dropping the game's render resolution to a quarter fixed it.
Clothes and a dog
On the same street, Liz walks her German shepherd. James watched that too, and said her clothes were not moving with her and the dog was facing sideways.
The dog was a sign. Its body had been turned minus ninety degrees inside its own Blueprint when it wanted plus ninety. The clothes were more interesting. Each of Liz's seven garments had a single level of detail and her body had three, and the component that keeps them in step was letting the body drop to a cheaper level the clothes did not have. The garments then stopped following the skeleton. The fix is to force everything to the top level. It went on the template and then, separately, on the Liz already standing in the street, because the one in the level had kept its own old value. Both fixes are in and saved. Watching her walk the dog is next.
Her front door did not open for her either. Doors on this street notice a person coming only if that person is a pawn, the engine's word for something that can be controlled, and Liz is a simpler kind of object that is not. Her walk now unlocks and opens the door itself on the way out and back.
The rest of Sunday
At the pub the bingo players now stay at their tables until a couple of minutes after the last number, and a non-player's cards go on the nearest table rather than the carpet. Edward sat with his row of cards in front of him and nobody got up for the bar.

Out at the edge of the map, the first eight pieces of wet ground went in: meres and boggy fen, plus a few old mine shafts with stone collars round them. One of the meres had been sited on what the height data called a basin, and the basin turned out to be the river's own carved channel. James looked at the dark one, Grendelsmere, and said it looked fine. The reeds and trees round them can wait.

Late in the evening, the last session of the day dressed the people at the massage parlour. One of the masseurs got a blue T-shirt that James called good enough for now. The receptionist got a desk conversation that only offers you the staff who are actually in the building, and an outfit that came into Unreal at the wrong scale. The outfit came off again. By half eleven she was back in her old one.
Rockstar have a department for each of the things that went wrong on Sunday. He had a Sunday.
The fault
Unreal Engine 5.8 river renders no water, but buoyancy, current and water audio still work
A Water plugin river built from Python drew no water for about 2.9 km. The pawn still floated, the current still carried it, and GetWaterSurfaceInfoAtLocation returned sensible values, because physics is driven by the spline and its spline mesh components. Only rendering reads the water info mesh, and on this water body it still held the factory-default river shape: 50 triangles near the world origin.
These did NOT rebuild it: k2_synchronize_and_broadcast_data_change(), a 1 cm spline point move, an actor move.
The fix
Make a notified property change on the water body component, then save the actor package
Inside a transaction, call modify() on the actor and the component, then set_editor_property("shape_dilation", value + 1) and set it back. The info mesh rebuilt to 698 triangles covering the real course. Check affects_landscape is False first, or the same notify can re-carve the terrain. Save only that actor's package.
The guard: the build script now does the nudge on every water body after building and logs each info mesh's vertex count and extent. Confirm water by a picture, not by a readback.
The fault
Navmesh disappears from a staircase after cutting a doorway into a wall mesh in Blender
A doorway was cut into the back wall of a terraced house mesh with a bisect. About 5 m away, the bottom of the cellar stairs fell off the navmesh and a nav link's lower end projected onto nothing. An offline diff showed the cellar floor still as one polygon, so the mesh looked innocent. An A/B swap of the old mesh, in memory only, brought the navmesh back.
Cause: the bisect split edges shared with about 20 neighbouring faces. The cellar floor n-gon gained collinear vertices and Unreal's triangulation of it changed, losing a strip of walkable floor.
The fix
Triangulate every face that gained vertices before export
In the Blender export script, triangulate (BEAUTY) every face whose vertex count grew during the cut, then export and re-import. The guard: after any mesh change to a building, run the path probes through every nav link in it on a fresh load, and keep the old mesh for an A/B swap.
The fault
MetaHuman NPC slides along the ground instead of walking
The body moved at walking pace and the legs animated, but the feet never travelled. The in-place walk clip moved each foot forward and back by about 1 cm per cycle. Garments were ruled out first: every garment bone followed the body exactly.
The fix
Swap the clip, and measure a clip's true walking speed from its feet
Use a walk clip with real strides (this one runs about -39 to +32 cm per foot). To find the speed to move a glider at: sample the bone chain to each foot in component space, follow whichever foot is lower, sum its backward travel over one loop and divide by the clip length. Against a clip of known speed it read 117.2 cm/s for a true 115.8.
The fault
MetaHuman clothes freeze while the body animates
Seven garments with one LOD each, on a body with three. LOD Sync let the body drop below LOD 0 and the single-LOD garments stopped following it.
The fix
Force LOD 0 on the LOD Sync component, on the Blueprint AND on the placed actor
Set LODSync.ForcedLOD = 0 on the Blueprint template, then check the placed actor: it kept -1 after the template change and needed setting and saving separately. Built and saved, not yet confirmed by eye.
The fault
NPCs cannot open their own front or back doors
Spawned citizens carried no actor tag saying where they lived, so no door recognised its residents. Separately, a door that watches for overlapping pawns ignores an NPC that is a plain actor.
The fix
Tag the citizen with its home at spawn
Add Home:<address> as an actor tag at the end of the citizen's own init, read from its data asset, so the director (and its seeded data) is not recompiled. For non-pawn NPCs, have the walk itself unlock and open the door.
The fault
PIE runs at 1 fps and the MCP server says "not available"
A maximised editor on a 4K screen rendered PIE at about 1 fps, and Monolith calls timed out as unavailable while the editor was alive.
The fix
Drop the PIE render resolution
Run r.ScreenPercentage 25 in the PIE console. Confirm the editor is alive (process list and log) before treating "not available" as a crash.
The kit
| Tool | Why this one |
|---|---|
| Unreal Engine 5.8 | the game, its Water plugin and every PIE test |
| Blender | where the back-door openings were cut, and where the navmesh fault started |
| Claude Code Opus 5.5 | about a dozen sessions sharing one editor by queue |
| unreal-mcp and Monolith | driving the editor and PIE from outside it |
| An A/B mesh swap | settled what an offline mesh diff could not |
| A top-down camera every few hundred metres | the only check that showed the river was empty |
Plain English
| Term | What it means |
|---|---|
| spline | A curved line placed in the level that other things follow - a road, a bus route, a river. |
| water info mesh | A simplified outline of a river or lake that Unreal's water system keeps only for drawing the water; if it is out of date the water can be invisible while swimming and floating in it still work. |
| navmesh | An invisible map of walkable ground that characters use to work out routes. No navmesh, no walking. |
| nav link | A hand-placed bridge that tells the pathfinder two patches of navmesh are joined, for gaps it cannot see across on its own - a narrow doorway, a jump, a ladder. Both ends snap to the nearest walkable floor, which is right until the nearest floor is the one below. |
| n-gon | A flat face of a 3D model with more than four corners; the engine has to cut it into triangles itself, and a small change to its corners can change how it gets cut. |
| triangulate | Cutting the faces of a 3D model into triangles, which is what the game engine draws in the end; doing it yourself before export stops the engine choosing a different cut. |
| MetaHuman | Epic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one. |
| in-place animation | A movement clip where the character's legs move but the body stays on the spot, so the game moves the character along separately; if the speeds do not match, the feet skate or the body slides. |
| LOD | Simpler versions of a model, swapped in as it gets further away. The trick that lets a street hold hundreds of objects. |
| LOD Sync | The part of a character that keeps the body and its clothes at the same level of detail; if a garment has fewer levels than the body, it can stop following the body altogether. |
| actor tag | A short text label attached to an object in the level that other code can search for, such as which house a character lives in. |
| pawn | The thing in the world the player is actually driving - the body the camera is attached to. When the pawn stops responding, nothing the player presses does anything. |
| low-pass filter | A sound effect that cuts out the high notes and keeps the low ones, which is roughly what a wall does to music on the other side of it. |
| 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. |
| MCP | A bridge that lets an AI agent drive another program directly. Here, two of them let the agent operate the Unreal editor. |
| screen percentage | How many of the screen's pixels the game actually draws before stretching the picture to fit; turning it down makes everything softer and much faster. |
| HLOD | The same idea applied to whole groups of buildings at once, so a distant part of town is drawn as one cheap lump. |
Things we still need to fix tomorrow:
- Lying on the player's mattress after eleven and listening to Thomas's music through the wall is next.
- Shirley's back door swinging open as she goes out to the coop needs one quick look.
- Liz's clothes and the dog's heading are fixed and saved; watching them walk is next, along with her door opening on the way out.
- The re-imported back-door houses need their full check re-run, and the far-away house copies need a rebuild to show the doors.
- About 330 other terraces probably need the same kitchen link that numbers 4 and 8 got before their residents can use their back doors.
- The plan for Shirley's eggs is that the player can take one, and that she can catch you at it. Building that is next on the street.
- The dancer's voice and lip sync want hearing in the real game. Clive's voice is James's pick.
- The receptionist's new outfit goes back in at the right size.