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>
This commit is contained in:
1 parent
5344b045d9
commit
be16d2ee07
4 files changed
+63
-19
No files matched your search
@@ -16,6 +16,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
|
||||
# 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
|
||||
|
||||
|
||||
static func recipe() -> SiteTerrainBaker.Recipe:
|
||||
@@ -30,7 +33,7 @@ static func recipe() -> SiteTerrainBaker.Recipe:
|
||||
result.rock_reflectivity = 0.72
|
||||
result.sand_reflectivity = 0.45
|
||||
result.primitives = [
|
||||
# Plateau: 24 m deep at the vessel (z = -300), 6 m deeper over 400 m toward the south.
|
||||
# Plateau: 24 m deep at z = -300 (about 25 m at the mooring), 6 m deeper over 400 m toward the south.
|
||||
SiteTerrainBaker.SlopedPlane.new(24.0, 0.0, -0.015, 0.0, -300.0),
|
||||
# L'Échine: long north-south rock ridge, 6 m high, flanks steeper than 20°.
|
||||
SiteTerrainBaker.Ridge.new(RIDGE_START, RIDGE_END, 12.0, 6.0, 25.0),
|
||||
@@ -63,18 +66,23 @@ static func recipe() -> SiteTerrainBaker.Recipe:
|
||||
|
||||
static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
|
||||
var field := TerrainHeightField.from_data(terrain)
|
||||
# The target hull's long axis (local +X) lies along la Saignée.
|
||||
var groove_axis := (GROOVE_END - GROOVE_START).normalized()
|
||||
var groove_yaw := atan2(-groove_axis.y, groove_axis.x)
|
||||
var target_xz := GROOVE_END - groove_axis * TARGET_SET_BACK_M
|
||||
var result := DiveSiteDefinition.new()
|
||||
result.site_id = &"zone1_vigilant"
|
||||
result.display_name = "Banc du Vigilant"
|
||||
result.terrain = terrain
|
||||
result.playable_bounds_m = Rect2(-300.0, -300.0, 600.0, 600.0)
|
||||
result.spawn_position_m = Vector3(0.0, -10.0, -250.0)
|
||||
result.spawn_yaw_radians = 0.0
|
||||
# Spawn beside the mooring, facing south toward the site.
|
||||
result.spawn_position_m = Vector3(0.0, -10.0, -210.0)
|
||||
result.spawn_yaw_radians = PI
|
||||
result.placements = [
|
||||
_on_seabed(field, &"prospection_vessel", SitePlacement.Kind.WRECK_TARGET,
|
||||
Vector2(-12.0, 108.0), 0.35, Vector3(28.0, 8.0, 9.0), 2.0),
|
||||
target_xz, groove_yaw, Vector3(28.0, 8.0, 9.0), 2.0),
|
||||
_on_seabed(field, &"decoy_yacht", SitePlacement.Kind.WRECK_DECOY,
|
||||
Vector2(-40.0, -200.0), 1.1, Vector3(12.0, 3.0, 4.0), 0.5),
|
||||
Vector2(-30.0, -150.0), 1.1, Vector3(12.0, 3.0, 4.0), 0.5),
|
||||
_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,
|
||||
@@ -87,7 +95,7 @@ static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
|
||||
Vector2(-9.0, 146.0), 0.0, Vector3(2.0, 1.5, 2.0), 0.2),
|
||||
_on_seabed(field, &"debris_4", SitePlacement.Kind.DEBRIS,
|
||||
Vector2(-7.0, 152.0), 2.0, Vector3(4.0, 1.5, 1.5), 0.3),
|
||||
_marker(&"vessel_anchor", SitePlacement.Kind.VESSEL_ANCHOR, Vector3(0.0, -14.0, -250.0)),
|
||||
_marker(&"vessel_anchor", SitePlacement.Kind.VESSEL_ANCHOR, Vector3(0.0, -14.0, -210.0)),
|
||||
_marker(&"echine", SitePlacement.Kind.LANDMARK, Vector3(75.0, -20.0, -50.0)),
|
||||
_marker(&"deux_freres", SitePlacement.Kind.LANDMARK, Vector3(-151.0, -18.0, -125.0)),
|
||||
_marker(&"rides", SitePlacement.Kind.LANDMARK, Vector3(0.0, -25.0, -230.0)),
|
||||
@@ -96,12 +104,12 @@ static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
|
||||
]
|
||||
result.routes = [
|
||||
_route(&"safe_ridge", 32.0, [
|
||||
Vector3(0.0, -14.0, -250.0), Vector3(70.0, -16.0, -200.0), Vector3(76.0, -16.0, -100.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),
|
||||
]),
|
||||
_route(&"risky_groove", 48.0, [
|
||||
Vector3(0.0, -14.0, -250.0), Vector3(-60.0, -20.0, -150.0), Vector3(-50.0, -31.0, -100.0),
|
||||
Vector3(0.0, -14.0, -210.0), Vector3(-60.0, -20.0, -150.0), Vector3(-50.0, -31.0, -100.0),
|
||||
Vector3(-35.0, -33.0, -20.0), Vector3(-22.0, -34.0, 60.0), Vector3(-14.0, -33.0, 98.0),
|
||||
]),
|
||||
]
|
||||
|
||||
Reference in new issue
Block a user