Second Chance GazetteDevlogToken Use

Last Known

unreal-engineaichasegrowburglarynavmeshpiemetahumanroadmenhotelkimodoanimationd3d12crashclaude-codegta-vi

Four goes at a chase

By twenty past three on Tuesday afternoon a lad called Kian could chase a burglar out of 23 Brickyard Close, lose him round a corner, run to the last place he had seen him, catch him, take the bag back and walk home. It took four test runs to get there, one every ninety minutes, and each run passed the thing the last one had failed and found something new underneath it.

It was a Tuesday, which meant college and the gym at lunch. The agent - Claude Code Opus 5.5, running as several sessions at once with one coordinating session handing out the single copy of the editor - worked through the day, and James steered it from his phone between other things. His first message was at five to eight, approving a build. His last of the afternoon was at twenty-four minutes past five, about a tablecloth.

In between, ten staged builds of the town's C++ went green, the roadmen got socks, and the hotel staff had their photographs taken.

The house was found. Nobody moved.

The first slot opened at quarter to eleven. The day before, the break-in had never started because it thought the house was the size of a drawing pin. The agent loaded the town - ten minutes, nearly 38,000 actors, about 45 gigabytes - and the first log line was the one it wanted: house resolved.

Most of the mission passed in the next half hour. The agent cleared the loft, seven grabs on the drying lines, each adding 12 to the stash: 0, 12, 24, up to 84. At a full bag the sprint dropped from 540 to 330 the frame after it was set. A neighbour's 999 call brought the police, who found the grow. Depending on how the theft came out, the gang blamed either him or Bleachfield, their rivals.

Then the chase. The agent told all three lads to come for him. They went to Chasing, every one of them, and stood still. Velocity nought. Jayden stood on his own home marker for twenty-five seconds and then the state timed out to Cooldown. Same again with the player two and a half metres from him.

There were two reasons, and the agent found the first quickly. At half eleven at night on a weekday the crew walk home, and once they are home and out of view the town takes their bodies away to save memory - a resident more than twelve metres from the camera with nowhere to be does not need a body. The mission had nobody to alert. The second was worse. The mission held each lad by his roster key, but the town's movement code only accepts orders for a resident it can identify by number, and for every lad the number had come back as minus one. The chase was sending orders to nobody.

Rev 5 fixed the identity lookup - try the body, then the pawn, then the roster - and was built by ten past twelve.

Kebabylon

The second slot started at twenty-five to one and its first test run was useless. Every resident with a body was standing still, all 35 of them. The agent checked whether the ground was walkable and found that it was not: the runtime navigation map was empty. After a level loads, the walkable-ground tiles build in the background, and that build took 607 seconds. A test run started in the first ten minutes has a town of people with nowhere they can walk. The agent waited for the log line that says the build has finished and started again. That wait is now a step in the runbook.

The second run was the first time a lad saw the burglar on his own. The player stood in the back yard with a bag, nobody told anyone anything, and Kian came round on his snack run, spotted him and went to Chasing. He ran at 600, the speed set for a chase, and the distance went from 29 metres to 34, then 21, then 18.

He was running to the kebab shop.

Night, seen from low on the grass behind a terrace: a man in a black hoodie, gloves and white trainers runs away from the camera along a kerb towards a street lamp, with a starry sky above.
Kian at full chase speed, heading for Kebabylon. The player is behind the camera.

His move order was still the one from his day. The roster had him at Kebabylon at 23:25 for a snack run, and something kept sending him there. The mission did catch the player, twice, because the snack run went past the yard. It looked like a chase if you only read the log.

The agent read the movement log and found the culprit: the code that watches the crew's evening routine notices when a lad has stopped where he should not be and gives him a nudge back to his scheduled spot. A lad standing in a back yard pointing at a burglar was, to that code, a lad who had stalled. The fix was one rule. When something with a higher claim - a threat to life, in the town's priority order - owns a resident, the routine leaves him alone. Built by twenty to two.

Caught every ten seconds

