Second Chance GazetteDevlogToken Use

Root Lock

unreal-enginemetahumanfabanimationroot-lockretargetingpubnpchlodlevel-streamingsunsetbustrafficfirst-person

A regular at the Slag & Slurry

Edward drinks in the Slag & Slurry. He is one of the regulars: he goes to the bar, buys a pint, carries it back to his table, sits down and works his way through it, a sip at a time, on the real clock. Nobody asks him to. You can walk in at any hour he is there and that is what he will be doing, the same way the man at the end of the bar in any pub in any Midlands town is doing it.

At about eight on Thursday morning James was in a play test and noticed two things about him. The pint was at a slant, and the bottom of it was going through the table. And Edward's feet were through the floor. While he was looking, he decided something else as well: Edward's clothes, which had been made by hand in Blender earlier in the project, were going to be replaced with proper ones from Fab, the marketplace where the project buys its clothing. He picked them himself. A plaid shirt, jeans, grey trainers.

It would take the whole of Thursday and most of Thursday night, and by the end the pint was the easy part. The agent, Claude Code Opus 5.5, would find four separate faults in the way one man drinks one pint, and every one of them had been there for weeks.

GTA 6 is set in a version of Florida. Second Chance is set in a Midlands town, and on Thursday the population that mattered was one old man and a pint.

The wrong shoes, then the right ones

The clothes came first, because the feet depended on them. Fab clothing is made for a standard body, and Edward is not one: he is shorter and heavier and his feet are about four centimetres longer than the body the trainers were cut for. The agent fitted the three garments to him offline, in Blender, before anything went near the editor. The first fit of the shirt flipped 55 triangles inside out at the armpit, because the body the shirt was made for was up to eleven and a half centimetres away from Edward's in places, so it did a rough stretch of the whole shirt onto him first and then the fine fit. That brought the flips to zero.

James looked at the renders at a quarter to nine and said they looked good, except that his toes were poking through. They were. The tips of Edward's own feet were outside the end of the trainers. The agent removed everything of his body below the top of the shoes and made him a pair of dark grey socks out of the skin it had just removed, so they bend exactly as his ankles do. By ten the clothes were built in the editor and on him.

In the pub, the trainers came out 2.3 centimetres into the carpet. The new soles were thicker than the old ones and reached further below his feet. The agent lifted his whole body by two and a half centimetres, so everything riding on it went up with it, and the next play test measured the gap between the sole and the floor at two millimetres.

James asked whether he had the tiptoe problem the bin crew had had, where the animations borrowed from a library came in with the feet pointing down. He did. Fifteen of Edward's 25 animations were flagged by an old audit, both sitting loops among them, his toes a couple of centimetres under the floor at every pub table he had ever sat at. The agent re-ran them through the retargeting one clip at a time, which is James's rule for this kind of job, and checked each one before the next. Eight of them, the ones he actually uses.

Into his right eye

The pint was supposed to be the quick one. It was not.

James had asked for the glass to be upright and said he thought Samantha's was right. Samantha is the singer in the pub, and her glass stands straight in her hand because her fingers were fitted to its shape when her animations were made. The agent copied her method and put Edward's grip on. By about eight in the evening the edit was written and saved, and the play test went in.

Edward picked up his pint, raised it, and poured it into his right eye.

A high view into a pub corner with patterned blue and gold wallpaper. An older bald man in a plaid shirt sits on a wooden chair at a round table and raises an upright pint glass to his mouth. Beer mats and a menu stand on the table.
Edward on the fixed clip, raising an upright pint to his mouth. The first version had the rim four centimetres from his right eye.

That was the first of three things James reported while the same test was running. The second was that Edward was not leaning back against his chair. He was sitting into it, his hips some way behind the backrest, the chair round him like a ghost's. The third, a few minutes later: "his drink does not seem to be going down."

They were three different faults.

The eye was the animation. It was a stock drinking clip, and at the moment of the swallow the rim of the glass was 4.2 centimetres from his right eye and 7.3 from his lip. No grip in his fingers could fix that, because the hand itself was in the wrong place. The agent made a new clip from the old one, frame for frame, with only the upper arm swung round at the shoulder for the frames where the glass is tipped, by the smallest turn that put the rim against his top lip. At most it swung twelve degrees. At the swallow, in play, the rim was 2.8 centimetres from his lip and nearly eight below his eye.

