Second Chance GazetteDevlogToken Use

Clearance

unreal-enginelandscapefoliagenavmeshworld-partitioninteriorsblueprintd3d12musicclaude-codegta-6

A steel house

It was Saturday, so the whole day was on the game. Saturday is the one day of the week when something can be started that will not fit in an evening. James started a town.

The map has had a gap in it to the north-east of the player's estate for months, signposted and empty. He wanted it filled with a kind of house most people walk past without knowing what it is: the BISF house. After the war the British Iron and Steel Federation put up about thirty-five thousand of them. A steel frame, a rendered ground floor, an upper storey clad in ribbed sheet steel that a lot of owners later covered in timber slats. A shallow roof, some of them still in asbestos-cement sheet. A low flat-roofed store against the gable. He had photographs of a real estate of them and a pile of old estate-agent listings for the insides.

The agent, Claude Code Opus 5.5, worked from those and from the original 1940s plan drawings. By the end of the morning it had a pair of semis in Blender with the hall and stair along the gable wall, a living room with a gas-fire recess and an arch through to the dining room, the bathroom over the kitchen and the wardrobes built in beside the chimney breast. Ten meshes, each one checked for holes and inside-out faces. The new town is called Kelsthorpe, and its roads are named after old British brands: Bisto Road, Brylcreem Close, Ovaltine Crescent and Spangles Close.

A pair of semi-detached houses in low evening sun. The ground floor is pale render; the upper storey is clad in vertical slats, blue on the left house and grey on the right, under a shallow tiled roof with two chimney stacks. A low brick garden wall with piers runs along the front, and an overhead wire runs from the roof to a pole out of frame.
The first pair on its plot, at ten past nine in the evening. Ribbed cladding on top, render below, the store on the end and a wire in from the pole.

GTA 6 is set in a version of Florida, and nobody in it lives in a steel house from 1948. That is the argument for this game in one building. A British player knows these houses on sight, mostly without knowing that they know. Rockstar have a department for estates. He had a Saturday.

Carve, paint, place

The work ran the way it had all week, through the beta of Claude Code's Projects feature: a planner handing jobs to several sessions of the agent, which take turns on one copy of the editor at home. Saturday had four going by mid-morning - lock picking, the police cell, the posh estate's furniture and Kelsthorpe - and a fifth in the nightclub by the evening. When one session was batch-compiling, another's command came back "not available" and had not run. The sessions learnt to wait for a minute of quiet in the log before trying again.

The estate went in order. The agent picked the site with James, surveyed the ground, and planned roads that followed the hills rather than climbing straight over them, with a check that no road ran across another. By half three the road beds were carved into the landscape and four roads painted. By twenty to six there were three T-junctions, three turning heads and two bellmouths, every join within two centimetres. By twenty past six there were 49 buildings on levelled pads, 48 semi pairs and one terrace of four, which is a hundred homes. The agent asked whether to furnish them. James said every house. Nine hundred interior doors and nearly five thousand pieces of furniture went in by script. Most of the valley was too steep for a pair on one pad, and those plots were left empty.

Thirty-five centimetres

He walked into one of the houses that evening and there was grass growing in the front room.

It was the fault the posh estate had shown on Friday, on a different estate built by a different script. The houses had been set five centimetres down into their pads on purpose, so that no daylight would show under a wall on a slope, and the landscape was drawing itself over every ground floor. James said the carve could not be deep enough and it wanted digging out further. The agent argued the other way, and it was right. The ground is a grid of points a metre apart. Drop only the points inside the walls and the ground slopes back up into every room along the skirting. Drop the points outside the walls as well and you have dug a trench round the house.

So the houses went up instead, and the agent measured how far, which was the part Friday had missed. The landscape grows its grass wherever it is, whatever has been built on top. The blades in this game are 25 centimetres tall at their smallest and scaled up to 1.4, which makes 35. A floor six centimetres above the ground still has 29 centimetres of grass coming through it. Every house in Kelsthorpe went up 38 centimetres, with two-step concrete doorsteps at every door to make up the height, and a probe under every ground-floor room came back with the landscape at least 37.6 centimetres below the floorboards.

