Second Chance GazetteDevlogToken Use

Editor Yours

unreal-engineworld-partitionpiemetahumananimationvehiclesbusestaxiskimodomemorypagefiled3d12crashnightclubcrime-loopclaude-codegta-vi

One editor, a queue of agents

James restarted everything at nine on Wednesday morning, which made him late for work. He had time owed, so it did not matter, and by the time he sat down at his desk in the job that pays for all this, the machine at home had already been handed to someone else.

Most of the work on Second Chance now goes through Claude Code's Projects feature, still in beta: a coordinator that holds the plan and several Claude Code Opus 5.5 agents working the threads under it - buses, ambulance, shops, the nightclub bar, the gym. From James's chair that is one thing, so here it is the agent. The threads run in parallel. The editor does not. There is one copy of Unreal Engine 5.8 on one PC with 64 GB of memory and an 8 GB graphics card.

So they queue. A thread finishes its offline work, asks the coordinator for a slot, and waits until a message comes back that reads, in full, EDITOR YOURS. Then it opens a fresh editor, loads the town, does its job, closes without saving anything it did not mean to, and reports RELEASED. Loading the map took eleven minutes every time on Wednesday.

He would come home to a stack of slot reports. Several had stopped early because the PC ran out of memory, one had crashed outright, and the most useful result of the day was a photograph of a cab driver with his head through the roof of his cab.

Parked off the map

The first slot belonged to the shop stills: stand two residents inside each of twenty venues - the barber's, the snooker hall, the bookies, the chippy, the police cell - and photograph them for the website.

The run before had come back with twenty empty rooms. This one started the same way. Every venue logged that it could find no cast at all. The agent's staging script had placed the four extras well off the edge of the world, a hundred and fifty thousand units out in each direction and ten metres down, so they would be out of the way until each venue called for them. In the editor they were there. In Play In Editor they did not exist.

The town is a World Partition map: it is cut into squares and only the squares near the player load. A spot a kilometre and a half off the edge is near nothing, so an actor standing on it is never created. Nothing errors.

The fix was one property, set on each of the four in the editor world before pressing play, which tells the engine to keep that actor loaded wherever it is. After that, the barber's filled up.

A brightly lit barber's with white tiles and red barber chairs: a barber cuts the hair of a man in an orange top while a woman in a hijab and a man in a white shirt stand by the glass door.
The barber's with the extras finally in it: a resident barber at work in the chair and the staged pair by the door. Before the fix this room was empty in every frame.

A second Play session in the same editor took free memory below a gigabyte, so the agent restarted in a fresh one, which found the next layer down. Venues were found by a word in their label, and the butcher's word matched a navigation link 270 metres long. The chippy's matched a foundation, so all six chippy frames came out near-black in an unlit back room under a stair. Seven pictures were kept out of twenty venues.

A dim snooker hall with a row of lit tables under hanging light boxes, bar stools in the foreground and two players at a table at the back.
The Baulk Line, the snooker hall, with two residents playing at the back. One of seven frames kept from twenty venues.

The driver is somebody

The longest thread of the day was a sentence James had typed on Tuesday afternoon: the taxi drivers and bus drivers need to be in their vehicles if they are working.

In Second Chance the person driving the number 4 bus is one of the town's residents, with a house, a shift pattern and a break for his snap. When the shift starts he is meant to be at the wheel; when it ends, off at the kerb and away to eat. Until Wednesday a driver at work simply had no body, and Phil, the original driver, sat in for everybody.

A taxi in most open-world games has a driver because it has a taxi. James wanted the cabbie in Radworth to be a man who lives on the estate, so the player who gets in the back on Thursday might recognise him from the queue at the corner shop on Monday. GTA VI will ship with more of almost everything else. Rockstar have a department for this. He had a Wednesday.

