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

5.5 KiB

Fiche STG-C5 — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5

CART de B7 (B-CHEV) : en scène de dialogue (vin_Pregnancy/Scenes/pregnant_trap.lpscene, avant tout contact), la partenaire est posée au point du joueur (CLOSE PlayerCharacter Person_C_2147481884 gap=-40.0 dz=0.0, COMMUN-2, 16:50:14 UTC), caméra C1 dans sa tête. Accord de Big Boss (2026-10-13), lecture seule, sans copie UE ; pas d'écriture dans GI (l'IMPL ira à STE ou se fera de concert, sur décision de Big Boss). Lot STG, registre STG-TACHES.md. État : § 1-3 tirés des graphes (établi) ; § 4 complété avec la copie définitive de COMMUN-2 (établi).

1. Qui place la partenaire (établi, graphe)

  • Le lpscene : Actor = generatePersonTemporary() … Actor.dress(), Actor.show(), puis les répliques ; Sex(Player, Actor) n'arrive qu'après le choix 0 (l. 19 puis 32).
  • Commande de scène show : GI::CallFunction, K2Node_SwitchString_22, cas show (etat/ST/STE/dumps/GI__CallFunction.txt l. 1484-1493, 5023-5057, 6200-6209) :
    • sans paramètre (IfThenElse_7626, vrai) → GI::Show(VariableName, Slot = 0) (K2Node_CallFunction_4706) ;
    • place entière, ex. show(2) → Show(Slot = Conv_StringToInt(param)) (…_156) ;
    • variable → Show(Slot = Round(var)) (…_46599). C'est le seul appelant de GI::Show (3 nœuds d'appel, tous dans CallFunction, même cas show).
  • GI::Show (etat/portage55/L6f/L6f_dump_GI.txt, 84 nœuds) : SetActorTransform(Person, ActorTransforms[Slot]) sans balayage, affiche la personne, PlayIdle, TalkDirty, puis moveToPerson(Player) seulement si getDistance > 300.
  • ActorTransforms (GI) n'est écrit nulle part (9 lectures dans GI, 2 dans Room : EventGraph, moveToBedIfPossible, place 3) : valeur par défaut de GI, des postes fixes ; Room est toujours au même point du monde (-3131543, -14967213, -115).

2. Pourquoi la règle des 10 cm n'y joue pas (établi, graphe)

Show pose la personne directement sur un poste fixe : ni standIdle (emplacements, B-CHEV C-O1…), ni moveToPersonStand (garde C-O4b de B1). Le seul rattrapage (moveToPerson) ne joue qu'au-delà de 300 cm : à distance nulle, rien ne bouge.

3. Hypothèse sur la superposition (estimé)

Actor.show() prend le poste 0 ; le joueur se trouve sur ce même poste (ou sur un point confondu), d'où l'écart nul. À établir : position du joueur au moment du show (journal définitif : relevé M1 juste avant / après) et valeurs de ActorTransforms (dump du CDO de GI, sous jeton UE, si besoin).

4. Journal définitif de COMMUN-2 (établi)

Source : D:\Game\LifePlay_Backup_5.5\COMMUN-2\essais\LifePlay_commun2_definitif_BOSS.log (MD5 3f2355f4…), l. 27380-27443.

  • 16:50:11 UTC : Person_C_2147481884 (Amber, générée par la scène) « idle played », puis « test270522 found a spot within distance » (standIdle), habillage.
  • 16:50:14 UTC (relevé M1) : scène pregnant_trap.lpscene ; joueur X -3131413,4 Y -14967128,8 Z -99,0 ; Amber X -3131413,4 Y -14967128,8 Z -99,0 : mêmes coordonnées au dixième de cm ; les deux en QueryAndPhysics, sans meuble, floorHit 0 (street : piège fnt_ext, STG-SF4b-DIAG.md) ; CLOSE PlayerCharacter Person_C_2147481884 gap=-40.0.
  • Le joueur est immobile au même point depuis 16:48 (coincé en street).
  • Ensuite (même scène, après Sex) : 41 CLOSE en intérieur, NoCollision, animations de couple (MF_kol07, MF_sp02, MF_sp04) : exception Q-STG-5. Conclusion : la partenaire est posée sur le point exact du joueur au show() du dialogue (coïncidence exclue à 0,1 cm près). Lequel des deux postes fixes ActorTransforms est en cause (poste 0 partagé, ou point du joueur recopié) reste estimé ; B7-a règle les deux cas. Effet aggravant en street : les deux sont pris dans le piège fnt_ext et ne peuvent pas s'écarter (réglé par S-F4b).

5. Usage et risque d'un correctif

  • show est très employé : 496 scènes avec .show() ; 383 où un show() précède un Sex(), 180 où un show() suit un Sex() ; formes : X.show() 1240, X.show(2) 949, X.show(3) 285, X.show(0) 162, X.show(4) 88, X.show(5) 55, X.show(1) 24 (grep sur Content/Modules/**/*.lpscene).
  • Point dur (Big Boss) : un show() peut précéder une scène de contact ou de sexe (gelées jusqu'à la release) ; la partenaire ne doit pas y être écartée. Sex repositionne les deux corps (LPShowCoupleSubsystem, point partagé) : un écart posé par Show serait annulé au Sex suivant ; le danger est un show() pendant une scène de sexe (180 scènes ont un show() après un Sex()).

6. Options (à décider par Big Boss ; IMPL dans GI par STE ou de concert)

Id Geste Coût Risque
B7-a GI::Show : si getDistance(Player) < 70 et GI.SexOn faux et la personne n'est pas le joueur → moveToPersonStand(Player, 100) (passe par la garde C-O4b) ≈ 6-8 nœuds, GI faible ; aucune action en scène de sexe
B7-b Même chose, mais seulement pour Slot = 0 (cas de show() sans argument) ≈ 8-10 nœuds plus étroit ; ne couvre pas un show(N) qui tomberait sur le joueur
B7-c Corriger les postes fixes (ActorTransforms par défaut de GI) pour que le poste 0 ne soit pas celui du joueur 1 propriété, GI non chiffrable sans dump du CDO ; touche toutes les scènes

Recommandation : B7-a (confirmée par le § 4).

7. Fichiers à commiter

Docs/Migration/etat/ST/STG/STG-C5-CART.md.