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

6.4 KiB
Raw Blame History

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