Crosshair First
One room, six sessions
By Thursday night the cellar of 6 Radworth Road had been worked on by more copies of the agent than it has walls. Claude Code Opus 5.5 ran as several sessions at once, all sharing one open editor: one on the grow in the cellar, one on the watering can and the tap, one on a pair of glasses, and, across the road in the pub, one on a ghost. The first handover of the day was saved before eight in the morning. The last was saved four minutes after midnight.
The cellar is where the game's other career starts. The player comes out of prison on a release programme, and they can take the job on the bins, or they can go down the cellar steps and start growing. On Thursday the grow was a table of props. By the end of it, most of them could be picked up, carried, tipped, poured and put down again, and each of those verbs had found at least one way to go wrong first.
That is the line of the argument this entry is about: everything is interactive. GTA 6 has Vice City and the sun. Radworth has a cellar where you carry a bag of coir to a pot and tip it in yourself, watching the level rise. Rockstar have a department for the big things. James had a Thursday and a list of small ones.
The lamp that was on when it was off
The first job was the grow lamp's switch. Press U at the lamp and it lights; press it again and it goes out; and while it is on, the electricity meter in the hall turns faster and the bill goes up. That part worked in play by late morning. The meter disc turned at about nineteen degrees a second, which was a little faster than the agent's arithmetic said it should. It traced the difference to a 35 watt extractor fan that the grow simulation switches on at start. James said keep the fan.
The fault was at the start of the game. Walk into the cellar before touching anything and the lamp was glowing magenta, while every flag on the switch said it was off. The meter did not turn, so there was no bill, and the room still looked as though somebody had left the lamp on.
The agent had two candidates and read both graphs before touching either. The cellar's controller was doing its job: at start, its last act was to switch the lamp off. But the grow simulation has its own start-up routine that resets about thirty values, and two of them were 'light on' and 'one lamp fitted'. In a World Partition level the order in which objects start is not something you get to choose, and on this map the controller went first. It switched the lamp off. The simulation then switched it back on as part of tidying itself up, and nobody told the switch.
The fix was not to fight over the order. The switch now re-applies its own state on its first idle tick, after everybody has finished starting. The confirming run in play had the cellar dark at 4.3 seconds with nothing pressed.
Fourteen centimetres
Earlier that day James had pointed at the screen and said the lamp should only respond when it was actually in the crosshairs. Until then the game had used a forgiving sphere to work out what the player was looking at, which is kind in a street and useless on a crowded table, where the nearest thing wins whether you meant it or not. He chose a rule, crosshair first: whatever is exactly under the crosshair always wins, and the forgiving sphere only applies when the crosshair is on nothing, and only within ten degrees of it.
The agent built it. A few minutes later, in a different session, the glasses stopped working.
The glasses were the answer to the lamp's other problem. At its original setting the grow light barely registered on the room: the agent measured it at 0.06 of a stop over the whole frame, a small pink pool. It went up eightfold and widened, the cellar got its own pinned exposure, and a pair of grow-room glasses went on the table - pick them up with E, put them on with U, and the room reads normal again with the light blazing. James approved the look. Then the session pressed U at the glasses, and nothing happened.
The session that owned the glasses did the useful thing and proved its own half. A plain line from the camera hit the glasses' interaction box one degree off centre, 157 cm away. The game's own resolver, aimed at the same spot, found nothing at all. It reported that to the cellar session rather than patching somebody else's code.
The new line started at the character's eyes. In Unreal the eyes are a number on the character - 64 cm above its middle - and the camera the player actually sees through sits at 78. The crosshair line was running fourteen centimetres below the crosshair. On a wall that makes no difference. On a table it passes under a pair of glasses and hits the tabletop. The old sphere had been hiding the offset, because it was big enough to catch things anyway.
The line now starts at the camera. The sphere fallback was left at the eyes on purpose, because the pose for carrying the dinghy had been measured against that height and moving it would have broken a thing that works.
The coir pour
James's instruction for the coir was precise: the bag should rotate down as if the coir were tipping out, the pot should fill until full, and the bag should end up empty. The agent built it as an animation rather than a switch. The held bag tips, a stream of coir falls, and a disc of coir inside the pot rises on a curve that matches the taper of the pot, so the surface never floats inside the rim or clips through it.
The first time James watched it he said the tip looked good, and then that he could not see anything. The bag was held in front of the pot, at eye height, and it covered exactly the part of the scene the animation existed to show.

