Second Chance GazetteDevlogToken Use

Not in Service

unreal-engineainavigationdetourcrowdnav-linksliftsworld-partitionnpc-schedulesgymhotelgrow-heistclaude-codegta-vi

Sunday

Sunday, which for James means the gym in the morning and his parents' in the afternoon, usually with a clip from the week's playtesting to show them. The game went with him on the phone.

The agent, Claude Code Opus 5.5, ran most of it as several threads at once, each owning one part of the town and taking turns on the one machine that can run the game. One thread had the gym. One had the gang's grow house. One had the Bumoral, the hotel on the hill. By the time the last of them stopped, at about five on Monday morning, the hotel had a lift, the lift had carried its first residents, and two security guards had spent most of the night standing in an entrance hall refusing to go outside.

Star jumps on the bikes

The members had made it upstairs on Saturday night. On Sunday morning James watched a staged test of the gym full of them and sent his notes in the order he saw things.

The woman running was outside the treadmill rather than on it. A man in white was doing press-ups in the wrong part of the room. The two on the rowing machines looked all right but their arms were not quite doing what arms do on a rower. A woman was doing star jumps among the exercise bikes - there needed to be an area with mats for that sort of thing. And the woman in the red top was stood in the chest press doing star jumps, when she should have been doing chest presses on it.

"The animation needs to match the machine they are on," he wrote, which covered all of it.

A woman in a red T-shirt and black leggings stands upright on the seat of a chest press machine with her arms held out to her sides, nowhere near its handles.
A resident in a red top stands on the seat of the chest press with her arms out, mid star jump, nowhere near the handles.

The agent went to the town's code and came back with two causes, both in the part that decides what a member does once they arrive. A member whom no machine has claimed falls back to floor exercises - press-ups, air squats, star jumps, stretching - and does them wherever they happen to be standing: by the rowers, in the aisle, by the door. That was the man in white and the woman among the bikes.

The red top was the other one. A machine animates whoever is on it, and to stop the floor routine playing on top of that the code sets a marker that says, in effect, the machine has this one. But the marker was only set on one of the several ways a machine can take somebody. She had come in by another, so she got the machine and the star jumps at once.

The plan is a set of mats in the part of the gym already signed Functional, six of them, so a member with no machine walks to a free mat instead of exercising on the spot, and a rule that nothing plays a floor routine on anyone a machine is holding.

A woman in a white hoodie stands on the floor beside a long row of treadmills rather than on one, with a row of orange air bikes behind her under an 'open 24 hours' sign.
A resident stands on the floor beside the long row of treadmills rather than on one.

The runner beside the belt needs one measurement in the editor. The rowers were the interesting one, because a stroke has an order: legs drive, body swings back, and only then do the arms pull. The clip bent the arms during the leg drive. The agent drew the stroke as it should be and sent it over. At twenty to one James answered: "yes the rowing should be right if the arms are pulled back to the lower ribs." That is now the brief for the re-import.

The ward

At quarter past four in the afternoon the grow house thread had the game. The grow heist is on the crime path: the player gets into a house where a gang of local lads are growing, takes what is drying, and gets out before they notice. If they catch you they take it back.

The test did what it was meant to. The player lifted twelve bags of dried plant, got caught at the lads' corner and lost all twelve.

Then Kian went missing. His body turned up 650 metres away, standing still, and stayed there. The agent's first note was that he was stuck. Reading the log back offline, it found that halfway through the heist Kian had been knocked down in the road, most likely by a passing car. The crash rescue system did its job: it called an ambulance and admitted him to hospital. It also, when the admission came through, took the body that was at that moment running about the estate with the gang and put it in a bed on the ward. The gang's code spent the rest of the test sending orders to the one in the bed, and the stall checker kept nudging him to get on with it.

None of the three systems involved had a case for a lad in hospital. They all have one written down now, as a suggestion, not a build.

A floor too low

The hotel's evening started at eight with a set of photographs that came out empty.

The Bumoral sits on a hill 53 metres above the town, two kilometres of new road up from the ring road. Guests drink in the Ballroom Bar on the ground floor. The shoot was the beer goggles - the bar several drinks in - with at least one person in every frame. The clock was set to half nine on a Friday, the busiest hour the bar has. Five shots, five empty rooms.

The barman and six of the seven guests were where their week said, the log reported, between one and three and a half metres from their spots at the bar. They were also stood a floor below it, in the spa, at the height of the lower ground floor.

The cause was code written to protect people. When the player moves a long way at once, the town holds nearby people still until the floor under them has loaded. The shoot had moved the camera nearly three kilometres in one frame, which switched that hold on. Each hotel resident was created in a frame that took over a second to draw, and in that second they fell - ninety centimetres, three metres, depending on the frame. The hold then took the height at which it first saw each one as the height they were meant to be at, froze them there under the bar's floor, and looked downwards for a floor to put them on. It only looks down. The spa's floor was the first one it found.

