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:
1 parent
a1493434e4
commit
e00c97091b
5 files changed
+44
-19
No files matched your search
@@ -7,3 +7,11 @@ Une ressource décrit des données et référence des identifiants stables. Elle
|
||||
duplique pas une règle de gameplay et ne dépend pas d'une scène de POC. Chaque
|
||||
type de ressource recevra un validateur de contrat avant l'ajout de contenu en
|
||||
volume.
|
||||
|
||||
## Sites
|
||||
|
||||
`sites/<nom>.tres` est une `DiveSiteDefinition` ; `sites/<nom>_terrain.res`
|
||||
est son `SiteTerrainData`. Les deux sont produits par
|
||||
`tools/bake_site_terrain.gd -- <nom>` depuis `tools/sites/<nom>_recipe.gd`,
|
||||
la recette étant le document d'auteur (ADR 0012). Ne pas éditer les fichiers
|
||||
produits à la main.
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -58,7 +58,7 @@ const RebindResult = preload("res://game/application/input/rebind_result.gd")
|
||||
|
||||
const MAIN_MENU_SCENE = preload("res://game/presentation/main_menu/main_menu_screen.tscn")
|
||||
const DIVE_WORLD_SCENE_PATH := "res://game/composition/vertical_slice/dive_world.tscn"
|
||||
const DEFAULT_SITE_PATH := "res://content/sites/vehicle_test.tres"
|
||||
const DEFAULT_SITE_PATH := "res://content/sites/zone1_vigilant.tres"
|
||||
const COCKPIT_HUD_SCENE = preload("res://game/presentation/cockpit/cockpit_hud.tscn")
|
||||
const SONAR_DISPLAY_SCENE = preload(
|
||||
"res://game/presentation/sonar/sonar_display.tscn"
|
||||
|
||||
+9
-1
@@ -20,4 +20,12 @@ Suites de production actuelles :
|
||||
- `integration/run_vertical_slice_foundation.gd` : composition, mouvement
|
||||
inertiel, caméra indépendante, cockpit 3D fixe, instruments physiques, couche
|
||||
d'alerte, sonar bathymétrique partagé, pause des ticks et remappage avec
|
||||
conflit.
|
||||
conflit ;
|
||||
- `unit/run_site_domain_tests.gd` : données de terrain, champ de hauteur,
|
||||
définition de site et ses placements/routes ;
|
||||
- `unit/run_site_application_tests.gd` : règle de limites jouables ;
|
||||
- `unit/run_site_baker_tests.gd` : primitives et déterminisme de la cuisson ;
|
||||
- `contract/run_site_content_tests.gd` : règles de contenu du Banc du Vigilant
|
||||
(profondeurs, routes, amers) ;
|
||||
- `integration/run_site_terrain_integration.gd` : collision égale au champ,
|
||||
matériaux sonar par cellule, scène de site et budget de chargement.
|
||||
Reference in new issue
Block a user