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 » deLeaveSeatest absente, et le joueur ne marchait pas (scène ouverte).unOccupyFntlibère la place dansRoom.OccupiedFntsmais 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), puisshow(2)(l. 28). -
La place lui est donnée par
Room::getFntAnim(« looks for slot (test270522) »), qui cherche une place libre d'aprèsRoom.OccupiedFntsseulement, 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 (bHiddenfaux : brancheelsed'IfThenElse_1), elle ne la repose pas surActorTransforms[2]. William reste donc sur la chaise. -
B7-a, dans la branche
elsed'IfThenElse_3(distance < 70 cm), devrait alors appelermoveToPersonStand(Player, 100), mais William n'a pas bougé. Le chemin exact dansShowpour une personne déjà assise n'est pas établi : le dump ne dit pas sigetDistanceest atteint quandOccupyingFntest valide (brancheIfThenElse_2).Quoi qu'il en soit,
moveToPersonStandaurait 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-sitest jouée sur le meuble_5de 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 2CLOSEà -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 prendfnt_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.
- 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
-
Aucun correctif STG n'est dans cette chaîne :
Correctif Raison unOccupyFnt/getFntAnim/ lanceur de scèneBlueprints non touchés par STG K8-a maxauxMap_AdddeMoveToFnt/PlayFntAnim: l'écriture à l'occupation, pas la libération ni la recherche de placeB1 / G-B1a moveToPersonStand, non appelé iciB7-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