Second Chance GazetteDevlogToken Use

The Queue

unreal-engineblueprintnpcpoliceroot-motionscene-capturecable-componentblenderniagaraparallel-agentsgta-6

Nine in the queue

The allowance came back on Wednesday morning. Tuesday had finished at 99 per cent of his Claude Code tokens, which is why Tuesday had been spent on a Steam page, and by quarter to eight on Wednesday every thread that had been waiting for it was awake at once.

That is not how anybody pictures a solo developer. There was one copy of Unreal Engine 5.8 and one graphics card with 8 GB on it. There were, by the evening, nine separate sessions of the agent - Claude Code Opus 5.5, each one working its own part of the town - and only one of them could hold the editor at a time. So they queued. A session would take the editor, build and test its piece, save only its own files, and then send a one-line message to the next in line: "neighbours go", "litterbin go", "parlour go". Whoever was waiting took it from there.

It was a Wednesday, so James was at work. The rulings came in through the day a line at a time, and the queue carried on without him.

It did not run clean. At 07:46 there were two copies of the editor open on the same project, one started by hand. James said to leave both and he would sort it. At half seven in the evening he restarted the Claude app, which ends every session it is running, and the queue had to rebuild itself from the handover notes. By half nine the editor was sitting at 42 GB of memory and a play test of the weather was running at between one and two frames a second.

Rockstar have several thousand people for this. He had a queue of agents waiting for one editor, and a job to go to.

The egg

The longest thread of the day is also the most British thing in the game.

Shirley at number 4 keeps hens. She collects the eggs on her own daily round, and that part had worked since Sunday. What James had asked for was the consequence. If the player helps himself to an egg from her coop and she sees him do it, she reports it. An hour or two later the police come round.

His ruling on how they come round was the important bit: "this should divert the police from their patrol as though they receive a call from HQ to attend." Not a car that appears from nowhere. The patrol car that is already driving its round of Radworth gets the call, leaves its route, and drives to number 6.

A route planner, run outside the engine, laid a path from every junction on the patrol to the house - 2,548 points of road, with the U-turns penalised so the car does not swing round in front of the house, and seven of the routes arranged to arrive from the top of the road and park on the far side, so the officers have to cross. Then the car itself learnt three new phases: drive the callout, wait at the house, drive back to the station and pick up its break.

The first test sent it from the station car park. It arrived in 32 seconds, 0 cm from its mark. The second waited until it was mid-patrol, diverted it at waypoint 652, and took six and a half minutes to arrive, most of which was sitting at red lights. That was the town's own traffic doing it.

Then the officers had to get out and walk up the path, and for a while they would not get there. They walked up to the door, stopped about 20 cm short of it, and stood there indefinitely. No error. The step length had been written into the graph once and used in two places, and the tool the agent writes Blueprints with had quietly turned one of those into a calculation on vectors instead of a single number, so the test for "arrived" could never come true. A plain float variable for the step length fixed it. On the next run the passenger stood exactly on the doorstep, waited 20 seconds, and walked back to the car.

The last piece was the clock. The game's clock is real time by design, so "an hour or two later" means an hour or two of actual evening, and a player who saves and quits in between should not get away with it. The report went into the save file, which now holds 154 fields and passed its round trip test on all of them. A test report planted at half seven in the morning fell due just before nine, and when the play test started at ten the car was sent without anyone calling it. A report put back from a save kept its due time rather than rolling a new one.

That is where it stops for now. The knock, answering the door, and the three replies on the number keys - deny it, admit it, or tell the officers it must have been a fox - are next. The car's blue lights are wired, and for an egg they stay off.

GTA 6 has a wanted level. Here, the neighbour rings it in and the car on its round gets sent over.

A dog walking backwards

Liz walks her German Shepherd every morning, up the lane to the field and home again. On Wednesday James cleared the walk to be shown on X and then mentioned, in the same message, that the dog walked sideways.