The agent changed two things. The bag now tips sideways, to the player's left, 110 degrees, with its lowest corner exactly where the stream comes out. And the resting pose for anything held in the hand came down and out to the right. It could not make that second change straight away, because the component that draws the held item belonged to the watering-can session at that moment. The two sessions had agreed by message which of them could edit what, and the cellar session waited to be told it was released.

On the second run James said it looked perfect this time. The pour takes about three and a half seconds.
A seed on its side
The rockwool came next, and James specified it in one breath: pick the pack up with E, tip it out onto the table with U, pick each cube up with E and move it, and put a seed into a cube with U. The pack tips to 140 degrees and six cubes tumble out under physics, roll, and settle on the table within about a second.
Putting things down found the next fault. The agent's first put-down placed a cube where a sweeping sphere first touched something, which on a table is often the edge of the table. It changed the put-down to aim along the same camera line as the crosshair, and the next cube landed on the exact spot it was aimed at, to the millimetre, on the tabletop.
Then a cube that had tumbled onto its side was sown, and the seed sat in the side of it. James said to stand the cube upright when it is sown. It does now, tested from on its side and from upside down.
The other fault in that part of the evening would never have been seen on screen. Pressing E with something already in your hand, aimed at an interactable, asks that interactable to handle the drop, and then empties the hand whatever the answer was. An interactable that does not know how to handle a drop therefore deletes whatever you were holding. The coir bag had no such handler. Neither, until that evening, did the watering can. Nothing errors. The item is simply gone.
Water through the wall
The watering can got as far as the tap, filled, and the first time it did, it went half into the brick. James said it should not go through the wall behind. It now turns to face the way the tap faces, with its spout into the room, and keeps sixteen centimetres off the wall.

By eleven at night it had poured two and a half litres into the big pot and the pot had taken 2.48 of them. Overfill the can at the tap and the spare water goes into a puddle on the floor, which the simulation tracks, and which does not yet show.
Five per cent
Across the road, the Slag and Slurry has a ghost in it now: its old Victorian landlord, rare, about 95 per cent transparent. He had been given a waistcoat that week, made to measure in Blender and sewn from a pattern, with a gate that measured every seam and every point where cloth came within a millimetre of skin. It was a great deal of tailoring for a man you can see five per cent of, and James said the neck was fine for a ghost.
The first thing that failed was fitting the shop-bought trousers. The route the agent had planned for them would have fed the refit tool vertex numbers from a full-detail character, and the landlord is the lighter, optimised kind, whose most detailed model has about 8,500 body vertices against the standard 51,617. The agent read Unreal's source to find that out before running it. The likely result had been an editor crash. It built a different route that dressed him in boots and a stand-in pair of trousers without that step.
Then he walked in play for the first time, and James could not see him.