The chair was a single setting. The drinking clip had root lock switched on, which holds the base point of the character in place while it plays. That would be fine for most clips. This one had been made to sit him on a seat by moving that base point, and the setting pinned it back to where it started, so his hips ended up 33.6 centimetres back, eight centimetres behind the backrest, on every sip. The agent switched it off. His hips went back to the same place as when he is sitting doing nothing.

The full glass was the graph. Every sip took a tenth off a number called Fill on Edward, ten sips to empty, and nothing ever told the glass. The pint on the table was a separate object with its own five levels, from full down to the dregs, and nobody had wired one to the other. Now every sip sets the glass to match. Then the agent found that when he finished, the empty pint stayed in his slanted hand, because the code that puts it down did not run in the state he goes into after the last mouthful. It does now, and the empty sits upright on its beer mat.

It was nearly nine. Every one of those was checked in a play test that evening.

Sixty degrees on the way back from the bar

There was a fourth. During the same test the agent had seen the pint swinging while Edward carried it back from the bar, from upright to sixty degrees over and back again, and had written it down and not touched it, because nobody had asked. James asked at half nine: "fix the pint tilting when he carries it back."

The walk back from the bar had been using an animation borrowed from the gardener, and it was also the worst case of the feet sliding in the whole pub. Edward already had his own carrying animation, made weeks earlier for exactly this, with his wrist set so the glass stays upright: in the agent's checks it never leaned more than about a degree and a half. It had never been plugged in. The agent plugged it in, slowed to his pace, and measured it offline at an average lean of under a degree, against nearly eighty for the old one.

The play test at five to ten hung the editor for four minutes and it had to be killed and restarted. Loading the town for play crashed the shared editor three times that night.

James had one more request, about the silver chain Edward has always worn. It was hanging through the new shirt rather than over it. The chain had been built to sit under the old hoodie's collar and only ever had a front half. The agent did not just lift it out, which would have left both ends hanging in mid-air on his chest. It slid every link along a new path of the same length, close round the collar, and tucked the two ends under the collar flap. James saw the before and after and said it looked fine.

A grey untextured render of a man's chest in a pale button shirt, with a silver link chain hanging low across the front of the shirt, its ends stopping in mid-air.
The chain before the fix, hanging low through the shirt with its ends stopping on his chest.
The same render with the chain re-routed to sit close round the collar, its ends tucked under the shirt collar.
The chain after, close round the collar with both ends tucked under the flap.

The chain and the carry are built and saved. Seeing both in the pub is next.

The sun behind the mosque

In the middle of all this, James had asked for something with nothing to do with Edward. A set of frames of the sun going down behind the church had done well on X, and he wanted the same for other buildings in town: sun behind the building, at several points of the sunset.

The agent took nine keepers across the morning. The mosque with the sun above the minaret, then on the dome, then behind it, then the afterglow. The station. A terrace of red-brick houses on Kimberton Road, with chimney stacks against an orange sky and a factory chimney far off. At ten to twelve James asked for more, later, with the sun right on the horizon and the colour changing, and four more came back by twenty past.

A mosque with a dome and a minaret beside a row of brick terraced houses at sunset. The sun sits low between the roofs and a church tower, under gold clouds.
The mosque at sunset, the sun dropping into the terrace roofs between the minaret and the church tower.
A dusk skyline of terraced houses and chimney stacks in silhouette against an orange band of sky, with a large tree on the left and a dark field in front.
The Kimberton Road terrace at dusk. Chimney stacks against the last of the orange.

It is a very British picture and nobody built it to be one. A minaret, a church tower, a terrace, chimney pots. That is a Midlands skyline, and in Second Chance it is the town you walk round.

Twice the agent's camera ended up inside a building. Once, framing the pub, the shot came back as the inside of a house with a street sign showing. Once, framing the terrace, as a lit shop interior with empty display cabinets. Both times the agent traced from the camera in six directions, found nothing blocking, and reported two buildings with no collision. It suggested that might be a real bug: a building the player could walk through.

James asked it to check. By quarter to six it had. It was wrong both times. The first camera had been standing outside the house with its back against the wall, looking across the street, and the house blocks the player as it should. The second was not a building at all. It was the stand-in: the low, simple version of a building that the engine draws at a distance until the real one has loaded. In that test the real pawnbroker's and charity shop had never loaded, and the camera had walked into the shell. Once loaded, both have full collision.

