Second Chance GazetteDevlogToken Use

Reachable

unreal-engineworld-partitionlevel-streamingpickupssave-systemlitter-binscavesnpcfishingmaterialsbirdsatomic-writefirst-person

A Friday at work

Friday was a work day, so the game was built from a phone. James checked in from the Claude Code app between whatever else the day was asking of him, read what the sessions had sent back, and told them what to do next. After work he had new glasses to pick up. The weekend was for friends, and Sunday for his parents.

Before he left the house he generated the token report and restarted a few sessions that had stopped overnight. They stop on purpose. His rule is that a session halts when its conversation reaches half a million tokens, because past that the agent - Claude Code Opus 5.5 - starts losing hold of the early part of the day, and a session that has forgotten its own morning is worse than a fresh one. When a session stops it writes down everything it knows in a handover file, and a new one reads that file and carries on.

By the evening there were more than a dozen strands running at once: the YouChew e-bike delivery job, the regulars in the Slag & Slurry, the singer, a bingo night, the car salesman, the birds, an old angler on the riverbank, bins, money, a cave, and the edge of the map. They all share one copy of the Unreal Editor. They take turns with it by messaging each other - who has it, who is next, how long they need - and a session that wants to press play waits its turn like everyone else.

He would find out that evening that thirty treasures had been sitting in a cave for five weeks where nobody could get to them.

Forty-five bins and five hundred quid

The money came first, in a way. That same day the player's starting cash went from £500 to nothing. The £500 had been there for testing; in the game you come out of prison with no job and no money, and the first thing you find is a leaflet.

So James asked for the £500 to be put somewhere else. On the pavements, down the alleys, in the phone boxes and round the bus stops, in every denomination the game has. The agent counted what it had. There are meshes for 10p and 50p coins and for five notes, and that is all: no pound coin yet, no coppers. It split the money into 32 notes and 120 coins and asserted the total came to exactly fifty thousand pence before placing anything. The big notes went down the alleys, two to nine metres in. The phone boxes got the loose change on the kiosk floor, where somebody had been fumbling for it.

Then it found the problem with leaving money on the floor of a large open world. Unreal does not keep the whole town in memory. It cuts the map into squares and loads the ones near the player, and drops the rest. A coin in one of those squares is part of the square. Pick it up, walk away until the square unloads, walk back, and the square loads exactly as it was saved, coin and all. Infinite money, for anyone patient enough to walk round the block.

The agent kept every coin and note in memory for the whole game instead, which costs very little for 152 small objects with no physics. James had one more rule: "it should stay gone". So every pickup now writes its own name into the save, and when the game loads it, anything on that list removes itself before the player can see it. The test picked up a £20 note, closed the level, opened it again, and the note was still gone. £500 had become £520.

The bins went in the same evening. The brief was a proper council litter bin, branded Oakhaven City Council, that you can throw rubbish in and that you can have a rummage through. The agent looked at the real ones councils buy, built one in Blender, black with gold bands and a crest on the door, and James approved the look.

A black street litter bin on a black background, with gold bands, the word LITTER on the lid and a gold crest panel on the door reading Oakhaven City Council.
The Oakhaven City Council litter bin in a test render, before it went on the street.

Press E while holding something and it goes in the bin, whatever it is. That is the player's choice. Press U and you search it. Three times in ten there is something in there, drawn from 25 items already in the game. Each bin can be searched once every ten minutes. It is a small thing, a bin, and it is the game's whole argument against GTA 6 in one object: if it is in the street, you should be able to use it.

Placing 45 of them on 27 streets was the slow part. The agent had a measurement of where the pavement sits on an estate road, taken earlier for the litter, and the first run put every bin at that distance from the middle of the road. On three of the big boulevards the pavement is not where the estate's is, and half the bin's base hung forty centimetres out over the kerb. The fix was to stop assuming. The script now steps outward from the road, a few centimetres at a time, and stops at the first spot where all eight corners of the bin's base sit level, measured square to the road rather than square to the map, because on a diagonal road a square-to-the-map test passes on ground that is not flat at all.

Then it rebuilt the walking map for the pedestrians round the 45 new obstacles, checked that the pavement beside every bin was still walkable, and compared the whole town against the last good copy. Nothing lost. Three new patches gained, at the car boot sale.

The treasure nobody could reach

There is a cave under Radworth, and in August thirty pieces of buried treasure went into it: torcs, brooches, a helmet, a coin pot, modelled from real British hoards, worth £88,600 between them. The plan was always to see how long they took to find.

James had walked the cave. He had found none of them.

On Friday the agent tested it properly. It took a crouching player's shape and flooded the cave from the foot of the ladder, spreading out step by step into every space that shape could fit through. None of the thirty were in the flood. Every one of them was beyond a choke about fifty metres in that had been sealed when the cave was rebuilt. And two of them, a gold torc and a silver pepper pot, were inside stalagmites. The stalagmites had been added to the cave after the treasure, and nobody had told the treasure.