The fix takes the intended height from where the person was made, not from where they were first seen, and searches near it in both directions. It was built by nine o'clock.

The barman had a second problem: he could not get behind the bar. The aisle was 65 centimetres wide, which a real barman manages. The navmesh, the invisible map of where people can walk, does not. It shrinks back from every surface by the width of a walker, 38 centimetres either side, and 65 minus 76 is nothing. The counters, five stools and the bar's own serving point were moved 75 centimetres into the room, which gives a 1.40 metre aisle. At ten to nine the probe walked him in.

Not in service

The lift was James's call. At sixteen minutes past eight he approved taking it down to the lower ground floor, where the spa is, and up through all the guest floors to the penthouse on four. The lower ground floor came back out of it later in the evening, and the basements were never in it. Send anyone to them and the lift says it is not in service.

The car was reused from a tower block elsewhere in town. The shaft, landings and door bays were built offline in Blender, and the batch that put them in placed 223 pieces and 24 lights.

At quarter to eleven the agent ran the game on its own to ride it. The tool that presses keys was refused for the session, so it scheduled everything from the console instead: clock, camera, sends, pictures. The first run sent its residents before the lift existed, because the lift only switches on once the hotel has streamed in, about three minutes after you arrive.

The second run, at two minutes past eleven, never got the hotel at all. Seven and a half minutes, and the building stayed unloaded. The camera stood where the shaft should be, looking at what was there.

A dark lift car with an orange G floor display stands alone on bare brown hillside in the rain at dusk, with a road curving away behind it and no building around it.
The lift car on its own on bare hillside in the rain, its floor display reading G, with no hotel round it.
Seen from the roof of a lift car in the rain: bare hillside with a long cut bank of green, and several residents standing in mid-air at different heights above it.
From the roof of the lift: the residents of the upper floors standing in mid-air over raw ground, because the hotel they were standing in had not loaded.

James was watching. Camera not riding, he wrote. The agent's explanation, written into the handover twenty minutes later, was its own camera: to look round it had put the player in ghost mode, which flies, and a flying player has nothing under him for the lift to carry.

The residents had ridden it. Vex and Rupert called the lift, got in, rode, got out, with the doors open while they boarded. Then they got straight back in and rode it back down. Ground to first, first to ground, and again.

Ping-pong

The agent spent the early hours on that, in three wrong pieces.

Arabella's bounce was not the lift at all. The code that has idle people wander a few steps had picked a spot 35 metres away that happened to be upstairs, and her week then wanted her back down. The wander now stays on its own floor inside the hotel.

Crispin's was real. The agent sent him to the second floor. While he was riding, the character's own Blueprint, which re-sends each resident's current errand once a second, re-sent his: the bar, on the ground floor. So he got out on the first floor, found that his goal was on the floor he had just left, and pressed for the ground. The lift now holds a sent resident's goal for the length of the trip and takes back anything that tries to replace it. In the next run it held. He went up, and stayed up until he was released.

The third piece was that he went up in two rides, ground to first and first to second, when the lift could have done it in one. The agent dumped his route at the landing. It was two points, where he stood and where he was going, with no record of the landings in between. On Saturday, chasing gym members who gave up halfway up the stairs, it had found exactly this - DetourCrowd keeps a crowd's route as two points - and the sentence was in the devlog by Sunday breakfast. It found it again at quarter to five on Monday, in a lift. The landings are kept in a separate list on the path, and a fallback that reads the route's end did put Crispin through to the second floor in one trip. Reading the list itself is the next build.

The escort

The argument against GTA VI here is not the size of the hotel. It is that the Bumoral is meant to work from the inside: that a player can find a wristband in a bin, wear this week's colour, drink in the bar, and sleep in a room nobody paid for, until the staff work it out. Rockstar have a department for lifts. He had a Sunday night.

Of the twelve parts of that on the agent's play-check list, one is built and tested end to end (the room doors and the beds), four are partly there and seven are next. The one it worked on through the night: an old band at the bar means security, and security walks you out.

The first problem was that there was no security on a Friday evening: Marcus did days until eight, Viktor nights from eight, and nobody was on from Saturday evening to Monday morning. The rota was rewritten to James's brief from the week before - slow patrols, both guards on in the evenings.

The second was the guards themselves. On the first run they greeted the player, said four lines across the lobby, and lost him on the first step outside. The agent's account was a gap in the navmesh under the porte-cochère, where the cars pull up, and it planned an editor session to close it. At twenty past three that session walked the routes from the entrance to the forecourt and the drive. All of them were complete, before the rebuild and after. It was not the navmesh.

