Second Chance GazetteDevlogToken Use

Clear of Gates

unreal-enginenpcparkingterraced-housesc-plus-plusc4458taxisline-traceroadmennight-gangniagararainlandscapeskate-parkedge-monstershalloweenpackagingcookgymclaude-codegta-vi

A Tuesday

It was a Tuesday, so James had college, and the gym at lunch. Most of the day's game was built while he was somewhere else, and the day ended at about half nine in the evening, when the tokens ran out. Nothing was lost. Several threads simply stopped where they were.

At ten to nine he was watching a play test. In five minutes he found three faults, none of which the agent, Claude Code Opus 5.5, had reported. A vicar could not get out of her front garden. A woman could not get out of her own front door. And the taxis were driving over parked cars.

Several sessions of the agent share the machine now, and a coordinator hands out the editor one slot at a time.

The car across the gate

Each of the town's residents has a house, and some have cars. The code that decides where a car parks looked for the bit of street nearest the front door.

On a terraced street that is exactly the wrong place. A terraced house has a short front garden with a gate in the wall, and the gate sits in line with the door. The nearest point of the road to the door is the point directly in front of the gate. So the car parked across it.

James saw it at 08:49. The Reverend Helen Stubbs, who lives at 89 Kimberton Road, was trying to leave for the day and could not, because her household's white estate car was parked tight to the kerb across her gate. The log had a line for it, a crowd-obstacle warning naming her as held up and the car as the thing holding her. The agent had not been reading that line.

A red-brick terraced street in daylight. A white estate car is parked tight against the kerb across the front of a house, right in line with its garden gate and red front door.
Before: the household's car parked against the kerb directly across the garden gate of 89 Kimberton Road. Helen is inside the wall, and stays there.

The fix was arithmetic. The terraces pair their front doors about 2.9 m apart, and each pair is about 12 m from the next. So the agent wrote a small library that gathers every gate on the street and pushes a parking spot along the kerb until it is clear of all of them, and made the three bits of code that place cars all ask it first.

This is the most British fault the game has produced so far. GTA VI is set in a version of Florida, where the houses have driveways. Nobody there parks across their own front gate. On a real terraced street there is one space for every two houses, and the argument over it is older than anyone living on the street. The game has to get that right before a British player will believe anything else in it.

The town's simulation is a C++ plugin, and changes to it are staged by day and built at night with James's say-so. He gave it at 18:46. The build failed.

The compiler stopped on error C4458, twice. A new function had a list called Others, and the class it lived in already had a member called Others. In most projects that is a warning. In this one it is an error, and the build refuses. Rockstar have a build farm and a person whose job is the warnings. Here the staging script noticed the failure, put every file back exactly as it was, and the agent renamed two words and built again. It went green in 34 seconds.

In the play test that followed, Helen's car parked 16.7 m from her door. The morning before it had been 3 m. In the same test one of the boy racers pulled out, overtook the car in front, and pulled back in 23 m ahead of it, which was the other thing the build was for.

The same terraced street from the same camera, the kerb in front of the house now clear, green wheelie bins by the low garden walls.
After: the same camera, the same house. The kerb in front of the gate is clear; the car is down the street between pairs.

The woman behind her own door

At 08:54 James found the second one. Agnieszka, who lives at 41 Malthouse Yard, was standing a little under a metre inside her own front door, on her way to the shops, and not getting out. Every 32 seconds or so the town quietly removed her and put her back on the same spot.

The agent proved this one from the files. Her door still had two invisible walking links left over from a clear-out on the fifteenth, when doors that nobody lived behind were shut to the residents. And her door was still marked as nobody's home, which locks it to residents when the game starts. She was being asked to walk through a locked door that the navigation still thought led somewhere.

The first batch of residents had the same fault a week earlier, so the agent wrote a census that walks every resident's home marker, finds the nearest front door within 7 m, and fails any door still locked or still carrying an emptied link. The census and the fix are written and backed up. Running them on the town is a slot on the coordinator's list.

The respawning, at least, has an answer. The director that despawns residents out of sight was also removing bodies that another part of the town had borrowed. That evening it got a guard. In the play test it refused to remove a single borrowed body, and said so in the log, by name.

Over the roofs

The taxis were the third thing. James's words were that the cabs drive over other cars' roofs instead of steering round parked cars, and if they really cannot get round they should go another way.

There were two faults. Each cab finds the height of the road under each axle by firing a line straight down and taking the first thing it hits. Parked cars block that kind of line. So the first thing it hit was a roof, and the cab rose onto it and drove along the top. The fix ignores any hit more than 60 cm above where the road should be.

The second fault was why a cab was ever on top of a car. A cab would start to overtake on a road too narrow to overtake on. Of the 269 stretches of road the cabs use, 106 are 4.5 m B-roads, single track with the cab on the centre line. It squeezed in, stopped, and after 15 seconds a safety valve meant for jams nudged it forward, through the car. Now a cab only starts a pass the lane can hold, and if a road is blocked it takes the next legal turn and works out a new way round.