At three times the opacity and three times the glow, James said he saw a dark outline, then that it might only have been his shadow, then that the editor was on Low scalability and he could not be sure. The agent checked. The ghost casts no shadow at all. His material is unlit and see-through, so his colour is a fixed glow blended over the room behind him, and a lit pub under automatic exposure is brighter than that glow. He was not glowing. He was darkening the room, most of all at the edges where the see-through material is densest, which reads as an outline.
The sounds for the empty glass he throws went better. The agent generated three slides and five thuds with ElevenLabs and picked them by measuring rather than by ear, and nearly picked the wrong thud: its first measurement faded the start of every file, which is where the knock is. Measured again, one clean mid-range tock won. By midnight the landlord had a lantern for his rounds upstairs, and the next session had a probe of the corridor he will walk.
The fault
Interaction line trace misses small objects under the crosshair in Unreal Engine 5.8
The focus resolver returned nothing on a small interactable on a table, while a plain line trace from the camera hit its box 1 degree off centre at 157 cm. The resolver's line started at GetActorEyesViewPoint (the pawn's BaseEyeHeight, 64 cm) while the player's FirstPersonCamera sits at 78 cm. The line ran 14 cm below the crosshair and hit the tabletop under the object. A forgiving r20 sphere trace had masked the offset until a "crosshair first" rule put the line trace ahead of it.
The fix
Start the interaction line at the camera component
The line trace now starts at the FirstPersonCamera world location. The sphere fallback (10 degree gate) stays at the eye deliberately, because a carry pose had been measured against it.
Guard: when an interaction test says "nothing focused", fire a bare line from the camera at the same target first. If that hits and the resolver does not, the resolver's origin is wrong, not the target.
The fault
Light looks switched on at game start although its switch is off - BeginPlay order under World Partition
Before any input, the switch controller read off, but the simulation it drives had LightOn true and one lamp fitted, so the glow and spotlight showed. The controller's BeginPlay switched the lamp off correctly; the simulation's own BeginPlay then reset about thirty variables to defaults, including those two. World Partition does not guarantee which actor begins play first.
The fix
Re-apply the switch state after start-up instead of relying on BeginPlay order
A small heal step on the controller's first idle tick re-applies its own power state after every actor has begun play. Verified in play: dark at 4.3 s with nothing pressed, and the on/off cycle unchanged.
Guard: if two actors both set the same value at BeginPlay, one of them will lose, and it will not always be the same one.
The fault
Pressing E with an item in hand at an interactable destroys the item
The pawn's place verb calls the focused interactable's place handler, then empties the hand regardless of the result. An interactable box with no place override therefore deletes the held item with no error. Found on a coir bag and on a watering can.
The fix
Give every E-capable interactable a place handler
Each box now handles a drop: sow, put back, or pass it to the pawn's normal drop at that spot.
Guard: any new box that accepts E needs the place override before it ships.
The fault
Translucent ghost invisible at 5% opacity, reads as a dark outline in a lit room
An unlit translucent character at 0.05 opacity could only be found by diffing two frames. At 0.15 opacity and triple emissive gain he read as a dark outline. His emissive was darker than the auto-exposed room behind him, so blending him in subtracted light, and the Fresnel rim, where opacity is highest, darkened most. He casts no shadow; the "shadow" was the rim.
The fix
Not built yet - a brightness ladder at the scalability the game ships at
The next pass walks him past the player at emissive gains of 8, 15 and 30, watched live, and then re-checks the chosen one at High, since the editor was on Low. If the cloth still darkens, its tint is lifted.
Also: a Hann window over a whole impact file fades out the transient at the start. Every thud measured as 96 to 99 per cent below 300 Hz until re-measured without one.
The kit
| Tool | Why this one |
|---|---|
| Several agent sessions on one editor | the cellar, the can, the glasses and the ghost ran in parallel, with ownership of shared Blueprints agreed by message |
| A bare camera line trace | proved the glasses were traceable, which pointed straight at the resolver |
| Unreal Engine 5.8 source | showed the planned garment refit would have fed out-of-range vertex ids to an optimised MetaHuman |
| ElevenLabs sound effects | eight glass takes in minutes, chosen by measurement |
| James watching the play window | the bag hiding the pot, the can in the wall, the seed on its side, the ghost nobody could see |
Plain English
| Term | What it means |
|---|---|
| line 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". |
| crosshair | The small mark in the middle of the screen showing what the player is looking at. In this game it decides what E and U act on. |
| BeginPlay | The moment each object in the level starts running when the game starts. Every object gets one, and in a big streamed world the order they arrive in is not guaranteed, so one object can quietly undo what another has just set up. |
| World Partition | Unreal's system for very large maps. It chops the world into a grid and only loads the squares near the player. |
| Blueprint | Unreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it. |
| 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. |
| translucent | A material the engine blends over whatever is behind it instead of drawing solid. How glass, water and ghosts are done; how bright it looks depends on what is behind it as much as on itself. |
| emissive | The part of a material that gives off light - a screen, a bulb, a neon sign. |
| exposure | How bright the virtual camera treats the scene, like a real camera's aperture and shutter. A higher EV100 number darkens the picture. This project pins it per building so a room does not slowly brighten while you stand in it. |
| scalability settings | The engine's quality dials - shadows, textures, effects, anti-aliasing - each of which can be set independently. Turning one up can cost far more than turning the rest up together. |
| MetaHuman | Epic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one. |
| optimised MetaHuman | A MetaHuman exported in a lighter version with fewer levels of detail. Its most detailed model is the standard character's second-best one, which matters to any tool that assumes the standard set is there. |
| LOD | Simpler versions of a model, swapped in as it gets further away. The trick that lets a street hold hundreds of objects. |
| Fab | Epic's marketplace for ready-made game assets - models, materials, characters, clothing. Buying a garment and refitting it is how almost everyone in this game got dressed. |
| Hann window | A fade applied to both ends of a sound clip before measuring its frequencies, so the cut edges do not show up as false noise. Useful on a steady sound; on a clip that starts with a bang it fades the bang out. |
Things we still need to fix tomorrow:
- James plays the rockwool through himself: pack, tip, cube, seed.
- Make the overflow puddle under the tap visible.
- Soak a cube: a water function on the rockwool cube for the can to call.
- Walk the ghost past at gains of 8, 15 and 30, choose one, then check it at High.
- Build his rounds upstairs with the lantern, then the walk round the grounds after closing.
- The empty coir bag goes in the wheelie bin next; there is no bin to put it in yet.