Held
The one in the olive T-shirt
The clocks had gone back in the night, so Sunday had an extra hour in it. It went where Sundays go: the gym in the morning, then his parents for the afternoon and the evening, with a playtest video on the phone to show them. The game carried on at home without him. By midnight twenty new people had bodies, a monster had learnt to play Grandmother's Footsteps, and a woman had stood still long enough to be sold something.
At ten to nine James was looking at the bin round on his phone. The agent, Claude Code Opus 5.5, had sent stills of the council lorry from the night before, the crew sat up in the cab, and in one of them a loader was wearing an olive T-shirt and grey trousers. The two either side of him were in council orange.
The man in the nearside seat is Ian, and Ian has two bodies: the one who lives at home and the one who works on the lorry. The work body had the right garments, a council shirt, cargo trousers and boots, but the script that paints them in council colours had been run for Gav, Trev and Wozza and never for him. So he had gone out on the round in the default colours of the clothes as they were bought. The fix was the same script, run once more with his name on it.

James's reply was the bigger job. He did not want Ian dressed correctly. He wanted Ian to get dressed. The crew should put their work clothes on at home before they leave, and after work go home and change back, so that in the evening they are out in their own clothes like everybody else. All of them. And if the player is nearby in the dark, the bedroom light should come on while they change.
So the town's weekly schedule was rebuilt with a change at home at each end of the working day: 25 citizens, 1,844 scheduled beats, checked with no problems. The agent ran it in play at four in the morning on a Wednesday of game time and watched from the street. Ian was at home in his casuals. At 04:54 he put the kit on indoors. At 05:24 he came out of his front door in it and walked to the depot.

Two halves of it did not work. The walk home at five never appeared: his body at the depot was sitting about 62 m under the floor and never came back up for the journey. And the bedroom light did not come on, for Ian or anyone else. Asked directly, the function that lights a bedroom for a change answered no for both houses tested, so it cannot find the house from its address marker, or cannot find a bedroom in it. The next job is reading out the houses the game thinks exist near those two markers.
A fist bump at six in the morning
The editor had been in use since before six. The first job was Simon.
Simon is the supplier on the crime path, the man who pulls up in a car when the player rings him. Until Sunday he got out and stood there. James wanted him to greet the player like he knew him: a fist bump when he arrives, and a pat on the shoulder now and again while they talk. Neither animation existed, so the agent wrote them as sentences and had NVIDIA's Kimodo make them. Kimodo is a text-to-motion model: you describe a movement in words and it generates the animation. It runs here on the processor, so the agent ran it with the editor shut, about eleven minutes for both, picked the best takes by measuring them rather than looking (how far the hand reached forward of the hips, whether it came back to rest, whether the feet drifted), and retargeted the winners onto Simon.

Both worked first time and both reached into thin air. Simon stopped 130 cm from the player, which is a polite distance for a conversation and too far for a fist bump. At 95 cm both hands land. In play he got out of the car, bumped fists, started the chat three seconds later, patted the player's shoulder every twenty seconds or so, sold him what he came for, and left. The smile is a subtle one. James checked it at 08:46 and said it looks fine.
The customer who would not stop
The street sale was the evening's problem, and it was a better one, because the agent was certain about the fix and wrong.
The crime path's last step, after the grow and the bagging, is selling, and the devlog keeps that part to names, prices and quantities: a resident walks past, the player gets talking, and if it goes well some bags change hands. The chat would open. Then, about four and a half seconds in, before the first line had finished, it would end. The resident never stopped walking. Once she was more than six metres away the chat decided she had gone and closed itself.
At ten to seven the agent had tested a fix by hand. The town's population system has a call that holds a resident in place, and when it was called on her, her speed went from 152 cm a second to nothing. It wrote that up as proven and handed it on. When the fix was built into the sale and run for real, she kept walking at 140.
The town runs its people in two layers. Underneath is a simulation that knows where every resident is meant to be, cheaply, for the whole town at once. On top, near the player, each resident gets a proper body, and that body is walked by its own AI controller. The hold freezes the simulation. It does not touch the body. The hand test's zero had been nothing to do with the hold: she had reached the spot she was walking to and stopped of her own accord. Tested again without the hold, she read zero then too.
So the fix stops the body as well, and lets both go when the chat ends. At 19:55 it ran again with a resident called Agnieszka. She stopped and stayed 2.6 m away through the whole conversation. The player pressed 1. Two bags went, the cash went from nothing to £44, nobody saw it, and she walked on at 140.
The next test is the same sale near a patrol car, where somebody does see it.
Grandmother's Footsteps
The afternoon was the monsters.
There are things out past the edge of the town, on the moors and ridges where the map runs out, and they come from English folklore. James had asked for one new one a day until Halloween, easiest first, and on Sunday the agent posted the timetable: the King's Men that day, then a dog, a rider, a pack and one called Rawhead through the week.
The King's Men come from folklore about a real stone circle whose stones are said to be men turned to stone, and which nobody can count the same way twice. In the game they play the playground game. Every time the player turns round there is one more pale, crusted figure behind, a few metres closer and in a different pose. They are never seen moving. It works at noon as well as at night, which is the point: most of these things need the dark, and this one does not.