That morning, the agent had looked at a frame from a test run and reported the dog's facing as fixed. Zoomed in, it was not. The dog was walking north with its head pointing west.

The cause was small. The dog's model has its head along its own Y axis, not X, and every line that turned it towards where it was going used the X axis. The agent's first correction swapped to the Y axis on its own, and the dog went over sideways and lay flat on the tarmac with its legs out.

A woman in a dark green parka, black joggers and white trainers walks along a terraced street pavement. Beside her on the tarmac a German Shepherd lies flat on its side, legs out, as if dropped there, next to a lamp post and a brown wheelie bin, with a drain in the road in the foreground.
The first fix. Pointing the dog's Y axis along its path with nothing to say which way is up let Unreal choose for it, and it chose this.

Giving it both - Y along the path, Z straight up - stood it upright and head first. The play test agreed: upright and head first on the walk, and running to a spot in the field its head bearing and the target bearing matched at -21.8 degrees each. James's own look at it is the next one that counts.

The lead took two goes as well. Unreal has a ready-made cable for this sort of thing, and the first one ended a metre in front of the dog's neck because the cable's default end point is a metre along. With that zeroed it reached the collar exactly, and then it vanished: 1.1 cm of dark leather against dark tarmac is a lead you cannot see. It went to 1.6 cm and red.

Seen from behind on a long terraced street, a woman in a green parka walks away up the road while a thin red lead runs from her right hand back to the collar of a German Shepherd standing on the tarmac in the foreground.
Liz on the walk, from behind, with the red lead running from her hand to the collar. It sags about 31 cm across 1.28 metres, which is what a lead does.

James also approved the dog's panting sound, the first take, in four words. The big lap of the field it is meant to do when there is nothing to chase is half built.

Knackered

James asked whether Wozza, the player's mate on the refuse job, ever handed the player an energy drink. He does not. He talks about one, once a shift, and nothing changes hands. There was not an energy drink anywhere in the game: the corner shop sells twelve soft drinks and none of them is one. So James asked for one with a parody name, and a can that looked like it belonged on the shelf without belonging to anybody.

The agent checked names in Chrome before using one. Grafter was taken by a cider and by somebody's energy drink on Instagram. Gobsmack was a Belgian beer importer. Knackered was free, and it is the right word: the drink named after how you feel before you open it.

The can was drawn and built in Blender against seven real brands on the UK 500 ml shelf, to get the shared language right and keep clear of anybody's actual mark - black can, one neon mark down the front, a high caffeine panel on the back, nutrition and a barcode across the seam, and the price-marked £1.29 starburst that every corner shop in Nottingham has on something. The mark is a K whose arms are a single lightning bolt. The tagline is NOT ANY MORE YOU'RE NOT.

Four renders of the same black energy drink can on a grey background: front, three-quarter, back and from above. A large neon-lime K whose arms form a lightning bolt sits over a white distressed wordmark reading KNACKERED and the word ENERGY, with an orange band at the base, a red starburst price mark reading 1.29 pounds, and nutrition text and a barcode on the back.
Front, three-quarter, back and lid. The front mark had to shrink to fit the part of the can you can actually see.

Two things went wrong and both were about what a can shows you. The first wordmark was wide, and at three-quarter view the K had wrapped round out of sight, so the can read NACKERED. A can only shows the middle half of its label from the front, and the outer third of that is foreshortened. The second was the ring-pull, which shared the lid's aluminium material and disappeared into it. It has its own darker material now.

It is in the game as a find in the street litter bins, and C drinks it for hydration and energy, with a crack and a gulp spliced into one sound and the bladder filling slowly afterwards. That is built and checked by script; drinking one in a play test is next. Crushing the empty in your hand is written and waiting for its turn in the editor. Boss Man's shop stocking it, and Wozza actually handing one over, are agreed for later.

Closing time at Knockers