The original placement had checked each spot carefully: floor under it, enough headroom, a sensible distance from the next one. It had not checked whether you could get there.

The agent moved all thirty rather than placing them again, so nothing about them changed but where they were. Every new spot had to pass all of the following: inside the flood, with a way back to the ladder, on flat floor, with at least 110 centimetres of headroom, clear of rock and stalagmites, at least 2.4 metres from the next, and visible from a crouching player's eyes within reach of the pickup. The richest went furthest: the helmet is 83 metres of walking from the ladder, the cheapest pommel 32. A second check, run separately, found all thirty reachable and all thirty returnable.

Rockstar have a QA department. This was a man who went down a ladder, came back up empty-handed, and said so.

The robin, and the old man by the river

The robin had been orange all over. The 1 October entry said so. A real robin is brown on its back and crown, orange on its face and breast, with a white belly and a thin blue-grey line between the orange and the brown.

The agent fixed it before work. The trouble was that the robin shares its body with the blackbird, and that body takes one material for the whole bird, so the pattern could not be painted on by region. It wrote a material that decides the colour from where each point sits on the bird at rest: below a line from breast to forehead is orange, above it is brown, under the belly is white. Because it reads the bird's resting shape and not its current one, the pattern stays put when the bird moves.

The first version came out with a grey patch where the orange should be. One line of the shader code had blended two colours into a variable that holds a single number, and the compiler quietly kept the red channel and threw the rest away.

A robin standing in grass, orange on its face and breast, brown on its back and head, white under the belly, with flat card-like wings and tail.
The robin after the fix. The pattern is right. The wings and tail are still flat cards.

The magpie got a new body the same morning, with the white belly and shoulder patch it should have had, and one long tail.

On the riverbank, another session was working on Reg. Reg is an angler. He walks down to the river on his own routine, and by Friday he was wearing a brown tweed flat cap and a wax jacket fitted to him in Blender. James had asked for two things: that he gives way at the kerb, and that he sets up a folding chair and actually fishes.

The kerb came first. Reg checks the road for anything tagged as a vehicle before he crosses, the same way another pedestrian in the game, Jack, already does. Jack's notes carried the warning: traffic that is not tagged is invisible to that check, and the NPC walks straight out in front of it. So the agent counted the tagged traffic first: 32 tagged vehicles in the level, plus the cars that appear at run time. Then it parked a car eight metres up the road from his crossing. Reg stopped at the kerb and waited seventeen seconds. The car was moved away. He crossed 2.8 seconds later.

The chair, the rod and a line you can actually see were built that evening. The first play test crashed the editor before it started. The graphics card had run out of memory, not because of Reg: the editor had been open all day and was holding seven gigabytes against a budget of 6.6. The agent restarted it and ran the test again. Reg sat down, the rod in his right hand, eight metres of hi-vis line running out to a float on the water.

An older man in a flat cap and a dark wax jacket sits on a green folding chair on a riverbank in light rain, holding a rod, a pale line running out towards the water past tall reeds.
Reg on his folding chair in the rain, rod in hand, the line out past the reeds.

A bite, a reel, a look at the fish and throwing it back are next. James's plan is for Reg to teach the player to fish.

The edge of the map

Halloween is at the end of the month, and James has been building something for the edges of the map. Most open worlds stop at a coastline. Second Chance has open country, and the further you walk from home, the stranger it gets.

The details are being kept back for now. What can be said is that it comes out of English folklore, some of it from not far up the road, and that by the end of the week there was mist lying in the hollows, something that is heard well before it is seen, and a big shaggy dog.

On Friday the agent placed the newest of them in the level and drove a play test through every way an encounter with it can end. All of them fired, and none raised an error. James hearing it in the game is next, because a log can say a sound played and cannot say whether it works.

The dog's head turn was half built by midnight. The rest is waiting for its slot in the editor queue.

A grey untextured model of a big shaggy dog with a thick ruff and a curled tail, standing on a plain grey floor, seen from the front quarter.
The dog in grey clay, before it was textured.

Writing it down

Somebody on X said that week that it was good the game was open about its use of AI, and that with thousands of prompts over the past few months the human involvement was obvious. James thinks AI is a way to turn ideas into a game without hiring a team, and that it lets one person work at something like the speed of a team. It costs him $180 a month for the plan. He thinks it will be the best British life simulation going by the time the demo is out. GTA 6 was 48 days away, and that was where everybody was looking. That was 48 days, as he put it, to get on with his.

He asked for one more thing to go in this entry: what an atomic write is.

Every one of those sessions keeps its notes in a handover file, and some of those files run to hundreds of thousands of characters, weeks of work, every trap and every fix. The ordinary way for a program to update a file is to open it for writing, which empties it, and then write the new text in. If anything goes wrong between those two steps - a crash, a script error, the editor falling over - the file is left empty. Four handovers were lost exactly like that.