Two things went wrong building it, and the first is worth knowing if you write Blueprint logic as text. The agent authors graphs in a compact text format rather than dragging nodes about, and in that format a branch written as if condition, A, B reads, to anybody who has used a programming language, as "do A, otherwise do B". It is not. Both run when the condition is true, and nothing runs when it is false. The figures' logic had been written the natural way, so the false case was running in the true one. The builder now refuses a bare three-part if.
The second was in play. The figures were meant to start well back and creep in each time the player looked away. They crept in before the player had looked at all, and on the first turn one was standing 1.5 m behind. That is a jump scare, which is not what this is. Now they hold at five metres until they have been seen once.

There was also a crash. A graph rebuild with the whole town loaded asked Windows for 60 to 66 GB on a machine with 64, the pagefile ran out, and the editor went with it. Rebuilds happen on an empty map now. And the body these figures use darkens to a point at the shins, because its texture was painted for something that stands in water. On dry turf it looked like the legs had snapped off, so they stand 30 cm into the ground, rising out of it. Those two tweaks came after the play test: built, not yet seen in play.
James saw the stills and liked them.
Ticket to desk 4
The job centre has a ticket machine. Take a number, sit in the rows of blue chairs, and walk up when the screen sends your number to a desk. That is the British queue in its official form, and the residents use it like everybody else.
Somebody in it was sitting in mid-air.

The agent found the cause without the editor. When a resident sits, the game fires a trace straight down to find the floor and puts the seat there. The trace did not ignore the chair. It hit the top of the chair's collision, took that as the floor, and seated him on a chair's worth of air in front of the real one. The waiting seats use the same chair. The fix is written and staged for the next build of the town's systems. It is not compiled yet.
Counting
The rest of the day was counting, done offline from the level's own files while the editor was busy. Two of James's asks: which houses have doors that lock, and which have furniture.
Of the 546 terraced houses, 545 front doors can be picked and all carry their lock data. Only 333 have a back door, so 213 have none, including every house on Popplewick Terrace. The 48 homes on the upmarket estate have 95 outside doors and none of them has lock data on disk: a later pass re-placed all the estate's doors after the lock data was written, and the new doors came without it. The 126 medium semis have no doors at all.
Only 14 terraced homes are furnished, one row of Radworth Road. The other 530 or so have blinds and nets on the glass and nothing behind them. And there was the toilet. Every piece of household furniture is built with its back to the wall except the toilet, which was built the other way round, so every one placed against a wall faces it: all 48 upmarket homes and all 100 Kelsthorpe houses. That was worked out from the code. Looking at one in the editor is next.
Twenty
At 21:13 the first ten new residents went into the town, rigged, dressed and with their weeks written, and the people the town director looks after went from 41 to 51.

