Second Chance GazetteDevlogToken Use

Residents Only

unreal-enginelandscaperoad-buildinghotelblendermodular-kitd3d12crashmetahumananimationcomponent-tickambulancehospitalawningsclaude-codegta-vi

Ten metres of fill

It was Saturday, so the gym and then the whole day on the game. By the end of it a hotel the size of a railway terminus stood on a hill above the town, two men had been taken to A&E by ambulance, and one of them was lying in mid-air beside his bed.

The day had started the night before. At ten past midnight the agent, Claude Code Opus 5.5, ran a dry run of the road up to the Bumoral, the luxury hotel James had asked for on Friday. A dry run paints nothing and carves nothing. It walks the planned road and reports what the ground would have to do.

What the ground would have to do was rise ten metres. The drive came off the ring road where the ring road sits on an embankment, five and a half metres up, and the ground beside the embankment was nine metres down. Held to a gradient of one in ten, the new road would need a bank of fill ten metres high and about 120 metres long before it found the hillside. The agent had already written in the handover that the carve was safe to undo. It found, in the same run, that it was not: the town's landscape had one editing layer, and anything carved went straight into the base terrain.

At one minute past one James was sent a card with the options, and picked the re-route. The agent swept the junction along the ring road, one point at a time. Three points south the cut was seven metres. Six points north it was a little under two, with eight tenths of a metre of fill, and the road came out at 2.7 km instead of 2.0.

That one went in just before noon. Painted, carved and saved: 184 points, 2,716 metres, climbing from seven metres above the town's datum to nearly 39. Measured every five metres afterwards, the road surface sat between 17 and 24 cm above the ground, and none of the 541 samples was out of range.

A new two-lane road with white centre dashes winding up between smooth green hills under a blue sky, seen from above, with snow-capped hills on the horizon.
The new drive to the Bumoral, from fourteen metres up, looking towards the hill. Two and three quarter kilometres of road that did not exist on Friday.

The junction still was the first thing James looked at. The drive's kerbs and pavement slabs ran straight across the ring road's central reservation and out over the far carriageway, proud of the deck, like somebody had laid a footpath across a dual carriageway. That was the known price of skipping the tool that levels every junction in the town. In the afternoon the agent removed the first six metres of the drive and made the kerb point the nose. The second still shows the drive stopping where a road should.

Two views of the same T-junction side by side. On the left the new road's pale kerb and pavement slabs run straight across the central reservation and the far carriageway of a dual carriageway. On the right the new road stops at the near carriageway's edge.
The junction before and after. On the left the drive's footway runs across the reservation and the far carriageway. On the right it stops at the near kerb.

A railway hotel in red sandstone

The building was drawn in Blender in the late afternoon, by a script, as a kit. The look is Scottish Baronial crossed with a Victorian railway hotel: crow-stepped gables, a clock tower with turrets hung off its corners, candle-snuffer roofs, a rusticated ground floor, two-over-two sashes. The bays are four metres wide and the storeys 4.4 metres high, and every bay of the front is one of about fifteen meshes. The clock dial says J. BUMORAL. The sign says EST. 1888 and RESIDENTS ONLY.

A Blender render of a large red sandstone Victorian hotel on a flat plane: six storeys, a central clock tower with a pointed roof, conical corner turrets, rows of sash windows and a long arcaded terrace wall in front.
The hotel as the kit assembles it in Blender. Every bay of that front is one of about fifteen pieces.

The interiors came after tea. A lobby twenty metres by twelve, double height, with a gallery round three sides on marble columns. A Scotch egg under a glass dome on the crest carpet. A grand piano. Five clocks over reception, for London, Paris, New York, Tokyo and Skegness. Three floors of guest rooms, penthouses on the fourth, a kitchen in the basement with a dumbwaiter, and a back office with a key rack that has one hook empty.

A Blender render of a double-height hotel lobby: green marble columns with gilt capitals, a coffered ceiling with a chandelier, a gallery above, a black and white chequered floor, a grand piano in the foreground and the reception desk at the back.
The lobby in the Blender render. In the game the same room is, for now, a lot darker.

James had downloaded fourteen of forty tracks he had generated for the place. By twenty to nine they were levelled to the same loudness and cut to length. The lift music loops every 16.7 seconds.

