Commit Graph
40 Commits
Author SHA1 Message Date
OlivierandClaude Fable 5.1 26a7dfc4f7 feat(world): underwater sky ambient, soft shadows and SSAO for the dive site
The environment declared the sky as its ambient source without a sky, so
shadowed faces received no ambient light. A procedural underwater sky now
feeds ambient and reflections; the directional light is steeper and
stronger with 70 % soft shadows; SSAO, filmic tonemapping, aerial
perspective and tinted volumetric fog complete the pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:14:22 +02:00
OlivierandClaude Fable 5.1 17f58912c1 feat(world): triplanar seabed shader with procedural normal maps and detail shading
Rock is normal-mapped triplanar in world space at two scales, sand carries an
oriented ripple normal map on the xz plane, and a grain map drives detail
occlusion, albedo mottling and roughness. The three maps are seamless,
seeded, mipmapped textures built synchronously by SeabedDetailTextures, so
no asset is needed and builds are deterministic. The mesh has no tangents:
perturbed normals are computed in world space and written to NORMAL.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:05:33 +02:00
OlivierandClaude Fable 5.1 f22a5e69aa feat(sites): strata on the Banc du Vigilant drop-off and multi-scale seabed relief
Strata now take a world rectangle, so the 4 m ledges cover the whole break
and talus south of z = 118 m without touching la Saignée or the landmarks.
Roughness gains octave and fractal-type parameters; a SlopeRoughness
modifier roughens rock faces only. Both sites are re-baked with hummocks
from 250 m down to 5 m. The secondary item, the first debris piece and one
safe-route waypoint move a few metres to keep their contracts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 22:50:21 +02:00
OlivierandClaude Fable 5.1 4af014288b docs: in-game captures of the Jardin des Formes landforms
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 22:02:55 +02:00
OlivierandClaude Fable 5.1 d91e6bd02f fix(tools): canyons impose a floor material through rock outcrops; tighten showcase contracts
Review findings: the mesa forced rock onto the canyon bed, two runners
declared the wrong TEST_COUNT, and the escarpment check could pass on the
slope alone. Canyon gains floor_material, the showcase is re-baked with sand
beds, the contract measures the step across the crest band, counts distinct
ledges, and probes the crevasse against the open plateau. Degenerate recipe
parameters now fail an assert.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 22:00:24 +02:00
OlivierandClaude Fable 5.1 abffa737ec docs: ADR 0012 amendment, READMEs and brief for the landform vocabulary
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:49:00 +02:00
OlivierandClaude Fable 5.1 caa74b3ee1 test(sites): geometric contract and integration checks for the terrain showcase
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:47:51 +02:00
OlivierandClaude Fable 5.1 f7e60315b1 feat(content): bake the Jardin des Formes terrain showcase site
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>
2026-10-06 21:45:09 +02:00
OlivierandClaude Fable 5.1 26f29ce14f feat(tools): Strata modifier quantises steep walls into ledges
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:39:30 +02:00
OlivierandClaude Fable 5.1 6dd2e86f91 feat(tools): Outcrop and BoulderField primitives with forced rock material
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:38:32 +02:00
OlivierandClaude Fable 5.1 aae9bcd301 feat(tools): polyline Canyon and Escarpment primitives with outline noise
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:37:17 +02:00
OlivierandClaude Fable 5.1 520a62863b feat(tools): modifier phase and per-primitive material hook in the site baker
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>
2026-10-06 21:35:42 +02:00
OlivierandClaude Fable 5.1 9454b9e552 docs: brief and plan for varied dive-site landforms
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:33:57 +02:00
OlivierandClaude Fable 5.1 0cde0d0bc4 docs: in-game captures of the Banc du Vigilant sonar and hull
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:05:11 +02:00
OlivierandClaude Opus 5.5 d1a94f05b1 chore(sites): small cleanups and brief alignment
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>
2026-10-06 20:58:15 +02:00
OlivierandClaude Opus 5.5 4470450dfd feat(world): open up the dive site fog and match the horizon colour
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>
2026-10-06 20:57:22 +02:00
OlivierandClaude Opus 5.5 dbd207ef1b build(gate): forbid production code from importing authoring tools
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>
2026-10-06 20:57:00 +02:00
OlivierandClaude Opus 5.5 30cc2f635f test(sites): load the Banc du Vigilant and check tiles on a non-square grid
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>
2026-10-06 20:55:35 +02:00
OlivierandClaude Opus 5.5 ce3b75989e perf(sites): build terrain tiles from bulk field blocks
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>
2026-10-06 20:55:35 +02:00
OlivierandClaude Opus 5.5 bce5c20dec fix(content): put the Saignee entrance landmark where the groove is deep
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>
2026-10-06 20:55:35 +02:00
OlivierandClaude Opus 5.5 682e1f18e5 perf(sites): validate the site once and hand collision the field array
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>
2026-10-06 20:52:04 +02:00
OlivierandClaude Opus 5.5 be16d2ee07 fix(content): lay the Vigilant hull along la Saignee within the distance budget
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>
2026-10-06 20:49:28 +02:00
OlivierandClaude Sonnet 5.5 5344b045d9 docs: align the site brief storage wording with ADR 0012
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:28:16 +02:00
OlivierandClaude Sonnet 5.5 e00c97091b feat(sites): dive on the Banc du Vigilant by default
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>
2026-10-06 20:25:19 +02:00
OlivierandClaude Sonnet 5.5 a1493434e4 feat(content): bake the Banc du Vigilant site and its contract tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:21:29 +02:00
OlivierandClaude Sonnet 5.5 51634820bd feat(composition): dive world assembled from a selected site definition
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>
2026-10-06 20:16:45 +02:00
OlivierandClaude Sonnet 5.5 bbf1dc9990 fix(world): wind terrain triangles clockwise so the seabed is a front face
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:09:46 +02:00
OlivierandClaude Sonnet 5.5 b1d32f7d81 feat(world): generic dive site scene fed by a baked site definition
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:08:07 +02:00
OlivierandClaude Sonnet 5.5 0e590f2bc7 feat(world): tiled heightfield terrain actor with per-cell sonar materials
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:04:13 +02:00
OlivierandClaude Sonnet 5.5 8ab1289d10 feat(tools): declarative site terrain baker and calibration recipe
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 20:01:36 +02:00
OlivierandClaude Haiku 4.5 84e66d304a fix(sites): construct TerrainHeightField with new() in from_data
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 19:57:11 +02:00
OlivierandClaude Haiku 4.5 084b663d63 feat(sites): playable bounds rule with typed status
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 19:55:19 +02:00
OlivierandClaude Haiku 4.5 506f6dd0c8 feat(sites): typed dive site definition with placements and routes
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 19:52:24 +02:00
OlivierandClaude Haiku 4.5 1c1f0b87da feat(sites): typed terrain data and height field sampler
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 19:45:21 +02:00
OlivierandClaude Haiku 4.5 fdbfd773e2 feat(sonar): add SAND terrain material
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 19:40:10 +02:00
OlivierandClaude Fable 5.1 41c86a408e fix(scripts): normalise rg paths with sed instead of --path-separator
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>
2026-10-06 19:37:56 +02:00
OlivierandClaude Fable 5.1 4da0ce3525 docs: ADR 0012 authored heightfield dive sites
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:36:31 +02:00
OlivierandClaude Fable 5.1 79484643a2 fix(scripts): make the Input access check path-separator agnostic
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>
2026-10-06 19:35:12 +02:00
OlivierandClaude Fable 5.1 bd1d75fec2 chore: ignore SDD workspace directory
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:33:57 +02:00
OlivierandClaude Fable 5.1 1409d7f565 docs: terrain site zone I spec and implementation plan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:30:36 +02:00