A daylight street view of two low, flat-coloured box buildings with crude shopfronts across a road: simplified distant stand-ins rather than the real buildings.
The stand-ins the camera had walked into: flat, simplified boxes drawn while the real pawnbroker and charity shop had not yet loaded.

The shots cost the editor too. After one high-quality pass it was holding 63 gigabytes, with a fifth of a gigabyte of real memory left, and drawing a frame every twenty seconds. The agent killed it and started it again.

The bus that drove through the police car

Second Chance opens on the day you are released. A police car comes out of the station and down the road, and that is how the game starts. On Thursday James reported that a bus had driven straight through it.

The bus had been starting every new game standing at its first stop, which is outside the police station. The road there is four and a half metres wide. The bus is just over three metres wide and the police car just over two, so they need five and a quarter between them, and the police car comes out of a side road nine metres off and never gives way. The agent ran the meeting offline for every start time from ten seconds early to eight late. They touched every time.

James was offered three ways out: the bus could wait at the pub, the police car could mount the kerb, or the bus could start somewhere else. He picked the last. The bus now starts a stop further on, outside the chippy, and in the agent's model it gets nowhere near the station road for nine minutes. The opening is over in two. The cost is that the first bus reaches the player's home stop about a quarter of an hour into a new game. Two more changes went in on the same evening: the bus pulls over for an oncoming police car, and a police car that comes up behind a bus at a stop waits or goes round it.

The first attempt to rebuild the bus's logic crashed the editor at quarter past nine. It had run out of memory, not because of the bus. Everything that had reached disk was safe, and the rerun went through clean. All three changes are in, saved and checked offline. Watching them on the road is next.

Rockstar have a traffic department. This was one bus, one police car and the width of a street.

Sixteen birds

The last job of the night started at ten past eleven. James wanted a fresh set of stills of the birds, one each, long-lens, like a nature book. The agent restarted the editor first, waited five minutes for it to answer, and shot sixteen of them.

Three of the bugs it found on the way were in its own camera script, and all three had been silently producing the wrong picture before. A robin came out the size of a blackbird, because setting the scale on an empty actor before it has anything in it does nothing. The water birds' camera had been sitting in the reeds by the bank. And the river is drawn about twenty centimetres above where the engine says it is, so the mallard had been sunk to its head. The swan needed its own depth: at forty per cent under, its neck drowned, and at fifteen it sat on top of the water like a toy.

A white swan swimming on dark river water, its reflection below it, sitting at a natural depth with the body half in the water.
The swan at its own depth, a quarter of it under the water.

The agent flagged one thing for James and did not change it. The robin is orange all over. A real one is brown on top.

The fault

A seated MetaHuman sinks back through the chair while drinking in Unreal Engine 5.8

While seated and playing a drinking clip, the character's hips sat 33.6 cm behind their idle position and 8 cm behind the chair's backrest. The idle sitting clip was correct. The drinking clip had Force Root Lock enabled, and its seat offset was authored on the root track, so the lock pinned the root at zero and undid the offset on every sip.

The fix

Turn off Force Root Lock on seated clips whose seat offset lives on the root

Set force_root_lock to False on the clip, and in the script that builds the clip so a rebuild cannot restore it. Measured in play: the pelvis returned to the idle sitting position, 23 cm in front of the backrest's top rail. The guard: for any seated clip, compare the pelvis position against the seated idle clip before trusting it.

The fault

NPC raises a pint glass to his eye instead of his mouth

At the swallow frame of a stock drinking clip, the glass rim was 4.2 cm from the right eye and 7.3 cm from the lip. Changing the grip offset in the hand could not fix it: the best in-finger grip still left the rim 5 to 7 cm out, because the hand was in the wrong place, not the glass.

The fix

Rotate only the upper arm, only on the tipped frames

A new clip copied from the original key for key, with upperarm_r swung about the shoulder by the minimal rotation putting the rim 3 cm in front of and 1 cm below the upper lip. Applied only on frames where the glass is tipped (its up axis below 0.8 vertical), with 10-frame smoothstep fades in and out. Maximum swing 12.2 degrees. In play: rim 2.8 cm from the lip, 7.9 cm below the eye.

The fault

NPC drinks but the pint glass never empties