The second ten needed James at the desk. A new MetaHuman gets its skeleton and face built on Epic's servers, and the only way to start that here without a crash is from the editor's menu, by hand. At 22:15 he started the first run. It built eight and stopped at a memory guard. At 23:18 he ran the last two. The agent pointed out that three of the men had come out softer round the middle than their builds said. James looked at all ten at 23:37 and said they all look right.
Rockstar have a department for this. He had a Sunday and a phone.
GTA VI is set in a version of Miami. This is a Midlands town, and Sunday was a fair picture of the difference: a council bin crew who get changed at home before the round, a queue with a ticket machine, and a thing on the moor out of a game every British child has played in a school yard.
The gibbet dog is next.
The fault
NPC keeps walking during dialogue in Unreal Engine 5.8 - the resident walks out of the conversation
- A street chat opened, then ended itself about 4.5 s later: the resident kept walking at 140-150 cm/s and the chat closed when she passed its 6 m hearing range.
- Wrong fix: the population subsystem's
SetResidentHeldByTransit. A hand test read 0 speed and it was written up as proven. - Cause: the hold freezes only the town simulation. A resident near the player has a body driven by its own AI controller, which the hold never touches. The hand test's 0 was her arriving; she read 0 without the hold too.
The fix
Stop the body as well, and release both before the chat ends
- Chat start: the hold, then
DisableMovementon the body'sCharacterMovement(only when a body exists). - Chat end: release the hold, then
SetMovementModeMOVE_Walking, BEFORE the chat's live flag goes false. - In play: held at 2.6 m for the whole chat, sale completed, walked on at 140 cm/s.
- Guard: repeat any hand test without the change. A zero speed can be the NPC arriving.
The fault
Seated NPC floats in mid-air in front of the chair in Unreal Engine 5.8
- The seating code finds the floor with a downward trace that does not ignore the chair, so it lands on the chair's collision and seats the NPC in front of it.
The fix
The floor trace ignores the chair (staged, not compiled)
- The patch adds the chair to the trace's ignore list. Staged for the next build of the town plugin; the check is the same desk in play.
- Guard: a downward trace that seats or grounds something must ignore both the seat and the thing being seated.
The fault
Blueprint graph DSL if/else: the else branch runs inside the then branch
- In this project's text format for Blueprint graphs,
(if c A B)runs A and B when c is true, and nothing when it is false. - Separately: a graph rebuild with the open-world map loaded hit 60-66 GB of commit on a 64 GB machine and crashed the editor (pagefile).
The fix
Write the else out, and rebuild on an empty map
(if c A B (else C)): then = {A; B}, else = C. The builder's lint refuses a bare three-partif.%andSetVolumeMultiplierare refused by the DSL: the pose wrap became anif, the heartbeatIsPlaying/Play/Stop.- Guard: graph rebuilds run on a blank map, never the open world.
The fault
Unreal Engine 5.8 Python: an "already exists" guard never matches, so a re-run duplicates every Blueprint function
list_functionsreturnsBlueprintFunctionInfostructs.str(f)on one never equals the function name, so the guard passed every time.
The fix
Compare the name field
str(f.name), in both places. Caught in a dry run before anything was saved twice.
The kit
- Unreal Engine 5.8: the town's population subsystem, AI controllers and CharacterMovement; Blueprints written as text over MCP.
- NVIDIA Kimodo, on the processor with the editor closed, for Simon's two clips, retargeted onto his MetaHuman.
- MetaHuman auto-rig, started from the editor menu by hand.
- Offline Python scans of the level's saved actor files for both audits.
- Claude Code Opus 5.5: a coordinator handing one editor to several threads in turn.
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. |
| AI controller | The invisible driver that moves a computer-controlled character round the world, separate from whatever system decided where it should go. |
| Blueprint | Unreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it. |
| DSL | A compact text format for writing Blueprint logic, so an agent can author graphs as text instead of dragging boxes with a mouse. |
| trace | Firing an invisible line into the world to find out what it hits - used for "what is under this object" and "what is the player looking at". |
| collision | The invisible simplified shape used for bumping into things. It is not the shape you can see, which is why invisible walls happen. |
| text-to-motion | A model that makes a character animation from a written description, such as 'a man throws a dart', instead of from motion capture. |
| retargeting | Taking an animation made for one character and making it work on a differently proportioned one. |
| MetaHuman | Epic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one. |
| auto-rig | The step where Epic's servers build the skeleton and face controls for a new MetaHuman body, so it can be animated. |
| pagefile | The part of the hard drive Windows uses as overflow memory; when a program asks for more than the RAM and the pagefile together can hold, it crashes outright. |
Things we still need to fix tomorrow:
- The bin crew's walk home in kit: Ian's depot body sits 62 m under the depot and never respawns for the trip.
- The bedroom light during the change: find why the house lookup returns nothing.
- The street sale where a patrol car sees it.
- Compile the job centre seat fix and sit someone at desk 4.
- The King's Men's 5 m hold and 30 cm sink, seen in play. Then the gibbet dog.
- Lock data back on the 95 estate doors, 213 terrace back doors, and the Radworth Road door addresses.
- Turn the toilet round, after looking at one in the editor.
- Furniture for about 530 terraced homes.
- The roundabout islands as low grass mounds, shot at a pink sunset.