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>
This commit is contained in:
OlivierandClaude Fable 5.1 committed 2026-10-06 22:50:21 +02:00
1 parent 4af014288b
commit f22a5e69aa
21 files changed
+247 -43

No files matched your search

+21 -4
View File
@@ -15,6 +15,9 @@ const GROOVE_END := Vector2(-10.0, 120.0)
const RIDGE_START := Vector2(70.0, -150.0)
const RIDGE_END := Vector2(80.0, 90.0)
const BREAK_Z := 125.0
# Strata apply from here south: past the groove's end cap (120 m) and still 3 m before
# the break's smoothstep has dropped half a metre.
const STRATA_START_Z := 118.0
# The target's centre sits this far up the groove from GROOVE_END, so its 28 m hull
# stops one groove half-width short of the end cap and rests on the flat groove floor.
const TARGET_SET_BACK_M := 22.0
@@ -57,8 +60,22 @@ static func recipe() -> SiteTerrainBaker.Recipe:
SiteTerrainBaker.Blob.new(Vector2(25.0, 198.0), 6.3, 6.3, 2.0),
# Les Rides: sand ripples near the vessel only.
SiteTerrainBaker.Ripples.new(Vector2(1.0, 0.35), 9.0, 0.45, Vector2(0.0, -220.0), 90.0),
# Deterministic roughness everywhere.
# Deterministic roughness everywhere: the original 50 m texture, plus hummocks
# and swales from 250 m down to 15 m (five octaves) so the plateau is never flat.
SiteTerrainBaker.Roughness.new(1933, 0.02, 0.6),
SiteTerrainBaker.Roughness.new(1934, 0.004, 2.2, 5),
SiteTerrainBaker.Roughness.new(1936, 0.012, 1.2, 4),
# Hummocks of 20 m down to 5 m, the scale the pilot sees through the fog.
SiteTerrainBaker.Roughness.new(1937, 0.05, 0.6, 3),
]
result.modifiers = [
# La rupture et le tombant are a carbonate drop-off: 4 m strata on the break
# (full effect) and fainter ledges on the 35 degree talus below. The band starts
# south of the target hull and of la Saignée's end cap, so neither changes.
# Crumbly rock on every slope steeper than the sand rule, smooth sand elsewhere.
# Before the strata so the ledges stay flat.
SiteTerrainBaker.SlopeRoughness.new(1935, 0.12, 0.7, 20.0, 40.0),
SiteTerrainBaker.Strata.new(4.0, 0.85, 25.0, 40.0, Rect2(-384.0, STRATA_START_Z, 768.0, 384.0 - STRATA_START_Z)),
]
result.material_patches = [
SiteTerrainBaker.MaterialPatch.new(Vector2(140.0, 40.0), 28.0, SonarMaterial.Value.ROCK),
@@ -90,9 +107,9 @@ static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
_on_seabed(field, &"decoy_coaster", SitePlacement.Kind.WRECK_DECOY,
Vector2(140.0, 40.0), -0.6, Vector3(26.0, 6.0, 8.0), 1.2),
_on_seabed(field, &"secondary_item", SitePlacement.Kind.SECONDARY_ITEM,
Vector2(-6.0, 157.0), 0.0, Vector3(1.0, 1.0, 1.0), 0.0),
Vector2(-6.0, 160.0), 0.0, Vector3(1.0, 1.0, 1.0), 0.0),
_on_seabed(field, &"debris_1", SitePlacement.Kind.DEBRIS,
Vector2(-12.0, 134.0), 0.4, Vector3(3.0, 2.0, 2.0), 0.3),
Vector2(-12.0, 136.0), 0.4, Vector3(3.0, 2.0, 2.0), 0.3),
_on_seabed(field, &"debris_2", SitePlacement.Kind.DEBRIS,
Vector2(-10.0, 139.0), 1.2, Vector3(6.0, 2.5, 2.5), 0.4),
_on_seabed(field, &"debris_3", SitePlacement.Kind.DEBRIS,
@@ -110,7 +127,7 @@ static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
_route(&"safe_ridge", 32.0, [
Vector3(0.0, -14.0, -210.0), Vector3(70.0, -16.0, -200.0), Vector3(76.0, -16.0, -100.0),
Vector3(78.0, -16.0, 0.0), Vector3(76.0, -18.0, 80.0), Vector3(40.0, -24.0, 105.0),
Vector3(0.0, -26.0, 100.0), Vector3(-14.0, -30.0, 98.0),
Vector3(0.0, -24.0, 100.0), Vector3(-14.0, -30.0, 98.0),
]),
_route(&"risky_groove", 48.0, [
Vector3(0.0, -14.0, -210.0), Vector3(-60.0, -20.0, -150.0), Vector3(-50.0, -31.0, -100.0),