Third slot, five to two. The navigation map took 100 seconds this time. The agent forced the day to Thursday with a new console command, because Thursday is when the crew are on the pavement at 23:00, and called the alert.

A third of a second later Kian's move goal was the player. He ran 21 metres in, closed to two and a half - and stopped. The player stood a metre above the walkable ground, the nearest walkable point was 2.4 metres from him, and the catch radius was 1.5. Kian waited there until he gave up.

On flat ground from twelve metres he got there. Caught. Thirty-six bags taken back, stock to nought, a 24-hour limp, blame on the player. The camera dropped to 42 centimetres below where his eyes would be and stayed there, looking up.

The view from the ground at night: a man in a dark hoodie, gloves and work trousers stands over the camera, lit orange by a street lamp on a telegraph pole to the right.
The view from the floor of the back lane after Kian has caught him.

Nine seconds later he caught him again. Then again. Every ten seconds, for as long as the run went on - the knock-down ended, Kian was still stood there, he could still see the player, so he was back in Chasing in the same frame he left Cooldown, and the catch fired again with nothing left to take.

The other fault: when Kian lost sight of the player he ran for the last place he had seen him, which was 46 metres away, back towards his own corner. It had never been set.

Rev 7 gave a caught player two minutes of grace and took the crew off the hunt for twelve game hours. The last-seen point is now set on every sighting. After four seconds without sight the chaser slows to a 260 jog and goes to look. The catch became flat distance with a height limit - 2.6 metres - so standing on a step no longer counts as escape.

A paramedic in Kai's clothes

Fourth slot, quarter to three. One catch, then 177 seconds of nothing while the player stood nine metres from Kian in full view. Kian walked back to his corner. Then the player hid round a corner after being spotted: Kian ran to the spot seven metres away where he had last seen him, not to his own corner, found him and caught him. Two of the three faults were fixed.

The slow-down to a jog could not be checked: the run was going at two frames a second, because every script call from the agent stops the game thread.

And three new faults. After the first catch the town sent a paramedic for the player on the ground. It did not have a paramedic body handy and borrowed one, and the one it borrowed was dressed as Kai. Kai's own character was 210 metres away at the club with no body. The mission saw a lad who looked like Kai, decided it was Kai, and on the next alert this paramedic chased the player down and caught him. A second lad, pinned in place for the test, fell through the world - his height went from minus 32 metres to minus 201. And after every catch the lad ran home at full sprint, because nobody had told him the chase was over.

Rev 8 was written by quarter to four: a lad is matched by his resident number, and any body tagged as a stand-in is ignored; the speed resets when the chase ends. And walking more than two metres from a door you are picking now ends the pick.

Rockstar have a floor of testers for this. He had four slots on a college day, and the tester was the same thing that wrote the code.

What this mission argues, against GTA VI and anything built like it, is the small thing at the end. When Kian catches you there is no cut scene and no mission-failed card. The camera is on the floor of the back lane. Then you get up, a day's limp, no bag, and the crew think it was you.

Socks

The roadmen had a quieter day. At ten past ten James said he was happy with the ski-mask colour as it was, which closed one question. The other was ankles: between the bottom of the trackies and the trainers, every lad was showing bare skin. James wanted socks - white on some, black on others.

A real sock model on each lad would have been two or three hours and clipping at the shoe line, so the agent painted them on: a mask on the body's texture layout from the sole of the foot to twenty centimetres up, and the body material tints the skin under it to sock colour, flat and a bit rough, with no pores. All eight MetaHuman bodies share the same layout, so one mask serves all of them.

The same slot put a small white chest mark on seven of the eight - all parodies: Nicked, Abadass, Iron Armour, Pumpa, Filthy, Smellies and Burger House. Jordan has none. Under Kai's and Dion's joggers the rib comes all the way down to the shoe, so their black socks barely show. They have socks anyway.

Eight young men in grey tracksuits standing in a row in arms-out poses on a blue editor grid, each with a small white chest logo; some wear white socks and trainers, others dark shoes.
All eight in a row with chest marks and socks. Kian and Jayden show white at the ankle; Kai and Dion's joggers come down to the shoe.