The buses worked first time. In the third slot both of them took a resident at the wheel ten seconds after the session started - Sukhvinder Gill on one, Scott Hickling on the other - each sitting exactly where Phil used to sit, with Phil hidden.

Inside the cab of a bus: a grey-bearded man with his hair tied up in a bun sits at the wheel in a grey jacket, hands on the steering wheel, terraced houses through the side window.
Sukhvinder Gill, one of the town's residents, driving a route 4 bus on his shift. The bus half of the job worked on the first try.

The cabs took the rest of the day.

In the second slot the cab driver's body landed several metres underneath his seat, which from the street looks like a taxi with nobody in it.

Looking down over the white roof of a taxi along a dusky terraced street, a pedestrian in the distance; nobody can be seen in the driver's seat.
A Gopher Cabs taxi on its round with no visible driver. His body was under the road.

In the third slot he was in the right place and sitting in the wrong shape. The agent reported that the body was attached at the correct seat position and that the sitting animation was playing. Both claims were true. The animation was playing at normal speed, and its position read 0.0 every time it was checked, so it never moved off its first frame - which in that particular clip is a man standing up. The pelvis was 151 cm above the floor of the cab where it should have been 45, his head was at 218, and the cab roof stops at about 149.

A white Gopher Cabs taxi on a terraced street: the driver's head and shoulders stick up through the car's roof beside the roof sign.
A resident cabbie in the right seat and the wrong shape. The animation was reported as playing; it never left its first frame.

The agent reverted all ten cabs and went back offline. Its next theory was half right. The sitting clip was a copy of Jackie's, and the copy's root track - the bone the whole skeleton hangs off - was lifted about 72 cm, so even a working sit would sit 72 cm up. It moved the seat down from 61.8 to -14.2 in the cab's own coordinates.

The fourth slot found the other half. A body more than 45 metres from the player had its animation switched off to save frame time, freezing it in whatever pose it had. The town's frame-rate throttle was doing to a seated cabbie exactly what it was built to do to a pedestrian. A setting added the day before keeps seated bodies ticking, and the slot proved it.

By the fifth slot, about eight in the evening, the pelvis was at 42.8 to 44.7 cm against a target of 44.7. The feet were 15 to 25 cm below the bottom of the car. From the pavement that does not show, because every cab window renders solid black and the driver cannot be seen at all. The agent reverted the cabs again: its rule said feet below the car is a fail.

James replied at nine minutes past eight that the drivers should be able to see their boots, and that their feet should be where they could work the pedals. He told it to generate new clips if it needed to, steering left and right included. Within the hour five sentences had gone into NVIDIA's Kimodo, the text-to-motion model behind the project's NPC animation: idle at the wheel, steer left, steer right, brake, and wait at a rank checking a phone. The brake came back with the right thigh barely moving and was generated again.

In the second slot both buses also sat for five minutes behind a taxi that had gone out of service and parked in the lane thirteen metres ahead. Neither bus was built to go round it.

An aerial view of a terraced street with a church spire behind: two purple and white buses follow each other along the road under a bright cloudy sky.
Two route 4 buses following each other through the terraces, earlier in the run. A few minutes later both were stuck behind a parked taxi.

Out of memory

Every thread on Wednesday hit the same wall, and the ambulance thread hit it hardest.

The job was stills of the crash rescue. The editor sat at 46.7 GB with the town loaded, and one high-quality screenshot cost about 10 GB more. After the first, free memory was 0.4 GB and the brief's stop line said no. One frame taken, none kept.

That frame is worth a look, because it is the second fault. Before the shot, the agent ran its framing check - is the patient in the camera's view? - and the check said ok. The picture shows the side of a house and a strip of grass.

A red-brick house wall with two blue doors and a strip of grass in front, at dusk. There is nobody in the frame.
The frame the check passed: "patient in shot, ok". He was lying below the line of the grass, behind the camera's idea of where he was.