GTA VI has Vice City's hotels, which are what hotels in Florida look like. This one has a clock for Skegness. That is the whole argument for building the game here, and Rockstar would have needed a meeting to approve the joke.

Placed and saved

The first editor slot for the hotel, at twenty to nine, stopped where it was told to. The importer brought in 145 meshes and 112 materials. Then the placer's dry run sampled the ground under seven points of the footprint and found it 1.8 metres above the terrace on the uphill side. The rule was to stop if the ground came more than a metre above the terrace, because the building would be buried in the hill. It stopped.

The second slot, at quarter past nine, carved the uphill side down. 2,091 points of landscape were lowered, by up to 2.77 metres. The gate passed. The placer put down 2,972 pieces of hotel, and the agent saved all 2,972 straight away, plus 33 new folders in the level's outliner that had never been on disk. Its report said why: a high-quality still on an eight-gigabyte card is the step most likely to hang the machine, so it saved first and looked second.

Then it took the stills. From the drive, under the porte-cochere, there was sky.

Looking up from the drive at the front of a red sandstone hotel in shadow. Under its terrace and plinth there is a band of open sky and distant hills, where the ground should be: the building is hanging in the air.
From the drive, looking up at the front. The band of sky and distant hills under the terrace is where the ground should be.

The gate had only ever asked whether the ground was too high. On the downhill sides it was between 1.4 and 6.6 metres too low, and the terrace, the stone base and one corner turret were hanging over the slope.

At four minutes to ten James decided the car park would go at the side, with a path up to the entrance. The answer to the float was the one the Victorians used: a rusticated stone skirt down every outside wall, into the ground, and a raised forecourt and grand stair down to a car park lowered to meet the drive. At half past ten he added staff quarters, public toilets and a spa.

Grass in the staff quarters

The third slot started at half eleven. It imported the meshes for the spa and the staff rooms, moved on to building their materials, and at 23:43 the editor died. The error was about the graphics card running out of descriptors, the card's table of every texture it might be asked to draw. Working memory never went past 23 GB of 64. It was a known crash with a known cause, written in the project's own notes: build material instances with the big map loaded and the card's table fills. The script now refuses to build materials unless the empty map is loaded.

The re-run, from ten to midnight, went the other way round. Materials on the empty map first, then the town. 593 more points carved for the car park and the stair, then 984 pieces placed, 153 of them lights. This time it looked before it saved. The skirt was buried at the downhill corner. The car park did not float. The drive ran onto the tarmac without a step. Then it saved: 3,956 actor packages and 54 new folders.

The downhill corner of the red sandstone hotel on a grassy slope. A tall rusticated stone skirt runs from the terrace down into the ground, and the drive curves past on the left.
The downhill corner with the stone skirt, the bit of the hotel that was hanging in the air at half nine.

The interiors were lit now, and still dark. The level's exposure is locked for daylight, and a room lit by twenty-candela lamps does not register. And in the staff quarters, two floors down, the hill came through the room. The landscape ran between the floor and the ceiling of B2, and its grass grew between the iron beds. The second basement needs a carve of its own.

An aerial view of a red sandstone hotel with a clock tower on a green hilltop, a grand stair running down to a car park at its side, and a winding drive looping round the hill. A town spreads across the distance behind it.
The whole site from the air: the hotel, the stair down to the car park at its side, the drive looping round the hill, and the town in the distance.

Farid in the road

The crash rescue came off a list James made while researching GTA VI, the first idea on it. A crash hurts a lone driver. The player can ring 999, or pull the door open, lift the driver over his shoulder and drive them to A&E himself, where a nurse takes them to a bed. The next morning they get a cab home. It was being built in C++ and it had its first proper test at quarter past seven.

Farid Ahmadi, resident 60, was driving a small beige hatchback when the console told him he had crashed at 40 mph. The car pulled in to the kerb and held there. It pulled in through two wheelie bins. The seat was empty. Farid was standing in the road six metres behind the car with his arms out, in the stance a character is modelled in before anything animates it.

A man in a green jumper standing stiffly in the middle of a terraced street with his arms slightly out from his sides, several metres from any car, wheelie bins on the pavement.
Farid after the crash. The injured animation was on him. His body was not running it.