The inside of a living room: a grey three-seat sofa and armchair, a wooden coffee table on a grey rug, and a pale wooden floor running clean to the skirting. A wide window looks out over a front garden and a path to the pavement; a grey door stands closed in the far wall.
The same kind of front room after the lift. The laminate runs clean to the skirting.

Friday's fix for the posh estate had been six centimetres, and those houses had gone back into the level with it at half eleven that morning. Whether they need the full 38 is the first thing to look at.

A town nobody could walk

The rest of the evening was dressing, and the list came from James going through the reference photographs: concrete paths from the pavement to every front door, privet, low brick walls with piers, close-board fences between the back gardens, two wheelie bins a house, the same street lamps as the player's own estate, and telegraph poles with a wire dropped to every single house. He wanted the wires to move on a windy day, the way the flags on the car showroom forecourt do. The agent built them in Blender carrying the same wind data as the showroom's bunting, so they swing off the game's own weather. James saw them sway at twenty-five to eleven.

A road climbing between pairs of houses at dusk under a pink and purple sky. Orange street lamps are lit along both sides, a telegraph pole carries wires across to the houses, and the road's centre line glows orange in the lamplight.
Dusk at ten o'clock. The lamps came on by themselves, and the wires off the pole are the ones that move.

Two faults were sitting in the agent's own picture of one of the greens. The trees were the smallest size of each species and read as saplings, where the photographs had proper old oaks and birches. And both benches and the sign had their backs to the footway. The kit's meshes face one way in Blender and arrive in Unreal mirrored along one axis, so every rotation worked out for them pointed them away from the road. Bigger trees went in at half eight. The benches were turned round at twenty past ten.

A grassy green on a hillside under a blue sky. Two wooden benches and a small blank white sign on a post stand in the middle, with thin young birch trees on the left and one larger tree on the right. Pale houses sit along the hill in the distance.
The green before either fix. Saplings where there should be oaks, and the benches facing the hill.

The fault that no picture showed was the navmesh, the invisible map of walkable ground that the townsfolk use to find their way. The agent built one and probed it, and found three things. There had never been a navigation volume over this end of the map at all, so there was nothing to build until it added one, 511 metres by 675. Once built, the roof of every one of the hundred houses had come out as walkable ground, which in this project means people turning up on roofs. And 24 front gardens were sealed off from the pavement. The gap in each wall was wide enough for a person, but the navmesh is shrunk back from every obstacle by the width of a walker, and the brick piers either side of the gate closed it. A hundred and ninety-eight invisible boxes over the roofs and stores, and wider gates, dealt with all three. A count before saving showed nothing lost in any of the 45 volumes elsewhere on the map.

The fences were stepped down the banks last, with concrete plinths under each step. James asked for shots at about ten at night. The in-game sun goes down at eighteen minutes past nine, so ten is already dusk, and the best frames were the ones taken looking west into what was left of it. He picked one out as a good shot. It was nearly eleven.

An aerial view of a new estate in a valley in golden evening light. Pairs of houses with red and grey roofs sit on levelled plots along a winding road, each with fenced back gardens, and a few trees stand on the greens between them. Grassy hills rise behind.
The estate from the air at quarter past nine. A hundred homes, one day.

Tea through the hatch

Down the road at the police station, another session spent the day on what happens when the player gets caught.

By lunchtime a night in the cell worked end to end: the door locked, a call button that gets a line out of the sergeant, a bench with a mattress, and at eight in the morning the hatch going up and the door swinging open on to a corridor clear all the way to the street. By the evening the arrest itself was wired in. How much the police find decides between a caution, a night inside and a longer stretch. Three strikes, or one find big enough, and the release programme is over with a recall to prison. A Heat bar that fills sends a car to the player's house. All of it was run in the editor by direct calls, and every step came back as written.

The inside of a dimly lit police cell: a low bench with a dark mattress against the far wall, a bare floor, and pencilled graffiti on the wall above the bench reading DAZ WOZ ERE, with smaller scrawls and a row of tally marks beside it.
Cell 1, from the door. Somebody has been here before.