The NPC's sip step reduced its own Fill variable from 1 to 0 over ten sips, and nothing passed that to the glass actor, which has five mesh steps of its own. A second fault in the same function: the put-down only ran in the drinking states, so after the last sip the empty glass stayed in his hand.

The fix

Drive the glass from the drinker, and put it down on state entry

After setting Fill, the sip step looks up the drink's mesh for Round(Fill × 4) and pours the glass to match. The state-entry code now drops the glass upright on its coaster when he enters the sitting, after-drink or place states holding a pint. Both checked in play.

The fault

Carried pint swings up to 60 degrees off upright while the NPC walks

The carry-back state played a borrowed gardener's holding-walk clip. The glass, attached to the hand, swung from upright to about 60 degrees over. A purpose-built carry clip with the wrist solved to keep the glass vertical existed and had never been wired in.

The fix

Wire in the purpose-built carry clip at the walking speed's play rate

A duplicate of the carry clip with rate_scale 0.552, which multiplied by the existing walk rate of 1.04 matches his 45 cm/s walking speed to the clip's 78.4 cm/s. Offline tilt: maximum 1.6 degrees, mean 0.8, against 91.2 and 79.4 for the old clip. Built and saved; the play test is next.

The fault

Camera trace finds no collision on a building that blocks the player

A camera placed by script ended up inside a building, and visibility traces from it in six directions all came back clear, suggesting a building with no collision. It was the building's HLOD stand-in. In that play session the real building had not streamed in, and the HLOD shell has no collision.

The fix

Confirm the real actor is loaded before calling a collision bug

Check that the building's own actor is present in the play world before tracing against it, and look at the frame. Once loaded, both buildings read BlockAll with query and physics collision. Nothing was changed.

The fault

A bus drives through the police car at the start of a new game

The bus began each new game standing at its first stop, on a 4.5 m single-track street. The opening's police car turns onto that street 9 m away and never yields. The two need 5.24 m to pass. An offline model of the meeting made contact for every start offset from 10 s early to 8 s late.

The fix

Start the bus one stop further along

The bus's start now uses route stop index 1 instead of 0, with its stop counter, route position and waypoint index set to match. Modelled first approach to the opening's road: 547 s; the opening lasts about two minutes. Also added: the bus gives way to an oncoming police car, and a police car meeting a bus at a stop holds back or overtakes. All saved and compiled; play test next.

The kit

ToolWhy this one
Claude Code Opus 5.5several sessions at once, passing one shared editor between them by message
Blenderthe offline clothing fit, the sock, the chain path and the before-and-after renders
Monolith MCPPython in the editor, Blueprint edits and driving the play tests
An offline model of the bus routeshowed the bus and the police car could not pass, for every start time, before anything changed
Fabthe shirt, jeans and trainers

Plain English

TermWhat it means
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
FabEpic's marketplace for ready-made game assets - models, materials, characters, clothing. Buying a garment and refitting it is how almost everyone in this game got dressed.
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.
root lockAn animation setting that pins the character's base point in place while a clip plays, which is useful until the clip relies on moving that base point to put the character somewhere else, such as onto a seat.
retargetingTaking an animation made for one character and making it work on a differently proportioned one.
play rateHow fast an animation clip is played back; slowing a walk clip without slowing the character makes the feet slide.
foot skateA foot that should be planted on the floor sliding across it instead, because the character is moving at a different speed or angle from the one the animation was made for. Measured as how far a foot travels while it is meant to be still.
socketA named attachment point on a model - a hand for holding a bag, a roof for a light.
skin weightsThe numbers that say how much each bone pulls on each part of a model's surface. Get them wrong and a shoulder collapses when the arm lifts; transfer them from the body underneath and a garment bends the way the body does.
HLODThe same idea applied to whole groups of buildings at once, so a distant part of town is drawn as one cheap lump.
level streamingLoading and unloading parts of the map while the game runs, so the whole world need not be in memory at once.
collision hullThe invisible simplified shape used for bumping into things. It is not the shape you can see, which is why invisible walls happen.
traceFiring 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".
OOMRunning out of memory, at which point the program stops.

Things we still need to fix tomorrow:

  • A play test of Edward carrying his pint back from the bar, and of the chain sitting over his shirt.
  • A play test of the bus: the opening, the police car at the stop, and an oncoming patrol car.
  • The robin's colouring: brown on top, orange only on the face and breast.
  • Edward sits upright rather than leaning back. A real lean needs a new sitting clip.

← 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