The agent read the body back. The injured clip was assigned, the right one, and the mesh was set to play it. The component's tick was off. Something upstream, the system that parks drivers' bodies, had switched it off, and a body that does not tick never evaluates its animation: the clip sits there assigned and the bones stay in the reference pose. Turning the tick back on in the running game put him on the ground at once, pelvis 14 cm off the road. There was a second fault under the first. The pose was applied 1.3 seconds before the body existed, because the body was spawned after the crash.

A man lying on the road beside a small beige car pulled in at the kerb of a terraced street, two wheelie bins pushed into the car's side and his head under one of them.
The same driver with the tick switched back on: lying beside the car he crashed. His head is under a wheelie bin.

The agent's request to drive the keyboard came back refused, so the steps behind a key press stayed for later. The ambulance did not need one. It came out of sight of the camera, and by 19:23 Farid had been admitted and was being treated.

Frames a second

By eleven the fixes were in a build: a body re-applies its patient's pose whenever it arrives, and wakes its own tick. James was at the desk for the second test. The request for keyboard control went out twice more and was refused twice more, apparently because the prompt was not reaching him, so the plan became James playing the key presses himself while the agent drove the console. The agent did not inject keys behind the refused permission, and said so.

At James's request the scalability was down at its lowest. The town ran at between about one and nine frames a second.

Three drivers were hurt: Dave Pickering, Sajid Mirza and Jermaine Wilson. Each was now slumped in the right pose with the tick running. Each was also drawn about a metre too low, which put Dave's head under the road. The ambulance got to Dave in 45 seconds and beat James to him.

Jermaine went from his car to the ground with no log line, and James's screen at 23:21 showed something red across the view that looked a lot like a man carried over a shoulder. James handed back at that point. The carry is unconfirmed.

At A&E Dave was given bed two. He lay flat, at right angles to it, 43 cm below the mattress, through the side rail.

A hospital ward with a curtain screen and a monitor stand. A man in a white shirt lies flat in mid-air beside a bed, at right angles to it, his legs passing through the side rail.
Bed two at A&E. Dave is treated and lying flat, crossways, in mid-air, through the rail.

The morning command discharged five patients at once. Dave walked out of the doors, stood by the drop-off, made a phone call, and was gone by 23:27, which is a cab requested and taken. Eight new faults were written down. By midnight there was a patch for them, eight files, 386 lines, staged and not yet built.

Awnings

At quarter to eleven, between the hotel and the ambulance, James wrote that the high street needed shop awnings that would not get in the way of the signs.

By half past eleven seven were modelled: Kebabylon in red and cream, the Radworth Balti House in maroon with gold pinstripes, Golden Fortune, Slice Slice Baby, Jerk Hut, Burger Boss, and Bagshaws the butcher in oxblood and cream butcher's stripes. The colours were lifted from each shop's own sign. Each roller box hangs under the front half of the sign's soffit, flush with its face, so nothing ever sits in front of the lettering. The canvas falls eight degrees over 1.4 metres, and from eye height the bottom of the sign clears it from 3.6 metres back. The scallops end at 2.15 metres, and the tallest resident is 1.95. The awnings are tagged as shelter, so in the rain residents will be able to stand under them.

A Blender render of a row of takeaway shopfronts with painted signs - The Radworth Balti House, Golden Fortune and others - each with a striped or plain canvas awning hung under the sign, so every sign stays readable.
Seven awnings in Blender, coloured from the shops' own signs. Every sign still reads from across the road.

They go into the town in the next editor slot.

The fault

Skeletal mesh animation is assigned but the character stays in the reference pose in Unreal Engine 5.8

  • An injured-driver clip is set on a MetaHuman body (SINGLE_NODE mode, the right asset, pause_anims false, AlwaysTickPoseAndRefreshBones), and the body stands in the reference pose, arms out.
  • Cause: is_component_tick_enabled() was False on the Body. Another system parks drivers' bodies with their tick off. A component that does not tick never evaluates its animation, whatever the visibility tick option says.
  • Second cause: the pose was applied 1.3 s before the body was spawned and attached, so the lookup for the body found nothing.

The fix