Knockers, the strip club, got its fit-out on Wednesday morning. Before it, the building was a shell with an open doorway. After it, there was music you could hear from the pavement, lights, a sign, a front door and a switch by it, and a closing routine that James set in one sentence: at closing time the dancer goes home, then Clive switches off the lights, closes the door and heads home himself.

A two-storey red-brick building on a street corner at night, its downstairs windows lit warm orange and a pink neon sign reading KNOCKERS over the open front door, where a bald doorman in a dark jumper stands on the pavement. A street lamp and the lit sign of a bookmaker's are on the right.
Knockers from the street at night, Clive on the door. At closing he turns the lights off and walks home, and the building goes dark behind him.

The fault of the evening came from James watching a play test. The private dance in a booth was fine, he said, but she got a little too close. The agent measured it. The dance clip carried its travel on the root of the skeleton - about a metre forward and back - and with root motion switched off that travel did not move the character, it moved the mesh, a long way past where the character stood. The seat was 105 cm away. The fix kept the clip and cut its forward and sideways travel to 30 per cent, leaving the height alone, because the root also holds her up.

Josiah Bramwell

The last thing hung in the pub was a picture.

The Slag & Slurry has a ghost: its Victorian landlord, who turns up rarely and is easy to miss. James asked for a portrait of him, fully visible, in sepia, in a wooden frame, behind the bar, and later for a name, dates and an old-style typeface. He became Josiah Bramwell, 1838 to 1889, landlord of the Slag and Slurry public house, set in IM Fell English, an open-licensed revival of a seventeenth-century type.

Photographing him was the hard part. Every capture the agent took came back as a blank white frame, at every exposure it tried from -12 to +16, and it looked exactly like an exposure problem. It was two problems. The settings that make him a ghost also hide every part of him from scene captures, so the camera was photographing the backdrop. And on the empty test level the capture blew out to white whatever the exposure. The way round was to capture his plain colour and his surface direction separately and light the portrait outside the engine.

An aged sepia cabinet photograph in an oval cream mount: an older man with white mutton chops and moustache, a black top hat, a white shirt and a dark waistcoat. Dust specks, foxing and a crease mark the card. Printed beneath in an old serif face: Josiah Bramwell, 1838 - 1889, Landlord of the Slag and Slurry public house.
The finished card: aged sepia, foxing, a water stain and a crease across one corner.

The spot over the back bar turned out to be taken by the pub's green sign. James moved it to the wall by the near end of the bar, where Samantha sings, and said to replace anything already hanging there. Nothing was. It went up at about half eleven. In the agent's own capture it reads slightly soft.

The hail went the other way. He watched it fall in a play test and said it looked more like sleet, and that hail is small balls that bounce, land on the pavement and melt. It was rebuilt that way after the test stopped. The balls are next.

The fault

Unreal Engine 5.8 NPC walks backwards or sideways after SetActorRotation with MakeRotFromX

A dog actor turned to face its direction of travel with SetActorRotation(MakeRotFromX(travel)) walked with its head 90 degrees off its path. A frame from the test run was first read as correct; zoomed, the head pointed west while it walked north.

Cause: the skeletal mesh is the actor's root and its head is local +Y, not +X.

Wrong fix: MakeRotFromY(travel) on its own. With no up vector the rotation pitched 90 degrees and the dog lay on its side.

The fix

Use MakeRotFromYZ with Z up for a mesh whose forward is +Y

MakeRotFromYZ(Y = travel, Z = (0, 0, 1)). In the mover Blueprint that steps the dog by script, the same thing as a fixed yaw offset of -90.

The guard: check facing as a number, not a picture: compare the head bearing with the travel bearing in play (here -21.8 against -21.8 on a run to a target).

The fault

CableComponent end sits 1 m off the attach point, and a thin cable disappears in game

