LifePlay-Revival/Docs/Migration/etat/ST/STG/STG-COMMUN7-DIAG.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

8.4 KiB

Fiche STG-COMMUN7-DIAG — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5 — Agent orchestrateur STG (session principale) — Skills lp-lot, sk-protocol

STG-COMMUN7-DIAG : diagnostics de l'essai COMMUN-7 (2026-10-14)

DIAG en lecture seule, sans UE et sans écriture hors de ce livrable. Lot STG, registre STG-TACHES.md.

A. KO « joueur debout sur William » (house_viewing.lpscene, 07:35-07:36 UTC)

Demande de Big Boss : la capture de l'utilisateur montre le joueur debout sur William, couché sur une chaise longue, les deux corps l'un dans l'autre. Au journal : CLOSE PlayerCharacter Person_C_2147481976 gap=-40.0 dz=0.0.

A.1 Sources

Repère Fichier
J7 D:\Game\LifePlay_Build_5.8_COMMUN-7_Development\Windows\LifePlay\Saved\Logs\LifePlay.log (journal en cours, 5 933 lignes à la lecture)
S Content/Modules/vin_Base/Scenes/home/house_viewing.lpscene (149 lignes) : l. 26 Landlord = generatePerson(), l. 28 Landlord.show(2)
G STG-B7av_LPDumpFunction_20261013-192844.txt (GI::Show, 91 nœuds) ; CAM\CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt l. 2790 (Room::getFntAnim, 82 nœuds, chaîne « looks for slot (test270522) »)
J2-J6 journaux d'essai D:\Game\LifePlay_Backup_5.5\COMMUN-{2,3,4,5,6}\essais\

A.2 Chronologie (établie, J7)

Heure Fait
07:34:56 Chargement de la chambre Bedrooms/9.lpworld
07:34:57.898 Le Blueprint assoit le joueur : « fnt_chair06-f-0-sit test270522 John », puis « NODE_AddStaticMeshComponent-0_5 Occupied by John » (place 0 de la chaise _5)
07:34:59 Joueur en (-3131579,5, -14967396,0), OccupyingFnt _5, animation fnt_chair06-f-0-sit
07:35:03.245 Début de la scène (« test1903 current location, not moving ») : « fnt_chair06-f-0-sit unoccupied by John ». La place est libérée, mais le joueur reste au même point, debout (anim=bp:Daily_F_C, currentAnimation=-), les pieds dans le volume de la chaise (delta 23,6)
07:35:09.118 generatePerson() crée William (Person_C_2147481976, « index SPAWN »)
07:35:09.269 « fnt_chair06-m-0-sit test270522 William » (Room::getFntAnim, « looks for slot »), puis « NODE_AddStaticMeshComponent-0_5 Occupied by William » : William prend la place 0 de la même chaise, que le joueur vient de libérer
07:35:14-07:36:19 Les deux au même point (-3131579,5, -14967396,0) : CLOSE … gap=-40.0 dz=0.0 à chaque relevé (14), William assis (fnt_chair06-m-0-sit), le joueur debout dans la chaise
07:36:22-24 Fin de la boîte (M1e : marche rendue). William est caché (0,0). Le joueur est rassis par le Blueprint (« Occupied by John » sur _18, sans bouger de place), puis en _29 à 07:36:33