Re-enable the component tick when the pose is played, and re-apply on arrival

  • SetComponentTickEnabled(true) on the Body and Face whenever the injured pose is played. Proved in PIE first by hand: pelvis 89 cm to 14 cm off the road on the next read.
  • Re-apply the patient's pose whenever a body is attached to them, and retry while no body exists. Seen firing in the second PIE for both reasons, "new body" and "tick was off".

The fault

Building placed on a hillside floats in mid-air: placement ground check passes

  • A 2,972-piece hotel placed on a slope after the dry run's gate passed. From eye level there is sky under the terrace on the downhill sides.
  • Cause: the gate only stopped when the ground was ABOVE the terrace (by more than 1 m). Downhill it was 1.4 to 6.6 m BELOW. Everything was saved before anyone looked.

The fix

A skirt to the ground, and look before saving

  • A rusticated stone skirt mesh under every exterior wall, buried into the slope, plus a raised forecourt and a car park lowered to the drive.
  • The run order now takes an eye-level look at sg 0 BEFORE the save, and only the stills after it.

The fault

Fatal error: Hit D3D12 device limits on descriptors when attempting to allocate larger descriptor heap of size 1000000

  • The editor crashed while an import script built material instances for 49 new meshes with a large World Partition map loaded. Working memory was 14.8 GB of 64, so not memory.

The fix

Build materials on an empty map

  • Run the materials step with only the blank map loaded, then load the big map. The import script now refuses its materials steps unless the editor world is Blank, and saves every mesh by path at the end of its meshes step so a crash cannot take them.

The fault

A new road's dry run reports a 10 m fill bank where it leaves an embankment

  • Tie-in to a ring road on an embankment 5.5 m up, ground beside it about 9 m down, gradient capped at 10%: up to 10.2 m of fill for about 120 m.

The fix

Move the junction, not the road

  • Sweep the tie-in point along the major road and re-run the route each time. Three points one way: 7.4 m cut. Three the other: 1.9 m cut, 0.8 m fill. Built: max cut 1.04 m, max fill 1.79 m, deck 17 to 24 cm above the ground over 541 samples.

The fault

Injured NPC driver drawn a metre under the road while seated in the car

  • Bodies in the right pose, ticking, about 0.9 to 1.1 m low.
  • Probable cause: the capsule-centre-at-seat versus the mesh root offset is not compensated for the seated clip. Patch staged, not yet built.

The kit

  • Monolith's editor.run_python for every import, carve and placement: dry mode first, a backup to a second drive, saves by package path.
  • Blender driven by script for the whole hotel kit and the awnings, so a change re-exports every piece.
  • The injured lying and seated clips are generated in NVIDIA Kimodo.

Plain English

TermWhat it means
dry runRunning a script in a mode that reports what it would do without changing anything. Safe, and easy to leave switched on by mistake.
landscape carveReshaping the game's ground along a road or under a building, lowering it (a cut) or raising it (a fill). Written straight into the terrain, so it needs a snapshot to undo.
splineA curved line placed in the level that other things follow - a road, a bus route, a river.
component tickThe switch that lets one part of an object, such as a character's body mesh, update every frame. Turn it off and an animation can be assigned and never play: the body stands frozen in its reference pose.
reference poseThe neutral stance a character model is built in, before any animation is applied. Seeing it in a finished shot means the animation is not running at all.
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
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.
descriptor heapThe graphics card's table of handles to every texture and material it might be asked to draw. It has a hard size limit, and filling it crashes the editor outright rather than slowing it down.
D3D12The Windows graphics system Unreal uses to talk to the graphics card. Its errors usually mean the card or its memory has run out of room for something.
material instanceA copy of a material with some settings changed. Cheap to make and cheap to render, so most surfaces are instances rather than originals.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
exposureHow 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.

Things we still need to fix tomorrow:

  • Carve the second basement out of the hill so the grass leaves the staff quarters.
  • Light the interiors for the level's exposure, or give the hotel its own.
  • Build the crash-rescue patch: the seated driver a metre low, the patient crossways at the bed, the give-way release, and the body that turned invisible after being put down.
  • Confirm the shoulder carry with a real E press, then the passenger seat.
  • Place the seven awnings in the town.

← 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