The cable's end was a metre in front of the dog's neck. The default EndLocation on a CableComponent is (100, 0, 0). Separately, a 1.1 cm cable in dark leather rendered but could not be seen against tarmac.

The fix

Zero EndLocation and give the cable a width and colour that reads

Set EndLocation to 0 before attaching the end. 1.6 cm, red. Tick the cable only while it is shown.

The fault

Blueprint NPC stops about 20 cm short of its target and never arrives

A scripted walk to a doorstep stopped short and waited forever, with no error. A bound expression for the step length was used in both a float comparison and a vector scale, and the graph-writing tool resolved it as vector by vector, so the arrival test could never pass.

The fix

Store the step length in its own float variable

Write the step to a float variable first and wire both uses to that. Also seen on the same build: a statement placed after a trailing cast block made the tool refuse the whole function body; casts now go last.

The fault

Looping dance animation drifts an NPC off its actor with root motion disabled

A dance clip played by a single animation node moved the visible character up to 112 cm forward of the actor. The clip's travel was on the root bone and bEnableRootMotion was false, so the mesh roamed rather than the actor moving.

The fix

Scale the root's horizontal travel in a duplicate clip

Duplicate the clip and scale the root track's X and Y travel to 0.30 about the first frame. Leave Z and rotations alone, and leave bForceRootLock off, because the root carries the character's height.

The fault

SceneCapture2D renders white or empty at every exposure in Unreal Engine 5.8

Two causes. Components flagged bHiddenInSceneCapture (set here on every part of a ghost) are invisible to the capture, which shows only the backdrop. Separately, on a test level with a bright sun and sky, the capture's FinalColor blew out to white across manual exposure bias -12 to +16.

The fix

Clear the flag on a temporary copy and light the capture offline

Spawn a transient copy and call SetHiddenInSceneCapture(false) on it. Capture SCS_BaseColor and SCS_Normal, the normal into an RGBA16F render target so negative values survive, and light the result outside the engine.

The kit

ToolWhy this one
Unreal Engine 5.8, through the unreal-mcp and Monolith MCP serversevery build and play test, nine sessions sharing one editor
Claude in Chromethe trademark check on the drink's name, and the shelf research
Blender, run headlessthe can, the portrait frame and the landlord's whiskers
Freesound, a CC0 recordingthe can crush
IM Fell English (open font licence)the lettering on the portrait

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.
BlueprintUnreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it.
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.
cable componentUnreal's ready-made rope or line: a chain of points that sag and swing between two ends. Here it is the fishing line, from the rod tip to the hook.
root motionThe movement baked into an animation clip itself, stored on the skeleton's top bone. A walk clip can carry the forward travel, a turn clip the rotation. The game either lets the clip move the character, or strips it out and moves the character some other way - and if the two disagree, the feet slide.
scene captureA second camera in the level that renders what it sees into a texture instead of the screen; handy for snapshots and mirrors, and it keeps its own exposure and visibility rules, so it can disagree with what the player sees.
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.
UVThe flat pattern that says which part of a 2D image lands on which part of a 3D model. Wrong UVs mean the texture arrives stretched or in the wrong place.
NiagaraUnreal's particle system - rain, smoke, sparks, dust, fizz on a pint.
mipmapPre-shrunk copies of a texture used at distance, so far-away surfaces do not shimmer.
trade dressThe overall look of a product's packaging - colours, layout, shapes - which can be protected even when no single logo is copied; the line a parody has to stay on the right side of.

Things we still need to fix tomorrow:

  • The knock, answering the door within a minute, and the three replies, then the far-side parking driven end to end.
  • James's own look at the dog's facing, then the dog's lap of the field and the chase.
  • The can crush into the editor, then a can drunk with C in a play test.
  • Hail as balls that bounce and melt, in a play test.
  • Josiah's portrait checked in play for sharpness; a soft one means its texture is streaming a low mipmap.
  • Knackered on Boss Man's shelf, and Wozza handing one over.

← 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