The check had asked whether the patient's collision capsule was inside the camera's cone. A man lying flat at the edge of a kerb can be in the cone and hidden behind the ground in front of him. The agent rewrote the check to trace from the camera to his head and his pelvis instead, so a hidden body is dropped rather than photographed, and added a gate before every shot that refuses to take it with less than 6 GB of memory or 12 GB of headroom left.

Windows can promise programs the memory plus the pagefile, and that total was 128 GB. A second 64 GB pagefile set up on the D drive was not being used: D is an external USB drive, and Windows does not put a pagefile on one at boot. The agent wrote James a note with a suggestion - grow the C drive's pagefile to 96 GB instead - and stopped there, because it is his machine. At five to four he chose no restart, and to shoot carefully.

At 17:36 Windows logged that it was out of virtual memory. Two minutes later the fourth bus slot crashed, 34 seconds after it had told the engine to load every texture in view at full resolution for a still. The error named the graphics card. It was out of video memory, and the PC was out of everything else at the same moment, with the town's editor sitting at around 80 GB. The resumed slot took its stills without that setting and did not crash.

Late orders

The evening brought new work rather than less of it.

At 18:41 James started the next phase of the crime path: Liam, a new shopkeeper at Green Boss, the grow shop. The survey found lights, speakers and a sign, and no shelves, counter or till. The plan is 26 products, from nutrients and pH down to tents, carbon filters and dehumidifiers, with the big kit delivered to the player's cellar at six. Liam is wary of newcomers, because a newcomer asking about seeds could be undercover police. A banter tree of 220 lines decides whether he warms to you. Get enough answers right, show you know what you are on about with a plant, and once his trust reaches 20 out of 30 he will sell you five seeds for £30. It is written and checked offline; none of it has been in the game yet.

At 19:21 he asked for proper drinks behind the Sweatbox's bar, a bartender who serves the residents and the player, a soda gun and a cocktail shaker. The C++ went to the build queue that evening. At twenty to nine he set the gym's membership: 40 residents, nobody over 60.

A nightclub bar: a long dark counter with a pink neon edge, shelves of lit bottles behind it under a brick wall, and a barmaid in an orange top standing behind the counter.
The back bar at the Sweatbox, stocked. The barmaid serving from it was the night's last job.

The bar's first test slot started at half ten and found the club empty. Jess, the bartender, had been brought into the world and then removed again by the citizen director, because the player was standing 66.7 metres away at the spawn point and the director does not keep people that far out. The second slot found six bodies standing in a tight grid five metres from the bar, not moving. The third, at twenty-five past one on Thursday morning, put the player at the counter. Pick a drink, pay, and the units went up.

It was Thursday by then. He had work at nine.

The fault

Actors placed far outside the map never appear in PIE in a World Partition level (Unreal Engine 5.8)

Four NPC extras were parked at (-150000, -150000, -1000) until needed. In the editor they existed; in PIE every venue logged "no SGC_Cast actors", two runs in a row. They were spatially loaded actors in a cell nowhere near the player, so it never streamed in. No warning.

Second trap, same run: venues found by a label word matched the wrong actor - a 270 m nav link, a foundation in a dark back room.

The fix

Keep staged actors always loaded, and match venues on the shop mesh

Set is_spatially_loaded to False on each staged actor in the editor world before pressing play. All five then appeared in PIE.

The guard: the property now goes into the staging function, straight after the label is set. Venue lookup should key on the shop's own mesh.

The fault

Seated NPC's head pokes through the car roof; sit animation stuck at position 0.0 (UE 5.8, MetaHuman attached to a vehicle)

Single-node sit clip "playing" at rate 1, position 0.0. Pelvis 151 cm cab-local (target 44.7), head 218 against a roof at about 149. Two causes: the copied clip's root track was lifted about 72 cm, and the frame-rate throttle turned off mesh ticking beyond 45 m, freezing the clip on its first (standing) frame. After both fixes the feet sit 15-25 cm below the car's underside: open.

