77 lines
6.4 KiB
Markdown
77 lines
6.4 KiB
Markdown
# Fiche STG-SPEC — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5
|
||
|
||
SPEC du lot STG (B-CHEV, B-SOL), d'après `STG-C1-CART.md` et `STG-C2-CART.md`, et les décisions de l'utilisateur du
|
||
2026-10-13 (« 1 les deux. 2 Blueprint. 3 oui 4 oui », registre `STG-TACHES.md`). Copie `D:\Game\LifePlay-master 5.8`,
|
||
branche `ue5.8`, HEAD de départ `0745917`. Instantané : `D:\Game\LifePlay_Backup_5.5\STG\` (manifeste ; LPDebugSubsystem
|
||
.cpp `22912735…`, .h `1DE29C12…`).
|
||
|
||
## 0. Ordre et jetons
|
||
|
||
| Rang | Fiche | Nature | Copie UE | Dépend de |
|
||
|---|---|---|---|---|
|
||
| 1 | STG-D1 | `LPCheckMeshes` `fnt_*` (lecture) | UE-DEMANDE envoyée | — |
|
||
| 2 | STG-M1 | build de la mesure M1 (code écrit, § 1), puis 5 min de jeu en street par l'utilisateur avec `-LPPersonsLog=5` | BUILD-DEMANDE | — |
|
||
| 3 | STG-B1 | correctifs B-CHEV sur **Person** (§ 2 : C-O2, C-O4b, C-O7) par MCP (`lp-mcp-bp`) | UE-DEMANDE | M1 relevé « avant » |
|
||
| 4 | STG-B2 | correctifs B-CHEV sur **Room** (§ 2 : C-O1, C-O3, C-O8 si mesuré) | UE-DEMANDE | **commit de CAM sur Room** |
|
||
| 5 | STG-S1 | correctif B-SOL (§ 3), selon D1 + M1 | selon option | D1, M1 |
|
||
| 6 | STG-V | build, M1 « après » en street + 2 intérieurs, essai utilisateur | BUILD-DEMANDE | B1, B2, S1 |
|
||
|
||
Note (Big Boss, 2026-10-13) : le build M1 embarque `Content/BPs/Room.uasset` de CAM-B2, non commité, tel qu'il est sur
|
||
le disque (B2 ne touche que la caméra) ; à citer dans la BUILD-FIN et la VAL.
|
||
|
||
## 1. Mesure M1 (écrite, à compiler)
|
||
|
||
`Source/LifePlay/LPDebugSubsystem.cpp` (+154 lignes, sous `#if !UE_BUILD_SHIPPING`), `.h` (commentaire) :
|
||
- commande console `LifePlay.PersonsDump` → journal `LogLifePlay` + `Saved/Profiling/LPDebug/PersonsDump_*.txt` ;
|
||
- interrupteur `-LPPersonsLog[=s]` → même relevé au journal toutes les s secondes (5 par défaut), sans console.
|
||
- Par personnage (`Person_C*`, joueur compris) : position, bas de capsule, pieds (origine du maillage), mode de
|
||
mouvement, plancher trouvé (composant, Z), surface visible sous lui (trace Visibility, personnages ignorés : composant,
|
||
Z) et `delta` = surface visible − pieds (positif = enfoncé) ; `Room` : position et échelle.
|
||
- Paires de personnages visibles dont l'écart entre capsules (distance 2D − rayons) < 10 cm : lignes `CLOSE`, plus
|
||
`Persons=… Close=… MinGap=…`.
|
||
Critères : compile sans avertissement nouveau ; en street, `delta` des personnages debout → tranche H-SOL1 (tous ≈ même
|
||
delta) / H-SOL2 (quelques-uns à ≈ 40, au même XY) ; `Close` donne l'état « avant » de B-CHEV.
|
||
|
||
## 2. B-CHEV (voie Blueprint, Q-STG-2)
|
||
|
||
Seuil retenu : écart entre capsules ≥ **30 cm** au repos (centres ≥ 70 cm), pour garder ≥ 10 cm entre les corps
|
||
(épaules et bras plus larges que la capsule de 20 cm) ; vérifié par M1 et à l'œil.
|
||
|
||
| Id | Asset, fonction | Geste | Nœuds |
|
||
|---|---|---|---|
|
||
| C-O1 | Room `getStandSpots` | `GI.removeTooClose` : `Distance` 40 → **70** | 1 broche |
|
||
| C-O3 | Room `getStandSpots` | rayon de tirage : `MinOfFloatArray` → `MaxOfFloatArray` (toute la longueur des pièces étroites, street) ; tirages `× 30` → `× 60` | 1 nœud remplacé + 1 broche |
|
||
| C-O8 | Room `getStandSpots` | (si M1 montre des `CLOSE` juste après un chargement de lieu) emplacements à moins de 70 cm d'un personnage visible déjà présent : inscrits occupés par lui | ≈ 12 |
|
||
| C-O2 | Person `standIdle` | repli sans emplacement libre : au lieu du centre de Room + 50, jusqu'à 10 tirages `GetRandomLocationInNavigableRadius` (origine `NearVec` ou centre, rayon 300) ; premier point à ≥ 70 cm (2D) de tout personnage visible (`GI.DummyPersonsInUse` + `GI.PlayerCharacter`, hors soi) → ajouté à `Standspots` et inscrit dans `Standspots_Occupied` ; sinon position courante. Supprime aussi le +50 (H-SOL2) | ≈ 25-30 |
|
||
| C-O4b | Person `EventGraph` `moveToPersonStand` | point calculé (`K2Node_CallFunction_658`) à moins de 70 cm d'un tiers visible → branche `standIdle(Near = P, Distance = d)` existante (comme `d = 250`) | ≈ 12 |
|
||
| C-O7 | Person CDO `CharMoveComp` | marche (Q-STG-1 « les deux ») : `bUseRVOAvoidance = True`, `AvoidanceWeight = 0.5` ; la capsule reste `Pawn = Ignore` (C-O6 écarté) | 2 propriétés |
|
||
|
||
Exception **confirmée par l'utilisateur** (Q-STG-5, réponse « ouii » rapportée par Big Boss le 2026-10-13) : scènes de
|
||
contact (sexe, câlin, couple sur un même meuble, `SexPersons` en `NoCollision` par `GI.toggleGravity`) hors règle.
|
||
B1 (GO de Big Boss, 2026-10-13) : C-O4b et C-O7 seulement ; C-O2 reporté après la session street (le Z du point de
|
||
repli dépend de la surface porteuse mesurée par M1) ; pas de build après B1.
|
||
|
||
Identifiants de nœuds : ceux des dumps AP5 / STA / STE-D4 ; **relire par MCP** (lecture, `lp-mcp`) au début de B1 et B2
|
||
(Person a changé depuis STA : CHG-284 ; Room change avec CAM).
|
||
|
||
## 3. B-SOL (selon D1 et M1 ; Q-STG-3, Q-STG-4 accordées)
|
||
|
||
| Id | Si | Geste |
|
||
|---|---|---|
|
||
| S-F1 | H-SOL1 : écart Δ entre la surface visible de street et la surface de marche, identique pour tous | `Content/Modules/vin_Base/World/street___vin01.lpworld` : ligne 22 (`fnt_ext001`) Z relatif − Δ × 100, ou ligne 27 (`fnt_nav01`) + Δ × 100 selon la surface qui porte (M1 `floorComp`) ; fichier hors git dans la copie 5.8 → instantané, puis dépôt par `lp-paths` |
|
||
| S-F2 | H-SOL2 | couvert par C-O2 ; en plus, Room `MoveAllToCenterRoom` : `Loc` initialisé au centre de `StaticMeshComponent` + 90 en Z |
|
||
| S-F3 | plusieurs lieux touchés | garde C++ de recalage (non retenue sans mesure) |
|
||
|
||
## 4. VAL (agent distinct de l'IMPL)
|
||
|
||
1. Diffs relus (C++ : `git diff` ; Blueprint : dumps avant / après, nombre de nœuds par fonction).
|
||
2. Compilation 0 erreur, 0 avertissement nouveau ; `CompileAllBlueprints` 0 erreur `/Game/` ; LPTestStringCompat 3120 / 0 / 60.
|
||
3. Build Development, `-LPPersonsLog=5`, parcours de l'utilisateur : street (≥ 2 min, foule), 2 intérieurs, une scène
|
||
`moveToPersonStand` ; journal : `Close=0` hors scènes de contact au repos ; en street, `delta` des personnages
|
||
debout ≤ 5 cm ; aucun nouvel `Accessed None` ni avertissement `Standspots`.
|
||
4. Contrôle visuel de l'utilisateur (captures) : pas de pieds sous le pavé, pas de corps qui se touchent.
|
||
|
||
## 5. Fichiers à commiter (prévus)
|
||
|
||
`Source/LifePlay/LPDebugSubsystem.cpp`, `.h` ; `Content/BPs/Person.uasset` ; `Content/BPs/Room.uasset` (après CAM) ;
|
||
livrables `etat/ST/STG/` ; `street___vin01.lpworld` par son dépôt si S-F1. Un commit par sous-lot (M1, B1, B2, S1).
|