The next slot, in the town at night, got three of its stills and then the editor died at nineteen past four, mid-test. Too many residency sets. It reads like a graphics card fault. It was not: the crash report had 0.85 GB of physical memory left out of 64, the editor alone at nearly 50 after one load of the town and a test run. The agent relaunched with the texture quality down and the streaming pool capped, and it did not happen again.

At night behind red-brick houses, four men in black balaclavas, hoodies and gloves stand on grass; the nearest wears a black hoodie with a small white mountain logo reading Burger House.
Cian outside the back of the Burger House parody, the mark readable on his chest.
Three men in black balaclavas and black tracksuits stand on a concrete pad at dusk below a grassy bank, small white logos on their chests and white socks above white trainers.
Dusk at the skate park, white socks showing.

Eye lines

The hotel got the evening. Twenty-two new clips had come out of NVIDIA's Kimodo in the late morning - you write a movement in a sentence and get the animation - a receptionist at her desk, a bellboy with a trolley, security walking a guest out. Four were on the MetaHuman skeleton by the evening.

At twenty to five the agent had the editor, the hotel and the staff, and spent an hour posing them for photographs with James sending notes from his phone.

The first frames came back with every head floating a few centimetres above its neck. A MetaHuman face is a separate mesh with its own animation that copies the body's pose every tick, and the editor does not tick it outside a running game. The body was posed; the face stayed where it started. One call per character tells the face to follow the body directly.

Then James saw the waiter looking over the guest's head. Most idle clips hold the head up, one by about sixteen degrees, so every member of staff looked past the person in front of them. At eighteen minutes past five he said so. The agent read the head angle from the animation data, frame by frame, across the idle clips, and posed people on the frames where they look level, or down. The Kimodo security guard's watching idle is one of the level ones.

The tablecloths, he said, looked like stone tiles. The linen material was shared with a window and some shelving, so the agent gave the tables their own. At twenty-four past five James called the restaurant frame a very good shot, and at twenty-seven past the kitchen.

A hotel restaurant with green patterned walls and round tables in white cloths: a seated guest in a blue shirt looks up at a white-haired head waiter in a waistcoat, with a waitress in a bow tie.
The restaurant: the head waiter and a waitress, and a guest who is finally looking at them.
A hotel kitchen with red quarry tiles, white wall tiles and steel shelving of pans: a man in a black waistcoat and a man in a white jumper talk across a steel prep table.
The kitchen: the chef and the kitchen porter. The chef's whites are next; he is in stand-in clothes.

Nine frames were kept, everyone in borrowed clothes until the uniforms are built.

A hotel bar with a white marble counter: a barman in a waistcoat and bow tie looks down at a woman with a black bob standing at the bar, her hand on her hip.
The ballroom bar. The barman's eye line is the one that started it.

The tokens ran out in the evening. James played it himself. In the morning he restarted the lot at nine and was late for work, on time he was owed anyway.

The fault

NPC enters chase state and runs at full speed in the wrong direction (UE 5.8, AI MoveTo overridden by schedule)

State goes to Chasing, speed goes to the run speed (600), and the path is moving - but GetImmediateMoveDestination is the resident's scheduled block (a snack run to the kebab shop), not the player. Catches happen only when the schedule route passes the player. Earlier: Chasing with velocity 0, because the resident id was -1.

The fix

Higher claims silence the routine; resolve the id first

  • Resolve each gang member's resident id from the body, the pawn, then the roster key, retried every rescan. ⚠ The roster key is not the resident number (R100140 is resident 76).
  • The routine watcher's stall nudge, and the block mover, skip any resident whose arbiter claim is above Errand. Log line on success: left alone: a claim above Errand.
  • Verified: 0.3 s after the alert the goal is the player and the lad closes 21 m to 2.5 m.

The fault

Player caught again every ten seconds after a catch (state machine Cooldown flips back to Chasing in the same frame)

After the catch the chaser goes Cooldown, still has line of sight, so goes Chasing in the same tick; the catch fires again with nothing to take, repeatedly, and other gang members get pulled from 359 m away.

