Ground That Isn't There
A Saturday, which is when things get finished
Weekdays are an hour either side of the day. Saturday is when something that will not fit in an evening finally gets done, and this one had three separate things wrong with it before breakfast was cleared away.
The snooker players were the first. They had been wrong in public since Friday night, when James watched them play for the first time and found seven things wrong in a single turn. Four of those were one fault wearing different hats, and the agent - Claude Code Opus 5, driving the editor over two MCP servers - had spent most of the night before proving it.
He would spend the morning on bodies, the evening on animals that kept dying, and the last part of the night on a golf club nobody could see. All three worked by the end. None of them looks right yet.
The hand that would not move
The correction that puts a man's hands onto a snooker cue had been fixed on Friday and was still wrong, and the way it was wrong is worth the whole entry.
Inverse kinematics works backwards: you say where the hand has to end up, and the engine solves the arm. The target for each hand was being read off the character's own hand socket
- which is the thing the correction had just moved. So on the first frame it did anything,
it read a position, moved the hand there, and from then on read back exactly what it had written. The target became whatever the hand happened to be when the correction first woke up, and stayed there. Not drifting. Not wrong by some amount. Frozen, at the pose it found on the first frame of the first stroke.
It is the same shape as the bug from the night before, where twenty lights reported back precisely the values written to them and none of it reached the disk. A thing that agrees with itself is not evidence of anything.
The new targets come from the cue instead, which is the object that actually knows where the hands need to be, plus a table of measurements taken offline from the clips. The prop cue in the man's hand now follows the table's cue along its line while keeping the hand's own fore-and-aft slide, so the delivery reads as a delivery. The turn clips had a root rotation baked into them - one of them turns the character 168 degrees, the other 143 - being played on top of a character already rotated ninety, which is why both men had been spinning completely round before walking anywhere. That was stripped out. And there is now a minimum distance a man will stand from the ball, because a bridge hand needs somewhere to go and he had been planting close enough that there was nowhere to put it.

It is much better. It is not right. Getting a MetaHuman body to move like a person without a motion capture suit is, as far as James can tell after a month of it, close to the hardest thing in the project - and every gain today came from correcting hand-keyed clips with geometry rather than from better clips, because better clips are what the suit would buy and there is no suit.
Clothes that were not on anybody
The other man's shirt had been tearing off his back for two days. Not clipping through, not stretched - separating, into a smooth white shape the size of a sail, while the arm inside it animated correctly.

