# Anchorage Station The Tethys facility at sea level above the Throat, assembled in Blender from the **Modular SciFi Season 1 Starter Bundle** (Fab, `TheDescentUE/Content/StarterBundle`), with the vessel docked at it. There are two files (Blender 5.2): | File | What | Built | |---|---|---| | `Anchorage_Station_exterior.blend` | **the completed station**: the rooms, an outer shell round them, and the ice it stands on | 2026-10-13 | | `Anchorage_Station.blend` | the rooms only, as first built. Kept as it was; it has no outside and nothing under it | 2026-10-12 | Previews are in `previews/`: `AnchorageExt_*` show the completed station from outside, `Anchorage_*` the rooms (the plan first: `Anchorage_01_plan_labelled.png`; it shows the first file, in which the quays start 5.84 m nearer the dock head). ## What it is One level, about 85 m east to west and 87 m north to south, on an ice floe of 193 x 122 m, with the vessel alongside its south quay. ``` landing ground, landing deck north door (drop capsule berth) 01 ARRIVALS lock 02 PROCESSING north hall with the counter, security | medical side wings round a central block, supply hall 04 RELAY CONTROL -- west hall -- 03 CENTRAL CROSSING -- 05 CARGO hall -- maintenance door, apron 06 MOORING GALLERY west quay ----- 07 DOCK HEAD ----- east quay observation galleries along the hull boarding bridge ~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ the edge of the ice ================|==============================> the vessel (M-Ship v2), bow east, port side to the quay ``` - **The main axis is the story**: set down at the north door, processed, through the crossing, down the gallery and across the boarding bridge into the ship. From the supply hall you already see the hull at the end of it. - **The dock**: the vessel lies east-west along the south side. The boarding bridge meets its port flank around the service hatch, **level with the ship's lower deck** (ship z -3.36 = station floor). The two quays run along the hull; their south windows are filled by it. - **Relay Control** (the pack's command centre) is entered on axis from the crossing. Its 8.8 m "big door", closed with three wall panels in the pack's demo, has a real doorway frame here. - **Nobody lives here**, so the fittings are few: a counter with the convict's file, bare racks in the supply hall, crates stacked two high on the eight floor pads of the cargo alcoves. - **There is no detention** (the user, 2026-10-21). The first build had a DETENTION sign at the processing hall's north-east door and an empty "detention room" behind it; the user took the sign out of the station by hand (it was there on 10-14 and gone by 10-21), and `dressing.py` no longer makes it. That room is the north end of the east wing, the one the MEDICAL sign leads into. - **Lettering** uses the pack's own floor decals (ARRIVALS, PROCESSING, SECURITY, MEDICAL, SUPPLIES, CONTROL, CARGO, DOCK, STATION, OBSERVATION, DEPARTURES, STAND CLEAR, MAINTENANCE, RESTRICTED). The rules are at the top of `build/dressing.py`. ## The outside (2026-10-13) The kit is made to be seen from inside. Its walls and ceilings are one-sided, so from outside the station was a cage one looked into. Its window galleries are finished outside only at the slanted window frames; below the sills, between the frames, above them and at their ends they are open. `build/exterior.py` closes all of it: - **Rooms without windows** (processing, both halls, cargo, the junctions, the boarding bridge): one welded shell, made as a union of boxes so that only faces that end up outside exist. The two junctions are wider, slightly taller blocks, so every gallery butts against a wall at least as wide as itself. - **Window galleries** (arrivals lock, mooring gallery, both quays): a base wall up to the sill, piers between the kit's window frames that stand 10 cm proud of them, a frieze above, a roof slab, and an end wall round each outer door. The kit's leaning window frames stay what one sees. - **Relay Control**: the kit's round window drum stays. It gets a roof cap with a round opening over the skylight, walls round its square half, a top on the ring over the window heads, and a footing ring. The skylight's frame is one-sided too; a second instance of the same kit mesh, mirrored upwards, shows it from the roof. - **Decks**: a landing deck with a ramp outside the arrivals door (where the convict is set down), an apron with a ramp outside the maintenance door. - **On the roofs**: ducts meeting in a plenum on each junction, two air handlers, and the uplink mast with its dish on Relay Control: the one thing a station that relays everything to the ship in orbit has to show. The same datums on every wall: dark base band up to floor level, white panels with an orange band above, a joint at 4.40 m (one storey of the kit), dark ribbed roofs. All of it in the pack's own materials. The three shell meshes have an **inner skin** (every face once more, turned round, 1 cm inwards, dark). The kit's rooms have hairline gaps between their pieces; through those one saw the sky. Now one sees a dark wall. ## The ice (2026-10-13) `build/ice.py`. One floe, 10 to 13 m thick, a closed mesh in quads: 193 x 122 m until 2026-10-14, then 916 x 956 m for an hour, now **350 x 350 m** (next section but one). - Its top is at **-0.62 m** under the station and on the worked ground round it. The station's floors are at 0.05 m, its lowest pieces at -0.51 m; the shell's walls go down to -0.80 m, so they stand 18 cm in the ice. - Under Relay Control's window drum, whose sunken ring goes down to -1.70 m, the ice is at -1.84 m, and a moat of that depth runs round the drum. That is still above the sea (-1.90 m), so the moat is dry. - Away from the station it swells, with mounds of up to 2.6 m at the rim. - **The berth** is the floe's south edge, straight at y = -35.70 for the vessel's whole length and beyond. The edge drops as a cliff to below the waterline; under water the flanks draw in. - On it, from the pack's own outdoor meshes (the ones its showcase map stands in), set out by hand: three groups of seracs on the high ground (each serac is the pack's pair, a snow core and a slightly larger shell of ice), a lane of ice blocks marking the landing ground outside the arrivals door, patches of drift ice. The sea is 1.28 m below the top of the ice. The vessel floats beside the floe as before. ## The broken ice edge and the relay dish (2026-10-14) - The floe's edge is no longer a straight cut: it wanders, has 21 bites, rounded corners, a lip, a waterline notch and a foot (`build/ice.py`, `_Rim`). Along the vessel it is held back: it moves between y -34.29 and -35.75; smallest gap to the vessel 0.89 m. `apply_exterior.py -- --only floe` swaps only the floe's mesh in a file. - The relay on Relay Control's roof is the **Sci-Fi Lite Sample Pack's satellite** (`/Game/SciFI_Lite_Assets`, the user's choice), three kit pieces: base, yoke, dish. The user tipped the dish back by hand; the recipe has that pose and keeps whatever pose it finds (`exterior.add_relay_dish`). The pack was exported like the first kit into `kit_export_lite/` (`ue_export_kit.ps1 -Root /Game/SciFI_Lite_Assets -Out kit_export_lite`). ## The big floe and the ice coolers (2026-10-14) The user: *"make the ice 916meter x 956 meter with random deformations like we did before. I want ice bigger. In order to maintain the ice there are 4 big machines spread over on the Ice to cool it so ice never melts use the asset from fab library called "star citizen workflow to sketchfab - decals 6" without the human. (there will be robots in the facility inside or outside where they are maintaining the whole facility to run later on.)"* **The floe** (`build/ice.py`): **349.9 x 350.1 m**, x -174.9 to 175.0 (east-west), y from the berth (-36.1) to 314.1, as "193 x 122" was east-west by north-south. 51,406 quads, closed, no face cuts another. It was 916 x 956 m first; the user, an hour later: *"it looks too big now thinking for a second. make it 350x350m"* (that recipe: `models/_backups/ice_916x956_2026-10-14.py`). - **Round the station the ground is the same.** The grid keeps its 2 m cells there, and inside the first floe (and 25 m round it) the height function is the one it was: 95 % of points are within 7 mm of before (the largest differences, 0.2 m, are where the grid's lines now cross the moat's slope at other places). The seracs, blocks and drift ice were laid on that height function, so they stand as they did. - **Further out** the cells grow to 4 m (3 m along the floe's own edge), and the ground gets a slower swell (about 0.85 m over 150 m). - **The outline:** the berth is straight from x -70 to 104 as before; beyond it the south edge falls back to the north in an S (28 m at the west corner, 20 m at the east, level again at the corners), so the vessel has open water on three sides. The other edges bow out and wander. - **The broken edge** is made as before (`_Rim`): wander, bites, lip, notch, foot; its points are 0.7 to 1.3 m apart all round. The corners are rounded off as far as the grid allows (11 to 22 m). Along the vessel the edge stays between y -34.24 and -35.75; smallest gap to the vessel 0.89 m, as before. - On the way (at 916 m) 600 faces that cut each other were found and taken out. They came from rim points matched to grid points up to 14 m off, from a band only 6 m deep where the rows are fine, from corners rounded deeper than the band, and from the apron ring passing the lip at deep bites. At 350 m the south-west corner folded once more, where the south edge climbed into it too steeply; the S fixed that. The first floe had 115 such faces at its four corners; they are gone with it. **The ice coolers** (`build/coolers.py`, collection `12 ICE COOLERS`): four of the Fab machine, spread over the floe's free ice, (-110, 75), (110, 75), (-110, 225) and (110, 225): 110 m east and west of the station's axis, level with the landing ground and 150 m further north. (The quarter points of a 350 m floe would stand in the station's serac groups; every pad keeps 30 m from them.) Each stands on a level pad of 33 x 30 m, the engine's screen to the south, towards the station. Native size, as the author made it: a stepped platform 10 x 13 m with railings, the engine 6.6 m high. (It came with a camouflage cloth over it, 19 x 18 m; on 2026-10-21 the user: *"remove that camo textile on top of the generators"*: it is gone, see below.) The user has since turned the four coolers by hand (south-west 93.2°, south-east -54°, north-west 21.9°, north-east -21.6°); what is placed at a cooler goes by its own frame. - **The model**: *Star Citizen Workflow to Sketchfab - Decals 6* by Gerardo Justel, from the user's Fab library (`Assets/VaultCache/FabLibrary/Star_Citizen_Workflow_to_Sketchfab_-_Decals_6-b17f1be3`, a .blend with packed textures). `build/fab_cooler_prepare.py` made it ready, once, into `source_fab/scifiEngine_005/` (the source is untouched): - left out: the two figures and their glowing eyes (the "human"), the showroom's floor plane and camera, and 13 engine parts that the source has twice, face for face - kept as made: the platform, the engine, the decals, and the helpers they need - left out since 2026-10-21: the cloth (the version with it: `models/_backups/scifiEngine_005_ice_cooler_with-cloth_2026-10-21.blend`) - 52 parts, 48,591 triangles; the 107 textures written out as files beside it (`textures/`, 42.6 MB) - **In the file** the model is one collection, `ICE COOLER | scifiEngine_005 (…)`, kept out of the view layer like the KIT collection. The four coolers are instances of it, so the geometry is there once. - **For Unreal** the coolers are listed in the layout's `"props"` (asset `fab:scifiEngine_005`, with their places), like the props from polyhaven.com; nothing imports the model yet. - **The robots** that maintain the coolers and the station: since 2026-10-21 (`build/furnish.py`, below) one works at the south-west cooler's screen and one walks across the ice to it; two more are inside. ## The outpost (2026-10-14) The user: *"The exterior buildings and structures are too flat, too basic, looks like 95 game do it more versatile, stylized, try to do like an actual outpost"*, with reference pictures of white armour over a dark structure, orange edges, machinery in the gaps, aerials, glowing strips and pads with rings. The shell above stays as the closed structure and turned dark; everything new stands outside it (`build/outpost.py`, `outpost_more.py`, `outpost_site.py`, the modelling toolkit `hs.py`): - **Armour on every wall**, the same rules everywhere: a concrete plinth; white plates in two rows (three on Relay Control), 12 to 16 cm proud, 7 cm apart, corners clipped, a pressed field in each; orange end plates; a louvred plate on long walls; between the rows a service band with two pipes on brackets; a white parapet with an orange underside and a dark coping; an eight-sided pylon on each outer corner (light strips, orange cap, aerial with a red lamp); a pier where a wall ends against a gallery. - **Window galleries**: base course, fins on the piers between the kit's window frames, plates and a light strip over every window, a visor along the roof's edge that turns the corner to the door, a spine and ribs on the roof. - **Portals** at the four outer doors: leaning jamb pylons, a deep lintel with a lamp under it, an orange sign plate. None at the boarding bridge's end: nothing may reach past it towards the hull. - **Relay Control's drum**: a crown of eleven canted plates, orange underneath; a rail round the skylight. - **Roofs**: plant units with louvres and fans, the Sci-Fi Lite pack's 0.8 m duct on stands between them, condensers, hatches, a mast on the crossing. - **Site**: a landing pad on the landing ground with the pack's portal as a gate, walkways with marker posts, a tank farm with a feed line into the cargo hall, a 24 m comms mast, eight lighting masts with lamps, mooring bitts along the berth, the pack's cargo pods on cradles, fences, terminals, and props from polyhaven.com. It is set out by rule from the plan (the walls are read as runs with the outside to their right and linked at their corners) and by hand by use (the site). The same input gives the same outpost. `apply_exterior.py -- --only outpost` puts it into a file, or replaces it there. **Materials.** The armour is in the Sci-Fi Lite pack's painted metals. What the pack lacks are instances of its own materials with one value changed (`build/own_materials.py`: orange, dark metal, cyan, red and amber lights) under `/Game/Anchorage/Materials`. From the user's Fab library (`Assets/VaultCache`, "check for materials for vault cache"): three scanned concretes as 2K copies in `textures/scans/` (`build/make_scans.py`): dark precast panels for the structure behind the armour, board-marked concrete for plinths and footings, smooth concrete for pads and slabs. From **polyhaven.com** (CC0, the user: *"gather many things from there its permitted"*; `build/fetch_polyhaven.py`, files and addresses in `source_polyhaven/manifest.json`): the overcast sky that lights the scene, tread plate for the walkways, and the site's props. ## The doors can open (2026-10-14) The user lifted the big door leaves in the file and found the flaw: *"these doors are when opened (slide) they will clip through the walls because there is not enough coverage"*. The kit's leaf (`SM_Door_L`, `SM_Hall_Door_L`) is one piece, 6.8 x 4.0 m: it can only lift. Over every doorway there was half a metre of wall, so an open leaf cut through my roof and stood three metres clear above the building. There are five leaves: the arrivals door, both quay end doors, the cargo hall's maintenance door, and the inner door between the crossing and the cargo hall. - **Travel**: 4.10 m straight up (`exterior.DOOR_TRAVEL`; each leaf carries it as `["ue_door_travel_m"]`, the layout as `door_travel_cm`). The frame's opening is 3.72 m high, but at 3.80 the leaf's foot still stands in the trim of the frame's head; from 4.10 up the kit's own frame has the slot for it. - **Slots**: the roofs have a slot over every leaf (`exterior.door_slots`: the shell of the rooms and the gallery roof slabs are built round them). Nothing of mine is in a leaf's way. - **Housings**: on every slot stands a housing that takes the whole lifted leaf (`outpost_more.door_housing`): four walls and a cap, closed, 8.5 m high; armour on its long faces, a light strip up the middle, red lamps, the hoist's motor box behind. At the four outer doors it rises behind the portal's lintel. - The cargo hall's roof duct no longer runs to the crossing: the inner door's housing stands across that line. It turns down into the hall's roof with the pack's bend. - `build/check_doors.py` lifts every leaf by its travel and reports what it passes through and how much of it shows from outside. Result: 5 leaves, nothing passed through, nothing shows. (Since the rig it checks the whole travel: next section.) - `apply_exterior.py -- --only doors` puts slots and housings into a file in place. ### The doors open and close (the rig, 2026-10-14) The user: *"rig the doors so they open and close"*. `build/doors.py` (`rig()`), in the collection **11 DOORS | rig (open and close)**: | Control | Property | What it does | |---|---|---| | `DOOR \| arrivals door (Hall_Door_L_11)`, `DOOR \| west quay end door (Hall_Door_L_9)`, `DOOR \| east quay end door (Hall_Door_L_9.001)`, `DOOR \| cargo maintenance door (Hall_Door_L_8)`, `DOOR \| crossing to cargo hall (Hall_Door_L_7)`: an arrow over each doorway | `open` (Object properties, Custom Properties; a slider 0..1) | opens that door: 0 shut, 1 open (4.10 m up into its housing) | | `DOORS \| all`, over the crossing | `open_all` | opens every door; the timeline drives it | - **Press play**: the action `DOORS | all | OPEN_CLOSE 2s` shuts every door at frame 1, opens it by frame 61 (2 s at the scene's 30 fps, eased at both ends), holds it open to 121 and shuts it again by 181. A door's own slider is not keyed: set it to 1 and that door stays open whatever the timeline does. - **How**: each leaf's height has a driver, shut height + 4.10 m × the larger of its slider and `open_all`. It is a simple expression, which Blender works out without Python, so it runs in a Blender that does not run scripts in files (this one doesn't). - **The shut place is kept**: like the vessel's moon pool doors, every leaf carries `closed_location`. The roof slots and housings (`exterior.door_leaves`) and the Unreal layout (`export_layout.py`: the leaf's matrix, `door_travel_cm`, and `door_open_seconds` 2.0) go by it, so a door left open in the file is shut in Unreal and the housings stay where they are. The checks stand every leaf shut first (`doors.at_rest`). - **To rig again** after leaves are added or moved (shut): `doors.rig()` in the open file; it takes the old rig away first. **Checked through the whole travel** (`check_doors.py`): - Lifted 5 cm at a time, every leaf rides in its own kit frame up to 3.9 m (the HW doorways' floor plate too): the kit seats the shut leaf in it. It meets nothing else. - At eleven heights, points on both faces of the leaf above the kit's head slot are looked at from outside (rays that leave the station) and from 72 eyes on both sides of each doorway (1 to 9 m away, 1.0 to 2.6 m up). The first run found a slit of mine at the four outer doors. The shell's wall over the doorway stands 2 to 5 cm in front of the kit frame, and the frame is open at its top, so from under the doorway one saw past the dark head strip into the hollow over the frame, and the leaf going up through it. The head strip now has an underside that reaches 12 cm back into the frame (`exterior.door_casing`, `CASING_SEAL`). Since then nothing above the slot shows. - Looking straight up into the kit's head slot (z 3.72 to 3.94) one sees the leaf in it. That is the kit's door, not a fault, and the check lists it separately. - The rig: no driver needs Python; sliders at 0, 0.25, 0.5 and 1 give the right heights; the timeline shuts, opens and shuts every door. - Pictures with every door 60 % open: `previews/AnchorageDoors_D1` (arrivals door from the pad), `_D2` (cargo maintenance door), `_D3` (the inner door seen from the cargo hall). ## The furnishing (2026-10-21) The user, with a picture of a cooler under its cloth: *"1- remove that camo textile on top of the generators. 2- There is a another asset "...\scifi-fan-convector-heater.zip" put it meaningfully inside the facility in the corners couple of them. 3- add and place nutrition feeder to the facility walls to the meaningfully 4- place couple robots 2 inside 2 outside 1 next to one of the generators use this robot model asset in this path "...\Robotscob94d93332ad0V1" 5- use creates and tools from Modular Scifi Season 2 Starter Bundle meaningfully place it inside anchorage. also use"* nine more models (two glTF containers from `Assets/`, and from the Fab library the Epsilon container, the Scifi crate, ScifiContainer_005, Lantern 2, the Irrigation control robot, the PPB portable battery and the Cart). **The cloth** is gone from the coolers' model (`coolers.drop_cloth()` in the file, and `fab_cooler_prepare.py` leaves it out now). **What stands where** (`build/furnish.py`, `SPEC`; collection `13 FURNISHING` with four groups): | Group | Where | What | |---|---|---| | fan heaters (4) | in corners of the processing hall and its side wings | processing hall NW, medical wing NE (its north end) and SE, security wing NW | | nutrition feeders (3) | one per room (the user: *"reduce the number of feeders one per room or corridor"*; there were six, two in each room), on flat wall panels, the cavity at 1.03 m | processing hall west wall (the convict's first ration after the cryo sleep), medical wing east wall, security wing west wall (facing its door) | | robots (4) | 2 outside, 2 inside | at the south-west cooler's screen, its hand on the LOCK panel (ochre); on the ice walking to that cooler (khaki); in the supplies hall's west bay at a container's screen (teal); in the cargo hall walking to the maintenance door (white) | | cargo and tools (37) | supplies hall bays, rack room, cargo hall, dock head, east quay, by the doors | west bay: ScifiContainer_005, triangle and Epsilon containers; east bay: a pallet with two Season 2 cases and the lantern, crate container B; rack room: the cart with its books, a wire reel; cargo hall, at the sealed maintenance door: rubber mats, toolbox, screwdriver, wrench, work light, the portable battery (its cables across the floor), an extinguisher; dock head: a pallet of water drums by the bridge; east quay (staged for the vessel along the north windows): the four barrels, a barrel, crate container B, the netted crate, a pallet with a case, oxygen and nitrogen tanks; extinguishers at the arrivals door, the processing counter and the boarding bridge | The arrivals lock got no heaters: its south end is a 7.6 m opening and its north corners are where the floating hazard band hangs (see "Seen, not changed"). The halls take no feeders: their walls are slanted. **The models** (made ready once, beside the station in `source_fab/`): - `build/props_prepare.py -- `: the heater (from its zip), the nine models (the crate glTF is three crates: A barrel, B crate, C four barrels) and the nutrition feeder (`models/nutrition-feeder`, without its collision hulls, its origin on the wall face, the injector at rest). Each at real size on its base, showroom floors and cameras left out, textures relinked by name and copied beside it at most 2048 px (`MAX_TEX`), names prefixed with its key. The models come with 4K maps, about 120: at full size the furnished station did not fit the GPU beside the open Blender (16 GB, of which the AMD software service held 9.5 GB) and EEVEE stalled without an error; 102 copies were made 2K (726 to 169 MB) and reloaded in the open file. The originals stay in `Assets/` and the Fab library. - `build/robot_prepare.py`: the robot pack exported from Unreal (`ue_export_kit.ps1 -Root /Game/Robot_scout_R_21 -Do meshes,skeletal,materials,textures -Render -Out models\anchorage\kit_export_robot`; `-Render` is new: skeletal meshes need a render device), posed and baked to four meshes, 2K textures (`source_fab/robot_scout/textures`, normals flipped to OpenGL). The pack's animations carry the UE4 mannequin's bone offsets, which pulled the robot's toe plates off: only their rotations are used (and the pelvis's offset), as Unreal's retargeting does. The reach is a two-bone IK by hand (Blender's IK constraint puts the FBX's bone tail, not the wrist, on the target). - `build/season2_prepare.py`: 15 Season 2 pieces copied out of the vessel's interior fork (only read) into `source_fab/season2/` with their 55 textures. They keep `["ue_mesh"]`: Unreal spawns the packs' own assets. **How a place is found and checked** (`furnish.py`, rays and BVHs in `furnish_geo.py`): each entry has a rule: `floor`, `wall:` (a floor prop with its back to the wall's most forward face; a feeder on a stretch of wall flat to 1.2 cm over its whole panel, not glass, searched along the wall), `corner:`, `on:`, `reach:` (a robot's fingertips 2 cm off that prop's front), `frame:` (in a cooler's own frame: the user turned them). Then, with the models' own faces: no clash with the station, the coolers or each other (raised floor trims may stand 12 cm into a prop's foot: the floors are panels from -2 to +10 cm, a prop rests at the middle of what is under it); on the floor; nothing behind a feeder's 12.3 cm tunnel (no room, no other wall's face); and the walking lanes (`LANES`: the axis, the halls, the quays, the wings' passages) clear of everything but robots. All 51 pass. - `furnish.apply()` in the open file (it takes its own old placements away first), `furnish.check()` checks what stands in the file now (a prop moved by hand is checked where it stands), `furnish.remove()` takes it out. The models stay in `PROPS | furnishing models (kept out of the view layer)`. - `furnish.clean_materials()` (run by `apply`): the DecalMachine-built Fab models name decal atlases and height maps on their author's disk; their nodes are taken out, so the file names no missing images (they rendered as nothing). - **The feeders' holes** (the user, with a close-up: *"feeders hole in the wall is it possible to mask it so hole shows not the wall inside?"*): the hand tunnel goes 12.3 cm into the wall, but the wall's face ran across its mouth. `furnish.cut_walls()` (run by `apply`) gives the one wall object behind each feeder a boolean modifier (difference, exact, hole tolerant) with a hidden cutter, the convex hull of the tunnel and its lip (`13 FURNISHING | feeder wall cuts (hidden cutters)`): three walls since the feeders are one per room (Hall_Wall_C_11.001, Wall_A15, Wall_A9; the three others are whole again). Only those objects change; the kit mesh they share with other walls does not. Rays into every tunnel now reach its back. Each cutter is parented to its feeder: slide a feeder along its wall and the hole goes with it; onto another wall, run `cut_walls()` again. `uncut_walls()` takes the cuts away (`remove` does it). In Unreal the pack's walls are whole: the layout marks those six instances with `"cut_by_feeders"`; a cut copy of each is still to be made there. - `check_site.py` takes only the coolers as coolers now (the furnishing's props are Fab instances too). **For Unreal** (`export_layout.py`): props as `fab:` (model to import, with its places) or `fbx:` (the feeder's FBX in `models/nutrition-feeder/fbx`); the Season 2 pieces as ordinary kit instances; the robots in a new list `"robots"` (skeletal mesh, the scheme's materials, the animation and the time the pose came from). `ue_spawn_layout.py` spawns them as SkeletalMeshActors holding that animation (`ue_spawn_layout.ps1 -Render`). **Seen, not changed:** the hazard bands at the arrivals door (y 39.4 to 40.4) and the maintenance door (x 18.2 to 19.2) hang in the air at 0.64 m and 0.86 m: `dressing.py` took their height from rays cast from 1.0 m, which met the door frames. The props keep clear of them. A fix (rays from lower, the seven bands put down on the floor) is the user's to ask for. Pictures: `previews/AnchorageFurnish_F01` to `_F13`. Not re-rendered after the feeders went down to one per room (the user: *"stop render with small fixes"*): F05 and F06 are gone (they showed feeders taken out), and the overview and `AnchorageFurnish_feeder_holes_open.jpg` still show six feeders. ## In the .blend | Collection | What | |---|---| | `ANCHORAGE STATION` | the station: one collection per zone (01 to 07), each with `… | lights` and `… | lettering`; plus `MARKERS | game hooks` | | `… | 08 EXTERIOR shell` | completed file only: the shell (`ANCH_Shell_Rooms`, `ANCH_Shell_Galleries`, `ANCH_Shell_Relay`), `ANCH_Decks`, the mirrored skylight frame, the relay dish (three pieces of the Sci-Fi Lite pack) | | `… | 09 ICE floe` | completed file only: `ANCH_Ice_Mass` and the pack's seracs, blocks and drift ice | | `… | 10 OUTPOST armour and works` | completed file only: `ANCH_Armour_Rooms`, `ANCH_Armour_Galleries`, `ANCH_Armour_Relay`, `ANCH_Roof_Works`, `ANCH_Site_Works`; the Sci-Fi Lite pack's ducts, cargo pods, fences, gate and terminals; the props from polyhaven.com (one mesh each, `["ph_asset"]`); eight lamps | | `… | 11 DOORS | rig (open and close)` | completed file only: the door controls (one arrow per door, `DOORS | all`) | | `… | 12 ICE COOLERS` | completed file only: the four ice coolers, instances of the model below | | `ICE COOLER | scifiEngine_005 (Fab: …)` | completed file only: the coolers' model, once; excluded from the view layer | | `KIT | Modular SciFi Season 1 (source, one of each)` | all 282 kit meshes once, on a grid; excluded from the view layer. The parts bin for changing the station by hand | | `CONTEXT | preview only (not kit, not exported)` | sea plane, sky, a camera, and the vessel **linked** from `../M_Ship_v2.blend` | Numbers, completed file (2026-10-14): 1,625 kit mesh instances of 200 different meshes (1,534 in the rooms, 54 on the ice, 4 of the shell and the dish, 33 of the outpost), 10 meshes of its own (about 174,000 triangles: 103,000 the 350 x 350 m ice, 62,000 the outpost's armour and works), 45 props of 17 kinds from polyhaven.com, 4 ice coolers (one model from the Fab library, 80,000 triangles), 199 decals, 135 lights, 6 markers. The first file: 1,434 instances, 199 decals, 119 lights. Every kit mesh datablock carries `["ue_mesh"]` (its Unreal asset path) and every material `["ue_material"]`. Per-instance material overrides are object-linked material slots. Door leaves have `["ue_role"] = "door_leaf"`. The station's own meshes carry `["anchorage_custom_mesh"]`, and `["anchorage_collision"]` says how they collide. Everything of the ice carries `["anchorage_surroundings"]`. Units are metres; a point maps to Unreal as (x, y, z) m -> (100 x, -100 y, 100 z) cm. Changing it by hand: duplicate kit pieces with Alt+D (linked duplicate) from the station or the KIT collection, keep them inside `ANCHORAGE STATION`, then run the export again. The shell and the ice are generated: after moving rooms, run `build\apply_exterior.py` on the file (it replaces zones 08 and 09 in place and touches nothing else), then the checks. ## Checks ``` blender -b --factory-startup Anchorage_Station_exterior.blend --python build\check_exterior.py blender -b --factory-startup Anchorage_Station_exterior.blend --python build\check_site.py blender -b --factory-startup Anchorage_Station_exterior.blend --python build\check_doors.py ``` - `check_exterior.py` shoots rays at the station from all round (17 directions, every 25 cm) and says what is seen first: the shell, kit that is meant to be seen (window frames, glass, the drum, the outer doors), a **hole** (a one-sided face from behind: one looks into a room) or **exposed** kit (a room piece sticking out). Then the other way round from eye points in every room: nothing of the shell or the ice may show, no ray may get out. Result of the completed file: see the last section. - `check_site.py`: the ice and the seracs against the vessel (no cut; smallest gap 0.83 m, at the hatch seal), the ice against the rooms (at least 0.11 m under every kit piece), and the state of the new meshes. ## For Unreal, later Nothing has been added to the Unreal project. What is ready: - `anchorage_exterior_layout.json` (completed station) and `anchorage_layout.json` (first file): every kit piece with its Unreal asset path and world matrix, decals, lights, markers. The completed one also lists the station's own meshes: the FBX of each, the Unreal material for every slot, its collision, and its box as Unreal will see it. - `exterior_export/fbx/ANCH_*.fbx` (10 files, 2.7 MB): the station's own meshes, written by `build/export_custom.py`. Modelled in place, so each is placed at the station's origin. The decks carry convex collision hulls (`UCX_…`); walls, armour, site works and ice use the mesh itself as collision. - The layout also lists the station's **own materials** (`"materials"`: instances of pack materials with the changed values, and materials from scanned texture sets with their files, repeat size and UV unit) and the **props from polyhaven.com** with their places (`"props"`: asset name, glTF file, matrix). - `build/ue_spawn_layout.ps1`: builds a level from a layout out of the packs' **original assets**; the ten FBX are imported and the own materials are made. **Verified as a dry run** on the completed station (2026-10-14): 1,625 mesh actors (33 of them the Sci-Fi Lite pack's pieces of the outpost), 199 decals, 135 lights, 6 markers and the 10 imported meshes spawned in an unsaved temporary level and read back. Worst transform deviation 0.0004 cm; every imported mesh's box within 0.05 cm of the layout (which proves the FBX's units and axes); all material slots matched (9 own materials made, the scanned ones with their textures); the decks' two collision hulls arrived. In the dry run everything new exists in memory only. The 45 props are listed, not imported. Report: `kit_export/ue_spawn_report_anchorage_exterior_layout.json`. - To put it in the game: `build\ue_spawn_layout.ps1 -Layout anchorage_exterior_layout.json -SaveMap /Game/Maps/Anchorage/Anchorage_Station` (it refuses to overwrite an existing level without `-Overwrite`, never writes into the packs' folders, and saves the imported meshes under `/Game/Anchorage/Meshes` and the own materials with their textures under `/Game/Anchorage/Materials`). **This has not been run.** Outliner folders become `Anchorage//Structure | Lettering | Lights` and `Anchorage/Markers` (PlayerStart in the arrivals lock, the capsule berth, the vessel's berth with its origin and heading, the boarding point, the relay terminal, the maintenance door). **The ice in Unreal.** The pack's ice (`MI_Ice_A-2`) is translucent, and its showcase map lays it over a snow surface. So `ANCH_Ice_Mass.fbx` has one layer more than the .blend: a copy of the top, 3 cm lower, in the snow material. In Blender two layers 3 cm apart only flicker when seen from far away, so the file has one. ## Rebuilding ``` blender -b --factory-startup Anchorage_Station_exterior.blend --python build\apply_exterior.py -- --only outpost blender -b --factory-startup Anchorage_Station_exterior.blend --python build\apply_exterior.py -- --only floe blender -b --factory-startup Anchorage_Station_exterior.blend --python build\apply_exterior.py -- --only relay blender -b --factory-startup Anchorage_Station_exterior.blend --python build\apply_exterior.py -- --only coolers blender -b --factory-startup --python build\fab_cooler_prepare.py -- source_fab\scifiEngine_005\scifiEngine_005_ice_cooler.blend python -I build\make_scans.py 2K copies of the scanned concretes from Assets\VaultCache python -I build\fetch_polyhaven.py the sky, textures and props from polyhaven.com (skips what is there) build\ue_export_kit.ps1 -Root /Game/SciFI_Lite_Assets -Out kit_export_lite the second pack out of Unreal python build\make_proxies.py 1024 --src kit_export_lite --prefix SciFI_Lite_Assets --json proxies_lite.json build\ue_export_kit.ps1 kit out of Unreal: FBX, textures, materials, demo maps (read-only) python build\make_proxies.py 1K texture copies. NOT now: see the note below blender -b --factory-startup --python build\build_anchorage.py the first file blender -b --factory-startup --python build\build_anchorage.py -- --exterior --out Anchorage_Station_exterior.blend blender -b --factory-startup Anchorage_Station_exterior.blend --python build\apply_exterior.py shell and ice again, in place blender -b --factory-startup Anchorage_Station_exterior.blend --python build\export_custom.py the 7 FBX blender -b --factory-startup Anchorage_Station_exterior.blend --python build\export_layout.py -- anchorage_exterior_layout.json blender -b --factory-startup Anchorage_Station_exterior.blend --python build\bl_render.py -- previews AnchorageExt build\preview_views_exterior.json blender -b --factory-startup Anchorage_Station_exterior.blend --python build\check_doors.py the doors, the whole travel, and the rig set DOORS_OPEN=0.6 & blender -b --factory-startup Anchorage_Station_exterior.blend --python build\doors_pose.py --python build\bl_render.py -- previews AnchorageDoors build\preview_views_doors.json blender -b --factory-startup --python build\props_prepare.py -- fan_heater nutrition_feeder ... props into source_fab (keys: ASSETS) blender -b --factory-startup --python build\robot_prepare.py the four robots (after the robot export) build\ue_export_kit.ps1 -Root /Game/Robot_scout_R_21 -Do meshes,skeletal,materials,textures -Render -Out kit_export_robot blender -b --factory-startup ..\M_Ship_v2_interior_season2.blend --python build\season2_prepare.py Season 2 pieces (ship file only read) blender -b --factory-startup Anchorage_Station_exterior.blend --python build\furnish.py -- --apply --check --save the furnishing blender -b --factory-startup Anchorage_Station_exterior.blend --python build\bl_render.py -- previews AnchorageFurnish_ build\preview_views_furnish.json build\ue_spawn_layout.ps1 -Layout anchorage_exterior_layout.json -Render dry run with the robots (nothing saved) ``` The furnishing goes into the open file with `furnish.apply()` (from Blender's Python console or the MCP, with `build` on `sys.path`); it replaces its own earlier placements and leaves everything else. The door rig is renewed in the open file with `doors.rig()` (from Blender's Python console, with `build` on `sys.path`); `apply_exterior.py -- --only doors` renews the slots, housings and head seals. `build_anchorage.py` holds the plan (which demo room goes where), `dressing.py` the lettering, cargo, fittings, surroundings and markers, `exterior.py` the shell, `ice.py` the floe and what stands on it, `bl_kit.py` the kit import and the materials. **A build overwrites the file.** Once a file has been worked on by hand, use `apply_exterior.py` (it changes zones 08 and 09 only) and the exports, not `build_anchorage.py`. The full-size texture export (1.5 GB) was deleted after the 1K copies were made; `ue_export_kit.ps1 -Do textures` brings it back. `make_proxies.py` must only be run when it is back: without the full-size files it would write every texture into `textures/proxies.json` as missing. ## How it was made, and what is the pack's and what is new The pack ships demo maps in which its author has composed rooms. They were exported from Unreal, rebuilt in Blender (which proved the transform: they close up without gaps), cut at their doorway planes and re-arranged. - From the pack's demo rooms: the junctions and halls (hallway demo), the processing halls with their side rooms, the arrivals bay and the window galleries (interiors demo), the command centre. - New here: the plan and the joins between the packs, the on-axis entrance into Relay Control, the whole dock (dock head, boarding bridge, quays, the vessel's berth), the lettering, cargo and fittings. - New geometry, not kit: the outer shell, the decks, the roof services, the mast, and the floe. In the pack's materials. - From the pack, on the ice: its outdoor rocks and drift ice, and the way its showcase pairs a snow core with a shell of ice and lines an approach with blocks. - Corrected: the junction's north and south frames stand 0.3 m off axis in the demo and are centred; a loose glass pane, hanging cables and two loose crates were left out. - Corrected in the completed file only: the quays' end posts ran through the mooring gallery's at both inside corners of the dock head. A one-bay hall and a portal frame each side now separate them. **The first file still has that fault.** ## Honest limits - **The outpost (2026-10-14)**: the user works in the completed file by hand (the dish's pose, surfaces brought in with the Fab add-on). Apply changes in place (`apply_exterior.py -- --only ...`, or the same functions in the open Blender); never rebuild that file. The armour is plates and blocks with chamfers and pressed fields, not sculpted panels: close up it is plainer than the pack's own pieces beside it. Text and numbers on the armour, as in the reference pictures, are not there. The props from polyhaven.com are real-world, worn things beside clean science-fiction armour; that mix is my choice. Their meshes are dense (a road barrier has 61,000 faces). - **For Unreal the outpost needs more than the first exterior did**: the dry run makes its nine own materials (instances of the pack's, and materials from the scanned texture sets with their textures imported) and places its meshes, but the 45 props from polyhaven.com are only LISTED in the layout with their places (`"props"`): nothing imports their glTF files yet. The Sci-Fi Lite pack's pieces are heavy (a cargo pod has 70,000 triangles). - The door portals, fences and gate do not open or close; the lamps are eight spot lights with made-up strengths. - **Not tested in Unreal for real.** The dry run proves that everything spawns where it should and that the FBX files come in at the right size and place; it does not show how the station looks or lights there. Nothing has been rendered in Unreal. - **The outdoor materials are a likeness in Blender.** The ice is shown opaque (in Unreal it is translucent, over the snow layer). The snow material's own textures are not in the kit export; the ice pack's textures stand in. How ice and snow look under Unreal's light is not known from here. - **One-sided, as the kit is.** The shell is closed against views from outside and, with its inner skin, from inside. It has no thickness: there is no wall cavity to walk in and nothing behind a door that opens. - **The doors open in Blender only.** The five leaves are rigged (sliders, a timeline cycle: `build/doors.py`). In Unreal they are movable mesh actors tagged `DoorLeaf`, and the layout carries their travel and time; the game has no door code yet. From right under a door one looks up into the kit's head slot and sees the leaf in it: that is the kit's own door. (The exterior lamps are the outpost's eight floodlights, above.) - **The dock's fit to the ship is provisional.** The M-Ship has no boarding door yet; the bridge ends 5 cm from the ship's greatest width (which is its tail fins; the hull itself is 0.7 m away at the bridge, 0.5 m at the hatch seal) and needs a collar or bellows. Setting the ship's lower deck level with the station leaves the ship riding high: 5.6 m of its 21 m is in the water. A decision to revisit with the ship. - **The floe is a still object.** It does not drift, melt or carry anchor lines, and the sea is a flat preview plane that passes through it under water. - Corrected 2026-10-13: the sea was first drawn at -1.2 m and cut through Relay Control's sunken ring. It is at -1.9 m in both files (`build/fix_sea_level.py` moved it in the first file, in place). - **Kit materials are a close preview, not the Unreal shaders**: no detail normals, the two textures that use the lightmap UV set are box-projected, screens do not animate, textures are 1K. - **Lettering is flat quads in Blender**; in Unreal it is projected decals that follow the floor. - **Lights are the demo rooms' own** (Unreal 4 era, unitless), scaled to one exposure: interiors x3.2, command centre x0.8 (`ue_intensity_scale`). They will want a pass in Unreal. Blender's preview brightness is separate. - Nothing was checked against the player's size beyond the kit's own doorways (8.8 x 4.4 m). - **Licence**: `kit_export/`, `kit_export_lite/`, `textures/` (the packs' textures and the scanned sets from the Fab library), `exterior_export/` and the .blend files contain or use the packs' raw content. Under the Fab licence that may not be published on its own (no public repository or download). The local Fab library entry for the first pack carries no "NoAI" flag; the listing pages themselves were not read. `source_polyhaven/` is CC0 (polyhaven.com): free to use and to pass on. `source_fab/` holds the ice cooler, a model from the user's Fab library (Gerardo Justel; its cached listing says AI use is not forbidden, and names no licence): like the packs, for the game, not to be published on its own. - **The ice's texture repeats.** The pack's clear ice tiles every 63 m (its material repeats it 8 times over its showcase plane): on the first floe three repeats, on 350 m five and a half. From above the pattern can be seen; from the ground it does not show much. (At 916 m it read as a grid.) - **The coolers do nothing**: no light, sound, frost or moving part; the robots that are to tend them are not built. ## Backups `models/_backups/Anchorage_Station_pre-sea-level-fix_2026-10-13.blend`, `models/_backups/Anchorage_Station_pre-exterior_2026-10-13.blend` (the first file as it was before each step); `Anchorage_Station_exterior_pre-ice-edge_2026-10-14.blend` (the completed file with the straight floe and my mast), `…_pre-outpost_2026-10-14.blend` (broken edge, relay dish), `…_pre-outpost-armour_2026-10-14.blend` (the same with the dish repaired and tipped by the user: the last state before the outpost); `…_pre-door-rig_2026-10-14.blend` (the outpost with the door housings, before the doors were rigged and their heads sealed); `…_pre-big-ice_2026-10-14.blend` (the rigged doors on the first floe, before the 916 x 956 m floe and the coolers), and the first floe's recipe, `models/_backups/ice_pre-big-ice_2026-10-14.py`; `…_pre-350-ice_2026-10-14.blend` (the 916 x 956 m floe with its coolers) and its recipe, `models/_backups/ice_916x956_2026-10-14.py`; `…_pre-props-robots_2026-10-21.blend` (the file as the user saved it at 01:06 on 2026-10-21, with the coolers turned by hand, before the cloth came off and the furnishing went in) and the cooler model with its cloth, `models/_backups/scifiEngine_005_ice_cooler_with-cloth_2026-10-21.blend`. ## Last check of all (2026-10-21, 04:15: the furnishing) On the saved file: `furnish.check()` 51 placed, no problems; `check_site.py` the vessel 0 cuts (smallest gap 0.89 m, as before), the 4 coolers level, every wall foot on ice; `check_doors.py` 5 leaves, 0 faults. Layout `anchorage_exterior_layout.json`: 71 props (45 polyhaven.com, 4 coolers, 22 furnishing), 4 robots, 1,653 kit instances. Unreal dry run (`ue_spawn_layout.ps1 -Layout anchorage_exterior_layout.json -Render`, nothing saved): SPAWN OK, the 4 robots spawned, 1,865 transforms within 0.0004 cm, the ten own meshes' boxes within 0.04 cm. ## Last check of all (2026-10-14, 14:20: the 350 x 350 m floe and the ice coolers) - `check_site.py`: the vessel against 138 things round it: 0 cuts, smallest gap 0.89 m (as before); the 54 seracs, blocks and drift ice and the outpost's 61 site pieces on the ice; every wall foot in ice; the floe 350.7 x 351.0 m over all its points (the lip: 349.9 x 350.1), 51,406 quads, closed (no open edge, no edge with three faces); the four coolers' platforms on level ice under every corner. - `check_doors.py`: 5 leaves, 0 faults (the floe does not come near them). - `check_exterior.py` not run again: nothing of the station changed, and the census leaves the ice out. - Exports: the 10 FBX (`ANCH_Ice_Mass.fbx` 3.9 MB) and `anchorage_exterior_layout.json` (49 props: the 45 from polyhaven.com and the 4 coolers). - Unreal dry run: SPAWN OK. The ice comes in within 0.04 cm of its box (147,882 triangles with the snow layer under its top), 1,834 transforms within 0.0004 cm, 9 own materials made, nothing written under `Content` or `Config`. - Pictures: `previews/AnchorageIce_B1` (plan of the floe), `_B2` (the south-east cooler on its pad), `_B3` (the floe from the south-west), `_B4` (the south-east cooler from the north-east, the station behind it). - (The same checks passed at 14:00 on the 916 x 956 m floe.) ## Check of 13:05 (the doors rigged, their heads sealed) - `check_doors.py`: 5 leaves, each lifted from shut to 4.10 m in 5 cm steps: each rides in its own kit frame and meets nothing else. At 11 heights, 1,380 points per leaf above the kit's head slot: none shows from outside or to any of the 72 eyes at its doorway. The rig: drivers without Python, sliders and timeline give the right heights. **0 faults.** - `check_exterior.py` (shell with the seals): 456,380 rays met the station from outside: no hole, no exposed room piece; the same 5 single grazing rays as before (4 on the drum's cornice ledge, 1 on a gallery rib). From inside: 646 eye points, 96,900 rays, none sees the shell or the ice, none gets out. - `check_site.py`: the vessel against 138 things round it: 0 cuts, smallest gap 0.89 m; the site's 61 pieces on the ice; every wall foot on ice. The shells are all quads; `ANCH_Shell_Galleries` has 24 edges with more than two faces, as before the seals. - Exports: the 10 FBX in `exterior_export/fbx` and `anchorage_exterior_layout.json` written again (1,625 kit pieces, 199 decals, 135 lights, 6 markers, 10 own meshes, 45 props); every door leaf goes out shut, with `door_travel_cm` 410 and `door_open_seconds` 2.0. ## Check of 05:00 (with the door housings) - `check_doors.py`: 5 leaves lifted 4.10 m: nothing passed through, no point of a lifted leaf shows from outside. - `check_exterior.py`: 456,380 rays met the station from outside: **no hole, no exposed room piece**; 5 single rays graze an edge (4 on the drum's cornice ledge, 1 on a rib of a gallery roof). From inside: 646 eye points, 96,900 rays, none sees the shell or the ice, none gets out. - `check_site.py`: the vessel against 138 things round it: 0 cuts, smallest gap 0.89 m; the site's 61 pieces stand on the ice. - Unreal dry run: 1,625 kit pieces, 199 decals, 135 lights, 6 markers, 10 own meshes; 1,834 transforms within 0.0004 cm; 9 own materials made; nothing written under `Content` or `Config`. - The first check with the housings found small faces turned inside out on pressed panels (roof units, hatches, the housings' motor boxes): where a panel's rim was wider than a clipped corner. `hs.prism` now narrows the rim until the field keeps its shape; the 8 rays that met such faces are gone. - Pictures `AnchorageExt_16`, `_17`, `_18` (and `_01`, `_03`, `_07` if rendered after 05:00) show the housings; the other pictures were rendered just before them. ## Earlier check of the completed file with the outpost (2026-10-14, 03:30) - `check_exterior.py`, rays every 25 cm from 17 directions. **From outside**: 449,009 rays met the station: 394,171 the shell or the outpost's own works, 54,831 kit that is meant to be seen (window frames, glass, the drum, the doors, the relay dish, the roof ducts). **No hole, no exposed room piece.** 7 single rays graze an edge and meet a face from behind (4 on the drum's cornice ledge, as before; 3 on edges of the new works). **From inside**: 646 eye points, 96,900 rays: none sees the shell or the ice, none gets out; 8 end on the inner skin. The three places the earlier check listed are covered now by the crown and the fins. - `check_site.py`: the vessel against 140 things round it (the ice and what lies on it, the site's pieces, the armour and the roof works): 0 cuts, smallest gap 0.89 m. The ice at least 0.11 m under every kit piece. All 61 site pieces stand on the ice. Every new mesh is in quads, with UVs and no zero-area face. - Unreal dry run: passed, see "For Unreal, later"; nothing written under `Content` or `Config`. The first full check with the outpost found two things, both corrected: a ray that went between the shell's pier and the kit's window frame on the east quay, seen from due south (the fins reach 2 cm over the frames' edges now), and the open ends of roof ducts that stopped short of their plant units (they run into them now). ## Earlier check of the completed file (2026-10-14, 00:10, before the outpost) `check_exterior.py`, rays every 25 cm from 17 directions: - **From outside**: 414,086 rays met the station. 374,358 met the shell, 39,715 kit that is meant to be seen. 13 single rays met something else: 3 see through the kit's own joints at the drum's window heads, 3 graze a post at the corner of the east quay's end wall, 7 graze the edge of the ledge on the drum's cornice. No place where two neighbouring rays do. With the first version of the shell (rooms closed, galleries only roofed) the same count, on a 30 cm grid, still gave 7,758 rays into rooms and 5,300 on room pieces. - **From inside**: 681 eye points in the rooms, 102,150 rays. None gets out, none meets ice or rock, 1 meets the outer shell (a sliver of a gallery pier through a gap in the kit). 12 pass through gaps between kit pieces and end on the inner skin, which is what it is there for. What this check found on the way, and what was done: the galleries' open sills, piers and heads (the envelope); the slot between the drum and its roof cap (the band carried up); the drum's open cornice (a top on it); the skylight frame seen from behind (mirrored instance); the joints between my walls and the kit's door frames at the outer doors (a cover strip round each doorway, 6 mm proud); two open corners of the landing deck, which is wider than the gallery it stands against (its back face put in). `check_site.py`: floe and seracs against the vessel 0 cuts, smallest gap 0.83 m; the ice at least 0.11 m under every kit piece; the floe is closed (no open edge, 10,692 quads). Unreal dry run: passed, see "For Unreal, later". The Unreal project has no file written by it (checked: no `Content/Anchorage`, nothing new under `Content`, `Config`, `Source`).