Second Chance GazetteDevlogToken Use

Off Duty

unreal-enginemetahumanfabnavmeshnav-linkblueprintmaterialsnpcclaude-codegta-6

Yes run the door script

It was a Tuesday, which meant college, and the gym at lunch if the morning let him. The morning was mostly James's phone. Yes run the door script. Yes please fix both. Abadass not quite centred. Short replies, going back to the Projects feature in Claude Code, where a planner hands the work out to several agents running Opus 5.5 and relays his answers down to whichever one is holding the job. The day before, it had put a hundred-person town simulation into the game. This was the day the people in it had to get out of their houses, get to work, and look like they lived there.

The first job was Baz, who had spent the previous evening stood just inside his own hallway with the front door wide open in front of him.

The agent that worked late on Monday had written it down as a locked door. It was confident about it, and it was wrong. The door had been marked as Baz's home the afternoon before, and a probe of the running game showed it unlocked, opened, and the pathfinder holding a complete route out to the street. Baz had the route. He was not using it.

Dean had the same problem, and stood in exactly the same spot: 28 centimetres one way and 45 the other from the door's hinge, speed zero. That was what gave it away. Both of them live in mirrored houses, where the front door is hung the other way round. When a door opens it swings into the hall and lies along the line of its hinge. The invisible bridges that tell the pathfinder how to get through a doorway had been placed along that same line. In a normal house that is harmless, because the walker arrives from the open side. In a mirrored one, the route led straight into the back of the open door.

Eleven of the citizens' homes are mirrored. The agent moved every one of their door links across to the open side of the doorway, and the garden-gate links to the middle of the gap rather than against the gatepost, 42 small saved changes in all. One house would not take it: number 95 Bestholme Boulevard has no floor under its porch as far as the navmesh is concerned, so the link had to finish 8 centimetres inside the hall instead. A link that ends exactly on the edge of the walkable area never attaches, and the check the agent first used to prove it did - asking for the nearest walkable point within ten centimetres - said yes to a route that only went halfway.

A man in a black hoodie with a small white logo, grey joggers and white trainers walks towards the camera across a wet back plot between red-brick terraces, puddles reflecting the sky.
Baz out of his front door and across the back plot at last, in a black hoodie and grey joggers. Before the fix he spent the evening stood behind his own open door.

In the running game Baz was out of the door and through the gate within about a second, heading for the player's house at a steady walk, and later for Boss Man's. Pete followed half an hour later. Dean went to the chippy.

Pending kill

James's second reply covered two jobs at once, and the first was noise. Every time the player wandered off and the town tidied away the people he could no longer see, the pub filled the log with errors - about 5,900 lines of them in one session, all from one function that checks whether drinkers have strayed from the bar.

The function did check. It checked that the drinker it was looking at was not nothing. A character that has been removed from the world is not nothing; it is a dead reference, and it passes that test happily. And Blueprint does not stop reading a condition halfway, the way most programming languages do, so even where the check would have saved it, the next part of the condition still asked the dead drinker where he was standing.

The fix was one node: a proper validity test in front of the distance checks. The agent's first attempt to add it through the editor bridge produced a node that tested something else entirely - a check on component data, not on characters - whatever it was asked for. The macro version from the engine's standard library was the one that worked. Two drinkers registered, the player walked 160 metres away, both were tidied away while the function polled four times a second, two new ones arrived at the bar on the way back. Nothing in the log.

Twenty boxes to the depot

The second job was Ian. Ian works for the council on the bins, and the new simulation had been sending him to the depot every weekday at twenty-four minutes past five. He was not getting there. The map of walkable ground stopped at the charity shop at the top of town and started again at the depot, with a quarter of a kilometre of road between the two pieces left unmarked.

There was a shorter way across a field, 140 metres of it. The agent drew up the shortcut and threw it out. Instead it laid twenty boxes end to end along the roads themselves, each covering 40 metres of road and a margin either side, so the walkable ground follows the route a man walking to work would actually take. The director's route check went from 80 of 82 routes to all 82.

