The sea was inside the ship
The bug report was the good kind: specific feelings, wrong theories. The turret periscope is “often obscured by the ship's structure.” The orders “don't map to the teleport locations — CIC isn't listed anywhere.” Night actions are pitch black below decks. The powder room “doesn't look at all like a real powder room.” Every one of those was real. And under the first one, wearing a periscope complaint as a disguise, was the strangest rendering bug this project has produced: at level pitch, the ocean was drawing itself across the inside of the ship.
Four honest complaints
The teleport mismatch was the cheapest fix and probably the most important. The orders say “designate a target (CIC radar, 02 level).” The T menu said “SG RADAR — PPI SCOPE” and, because the CIC compartment contains a station, the compartment list didn't show a CIC at all. If you already know a Mk 8 rangekeeper from a Mk 38 director you can translate; if you don't, the game is contradicting itself in its own orders. Stations now lead with the compartment the orders call them by (“CIC — SG RADAR SCOPE”, “PLOT — MK 8 RANGEKEEPER”), every menu row names its compartment and deck, and the one order that said “02 level” about a room every other display calls the 01 level now agrees with the ship it's printed on.
The periscope complaint reproduced the moment the battery had a real long-range solution: at 45° elevation and 8× magnification, the turret's own gun tubes — and turret I's, superfiring thirty meters ahead — are walls of gray filling the frame. Real optics focused on a horizon can't resolve steel a hand's breadth from the objective; it would be defocused haze. So the own battery's tubes now drop out of the scoped frame while you're on the periscope, and come back the moment you climb down or ride the salvo cam. When plot orders the turret past its ±150° stops, the booth now says MASKED — OUT OF ARC instead of silently reading TRAINING while you stare into the pilot house.
Night was a one-line lighting model being too honest. Darken ship tinted every voxel face the same — topside and below decks alike — so the crew's mess at midnight was a void. The greedy mesher already knows which faces are skylit and which are enclosed (it bakes the warm “lit by lamps” cast into interiors); those faces now build into a separate mesh the night tint skips. The weather decks go properly dark, the compartments keep their lamps, and the Lambert-lit sailors get a half-strength self-light so they read as people under battle lanterns instead of silhouettes.
The powder magazine was fair criticism of set dressing: a 16-inch powder flat that was an empty box with six pipes in it. It's now racked the way the real flats were packed — brass tank ends stacked deck-to-overhead in stanchion bays down both sides, a handling aisle to the hoist trunk, flash scuttles flanking it, and the sprinkler risers that the magazine-flood key has always notionally opened.
The bug wearing a periscope costume
While verifying the night fix, the mess floor kept rendering as a flat navy wedge — but only at some camera angles, and the raycasts swore the geometry was correct and warm. Isolation renders finally caught the culprit: hide one object and the compartment came back. The ocean.
The sea is a 48 km disc that recenters on the camera every frame, built as a triangle fan from a single center vertex. That vertex rides exactly at the camera's position in the horizontal plane — so whenever the view is level, it sits precisely on the near plane, at w≈0 in clip space. Clipping a 48-kilometer triangle anchored at w≈0 interpolates garbage depth across the whole below-horizon half of the frame, and the sea starts winning depth tests against geometry that is four meters in front of the lens. Pitch the camera down a few degrees and the apex re-enters the frustum, the math recovers, and the bug vanishes — which is why every diagnostic screenshot that looked at the floor showed a perfect floor.
And the periscope? Its view is fixed at pitch 0.02 — dead center of the failure window. Players weren't wrong that the periscope was “often obscured”; they were seeing the ocean painted over their own sight picture and reasonably calling it ship structure. The fix rebuilds the disc as log-spaced rings, so every triangle near the camera is small and the depth stays honest at any pitch. A second, related discovery: the third deck lies below the waterline, so the y=0 sea plane legitimately sliced through the magazine and plot. The sea now douses itself whenever the eye is under deck plates below the waterline — no compartment down there has an honest sightline to open water anyway.
An e2e spec so it stays fixed
The battleship now has its own mode in the browser e2e suite
(make e2e MODE=bigj, 18 checks, ~11 seconds): every
anchored order must resolve to a teleport destination and every word in
its label must appear in the T menu; every station teleport must man
its station and every compartment teleport must land on standable
deck; the periscope's view-center ray must be clear across the whole
firing arc at max elevation, with the tubes hidden while scoped and
restored after; the sea geometry may not contain kilometer-scale
triangles near the camera column, must be visible from the weather
deck, and must be doused across the magazine; night must tint the
topside mesh and leave the interior mesh alone; and the full
designate–release–salvo loop must still put rounds on the
wire and tick the orders checklist.
The confession this time: the first interior-lighting screenshot after the mesh split looked perfect — because it happened to be pitched 60° down at the floor, safely outside the failure window. One more screenshot at level pitch away from shipping “fixed” night lighting on top of an ocean that was still quietly flooding the mess deck. The probes didn't find that; looking through the periscope the way a player does did. Test the game, not the diff.