An atomic write does it the other way round. The new text goes into a temporary file next to the old one, and only when it is complete and on disk does a single operation swap it into place. Either the swap happens or it does not. There is no moment when the file is half-written or empty. That is how the handovers are changed now. It costs one extra file for a fraction of a second, and a session can crash at half eleven at night without taking five weeks of notes with it.

The fault

Collectible pickups in a cave cannot be reached by the player in Unreal Engine 5.8

Thirty placed treasures in a cave level were never found in play. Each spot had been checked for floor, headroom and spacing, but not for reachability. A crouched-capsule flood fill from the ladder foot reached 0 of 30: every site was beyond a choke about 50 m in, sealed when the cave was regenerated, and two pickups were inside stalagmites placed after them.

The fix

Gate pickup placement on a reachability flood, and move rather than re-place

Flood from the entrance with the player's crouched capsule, and accept only sites that are reached and returnable, flat (normal z at least 0.85), with at least 110 cm headroom, 240 cm apart, clear of rock and speleothems, and visible from a crouched eye inside the pickup trace length. The existing actors were moved, keeping item, label and materials. The guard: the original placement script now refuses to run, because a re-run would put them all back on the unreachable sites. After any cave regeneration, re-run the move, which floods first. An independent re-check found 30 of 30 reachable and returnable.

The fault

Picked-up money respawns when a World Partition cell reloads

A pickup placed in a streamed cell is saved as part of that cell. Taking it destroys the runtime copy only, so walking away until the cell unloads and coming back restores it. In a game with money on the pavements, that is infinite money.

The fix

Keep pickups always loaded, and save a list of what was taken

Set bIsSpatiallyLoaded to false on the pickup class's defaults (not on placed instances), so 152 small, no-tick, query-only actors stay in memory all game. Each pickup appends its object name to a saved string array, StreetCashTaken, and at BeginPlay any listed pickup destroys itself. The save is applied before actor BeginPlay, which is what makes this work. PIE test: a £20 note taken, the level reopened, still gone, balance £500 to £520. The guard: re-seeding creates new names, so old saves stop matching and every coin returns - do not re-seed once players have saves.

The fault

Script-placed street furniture overhangs the kerb on some roads

Bins placed at a fixed 380 cm offset from the road spline sat correctly on estate roads and hung half the base 40 cm over the kerb on three boulevards with a different cross-section. A flatness check on an axis-aligned footprint also passed on diagonal roads where the ground was not level.

The fix

Scan outward for a level footprint aligned to the road

Step out from 360 to 600 cm and take the first offset where all eight points of a road-aligned footprint are level within 6 cm. Skip junctions and spline ends, keep 25 m minimum spacing. Afterwards the navmesh was rebuilt and diffed against the last coverage baseline: 0 cells lost.

The fault

Material Custom node renders grey instead of the expected colour

A Custom HLSL node declared float x = lerp(...) with float3 inputs. HLSL truncates the result to its first component without complaint, so the blend kept only the red channel and the patch rendered grey.

The fix

Declare the variable as float3

float3 under = lerp(...). The pattern itself is a mask on PreSkinnedPosition passed through a VertexInterpolator, so it is fixed to the rest pose and does not swim when the bird animates.

The kit

ToolWhy this one
Claude Code Opus 5.5several sessions at once, sharing one editor by message, driven from a phone during the working day
Blenderthe litter bin, the magpie's new body, the angler's jacket fit
Monolith MCPPython in the editor, Blueprint edits and driving the play tests
A crouched-capsule flood fillthe only test that asked whether the treasure could be reached at all

Plain English

TermWhat it means
context windowHow much of a conversation an AI model can hold in mind at once; when a session fills it, the work has to be written down and handed to a fresh one.
handoverA running notes file for one strand of the work, written so the next session, human or AI, can pick it up cold and know what is done, what is not and what will bite.
atomic writeSaving a file by writing the new version alongside it and swapping it in at the last moment, so a crash halfway through leaves the old file intact instead of an empty one.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
level streamingLoading and unloading parts of the map while the game runs, so the whole world need not be in memory at once.
always loadedA setting that keeps an object in memory for the whole game instead of loading and unloading it with its patch of the map.
flood fillSpreading out step by step from a starting point to every place that can be reached from it, like water poured on a floor; anything the flood never touches cannot be reached.
splineA curved line placed in the level that other things follow - a road, a bus route, a river.
navmeshAn invisible map of walkable ground that characters use to work out routes. No navmesh, no walking.
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.
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".

Things we still need to fix tomorrow:

  • The bins searched and used in a play test.
  • A bite, a reel, a look at the fish and throwing it back, for Reg.
  • Hearing the newest thing at the edge of the map in the game.
  • The dog's sounds and the rest of its head turn, then its play test.
  • Proper wings for the small birds: the robin's are still flat cards.
  • Walking the cave again to find out how long thirty treasures take.

← 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