A man in an orange hi-vis top and trousers walks along the grass verge beside an empty two-lane road under a big cloudy sky, with low buildings on the horizon.
Ian on the verge in his hi-vis at twenty to six in the morning, game time, heading for the depot. The day before, his walk to work ended at the charity shop.

He left home at 05:24 in his hi-vis, walked the whole way without stopping, and arrived next to the bin lorry at 05:38. The margins are generous enough that he walks the verge rather than the road, and where two roads converge he cuts about 50 metres across the grass.

What Baz was wearing

James had a rule about the clothes, and it had been his since the day before: the cast's hand-made outfits from Blender were to be replaced with free garments from Fab, Epic's marketplace, customised so that nobody in Radworth would look like a stock asset. A parametric garment re-fits itself to each character's body when the character is built and hides the skin underneath on its own. The hand-made ones had to be cut person by person in Blender, and it showed.

Nine residents were rebuilt that morning. Five of them wear branded sportswear, because that is what an estate wears on a Tuesday, and every logo is a knock-off drawn fresh for the game - Nicked, Pumpa, Iron Armour, Abadass - never the real mark, one brand per outfit.

A contact sheet of nine characters standing in an A-pose on blue, each labelled with a name and age. Several wear tees, hoodies and long-sleeve tops printed with invented sportswear logos; the rest wear plain shirts, jumpers and jeans.
The nine residents re-dressed. Pete's tee is Nicked, Paul's hoodie is Pumpa, Shirley wears Iron Armour and Jess wears Abadass. Jess's logo started 62 pixels off centre.

James's Abadass not quite centred was about Jess. Her logo was 62 pixels off at 4K. The fix was to place every mark by the centre of its own artwork rather than its corner, and the measured error on all six branded tops came down to about a pixel.

His next message was harder. Three men look the same. He meant Pete, Paul and Charlie, who stood next to each other on the contact sheet with the same build, the same complexion and much the same hair. The shape of a face cannot be changed without re-rigging it, which costs money, and the agent said so and put the question to him. The free half was done there and then: different hair on each, Paul gone copper-ginger with freckles, Charlie's slicked back.

Three men side by side on blue: one with mid-brown hair in a grey tee and jeans, one with copper-ginger hair in a green hoodie and grey joggers, one with slicked-back dark hair in a black shirt, black jeans and black boots.
Pete, Paul and Charlie after the free fix. The face shapes are unchanged; the hair, colouring and freckles are not.

Charlie also had the worst of the clothing faults. His black jeans rendered grey-blue in daylight, and his black shirt showed orange flecks of skin at the chest, because the shirt's open neck left a strip of body uncovered that the automatic skin-hiding did not know about. He went into a different shirt. The jeans were two problems stacked on top of each other, and the second is the one worth knowing about: when the character is built, its Blueprint quietly overrides the first material slot on each garment with the build's own colour. Any recolour put on the garment mesh itself never reaches that slot. A preview can look right - other slots and other levels of detail carry the new colour - while the close-up keeps the old one. The agent wrote a repair that points the override at the dressed colour, and ran it over Baz, Ian, Mo and the nine.

Then the waistbands. On the heavier characters, the top of the trousers poked through the hem of every untucked shirt as dark patches, because each garment is fitted to the body and never to the garment next to it. The agent made a private copy of the trouser material that cuts away everything above the shirt hem. It proved the theory the blunt way first: set the cut so high that it took the whole of the trousers, and the patches went with them.

A before-and-after strip of two men in shirts and jeans. On the left the shirt hems hang loose over the waistband; on the right the hems sit tucked just under it.
Shirts before and after the tuck. Neither garment was wrong against the body; they were wrong against each other.

For the shirts that were meant to be tucked, the same trick failed outright. The Fab shirt ignores the material input that cuts holes in a surface - a constant zero, which should have erased the entire shirt, drew the entire shirt. What did work was moving the surface instead of cutting it: the material now lifts every point below the waistband up to just under it, so the hem folds in. The model is untouched.

The postie's shorts

