LifePlay-Revival/Docs/Migration/etat/ST/STG/STG-SPEC.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

77 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).