The cause is a mismatch nobody looks for. His outfit has one level of detail; the body underneath it has four. When the body drops to its second or third level at distance it stops updating most of its skeleton, and the outfit - still at full detail, still asking for every bone - rides bones that are no longer being moved. The garment is not broken. It is starving.
It is pinned for now by forcing the whole character to full detail, which is a pin and not a cure, and which costs exactly what you would expect. The real fix is rebuilding the outfit with matching levels. Every other character in the game wearing a one-level outfit has the same fault waiting at distance, which is the sort of thing you find out on a Saturday and then have to decide whether to look at.
The gym was at lunchtime: thirty minutes running, then a quarter of an hour in the steam room.
Where the cats went
The afternoon's job was one James had asked for in five words: fix the animals falling through the world.
They were not falling through the world. They were falling through where the world had been. The game only keeps the part of the map near the player loaded, and each animal has a guard that catches it if it drops below a floor and puts it back on the ground at home. The guard fires a trace downwards to find the ground. When home is in a part of the map that has been unloaded, the trace finds nothing, the guard puts the animal back anyway, and the animal falls again, and the guard catches it again, and the cats - which had no guard at all - simply fell until the engine deleted them.
The fix is that a guard must never re-seat onto nothing. If the trace finds no ground, the animal goes home, gravity is switched off, and it is marked frozen. It keeps testing every frame, and the instant ground exists again it stands on it and starts walking. Cats got the same thing written for them from scratch, running even when the player is nowhere near, which is exactly when they were dying.
The proof was ordinary and slightly sad: fly a long way away, wait, fly back, and watch a hunting cat and six pigeons re-form out of their saved packages within twenty-five seconds, walking, with ground under them.
Then out for a walk round the local recreation ground.
A club you cannot see
The golf came last, and it started with the flattest bug report in the file:
in the last playtest i did i saw no golf club, and did not know how to place any ball or
hit it
The club was there. It had been there for days. It draws when you press the key, the log says so, and the log had been saying so while James stood on the tee looking at nothing. A golf address pose puts the club about seventy degrees below your eyeline, so a player standing upright and looking at the flag is looking a long way over the top of it. The fix is that drawing the club now pitches the view down to meet it.
GTA 6 will have a golf minigame. The interesting question is not whether it has one, it is who notices that the club is out of frame. At Rockstar that is a department, and somebody files it on a Tuesday. Here the person who built it is also the only person who has ever played it, and he found it by standing on a tee on a Saturday night wondering where his club had gone.
By the end of the night the ball had been hit twice with a mouse gesture and flown a hundred and eight metres, and there was a strip across the top of the screen telling him the hole, the par, the distance to the pin, which club he was holding, whether he was on line, and what the wind was doing - eight miles an hour, helping three, right to left eight, read live off the weather system that the rest of the town already uses. The mouse wheel turns the aim half a degree a notch, the same way the snooker cue does, because a player who has learned one should not have to learn the other.
None of that is a cutscene and none of it is a prompt telling him which button to press. It is a town where you walk onto a golf course, take a club out, and are told the things a person standing on a tee would actually know.
Three followers
Three followers on X now. Everyone is looking at GTA 6 and very little else, which is fair enough - it is the biggest thing in the medium and it has earned the room.
The harder part is working out what to build to make anybody want this one. There is a snooker club, a golf course, a bin round, a railway, caves, a bookmaker's and a pub in there already. A rules engine checked in thirty thousand cases does its work off screen. A bin lorry on a red brick terrace does not, which is why the refuse job's induction film is the part that went up: two minutes of it, made in the engine. The next one is the snooker.
He had hoped some friends might come round. They were working. He put the television on.
The fault
A hand IK target read from the character's own socket freezes on the first frame it evaluates
The correction lands the hand accurately on its target and the target never changes again. It is not drift and it is not an offset error - the pose is locked to whatever it was on the first frame the node's alpha rose above zero.
Cause: the target position was being read from the post-IK hand socket. The node moves the hand, then next frame reads the hand it just moved. After one frame the target is a fixed point in space with no relationship to the thing the hand is supposed to be holding.
Same class as a readback that confirms only what you just wrote. A feedback loop that closes on itself produces a green number and a frozen limb.
The fix
Derive the target from the object being held, never from the bone being corrected
Compute each hand target from the cue's own transform plus an offline table of per-clip offsets, so the target is anchored to the thing the hand must meet rather than to the hand.
Two adjacent fixes in the same pass, both needed before the pose reads correctly:
- Root rotation baked into a turn clip.
A_Snk_TurnLcarries -168 degrees and
A_Snk_TurnR +143, played on top of a character already yawed 90, so both men spun a full circle before every walk. Strip the root yaw from the clips.
- No minimum stance distance. A bridge hand needs room. Enforce a floor on how close the
character plants to the ball, or the solver is asked for a pose that cannot exist.
The guard: if a node's output feeds its own next input, say so out loud before building it.
The fault
A MetaHuman outfit separates from the body at distance and floats as a smooth shape
The garment does not clip or stretch - it detaches, while the limbs underneath it animate correctly. Only happens at distance, so it is invisible in a close-up test.
Cause: LOD mismatch between the follower and the leader. The outfit has one level of detail, the body has four. At distance the body drops a level and stops updating most of its skeleton; the outfit is still at full detail and still reading every bone, so it rides bones nothing is moving any more. Bone starvation, not a skinning fault.
The fix
Pin the character to LOD 0 to confirm it, then rebuild the outfit with matching LODs
Setting LODSync.forced_lod = 0 on the character makes the fault vanish, which both proves the diagnosis and buys time. LOD 1 is not enough - it has to be 0.
It is a pin, not a cure, and it costs what forcing full detail always costs. The real fix is building the outfit with the same number of levels as the body.
The guard: any character wearing a one-LOD outfit over a multi-LOD body has this fault waiting. Check the counts match before blaming the skinning.
The fault
Animals fall to their deaths where the landscape has streamed out
Characters far from the player drop through the floor and are destroyed. A guard that is supposed to catch them makes it worse: it re-seats them at their home position, they fall again, and the cycle repeats until the engine removes them.
Cause: the guard finds the ground with a downward trace. In an unloaded part of a World Partition map there is no ground to hit, so the trace returns nothing and the guard re-seats onto empty space. Per-actor streaming flags are not involved - every actor checked was spatially loaded with no runtime grid, and they reappear correctly once the cell reloads.
The fix
A guard must never re-seat onto nothing - freeze instead, and re-test every frame
On a trace that finds no ground: move the character home, set its movement mode to MOVE_None so gravity stops, and set a GuardFrozen flag. Make the guard's condition (z < floor) OR GuardFrozen, so a frozen character keeps tracing every frame and the moment ground exists again it seats on it, returns to MOVE_Walking and clears the flag.
Run the guard outside any near-the-player gate. The failure happens precisely when the player is far away, so a proximity-gated guard is switched off for the entire duration of the bug.
The guard on the guard: a recovery routine that assumes the thing it recovers onto exists is a loop, not a recovery.
The kit
| Tool | Why this one |
|---|---|
| Unreal Engine 5.8 | all of it, and the only place any of the three faults were visible |
| A live PIE probe flying away and back | the only way to prove a streaming fault - it cannot be reproduced standing still |
| An offline table of clip measurements | the anchor that broke the IK feedback loop |
| The project's own weather system | the golf wind is read from the same manager the town already runs, rather than invented for the minigame |
Plain English
| Term | What it means |
|---|---|
| inverse kinematics | Working an arm or a leg backwards from where the hand or foot has to end up, instead of playing whatever the animation happened to record. It is how a character's hand can land on a moving object the animator never saw. |
| LOD | Simpler versions of a model, swapped in as it gets further away. The trick that lets a street hold hundreds of objects. |
| MetaHuman | Epic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one. |
| World Partition | Unreal's system for very large maps. It chops the world into a grid and only loads the squares near the player. |
| skeleton | The hierarchy of bones inside an animated model. Two models sharing a skeleton can share animation. |
| trace | Firing 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". |
| 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. |
| animation blueprint | The logic deciding which animation a character plays and how one blends into the next. |
| actor | Anything placed in the game world - a lamp post, a person, a trigger volume, a camera. If it sits in the level, it is an actor. |
Things we still need to fix tomorrow:
- The snooker stroke is much better and is not right. The feet render as untextured blocks and
the grip roll is still whatever the clip does.
- The outfit LOD fix is a pin, not a cure. Every other character in a one-LOD outfit has the
same fault waiting at distance, so the next job is counting how many that is.
- A frozen bird's own AI can flip its movement mode back while it is waiting for ground. The
flag re-freezes it next frame, so it bounces rather than falls, but it bounces.
- Two golf shots have been hit, the second one 108 metres. A whole hole is next.
- The refuse induction film is up. The snooker, the golf and the railway are the queue behind
it, and all three are playable in part already.