The afternoon was the people who go to work. Thirteen uniforms went on to thirteen duplicate bodies, because a parametric outfit hides the skin under itself and so every second outfit needs its own body. Rob the GP in a white shirt. Martin the vicar in black with a white collar tab, painted onto the shirt by the same material trick. Michael in butcher's whites. Ray the cabbie in a navy knit. The swap is the same for all of them: the uniform appears when a routine says the wearer is at work, and their own clothes come back when they knock off, checked once a second. Ian is the one proved both ways in the running game so far: hi-vis at 05:42, Pumpa hoodie at 17:24.

The one that needed thought was Errol. A British postie wears shorts in all weathers, and every British player knows it. GTA 6 is set in a version of Florida, where shorts in October prove nothing. In Oakhaven they are the uniform. Rockstar have a department for details like that. This one had James. Errol's stock shorts were far too short and the wrong colour, so the agent stretched them to the knee in the material, added a strip of reflective piping down each side, and put a small mark on his chest. James's instruction was just put Post Office, with the Oakhaven crest beside it. No real company's name or crown appears anywhere on him.

Three views of a bearded postman in a red tee and boots. Before, he wears short blue shorts; after, knee-length black shorts with a small yellow chest mark, and from the side a pale stripe of piping down the leg.
Errol before and after. Knee-length walking shorts and reflective piping, done in the material, not the model.

The shorts' material is built as one bundle of settings rather than separate wires, so the usual way of connecting a new input did nothing at all and said nothing about it. Changing that bundle's layout from a script brought the whole editor down. It went down again when a material was re-parented while a preview character was still drawing with it.

Six workers in an A-pose on blue: a white shirt and dark trousers, a navy patterned blouse, a pale blue shirt, a black shirt with a white clerical collar tab, a grey knit jumper, and a red tee with black shorts and boots.
Six of the thirteen in uniform: a GP, a receptionist, a pharmacist, the vicar with his collar tab, the pawnbroker and Errol.

One rebuild sat for 45 minutes inside a folder delete that had taken two the time before. Another hung forever after eight character builds in one editor session, so the rule became a restart every five. Charlie was built twice, because a call that came back saying the editor bridge was not available had in fact been queued, and ran later. Each agent in the chain handed over to the next with a written note when it ran out of room; there were seven of those notes by the evening.

The last message of the day was James looking at the close-ups of the door staff. Their ties have a floating part. They did. The ties and name badges had been fitted months ago to the old hand-made shirts, and the new shirts sat in a different place. Each tie went back into Blender, had its blade laid onto the new shirt and its knot moved onto the collar, and came back the same evening. The badges went the same way.

The fault

NPCs stuck at zero speed just inside their own open front door in Unreal Engine 5.8

Citizens in mirrored houses (door hung the other way, HingeSign -1) stood a few centimetres inside the hall with the door unlocked, open and a complete path to the street. Two of them pinned at the identical door-local point, velocity 0.

  • Wrong guess: a locked door. The doors were already marked as the citizens' homes; a live probe showed Locked False and the leaf open.
  • Cause: the open leaf lies inward along the hinge line. The door's _NavLink and _Link0 were placed on that line too, so in a mirrored house the route ran into the back of the open leaf. Non-mirrored houses approach from the open side and were unaffected. The gate links sat against the gatepost.
  • A nav link end placed exactly on a navmesh poly edge never attaches. A 10 cm project_point_to_navigation "found" it anyway; the full path was partial.

The fix

All 11 mirrored citizen homes: door links moved to the doorway side with the hall end on the lobby navmesh, gate links to mid-gap. Where a lobby has no floor collision, put the hall end a few centimetres inside the hall poly, never on its edge.

The guard: door-to-street paths for the 11 plus 5 normal houses, 32 of 32 complete, every route crossing the wall line mid-gap; walkable coverage of 25 areas identical before and after; then PIE.

The fault

Blueprint Runtime Error: "Attempted to access BP_Citizen_C pending kill or garbage" - thousands of lines after NPCs despawn

