Background Hum
Go, hold, PIE done
By Saturday night five copies of the agent were working in one open editor, and they had worked out a way of taking turns. None of them could press play while another was mid-script, and nobody could switch the map without asking, so they sent each other messages. Go. Hold. PIE done. When a request came back "not available" it usually meant that one of the other four had the editor's attention and the call had never run at all, which the agent in charge of the cars learnt by reading the log for its own marker line before trying again.
It was Saturday, so for once James could start things that would not fit in an evening. He started five. An electric car charger for the petrol station, a used-car showroom out past the ring road, a pair of drive-thrus, the controls for driving the cars that were going on the showroom's forecourt, and a way of getting drunk in the pub that would change what you could see.
Claude Code Opus 5 ran all of them. Most of them worked by midnight. The one that did not was the ghost.
That is the argument this entry makes, and it is the British one. GTA 6 is set in a version of Miami. Second Chance has a rapid charger at 79p a kilowatt hour, a used-car lot called Cutshaw & Shutt with red, white and blue bunting on the lamp posts, and a pint of four per cent bitter that counts as 2.27 units on the way down. Rockstar have a department for each of these. James had a Saturday and a queue of agents asking each other for permission to press play.
Upside down in the bay
The charger came first, and it came from photographs. The agent pulled up pictures of UK rapid charging hubs and the plugs they use, and James named the brand: VOLT RACE, two words, because as one word the name already belongs to a real company that does something with battery records. The agent wrote a charging model before it wrote anything that could be seen. A 350 kW unit, limited by the car to 170, takes a battery from 10 to 80 per cent in 25.6 minutes and costs £33.47 at 79p a kilowatt hour. Those are the numbers on the screen of the charger in the game.
The sound took two goes. The agent generated five effects and picked them by measuring them. The loop it chose for a charge in progress was almost all one whine at 2.93 kHz, 93 per cent of its energy. James listened and asked for the whine to fade into a background hum after the clunk of connecting. The agent split the tone out of the fan noise underneath it and faded one into the other.
Then the parking bays. They are decals, pictures projected down onto the tarmac, and the agent placed them from the building's own rotation plus a quarter turn, which is how the rest of the forecourt had been laid out.

A quarter turn laid all four bays across the spaces instead of along them, and because they overlapped they merged into a single green strip that ran the width of the tarmac. The agent took the quarter turn off and added a half turn, reasoning that the pictures had been facing the wrong way.

They had been facing the right way. Now every car symbol was on its roof. The third capture, with no extra turn at all, was right. On the way there a fourth fault had turned up without anybody looking for it: the decal's projection depth was 40 cm, deep enough to reach up the bollards, and the bottom of every bollard was painted green. It is 6 cm now.

Two clicks from a real fault
The plug is the part a player touches. You lift it off the charger with E, it trails a cable that will not stretch past its length, and you dock it on the car with U. The agent tested all of it in play with scripts, standing a pawn in front of the charger and pressing keys it could not physically press. It started a charge from 30 per cent. It stopped it at 73: 24.9 kWh, £20.68, and the bank balance went from £500 to £479.32. It started it again and let the timer finish the job, and the charger announced it had reached 100 per cent.
Then it pressed E on the plug while the car was still charging. The charger said, correctly, stop the charge first. And the player's hand was now holding something.
The code that picks things up fills the hand first and asks the object second. An object that says no has to empty the hand itself, and the plug did not. The log showed an item with no mesh, which is to say an item nobody could see, sitting in the hand of a player who would have had no idea why they could not pick anything else up. The fix took three nodes, and it is now a rule for every object in the game that can say no.

Cut and shut
The showroom had its name before it had a site. A cut and shut is two written-off cars welded into one and sold as something better, and Cutshaw & Shutt reads as exactly that without being a phrase anybody owns. The agent had checked the trade mark register first and found nothing close. A name with nicked in it had already been turned down as too obvious.
The plot everybody had assumed it would go on was taken. James kept it for the drive-thrus. So the showroom went on new ground outside the ring road, east of a roundabout, with the land cut flat for it and a drive off the main road. By half ten at night the forecourt had its bunting, its three Union flags and its twelve cars. Before the night was out there were twelve parody posters for the sales-floor walls as well, each one aimed at the kind of buyer a particular car deserves.