The fix

Grace after a catch; seed the last-known point on every sighting

120 real seconds of grace (also while knocked down) and the hunt off for 12 game hours. Last-known point written on every sighting and on an alert. After 4 s unseen, a 260 jog to it. Catch test made 2D with a height limit (radius 260, |dZ| < 200), because a player 1 m above the navmesh left the chaser stopped 2.4 m short of a 1.5 m radius. Verified: one catch, then 177 s quiet in plain sight; lost-sight goal 7 m from the player.

The fault

Stand-in body wearing a gang member's look is counted as him

A director stand-in (a Paramedic, borrowing that member's data asset) is bound as the member because binding matched the body Blueprint, and makes a catch while the real character is 210 m away with no body.

The fix

Match on resident number, ignore stand-ins (staged)

Bind only when the body's resident id equals the member's, reject pawns tagged TownLife.StandIn and ids below -1, recheck every rescan. Staged as rev 8; the next test run checks it.

The fault

Runtime navmesh empty in PIE right after load_level: every NPC idle, project_point_to_navigation returns None

After a big World Partition level loads in the editor, the navigation tiles build in the background. A PIE started inside that window has an empty navmesh. Here it took 607 s the first time and 87-100 s on later loads.

The fix

Wait for the build line

Before PIE, wait for ProcessTileTasksAndGetUpdatedTiles build time: in the log and check a few projections in the editor world.

The fault

MetaHuman head floats off the body when posing in the editor without PIE

The face mesh's AnimBP copies the body pose only when ticked, and the editor viewport does not tick it.

The fix

Leader pose

Call set_leader_pose_component(Body) on the Face component after posing. Re-posing a posed actor does not refresh either: respawn it. Bone reads are stale until a frame renders.

The fault

PIE crash: "D3D12Util.cpp:1062 pSet->Open() failed - Too many residency sets"

Looks like a GPU fault. The crash context showed 0.85 GB physical memory available, about 50 GB used: system RAM exhausted by the editor after one large level load plus PIE.

The fix

Cut the memory (mitigation, one repeat-free run)

Texture quality 0 and r.Streaming.PoolSize 1500 before the load, short PIE, one level load per editor process. No repeat after relaunch.

The kit

  • Claude Code: parallel sessions, one coordinator handing out the editor in slots, C++ staged offline.
  • Monolith MCP for PIE and editor Python, plus a probe printing the chaser's move goal, distance, speed and claim. The probe is what showed the wrong-way run.
  • NVIDIA Kimodo for the hotel clips, paused during every test run.

Plain English

TermWhat 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.
navmeshAn invisible map of walkable ground that characters use to work out routes. No navmesh, no walking.
arbiter claimA note the town's code puts on a resident saying which system is in charge of him right now and how urgently - a chase outranks his daily errands, so his routine is meant to leave him alone.
roster blockOne slot in a resident's written-out week - where he should be from 23:25 to 23:45, say - which the town's code keeps steering him back to.
director stand-inA body the town borrows from another character's look when it needs an extra person in a hurry, such as a paramedic; it looks like someone it is not.
leader poseTelling one part of a character, such as the face, to copy the body's pose directly instead of working it out for itself.
residency setGraphics-driver bookkeeping for which memory the card can use; in this crash the message names the graphics card but the real cause was the PC running out of ordinary memory.
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.
retargetingTaking an animation made for one character and making it work on a differently proportioned one.
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
AnimBPThe logic deciding which animation a character plays and how one blends into the next.

Things we still need to fix tomorrow:

  • Build rev 8 and test it: no catch by a stand-in, the lad walks home after a catch, a lock pick stops when you walk off.
  • The 260 search jog, at a frame rate where it can be seen.
  • The pinned body falling through the world.
  • Cash taken in the catch - the test needs a way to give the player money.
  • Grow-house stills with the lads in frame.
  • Uniforms for the hotel staff, then the luggage trolley for Felix.
  • The other 18 hotel Kimodo clips onto the MetaHuman skeleton.
  • The remaining roadmen GIFs, and Cian actually pointing.

← 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