It was built and saved at five past ten. The play test that night ran out of time before a cab met a parked car, so seeing one go round is next.

Roadmen

At night the town gets roadmen. Eight lads who, after eleven, put on black tracksuits, balaclavas and gloves and go out: the corner shop, the takeaways, the skate park, hanging about, graffiti, vapes, a bag over the shoulder. Some go on e-scooters and e-bikes. Some of them sell. Then home, between midnight and two, each to a real address in the town, some living alone, some sharing, some with their parents. Every British town has them and every British player will know them in a second, which is the reason they are in.

On Tuesday the night kit went onto all eight, hidden in each lad's Blueprint for the town to switch on after dark. In the evening play test the agent forced the kit on for one of them, Jordan, in daylight. The mask was there, the gloves were there, the hair was gone.

At dusk on an estate, a lad in a white hoodie with a black balaclava over his face walks past the corner of a brick wall. Small black squares hang in the air over the green behind him.
Jordan, kit forced on for the test: hood up, balaclava down. The black squares in the air over the green are the rain, and they are their own fault.

The gloves were wrong. They drew as long black ribbons from his hands to the pavement, the kind of fault that means a mesh is bound to the wrong bones or at the wrong scale. That is next, and so is the whole night routine running on its own, which is the thing that has to be seen in play.

The same lad seen from behind beside a lit window, and over the rooftops in the distance a scatter of bright magenta squares hanging in the sky.
From behind, beside a lit window. The magenta squares over the rooftops are rain.

One of the rain effect's parts makes splashes. It was set to run on the processor with the engine's default sprite material, which is a flat test square, and it spawned at eye height rather than on the ground. So the town's rain carried a scatter of solid black, magenta and green squares through the air. The plan is to back the effect up and switch that one part's drawing off. It is staged, not done.

The skate park

The roadmen hang out at the skate park, a concrete slab on the edge of the estate, and the hill rose straight through it. Of 2,009 points sampled across the slab, 1,521 were under the grass, some by 7.4 m.

James said, fix the skate park. Moving it would have saved under 3 per cent of the digging, so the agent cut the hill back instead. A level council terrace, the bank at one in two and a half, about 16,200 cubic metres of ground taken away, and nothing touched south of the road verge.

A grassy hillside beside a road with a long thin pale concrete slab showing, the rest of it buried under the slope.
Before: the slab, with the hill over two thirds of it.

One birch was left floating 4 m over the new ground, invisible to the usual check, and was put back by hand. The walking map was rebuilt for the park and every one of 225 test points on its floor passed. At 18:34 James asked for the gang's meeting point to sit at the edge of the park by the pavement, and it was moved there.

The same hillside from the same camera, cut back into a level terrace so the whole wide square concrete slab of the skate park is exposed.
After: the same camera. The whole slab is open, cut back into a level terrace.

The rider

Past the edge of the town there is English folklore, one monster a day until Halloween. Monday was a black dog. Tuesday was the rider.

He is a figure on a black horse, out on the moor. Early in the night he stands side on in the distance, silent. Look at him, look away, and he is gone, and a second later there is one hoofbeat behind you. Later in the night he comes. You hear the gallop from behind, then a snort at 20 m, and if he reaches you while you are walking out of town, you wake up in hospital. Walk towards home and he lets you go.

The agent built him, placed him, and played him at night twice. On the first run he stood 126 m ahead, the player turned away, and the hoofbeat came. On the second the gallop came, then the snort, then the hospital, all before the player had turned round. The gallop starts 40 m back at 8.1 m a second. That is five seconds. It may want longer, and that is James's call.

Then it took a close look in daylight.

A grassy moor under a cloudy blue sky, a white horse standing side on with a dark hunched figure on its back.
The first close look: a white horse. The rider's coat was the dog's, and on a horse it read white.

The horse wore the coat material made for Monday's dog, and on the horse it rendered white. The fix was a plain black material. In the close-up after it, the horse is black, and the rider is gaunt and headless and hunched forward.

Close up on the moor: a pure black horse side on, with a gaunt dark rider hunched forward on its back and no head on his shoulders.
After the swap: the black horse, and the rider with no head.

The hunch is a stand-in crouch, and on slopes the horse floats about a metre. Both are for a second version. The black coat is on the template; seeing it on the placed rider in play is next. Wednesday is the Seven.

Everyone else

The rest of the day happened away from play.

Every remaining resident is getting a body, and on Tuesday the first ten were built on Epic's servers, including the four residents who ring the local radio station's phone-in. They were dressed by seven in the evening and stood in a row for James to look at.

Five new townspeople standing in a row against a plain blue backdrop, arms out: an older woman in a pink jumper, two men in navy jumpers, a man in a red sweatshirt, a woman in a white top.
Five of the new residents, dressed, before any of them has a home in the town.

The radio station is Oakhaven FM, and James wants a video of it for X with proper lip sync on everyone in it. Five more voices came out of a voice library for the callers, and the DJ joined the body queue.