On the next run the guards did not walk at all. They stayed within a metre of their post for over a minute. The log said what was happening: the escort gave each guard one instruction to walk, and the same once-a-second Blueprint that had sent Crispin back down the lift replaced it with his rota, which said stand in the lobby. With that taken back they walked, and still lost him: the route from the lobby to the entrance hall, past the lift, was not joined up. A lock that stops anything else moving a guard during an escort was written at five o'clock and is waiting for a build.

The editor was closed. The hotel had a lift, two guards on the rota, and a barman who could get to his pumps.

The fault

NPC rides the lift up one floor and straight back down (lift ping-pong), Unreal Engine 5.8

Resident sent to floor 2 boards on G, exits on floor 1, rides back to G; repeats. One case was an idle-wander picking a point on another floor via the lift's nav link. The real cause: while the lift held him, the character Blueprint's 1 s loop re-sent his schedule goal (the G bar), so on exit his goal was on the floor he had just left. Separately, G to floor 2 took two rides: the per-floor nav links were ridden one at a time, and the crowd path holds only [start, goal] - the links sit in FNavMeshPath::CustomNavLinkIds, not the points.

The fix

The lift now holds a sent resident's goal for the whole trip (TownLife.Lift.SendHold, 300 s cap), takes back foreign moves during the walk and the ride, and re-issues the held goal on exit. Proven in a standalone run: sent to floor 2, released on floor 2. Multi-floor in one trip works through a path-end fallback; reading CustomNavLinkIds directly is staged. Wander inside the hotel refuses a pick more than 250 cm off the starting floor. Guard: never send before the lift logs that it has registered; it registers only after the building streams in.

The fault

NPCs spawn a floor below where they should be inside a streamed building (World Partition, Unreal Engine 5.8)

After a long camera move, residents created during a 1-1.5 s hitch fell 90-304 cm before the stream-hold system first saw them. It froze each at that first-seen height and traced only 240 cm DOWN for a floor, so the floor above was never found and they were released onto the level below.

The fix

Intended height from the spawn, search both ways

The hold takes a fresh body's intended height from its spawn point, not its first-seen location, and searches near that height up and down. Built the same evening.

The fault

NPC cannot path behind a bar counter: no navmesh in a 65 cm aisle

Agent radius 34 cm with a 19 cm cell erodes two cells, about 38 cm, from each side. A 0.65 m aisle (0.70 at the floor, marble lips counted because the meshes use complex collision) leaves zero walkable cells.

The fix

Widen to 1.40 m

Counters, stools and the bar's serving point moved 0.75 m into the room. Probe passed. Guard: an aisle staff must walk needs at least 1.35 m clear at this agent radius and cell size; 1.1-1.2 m still closes on bad voxel alignment.

The fault

Gym NPC plays star jumps standing on a machine, or floor exercises in the aisles

Two causes. A member no machine holds falls back to the floor routine where they stand. And the "machine animates this one" marker was set only when a session adopted the body, not on the other routes by which a machine takes one (a take-back, a re-adopt, staging), so floor montages played on top of the machine.

The fix

The plan: mats, and no montage on a held body

Planned, not yet built: never play a montage while a machine holds the body, and add a mat type of machine (six mats in the Functional zone) so an unheld member walks to a free mat.

Plain English

TermWhat it means
DetourCrowdUnreal's system for moving a crowd of characters so they steer round each other; its route is kept as just a start and an end point, so code that measures "distance left along the path" from it gets the straight-line distance instead.
string pullingTurning a route through the navmesh into a short list of corners, like pulling a string tight through it. Unreal's crowd system skips this, so its route is just where you are and where you are going.
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.
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.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
hitchOne frame that takes far longer than the rest to draw - a second or more - usually while something heavy is loaded. The game freezes for that moment and then jumps.
standaloneRunning the game on its own with the editor closed, the way a player would. The only honest place to measure frame rate, because the editor eats memory and processor time of its own.
console variableA named engine setting that can be changed while the game runs, by typing it into the console, or fixed in a config file.
gap buildOne numbered, self-contained batch of C++ changes to the town's code, prepared and checked offline, then compiled into the game in a single build that backs itself up and undoes itself if it fails.
roster blockOne slot in a resident's written-out week - where he should be from 23:25 to 23:45, say - which the town's code keeps steering him back to.
KimodoAn open model from NVIDIA that turns a written description of a movement - 'walks with his hands in his hoodie pouch' - into a skeleton animation, which can then be put on a character.

Things we still need to fix tomorrow:

  • Build the link-list read so a resident goes ground to fourth in one ride, and the move lock so the guards keep the player in sight.
  • Join the lobby to the entrance hall past the lift for walkers, then run the escort again.
  • Ride the lift as the player, with a walking player, not a flying camera.
  • Gym: the mats, the montage rule, the treadmill measurement, then the rowers re-imported with the arms last.
  • A lad in hospital should stay in hospital: the gang, the heist and the stall checker each need that case.
  • Retake the beer goggles stills with the bar full.

← 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