About 5,900 lines per session from one function, whenever a registered NPC was destroyed. The guard compared the stored reference with None. A destroyed actor is not None, so it passed; and a Blueprint AND evaluates both inputs, so Get Actor Location ran on the dead actor anyway.

The fix

Gate on the Is Valid macro, not a None compare

Insert the StandardMacros Is Valid macro (exec in, Is Valid / Is Not Valid out) before the distance checks; Is Not Valid returns. ⚠ Adding IsValid as a plain function node through the Monolith MCP server resolved the SubobjectData overload whatever class was given. Use the macro.

The fault

MetaHuman garment recolour does not show at LOD0 - the build overrides material slot 0

A dressed material instance bound on the garment mesh rendered at other LODs and in some captures, while the close-up kept the build's original colour. The parametric build's BP_MH_<Name> sets override_materials[0] on each garment component, and the override wins.

Two more on the same garments: a Fab shirt ignored OpacityMask entirely (a constant 0 into a Masked copy still drew the whole shirt), and trouser waistbands poked through untucked shirt hems, because each parametric garment is fitted to the body, not to the garment over it.

The fix

Repoint the Blueprint override, clip the trousers, fold the shirts with WPO

  • Point each garment component's slot-0 override at the dressed material instance. Audit by comparing every override list with its mesh's materials.
  • Waistband: a private Masked copy of the trouser material clipped above the shirt hem height, using pre-skinned position. Control test: clip everything, and the patches must vanish with the trousers. An instance first compiled under an Opaque parent stays Opaque until its blend mode is overridden.
  • Tucked shirts: World Position Offset lifts every vertex below the waistband to just under it.

The kit

ToolWhy this one
Claude Code Projects (beta)a planner splitting one long day across several Opus 5.5 agents, with James's choices relayed as short replies
Fabfree MetaHuman Oxfords, Loafers and the Altena Blouse, all parametric, all on the Standard licence
Monolith and unreal-mcpthe two bridges the agents used to drive the editor and the running game
Blenderrefitting the ties and badges to the new shirts
A numbered UV gridflooded onto a garment to find where its chest is before a logo goes on

Plain English

TermWhat it means
navmeshAn invisible map of walkable ground that characters use to work out routes. No navmesh, no walking.
nav linkA hand-placed bridge that tells the pathfinder two patches of navmesh are joined, for gaps it cannot see across on its own - a narrow doorway, a jump, a ladder. Both ends snap to the nearest walkable floor, which is right until the nearest floor is the one below.
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.
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
parametric garmentA MetaHuman garment that is re-fitted to each character's body shape when the character is built, and hides the skin underneath it automatically; the alternative is one fixed shape that only fits the body it was made on.
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.
material instanceA copy of a material with some settings changed. Cheap to make and cheap to render, so most surfaces are instances rather than originals.
material slotA numbered surface on a model that takes its own material. One mesh can have several - brick on one, roof tiles on another - and the numbering is how a script says which is which.
opacity maskA material input that cuts holes in a surface, drawing each point either fully or not at all.
World Position OffsetA material setting that nudges a model's surface points to new positions as it draws, without touching the model itself - used here to fold a shirt hem under a waistband.
Is ValidA Blueprint check that a reference still points at something alive; a character that has been removed from the world is not the same as nothing, and only this test tells the two apart.
BlueprintUnreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it.
MCP serverA bridge that lets an AI agent drive another program directly. Here, two of them let the agent operate the Unreal editor.

Things we still need to fix tomorrow:

  • Dean's buzz cut renders as bald. A brush cut instead is James's call.
  • Small flecks of skin show at the chest on Les's and Dean's shirts.
  • Putting the dressed workers into the live town and watching the swap in PIE on two or three of them is next.
  • The council hi-vis vest for the bin crew, with the city council print on the back.
  • Routes that cut through strangers' houses, and Thomas against his own gatepost on a normal house: the fixes are approved and queued.
  • The pub bingo throws about 15,800 errors in a long session, almost certainly the same dead-reference pattern.
  • Different face shapes for Pete, Paul and Charlie need a paid re-rig. James to decide.

← 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