James had one rule for the cell. He did not want the clock to jump, because it had to teach the player a lesson. So nothing in there skips time. Sleep comes four hours at a time and never past the next visit. The officer comes to the hatch at half seven and at six with a ham and mustard sandwich and a cup of tea, gives a lecture every time, and gives another on the way out.

The first test of the bed left the player lying on it forever. The timer that gets him back up had been written after a cast node, and nothing written after that point in the script had made it into the graph. The Blueprint compiled clean. Moving the timer above the cast fixed it, and the rest of the run went through: the officer to the hatch in four seconds, the lecture, the sandwich into the hand, eaten, then the tea, then the cup put down. One empty cup per visit turned into a pile on the floor over a long stretch, so he is meant to take the last one away now. That change is next to run.

The intercom by the door came last. Ask for food, ask for a drink, ask when you are getting out, and ring four times inside a game hour and the desk stops answering. It is built and saved. Pressing it is next.

The trip from the doorstep to the cell is still a cut. James wants it walked - cuffs, car, desk - because this game does not do cut scenes. That is the next piece.

Too many residency sets

At twenty to eleven in the morning the lock-picking session had taken the whole editor down. It was giving every door in the player's estate a lock, for the lock picking that is being built, and to do it the session loaded the big map into an editor that had already loaded it once. The graphics driver gave up halfway through merging the landscape's paint layers, with a D3D12 error about too many residency sets. The project's own notes already said never to load that map twice in one editor. Everything had been saved before the load, so nothing was lost, and a fresh editor with the scalability turned down first got through.

The locks themselves are the reason anybody was in there. The front doors on the terraces mostly get a Yale-type night latch, a pin-tumbler lock: the player holds a little turning pressure on the plug and lifts the pins one at a time, each in the order it binds, and each one that reaches the line clicks and lets the plug turn a hair further. Too much pressure and the pick snaps. Too little and the set pins drop back. Some euro cylinders carry spool pins that fake a set, and the gauge kicks back against you. A latch that has not been deadlocked can be slipped instead, on a timed tap. The back doors are old warded locks or two-lever mortices. The warded lock is a skeleton key steered round turning rings of wards, the easiest of the three. A lever lock needs steady pressure on the bolt while each lever is lifted to the exact height of its gate. The posh estate's front doors have a five-lever mortice with false gates that clunk like the real thing and move nothing. Each door is seeded so it behaves the same every time you try it. Every second at the lock adds to a noise count. The neighbours who will listen for it come later.

All of that is built and compiles clean. Playing it is next.

It was also the editor the posh estate's furniture was queued for. That waited another hour.

On the beat

The last session of the night was in the Sweatbox. The club's tracks are meant to be 140 beats a minute, and James said so. The agent measured them anyway. Seven are 140 exactly. Most of the rest come in around 138 and one at 137.06, which leaves a fixed 140 clock up to 2.2 seconds out by the end of a track. The lights now run off a clock that reads the tempo of whatever is playing, and Christie, the dancer, plays her routine at the track's speed and changes it on the next bar instead of halfway through one. Seeing it at opening time is next.

It was saved at twenty to one on Sunday morning. The gym is first thing.

The fault

Grass shows through the floor of walk-in houses on a landscape in Unreal Engine 5.8

Furnished houses with walk-in ground floors, placed on graded pads in a sculpted landscape. Grass grew up through the ground-floor rooms; upstairs was clean.

  • Wrong guess: the pad was not carved deep enough. Lowering landscape vertices inside the walls leaves the 1 m grid sloping back up into every room along the walls; lowering past the walls digs a visible trench outside.
  • Actual cause: the houses were placed 5 cm below their pads, so the landscape sat 4.2 cm over every ground floor. Landscape grass spawns on the landscape regardless of what is built over it, and the blades reach 35 cm (a 25 cm clump at up to 1.4 scale).
  • Also: the previous day's fix on another estate lifted the floor 6 cm. That clears the landscape surface and not the grass.

The fix

Lift the building: ground floor at least 0.37 m above the landscape

Raise every house 0.38 m above its pad and add two-riser doorsteps at each door. Then trace down from every ground-floor room against the landscape only and confirm the gap. Here every room came back at 37.6 cm or more, with no misses.