The fix

Lower the seat by the root lift, keep seated bodies ticking, check the evaluated pelvis

Seat offset 61.8 to -14.2 cab-local. TownLife.Throttle.SeatedNeverGlide 1 keeps a seated mesh ticking at any distance. Pelvis now 42.8-44.7 cm.

The guard: the seat check compares the evaluated pelvis with the target (15 cm tolerance). "The clip is playing" is not evidence the body is posed.

The fault

PIE crash: "D3D12Util.cpp:815 Out of video memory" after r.Streaming.FullyLoadUsedTextures 1 (UE 5.8, 64 GB RAM, 8 GB card)

34 s after r.Streaming.FullyLoadUsedTextures 1 at scalability 2 for a still, PIE died creating a heap for a 4096² texture. Two minutes earlier Windows logged "Out of Virtual Memory"; the editor sat at about 80 GB private against a 128 GB commit limit. A second pagefile on D: was never used, because D: is a USB drive.

The fix

Leave FullyLoadUsedTextures at 0 and gate every shot on memory (mitigation)

The resumed slot shot at scalability 2 without it and did not crash. A gate before each shot needs free RAM above 6 GB and commit headroom above 12 GB, with a hard stop under 8 GB. The framing check now traces to the head and pelvis bones, because a capsule inside the camera cone can be hidden behind the ground (staged; the next slot is its first run). Growing the C: pagefile is James's call.

The kit

ToolWhy this one
Claude Code Projects (beta)a coordinator handing one editor between parallel threads, one slot at a time
Unreal Engine 5.8World Partition streaming and the seat attachment are where both faults lived
NVIDIA Kimodofive one-sentence prompts for cab-driving clips; the brake was generated twice

Plain English

TermWhat it means
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
always loadedA setting that keeps an object in memory for the whole game instead of loading and unloading it with its patch of the map.
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.
editor worldPressing play makes a fresh copy of the level to play in; a change made to the editor's own copy while the game runs does not reach the copy being played.
single-node animationA 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.
root motionThe movement baked into an animation clip itself, stored on the skeleton's top bone. A walk clip can carry the forward travel, a turn clip the rotation. The game either lets the clip move the character, or strips it out and moves the character some other way - and if the two disagree, the feet slide.
tickCode that runs every single frame. Cheap once, ruinous sixty times a second across a thousand actors.
console variableA named engine setting that can be changed while the game runs, by typing it into the console, or fixed in a config file.
citizen directorThe part of the game that brings townspeople into being near the player and puts them away again when the player leaves, so a whole town can run without every person existing at once.
pagefileThe 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.
D3D12The Windows graphics system Unreal uses to talk to the graphics card. Its errors usually mean the card or its memory has run out of room for something.
VRAMMemory on the graphics card. This project has 8 GB of it, and that ceiling shapes most of the decisions in the devlog.
KimodoAn open model from NVIDIA that turns a written description of a movement - 'walks with his hands in his hoodie pouch' - into a skeleton animation, which can then be put on a character.
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
scalability settingsThe engine's quality dials - shadows, textures, effects, anti-aliasing - each of which can be set independently. Turning one up can cost far more than turning the rest up together.

Things we still need to fix tomorrow:

  • Cab drivers: retarget the Kimodo clips, then put the feet on the pedals and back inside the car.
  • Cab glass that can be seen through, so a seated cabbie can be photographed from the street.
  • An out-of-service taxi must not park in a bus lane, or the bus must learn to pass it.
  • The bar: NPC customers at the counter, then stills of a cocktail being shaken.
  • Green Boss: shelves, a counter, a till and Liam behind it.
  • The police cell still, and the eleven shops not reached.
  • The pagefile decision.

← All devlog entries

Watch it get built. All of this goes up on YouTube as it happens - broken animations, buildings hovering a foot off the ground, the lot.

Subscribe on YouTube