A.3 Qui place qui (établi pour l'ordre, estimé pour les branches)

  • Joueur : assis par le Blueprint au chargement de la pièce, puis libéré au début de la scène par Person.unOccupyFnt, appelé par le lanceur de scène du Blueprint (« test1903 »). Ce n'est pas STG : la ligne « Marche : le joueur quitte » de LeaveSeat est absente, et le joueur ne marchait pas (scène ouverte).
    • unOccupyFnt libère la place dans Room.OccupiedFnts mais ne déplace pas le joueur. C'est le même fait que celui établi en KO3b, où DirectControl l'appelle au premier pas : le joueur part alors en marchant.
    • Ici, rien ne le fait partir : il reste debout sur la place libérée.
  • William :
    • generatePerson() (l. 26), puis show(2) (l. 28).

    • La place lui est donnée par Room::getFntAnim (« looks for slot (test270522) »), qui cherche une place libre d'après Room.OccupiedFnts seulement, sans tester où se trouve le joueur. La première place libre est celle de la chaise _5, que le joueur vient de quitter.

    • GI::Show (show(2)) : quand la personne est déjà visible (bHidden faux : branche else d'IfThenElse_1), elle ne la repose pas sur ActorTransforms[2]. William reste donc sur la chaise.

    • B7-a, dans la branche else d'IfThenElse_3 (distance < 70 cm), devrait alors appeler moveToPersonStand(Player, 100), mais William n'a pas bougé. Le chemin exact dans Show pour une personne déjà assise n'est pas établi : le dump ne dit pas si getDistance est atteint quand OccupyingFnt est valide (branche IfThenElse_2).

      Quoi qu'il en soit, moveToPersonStand aurait déplacé William, pas le joueur, et l'aurait sorti de sa place assise.

  • Pourquoi « couché sur une chaise longue » : l'animation de place fnt_chair06-m-0-sit est jouée sur le meuble _5 de cette chambre. Le mot de l'utilisateur décrit le meuble et la pose, sans écart de position : William est bien à la place 0 de _5.

A.4 D'origine ou régression ?

  • Même enchaînement aux essais précédents (J2-J6, house_viewing) :

    • COMMUN-5, 22:02:53 : « fnt_chair06-f-0-sit unoccupied by John », puis Jasmin « fnt_chair06-f-0-sit test270522 » sur la même chaise _5, et 2 CLOSE à -40 (STG-COMMUN5-ANALYSE.md § 5) ;
    • COMMUN-2 (16:39) et COMMUN-4 (20:34) : le joueur libère une autre chaise (fnt_chair08), et le PNJ prend fnt_chair06, une place différente : pas de chevauchement.

    Le chevauchement se produit dès que le joueur était assis sur la première place libre de la pièce au moment de la scène.

  • Aucun correctif STG n'est dans cette chaîne :

    Correctif Raison
    unOccupyFnt / getFntAnim / lanceur de scène Blueprints non touchés par STG
    K8-a max aux Map_Add de MoveToFnt / PlayFntAnim : l'écriture à l'occupation, pas la libération ni la recherche de place
    B1 / G-B1a moveToPersonStand, non appelé ici
    B7-a n'a déplacé personne
    LeaveSeat (3b) non appelé (pas de marche)
  • Lecture : défaut d'origine des Blueprints (estimé). La place est libérée sans que le joueur soit levé, et la recherche de place ignore le joueur. Pour l'établir, il reste la question du protocole : le défaut existe-t-il dans le build 5.5 (D:\Game\LifePlay_Build_5.5_DC4) ? Il suffit de s'asseoir sur la chaise de la chambre 9, puis de lancer « house viewing ».

A.5 Correctif proposé et estimation (rien n'est écrit sans GO)

Id Geste Coût Risque
C7-a (recommandé) C++ dans LPDirectControlSubsystem (fichier STG). Quand OccupyingFnt du joueur passe de valide à nul sans LeaveSeat (le Blueprint l'a libéré : début de scène, lever), et que sa capsule chevauche un composant de Room (le meuble quitté), poser le joueur hors du siège :
- essayer, dans l'ordre, 80 cm devant lui (lacet de la place), puis 80 cm de chaque côté, puis 80 cm derrière ;
- descente de capsule comme S-F5, au premier point libre qui ne chevauche aucune autre personne ;
- une ligne de journal ;
- sinon, ne rien faire.
≈ 45 lignes, N3, VAL, 1 build moyen : une scène qui voudrait le joueur exactement sur sa chaise le verrait debout à côté (il y est déjà debout aujourd'hui) ; à essayer sur 3 scènes de dialogue
C7-b Blueprint Room::getFntAnim : refuser une place dont le point est à moins de 50 cm du joueur ≈ 6-8 nœuds par MCP dans Room (asset partagé avec CAM), N3 moyen : Room est en cours chez CAM ; si aucune autre place n'est libre, comportement à définir
C7-c Étendre B7-a (GI::Show) à une personne déjà assise : déplacer la personne (pas le joueur) ≈ 4 nœuds GI ne règle que les show(), et sort le PNJ de sa pose assise

Recommandation : C7-a. C'est du code STG, sans asset partagé. Il traite la cause visible (le joueur laissé debout dans le siège qu'il vient de quitter) dans toutes les scènes, et pas seulement house_viewing. Il entrerait au build suivant, avec un essai : chambre 9, s'asseoir sur la chaise, lancer « house viewing ».

A.6 Observation annexe (non demandée, hors STG)

À 07:36:24, le Blueprint rassoit le joueur (« Occupied by John » sur _18), mais sa position reste celle de _5 jusqu'à 07:36:33 (puis _29). Cela fait 9 s avec un OccupyingFnt qui ne correspond pas à sa position. Sans effet visible signalé. À garder en tête si C7-a est écrit : la garde ne doit réagir qu'au passage de valide à nul, et pas à un changement de meuble.

Fichiers à commiter

Docs/Migration/etat/ST/STG/STG-COMMUN7-DIAG.md.

Tours : 12