NPC holds a pint at 85 degrees and pub drinkers will not sit down in Unreal Engine 5.8
Thursday, from the other side of a prompt
Thursday meant work, so the game got whatever the agent could do on its own. James went to bed on Wednesday with a queue of overnight jobs set up and woke to find that none of it had moved. The airport survey had stopped at a read-only check on a map name, the request to run it was declined, and the whole thread sat waiting for an answer from a man who was asleep. The weekly allowance had come back on Wednesday morning, and the double-token window he had been trying to use all week went past with the machine idle.
That left Thursday's hours. The agent was Claude Code Opus 5.5, and the work was the pub: five sessions in a row on the Slag & Slurry, each one a short code build, a long wait for the world to load, and a few minutes of watching drinkers.
The pub that was empty in the real game
The trouble started the day before. In the editor's play mode the pub fills up: customers queue at the bar, get served, sit. In the built game it stayed empty. The agent had spent Wednesday writing logs for it, and the log said something stranger than a missing system. The queue existed. The first man in it simply never reached the front.
On Thursday it measured how far he was. The queue head had stalled 669 centimetres from the spot at the bar where he should be served. Everybody behind him waited, and nobody was seated, because the serving step is where a seat gets claimed. It tried the obvious thing first: widen the arrival tolerance from 60 centimetres to 120. That changed nothing, because a head stuck six and a half metres away is not a tolerance problem. A second run with the original values then seated two people, and the head moved 180 centimetres in the first minute, so the stall was not a permanent break in the map either. It was the route. From the north side of the room the shortest walk to the bar goes out of the front door and round: 2,270 centimetres against 669 straight.

The tolerance went back to 60, then up to 80 in the last session of the night. At 80 all five drinkers in the test sat first time, two of them on stools, which nobody had managed since the morning's first change. The agent also gave the customers a rule for the next stall: no progress for twenty seconds and the customer gives the seat up and picks another, and the first seat cools for three minutes before anyone tries it again.
The pint on its side
The pint was the bad one. The drinkers sit at the tables and lift a glass, and in the first pass the glass was 85 to 91 degrees from upright. A man held a full pint like a man pouring it out. The agent's first instinct was to measure the tilt in every animation clip and bake a rotation correction into the glass's grip. It wrote the script, it ran, and the table it printed said every clip, drinking included, tilts the glass by zero degrees.
That was the first thing it should have noticed. A seated pint at 85 degrees does not come out of clips that all read zero. The bone-chain maths had returned the identity, so the whole table was void, and the session spent most of a slot finding that out. When the script was repaired the numbers came back at 44 to 83 degrees, and the correction the agent then fitted to them failed both of its own gates: the quiet clips still tilted 24 degrees and the proper drinking clip 53.
So the plan changed to a leveller in C++ in place of a grip offset. Every frame, a seated drinker's pint is turned back to upright, and when the arm lifts it to the face the glass leans toward the head and not away from it. The first version built green and did nothing. It was checked on real seated bodies, and the tilt was still 85, 91 and 85. The agent stopped the slot there and dropped the stills, which is what the slot rule says when the first check fails. The next version held: 0.0 degrees at rest across a ninety-second watch of 593 frames. At the sip the glass leans 35 to 39 degrees toward the face, and the pint is 31 to 34 centimetres from the head bone, raised to the chin and not shoved at the mouth.
Turning the leveller off for ten seconds put the tilt back to 47 to 105 degrees, so it was the leveller doing the work. The drinkers who stand at the bar are still at 77 to 92. The leveller only looks at the seated.

Turning round in a chair
The fifth session found the next one by accident. A watch of the seated bodies showed pairs swung round by 164 degrees for twenty-five to thirty-one seconds at a time: two people at the same table, each turned to face the other, playing the standing-chat animations while sitting down. Nobody had asked for that, and it looked it. The sixth session fixed the turning and kept the standing clips off anybody who is not moving, and a 300-second trace afterwards held five drinkers in their seats with a yaw error of 0.0 on all of them.
Two short holds were left: 21 degrees for five seconds and 78 degrees for six, the second at the moment the agent parked the camera 170 centimetres from the man. They snap and hold and snap back, so they are not the old turn toward a partner, and they did not come back in a clean trace with the camera still. Whether moving the player near a seated body sets one off is the first question for the next session.
The stool feet number is the other loose end. The probe that was meant to say whether a sitter's feet reach the stool rung read a chair sitter's pelvis at 95 centimetres, which the picture beside it disproves, so the number is not trusted and the stool check goes down as unverified. Rockstar have a department for a man in a pub in GTA VI. James had a Thursday, and a prompt that waited all night.
The fault
A pint held at 85 degrees, and a pub that fills in the editor but not in the game: Unreal Engine 5.8
Seated NPC drinkers held a full glass 85 to 91 degrees off upright. The tilt table for every animation clip read 0 degrees, which looked like a clean result and meant the chain maths had returned identity. Separately, the pub queue head stalled 669 cm from the bar in a standalone run while the same pub filled normally in the editor, and doubling the arrival tolerance made no difference. A third fault the same day: seated pairs swung 164 degrees to face each other and played standing-chat clips for up to 31 seconds.
The fix
What held and what is still open
- A table where every row is zero is a failed measurement, not a pass. Check that one known-bad clip reads non-zero before trusting the rest.
- Level the pint in code each frame for seated drinkers, and test it on real seated bodies. A version that passes on the first body you look at can be doing nothing to the rest.
- A queue that stalls far from its mark is a route problem. Compare path length with straight-line distance before changing a tolerance.
- Give a customer a rule to give up a seat after twenty seconds of no progress, with a three-minute cooldown on that seat.
- Keep standing animations off anybody who is not walking.
- Still open: standing and walking drinkers hold the glass at 77 to 92 degrees, and no standing drinker appeared in eighteen minutes to test one.
The kit
What was used
Claude Code with the Unreal MCP and Monolith servers, read-only probe scripts that write a line per frame to a log, and a play-in-editor run at the lowest graphics setting for every check. Each code change was backed up first and built by a wrapper script.
Plain English
| Term | What it means |
|---|---|
| navmesh | An invisible map of walkable ground that characters use to work out routes. No navmesh, no walking. |
| skeleton | The hierarchy of bones inside an animated model. Two models sharing a skeleton can share animation. |
Things we still need to fix tomorrow:
- Find out whether moving the player near a seated body makes it snap its head round.
- Level the pint for standing and walking drinkers.
- Get a trustworthy number for stool feet.
- Re-shoot the pub stills, since the checks that were meant to carry them did not pass.
- The airport survey is waiting on its map-name check.