Five reference landforms on one 512 m field at 1 m per cell: a stratified
canyon through a mesa, a crevasse between two buttes, a boulder field on
rippled sand, two rock spurs framing a sand channel, and a sinuous
escarpment with knolls on the slope below.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The bake order is now primitive sum, modifiers (with the local gradient),
floor clamp, slope material, primitive materials, material patches. A
regression test checks the Banc du Vigilant still bakes byte for byte.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Drop a dead initial value in PlayableBoundsRule, guard
DiveSite.configure() when called before the node is in the tree, and
align the zone 1 brief with what was built: generic dive_site.tscn,
the resolved collision check, and the graybox shader deviation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lighter fog and volumetric fog, brighter key and ambient light, terrain
tiles visible to 420 m (60 m fade), and a background colour equal to
the fog colour times its energy so culled tiles never read as a dark
band. The seabed shader culls back faces again now that the tiles are
wound front-face up.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The architecture check scans tools/ for duplicate class names and fails
when game/ or content/ references res://tools/. The three tools scripts
drop their global class_name (every caller preloads them), and ADR 0012
records that tools/ depends on the domain only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The site terrain integration now also configures zone 1 (3 s budget,
seabed under the hull, trench at the groove entrance, reference scan
from the spawn). The actor test uses an 81 x 65 grid with an
off-diagonal bump, checks tile vertices against their field cells and
samples the collision between vertices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Building the 64 tiles of the Banc du Vigilant cost about 1.9 s through
per-vertex cell_world_position/normal_at_cell calls, leaving the 3 s
load budget with too little headroom (2.1-2.9 s measured, one 4.8 s
outlier). TerrainHeightField now returns positions and normals of a
cell block in one call, with normal_at_cell sharing the same formula;
the tile build drops to about 0.5 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The landmark sat on GROOVE_START, where the groove's end taper brings
its depth to zero, so the marker (-34 m) was below the seabed (-26.5 m)
and a probe there saw no trench. It now sits two half-widths inside the
groove, on the groove floor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DiveSite.configure() builds the height field once (TerrainHeightField
validates the data) instead of running the definition validation and
then the field construction again; the composition root relies on the
error returned by configure(). The collision shape takes the field's
row-major elevations directly instead of copying 263k cells one by one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The target hull now lies along the groove axis (yaw derived from the
groove constants), set back 22 m from the groove end so both hull ends
rest on the flat groove floor. The mooring, spawn and first route
waypoints move to z = -210 and the decoy yacht to (-30, -150) so no
wreck is farther than 320 m from the mooring and no two wrecks are
farther than 260 m apart (spec 4.1). The spawn faces south toward the
site. Four contract assertions pin the budget, the spawn heading and
the hull orientation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zone 1 becomes the default dive site; the foundation suite still selects the
calibration site explicitly. Documents the site suites, the site content
workflow and the authored heightfield terrain (ADR 0012), and aligns the zone 1
brief with the baked data (storage format, route lengths, 6 m ridge and
pinnacles).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The calibration site spawn sat 16 m from the south bounds edge, inside the
40 m warning margin. The vehicle_test recipe now extends the terrain and
playable bounds 42 m to the south so the spawn is inside the zone.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
MSYS mangles the single-byte separator argument on Windows, and the swallowed
rg error made the Input check pass vacuously.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ripgrep prints backslash paths on Windows, so the infrastructure/input
exclusion never matched and the architecture check failed on a clean tree.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>