Then the gym, for the leisure centre's first floor, built entirely in Blender: fourteen machines, the room, the signs, 38 exported pieces. James looked at a render at 20:57 and said it looked marvellous, and asked for coloured mood lighting, changing with every track, and the nightclub's music. That design is written.

And one session read the packaging settings and found that the game had never been told which maps to ship. With nothing set, the cooker packs every map in the project, 46 of them, most of them demo levels that came with bought assets. The estimate is 4 to 8 GB of download nobody would ever open. James said yes to the fix and it went in as two lines of settings. The test cook is next.

At about half nine the tokens ran out. The racer had made his pass, the car was off the gate, and the rest went into the queue.

The fault

Terraced-street NPC cannot leave his front garden: own parked car across the gate

  • A resident on a terraced street stood behind his garden gate for the whole morning. Log: a crowd-obstacle HELD UP line naming the resident and an idle parked car.
  • Cause: the kerb spot for a household's car was the street point nearest the front door. On a terrace the gate is in line with the door (within 10 cm along the street), so the nearest point is always the gate.
  • Doors pair about 288 cm apart, pairs about 1,200 cm apart: one car fits per pair of houses, between pairs.

The fix

Push every kerb spot clear of the gates

  • A parking library gathers the street's gate positions and slides a candidate spot along the kerb until it clears all of them. The roster, the vehicle allocator and the traffic code all call it.
  • Verified in PIE: the car parks 16.7 m from the door (was 3 m).
  • Guard: any new parking or kerb-spot code must call the same check. Alley mouths are not protected yet.

The fault

C++ build fails: error C4458, declaration of 'Others' hides class member

  • A new local TArray<FVector> Gates, Others; inside a subsystem that already had a member Others. Twice, in two functions.
  • This project builds with C4458 and C4456 as errors, so it is a failed build, not a warning.

The fix

Rename the locals and review every new name against the class

  • Renamed both locals to ParkedLocs. Green in 34 s.
  • The staging script auto-reverted every file on the failed build.
  • Guard: before staging, check every new local and parameter name against the class's members.

The fault

AI taxi drives over the roof of a parked car in Unreal Engine 5.8

  • Cabs climbed onto parked cars and drove along the roofs, or pushed straight through them.
  • Cause 1: each axle's height came from a downward LineTraceByChannel with no filter. The parked cars block that channel, so the first hit was the roof.
  • Cause 2: a pass was started on 4.5 m single-track roads (106 of 269 cab edges) where it could not fit; the stopped cab aged past 15 s and a 6 s creep valve drove it through.

The fix

Gate the trace and refuse passes that do not fit

  • Any trace hit more than 60 cm above the baked path point is ignored; the path height is used instead.
  • A pass starts only if the lane can hold it; past a blocked edge the cab takes the cheapest legal exit and re-plans.
  • Built and saved; decision tests identical to before. Not yet seen meeting a parked car in PIE.

The fault

Niagara rain draws black, magenta and green squares in the air

  • Solid coloured squares hung at eye height in rain at dusk.
  • Cause: the rain system's splash emitter runs on the CPU with DefaultSpriteMaterial and spawns at eye height, not at the ground.
  • Fix staged: back the system up, disable that emitter's sprite renderer, compile and save that one asset.

The fault

Packaged build cooks every map: MapsToCook not set in DefaultGame.ini

  • With no MapsToCook, the cooker packages every .umap in Content: 46 here, about 25 of them demo showrooms. Estimated 4-8 GB of waste.

The fix

Name the two maps the game opens

  • +MapsToCook= for the game map and the menu map, +DirectoriesToNeverCook for the scratch folder, compression raised.
  • Guard: a new map the game opens must be added to MapsToCook, or it is missing from the package.

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.
variable shadowingGiving a new local variable the same name as one the class already has, so the name inside that function quietly means something different. The compiler here treats it as an error and refuses to build.
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".
gliderA character moved by a script setting its position a step at a time while a walk clip plays, rather than by Unreal's character movement and AI; cheap and predictable, but nothing stops it walking through things.
NiagaraUnreal's particle system - rain, smoke, sparks, dust, fizz on a pint.
spriteA flat picture, such as a puff of smoke, drawn by a particle system - usually turned to face the camera so it never looks flat.
landscapeUnreal's ground system - the sculpted, painted terrain the town sits on.
despawnRemoving a character from the world while nobody is looking, to save memory, and putting one back later. Done carelessly, a resident vanishes mid-errand or reappears on the same spot.
cookThe step that turns the editor's working files into the compact, platform-ready files a player downloads. Anything the cooker is not told to leave out ends up in the package.
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.

Things we still need to fix tomorrow:

  • Run the front-door census on every resident's home and fix the doors that fail, starting with Agnieszka's.
  • See a taxi meet a parked car and go round it.
  • The roadmen's gloves, then the whole night routine running on its own.
  • Switch off the rain's splash squares.
  • See the rider's black coat in play, decide whether the gallop wants more than five seconds, and a better seat on the horse.
  • The Seven are next, then Rawhead.
  • The next ten bodies, then homes for them.
  • Import the gym, pick a mood light, and give it the club's music.
  • The test cook.

← 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