The drive-thru pair, a burger place called Burger Boss and a Jamaican takeaway called Jerk Hut, sharing one building with a lane round the back, had cost more. James had looked at the older takeaways on the hot-food row and said not to match them. Do better with this one. The agent built the building in Blender, and James signed it off from a preview sheet.
Ninety-six gigabytes
The import script created forty material instances, copies of a few base materials with the colours and textures changed. It set each value with a separate call. With the whole town loaded, every one of those calls made the editor rebuild how it draws everything in the world, and about 150 of them took the editor to 96 GB and over. It was the shared editor. It crashed.
The script now refuses to run unless the editor is on an empty map, and it skips any value that is already right. On the empty map it ran clean. It went on to place the building, and it did not place anything the first time, because the setting that switched it from a practice run to a real one was a variable the tool threw away between calls. It reported success. The agent had to read what was actually on disk before it saw that nothing had changed. The setting is an environment variable now, and it is set back to practice afterwards.

There are no Jamaican food models in the store James buys from, so the agent built a jerk box, a patty and a plate of plantain from photographs, entirely out of maths, in about 80 seconds. The first set is on the list for Sunday. The patty is beige where it should be turmeric yellow, and the lid of the polystyrene box floats above the base like it has been cut off.
Five miles an hour at a time
James's spec for driving was short. W raises the speed in five-mile-an-hour steps and the car keeps going on its own. S takes it down again, and holding S is the brake. It is cruise control, deliberately, because in first person with a mouse the thing you want to be doing with your hands is looking and steering, not holding a key down. A and D park the car for you.
The agent built it as sixty-three functions and one tick, and counted the nodes in each after saving it. One of them was empty that should not have been. The function that made the lamps switchable, so an indicator could blink and a brake light could come on, returned the result of a call that has to run at a point in time, written straight into a return by the tool that writes the graphs. At compile the call was quietly cut out, and warned about it 118 times. No lamp on any car would ever have lit. The agent moved the call out of the return and the warnings went to zero.
The lamps turned up one more. Two of the twelve cars, the G Whip and the Alderman, had never had tail lamps. The strip that should have held them was set by two numbers that cancelled out: on one car it was zero centimetres tall, and on the other it was upside down. It was there in every render of those two cars, round the back. The model builder now refuses a lamp strip under 6 cm.
The smoke test ran at about 23.45, by script. It opened the driver's door, got in, pressed cruise up twice, and the car drove 229 cm along its heading with the wheels turning. A wall check stopped it 2.4 m short of the car opposite. Reverse backed it out 7.6 m. Getting out put the player 1.9 m away on the right-hand side, which is the driver's side, which in this country it is.
Nobody's hand was on a key for any of that. James driving it with the keys is next.
Two point two seven units
The pub has a ghost, a Victorian landlord who is very nearly transparent. James wanted him to be easier to see the more the player drank, and for the picture to go wavy after a pint or so and blurry when they were properly gone, fading off over a few hours.
There was no drink stat. There had been one on a list for weeks. The agent did not put it on the game instance, where a compile has taken the editor down before, and it did not splice it into the player. It built a separate controller that watches the glass: if the same glass is still in the hand and there is less in it, the difference goes into the stomach, and from the stomach into the blood over about eight minutes of game time. A pint of four per cent is 2.27 units. The body clears 2.5 an hour. Four pints takes about three and a half hours to wear off, and because the clock runs at real time, sleeping it off works.

