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>
This commit is contained in:
OlivierandClaude Sonnet 5.5 committed 2026-10-06 20:25:19 +02:00
1 parent a1493434e4
commit e00c97091b
5 files changed
+44 -19

No files matched your search

+9 -2
View File
@@ -3,7 +3,7 @@
## Statut
- Date : 10 août 2026.
- Dernière révision d'implémentation : 4 octobre 2026.
- Dernière révision d'implémentation : 6 octobre 2026.
- État : cadrage approuvé, tranches 0, 1 et 1.5 implémentées ; tranche 2 en cours.
- Jalon : verticale jouable, après validation des POC A et B.
- Durée directrice du plan général : quatre à six mois.
@@ -864,6 +864,11 @@ rotation et remplacement d'un relevé.
### Tranche 3 — site et découverte
État au 2026-10-06 : terrain du site implémenté. Le Banc du Vigilant
(`content/sites/zone1_vigilant.tres`) est chargé par `Nouvelle partie` ; ses
placements d'épaves sont encore des volumes graybox métalliques. Voir
`docs/briefs/terrain-site-zone1-gameplay.md` et l'ADR 0012.
- Ajouter carte limitée, position persistante du navire et sonar de surface.
- Construire le terrain graybox, l'épave majeure contemporaine et deux leurres
extérieurs modulaires.
@@ -946,7 +951,9 @@ Une fois ce document approuvé, créer des ADR séparés pour :
`docs/adr/0009-player-knowledge-driven-progression.md` ;
7. la limitation de la V1 à une surface bathymétrique unique, formalisée dans
`docs/adr/0010-single-surface-bathymetry-for-v1.md` ; un modèle hybride
nécessitera un prototype et un nouvel ADR lorsqu'un site concret l'exigera.
nécessitera un prototype et un nouvel ADR lorsqu'un site concret l'exigera ;
8. le terrain de site en champ de hauteur authoré, formalisé dans
`docs/adr/0012-authored-heightfield-dive-sites.md`.
Les noms de classes peuvent évoluer pendant la tranche 0. Les responsabilités,
les propriétaires et les directions de dépendance ne changent qu'avec un ADR.
+17 -15
View File
@@ -118,9 +118,9 @@ paire d'épaves à plus de 260 m l'une de l'autre.
S
```
Noms de travail : **l'Échine** (crête), **les Deux Frères** (deux pitons
jumeaux), **les Rides** (champ de rides de sable), **la Saignée** (sillon
principal), **le Tombant**.
Noms de travail : **l'Échine** (crête de 6 m de haut), **les Deux Frères**
(deux pitons jumeaux de 6 m de haut), **les Rides** (champ de rides de
sable), **la Saignée** (sillon principal), **le Tombant**.
### 4.3 Les trois épaves et leur terrain
@@ -150,20 +150,20 @@ correspond pas au rapport.
### 4.4 Les deux routes vers la cible
**Route sûre — par l'Échine (≈ 420 m, 26–32 m).** Depuis le navire, suivre la
**Route sûre — par l'Échine (≈ 470 m, 26–32 m).** Depuis le navire, suivre la
crête longue vers le sud. Elle est lumineuse, large, sans obstacle, et se lit
d'un seul scan. Elle mène au bord du plateau au-dessus de la Saignée : il
faut ensuite descendre dans le sillon par son extrémité nord, à faible
pente. Coût : temps et batterie. Récompense : zéro dégât, retour facile à
estimer.
**Route risquée — par la Saignée (≈ 260 m, 36–48 m).** Un sillon de 12 à
**Route risquée — par la Saignée (≈ 370 m, 36–48 m).** Un sillon de 12 à
18 m de large, aux parois de 8 à 10 m, qui coupe le plateau en diagonale et
débouche directement sur la proue de la cible. Sombre (les projecteurs
deviennent nécessaires), étroit (collisions), en pente (la batterie de
remontée compte). Au sonar : une dépression continue, lisible comme une
« ouverture possible » (GDP §7.2, point 4). Aucune paroi ne surplombe, donc
compatible ADR 0010. Récompense : moitié moins de distance.
compatible ADR 0010. Récompense : trajet plus court et direct sur la proue.
**Le tombant — la tentation (50–64 m).** Pas une route : une pente qui
descend sous la rupture. L'objet secondaire (1 unité, ~200 €) repose à 62 m,
@@ -179,8 +179,8 @@ amers reconnaissables au sonar à 95 m :
| Amer | Forme sonar | Rôle |
|---|---|---|
| l'Échine | crête longue, orientée nord-sud | fil d'Ariane entre le navire et la cible |
| les Deux Frères | deux pitons jumeaux, 9 m de haut, 20 m d'écart | repère ouest unique, sert à se recaler |
| l'Échine | crête longue de 6 m de haut, orientée nord-sud | fil d'Ariane entre le navire et la cible |
| les Deux Frères | deux pitons jumeaux, 6 m de haut, 20 m d'écart | repère ouest unique, sert à se recaler |
| les Rides | ondulations régulières de 1 m | signe « plateau nord, navire proche » |
| la Saignée | sillon rectiligne, bords nets | entrée de la route risquée |
| la rupture de pente | ligne continue de rupture | « ne pas dépasser » et limite sud |
@@ -243,21 +243,23 @@ de contacts existant les sépare du fond.
| Couche | Élément | Responsabilité |
|---|---|---|
| `game/domain/sites/` | `DiveSiteDefinition` (Resource typée) | id, chemin de scène, heightmap, masque, origine, taille de cellule, profondeur de référence, limites jouables, position de départ, mouillage, placements d'épaves, zones d'écho, réflectivités |
| `game/domain/sites/` | `DiveSiteDefinition` (Resource typée) | identifiant, nom affiché, `SiteTerrainData`, limites jouables, position et cap de départ, placements (épaves, leurres, objet secondaire, débris), routes de contrôle |
| `game/domain/sites/` | `TerrainHeightField` (RefCounted pur) | lecture de hauteur et de matériau à une position, conversion monde ↔ cellule, bornes ; testable sans scène |
| `game/application/sites/` | `PlayableBoundsRule` | « hors zone » comme résultat typé depuis la télémétrie ; émet un avertissement, jamais un mur |
| `game/world/sites/` | `BathymetricTerrainActor` | construit tuiles, collision et matériau depuis la définition ; expose matériau sonar par position |
| `game/world/sites/` | `dive_site_zone1.tscn` | scène du site : terrain, environnement, points d'injection pour épaves et navire |
| `game/composition/` | câblage | charge la définition, instancie le site, injecte la règle de bornes |
| `content/sites/` | `zone1_vigilant.tres` + `zone1_vigilant_height.png` + `zone1_vigilant_mask.png` | données du site |
| `tools/` (hors runtime) | script de cuisson | produit les PNG depuis une description de primitives géomorphologiques ; déterministe, versionné, jamais appelé par le jeu |
| `content/sites/` | `zone1_vigilant.tres` + `zone1_vigilant_terrain.res` | données du site |
| `tools/` (hors runtime) | script de cuisson | produit le `.res` depuis une description de primitives géomorphologiques ; déterministe, versionné, jamais appelé par le jeu |
Les conventions du contrat : hauteur en mètres négatifs vers le bas, +X est,
-Z nord (convention Godot, convertie une seule fois dans
`TerrainHeightField`), heightmap 16 bits avec `depth_min_m` et `depth_max_m`
explicites. Ces points vont dans un **ADR 0012 — terrain de site en champ de
hauteur authoré**, requis par les guardrails §5 et §11 (nouveau contrat de
données persistant dans le dépôt).
`TerrainHeightField`). Le terrain est stocké en `SiteTerrainData` au format
`.res` (élévations en float32 et matériaux en octets) produit par la recette
de cuisson ; le PNG 16 bits est écarté (ADR 0012). Ces points sont formalisés
dans l'**ADR 0012 — terrain de site en champ de hauteur authoré**, requis par
les guardrails §5 et §11 (nouveau contrat de données persistant dans le
dépôt).
`vehicle_test_environment.gd` perd sa formule analytique : la formule devient
le premier cas d'usage du script de cuisson, et la scène de test charge une