The guard: a walk-in floor needs the landscape height under its rooms plus the tallest grass blade. Read the blade height off the grass types; do not guess it.

The fault

New area of a World Partition map has no navmesh, walkable roofs and unreachable front gardens

  • No NavMeshBoundsVolume covered the new area; the nearest of 46 stopped well short of it.
  • After adding one, roofs meshed as walkable on 100 of 100 houses.
  • 24 front gardens were cut off from the footway: the gate gap left about 1 m clear between the piers, and erosion by the 35 cm agent radius closed it.

The fix

One bounds volume, null areas on the roofs, wider gates

A new bounds volume over the estate (not spatially loaded), 198 NavModifierVolumes with NavArea_Null, 4 to 8.5 m above each house's ground floor and 1.2 to 3.6 m above each store's, and the gate gap widened so the nearest pier is 0.81 m off the path centre.

The guard: compare navmesh coverage in every existing volume before and after, and save only on zero cells lost. Keep RuntimeGeneration Static, read off the level's RecastNavMesh-Default actor, not the ini.

The fault

Player stuck lying down: Blueprint compiles clean but the get-up timer never fires

A script-written Blueprint function put the sleep timer after a Cast To node's success branch. Nothing after that point was connected into the graph. The compile reported no errors.

The fix

Put the timer before the cast, and make the cast the last block

Moved the timer above the cast. The guard: in a generated graph, read back the wired execution path rather than trusting a clean compile.

The fault

D3D12 "Too many residency sets" crash loading a World Partition map a second time in Unreal Engine 5.8

The editor crashed during the landscape weightmap merge on the second load of the main map in one editor process.

The fix

One load per editor process

Restart the editor, turn the sg.* scalability groups down to 0 before the single load, and wait about a minute after the Landscape edit layers merge warning before working. Save everything before any load.

The kit

ToolWhy this one
Claude Code Projects (beta)a planner running several Opus 5.5 sessions on one shared editor
Blenderthe BISF walk-in houses from the 1940s plan drawings, and the wind-driven wires
Unreal Engine 5.8the carve, the roads, the placement, the navmesh and every fault above
The original BISF drawings and estate-agent photographsthe room layout and the cladding colours
A phase scan of the club tracksfound the real tempo where a straight-line fit dropped 80 % of the beats

Plain English

TermWhat it means
BISF houseA British Iron and Steel Federation house: a post-war steel-framed home, usually a semi, with a rendered ground floor and a clad upper storey. Tens of thousands were built from 1944 and many still stand.
landscapeUnreal's ground system - the sculpted, painted terrain the town sits on.
foliageGrass, plants and trees placed in bulk, drawn with heavy instancing because there are so many.
navmeshAn invisible map of walkable ground that characters use to work out routes. No navmesh, no walking.
agent radiusHow wide the pathfinder assumes a walking character is. The navmesh is shrunk back from every wall by this much, so any gap narrower than twice the radius simply is not there as far as an NPC is concerned.
nav modifier volumeAn invisible box that changes what the navmesh does inside it - set to a null area, it tells the pathfinder nobody may walk there, such as on a roof.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
BlueprintUnreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it.
castA Blueprint step that checks whether an object is a particular kind of thing and, if it is, lets you use it as that kind. It has a success branch and a failure branch.
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.
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.
BPMThe tempo of a piece of music. Used here to make dancing and lighting land on the beat.
tickCode that runs every single frame. Cheap once, ruinous sixty times a second across a thousand actors.

Things we still need to fix tomorrow:

  • Check the upmarket estate's ground floors against the 35 cm grass; they went in lifted 6 cm.
  • Measure the frame rate near Kelsthorpe with the editor closed: 900 interior doors run code every frame.
  • Two garden paths lose the navmesh over a crest; re-probe the whole estate after a fresh editor load.
  • Find the black patch on the hillside east of the estate in the aerial shots.
  • Press the cell intercom for real, then walk the arrest from the doorstep to the cell.
  • Put the lettering on the "no ball games" sign.
  • Watch Christie's routine change land on the bar at opening time.

← 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