James did not want a drink meter on the screen. He wanted the walk to go, and it does: past about four pints, walking forward pulls the player a few degrees to one side or the other every couple of seconds, and they have to keep correcting. He tried it and kept it.
Its first version compiled clean and did nothing. The call it used to find which way the player was facing had resolved to a different function with the same name, fed a null, and returned a heading of zero every time. Only reading the graph back showed it.
The ghost is the part that failed. The blur that makes the world swim is applied after the ghost is drawn, and at the strength a very drunk player sees, it smears a figure at 15 per cent opacity into nothing. The more you drink, the more he disappears. The fix is written. It moves the ghost ahead of the blur. It ran out of Saturday.
The fault
Decal lays across the parking bays, renders upside down, and paints the bollards green in Unreal Engine 5.8
Four parking-bay decals placed with yaw = building yaw + 90 lay across the bays and merged into one strip. Yaw + 180 put every bay upside down. A DecalSize depth of 40 projected up the bollard bases and turned them green. No error at any stage; each was only visible in a capture.
The fix
Pitch -90, the shell's own yaw, DecalSize as half-extents, depth 6
Rotation pitch -90 and yaw = shell yaw + 0. DecalSize is HALF-extents: (6, 230, 110) gives a 460 x 220 cm bay. Depth 6 stops the projection climbing street furniture.
Guard: capture a decal from above before placing more than one. Three captures found three faults.
The fault
Unreal Engine 5.8 editor runs out of memory importing material instances with a large World Partition level loaded
About 150 material instance parameter setters with the full open-world map loaded took the editor to 96 GB committed and crashed it. Each setter re-creates render state for the whole loaded world.
The fix
Run material-instance imports on an empty map
The import script now refuses unless the editor is on a blank map, and skips any setter whose value already matches. The same run on the blank map finished clean.
Also: a Python flag set as a global did not survive between tool calls, so the "real" placement run silently dry-ran and reported success. Flags are environment variables now, set back afterwards, and the result is checked on disk.
The fault
"Exec pin is not connected": impure Blueprint call inside a return node is pruned at compile
A helper written with the project's graph DSL returned (CreateDynamicMaterialInstance ...) directly. The compiler cut the impure call out and raised 118 warnings; no brake, indicator or interior lamp on any car could ever have lit. It compiled, saved and passed a node count.
The fix
Create the dynamic material instances inline, as Sets in the exec chain
The helper was removed and the instances are made in sequence where they are used. Warnings went from 118 to 0.
Guard: anything with an exec pin goes on the exec chain and stores its result; a return node only returns a value already made.
The fault
A refused pick-up leaves an invisible item in the player's hand
Pressing E on a charging plug correctly refused, but the pawn's take verb had already filled the hand before asking the object. The hand held a world item with no mesh, and nothing else could be picked up.
The fix
The refusing object clears the hand itself
The plug's charging branch now calls a clear-hand step after its message. Checked in play: E on a charging plug says "Stop the charge first" and the hand is empty.
Guard: every interactable that can refuse a take must clear the hand on the refusal path.
The kit
| Tool | Why this one |
|---|---|
| Five agent sessions on one editor | five threads in a day, with play-testing handed round by message |
| Claude in Chrome | UK charger, plug and Jamaican takeaway references in minutes |
| Blender, headless | the drive-thrus and the food props built from scripts |
| ElevenLabs sound effects | the charger sounds, then chosen by measuring the frequencies |
| A scripted play test | drove, stopped, reversed and charged without a hand on the keyboard |
| James watching | the whine, the walk, the ghost |
Plain English
| Term | What it means |
|---|---|
| decal | An image projected onto whatever surface is underneath - a puddle, a road marking, graffiti, a stain. |
| material instance | A copy of a material with some settings changed. Cheap to make and cheap to render, so most surfaces are instances rather than originals. |
| World Partition | Unreal's system for very large maps. It chops the world into a grid and only loads the squares near the player. |
| OOM | Running out of memory, at which point the program stops. |
| impure node | A Blueprint node with an execution wire through it, so it runs at one moment in a sequence - spawning, saving, creating something. The opposite of a pure node, and it only runs if the execution wire actually reaches it. |
| dynamic material instance | A material instance made while the game is running, so its settings can change live - a brake light brightening, an indicator blinking. Each object that needs its own lit state needs its own. |
| smoke test | A quick first run to see whether the main path works at all before anything finer is checked. Named after switching a new circuit on and watching for smoke. |
| dry run | Running a script in a mode that reports what it would do without changing anything. Safe, and easy to leave switched on by mistake. |
| post process volume | A box in the level that changes how the final image looks inside it - exposure, colour, contrast. |
| 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. |
| translucent | A material the engine blends over whatever is behind it instead of drawing solid. How glass, water and ghosts are done; how bright it looks depends on what is behind it as much as on itself. |
Things we still need to fix tomorrow:
- Move the ghost ahead of the drunk blur so the drunker player sees more of him, not less.
- James drives a car with the keys: W, S, the parking assist, the indicators.
- A dashboard for speed, cruise and charge instead of a debug line.
- Try a charge with less money in the bank than it costs.
- Jerk Hut food, second go: turmeric patty, a lid that hinges, plantain that sits down.
- The showroom navmesh is next, then the Cutshaw lot on film.