LifePlay-Revival/Docs/Migration/etat/ST/STG/STG-C7a-IMPL.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.1 KiB
Raw Blame History

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

STG-C7a-IMPL : joueur posé hors du siège qu'un Blueprint libère sans marche (2026-10-14)

GO de Big Boss du 2026-10-14 (C7-a de STG-COMMUN7-DIAG.md § A.5). Sans UE ni compilation ; VAL statique par un agent distinct ; il entre au build COMMUN-8. Origine du défaut : Blueprint d'origine (estimé). L'essai 5.5 n'est pas fait, le développement 5.5 étant arrêté. Lot STG, registre STG-TACHES.md.

Gardes demandées :

  • jamais pendant le sexe ni pendant la marche ;
  • point d'arrivée hors meuble et hors personne, sinon le joueur ne bouge pas et une ligne est écrite au journal ;
  • ne pas casser D6 (se lever) ni KO3c.

1. Instantané

Snapshot.ps1 -Lot STG-C7a (état M1e + C6-b) : LPDirectControlSubsystem.cpp 44ACE47D29424101B4127BA12E789BEB, .h ACFF924AE6E03548546EF3FB2E430EB8 (D:\Game\LifePlay_Backup_5.5\STG-C7a\manifest.csv).

2. Changements (STG-C7a.diff : 117 lignes ajoutées (recompte de la VAL), 0 retirée)

LPDirectControlSubsystem.h : la déclaration WatchSeatRelease(float), et les membres LastSeat (place au tick précédent), PendingSeat et PendingSeatTime (place libérée en attente, -1 : rien).

LPDirectControlSubsystem.cpp (CRLF) :

  • Tick appelle WatchSeatRelease(DeltaTime) à chaque tick, avant le choix entre blocage et marche. Le début de scène a lieu boîte Scene_C ouverte, alors que Walk n'est pas appelé.
  • Walk : juste après LeaveSeat, LastSeat, PendingSeat et PendingSeatTime sont remis à vide. Une place quittée en marchant (D6) n'est jamais surveillée.
  • WatchSeatRelease :
    1. Il lit OccupyingFnt du joueur. Le passage de valide à nul (place libérée par un Blueprint) met la place en attente.
    2. L'attente est annulée si :
      • le joueur est de nouveau assis (même meuble ou autre) ;
      • SexOn est vrai (jamais pendant le sexe) ;
      • il n'y a plus de joueur.
    3. Après 0,5 s, il n'agit que si toutes ces conditions sont vraies :
      • le meuble existe encore et appartient à la Room courante (pas de changement de pièce) ;
      • la capsule est encore dans le meuble (CapsuleInside) ;
      • aucune touche de marche n'est enfoncée et la vitesse 2D est ≤ 1 (jamais pendant la marche : LeaveSeat et KO3c s'en chargent).
    4. Points essayés, à 80 cm dans le lacet de la place : devant, à droite, à gauche, derrière. Pour chacun :
      • descente de la capsule, avec ses propres réponses, de +30 cm à -demi-hauteur ; le sol touché doit être à 30 cm près de la hauteur actuelle (pas sur une table), et la capsule ne doit pas partir déjà enfoncée ;
      • aucun recouvrement bloquant à l'arrivée (OverlapBlockingTestByChannel, capsule réduite de 2 cm) : hors meuble ;
      • aucune personne visible à moins de 50 cm de bord à bord (centres à moins de 50 + 2 × rayon) : hors personne.
    5. Au premier point valable : SetActorLocation(…, TeleportPhysics) et la ligne C7-a : place <meuble> liberee sans marche, joueur pose <devant|a droite|a gauche|derriere> a 80 cm du siege.
    6. Sinon, le joueur ne bouge pas, avec la ligne C7-a : place <meuble> liberee sans marche, aucun point libre a 80 cm, joueur laisse en place.

Signatures relues (UE 5.8) : UWorld::OverlapBlockingTestByChannel (World.h l. 2364) et UCapsuleComponent::GetCollisionShape(float Inflation) (CapsuleComponent.h l. 86). SCENE_QUERY_STAT, TActorIterator, AxisValue, CapsuleInside et ScenePlaying sont déjà employés dans ce fichier.

3. D6, KO3c et cas de la scène

  • D6 (se lever au premier pas) : LeaveSeat est inchangé, et la surveillance est remise à vide dans le même tick. Aucun déplacement supplémentaire.
  • KO3c : EscapeOverlaps et UpdateEscape sont inchangés. Si C7-a pose le joueur hors du meuble, UpdateEscape rend Pawn Block au volume quitté au tick suivant, comme à une sortie en marchant.
  • house_viewing (DIAG A) :
    • la place est libérée à 07:35:03, et C7-a pose le joueur à 07:35:03,5, à 80 cm de la chaise ;
    • William est créé 6 s plus tard et reçoit la place : 40 cm d'écart de bord à bord, au-delà de la règle des 10 cm.
  • Scène de sexe : le sexe passe aussi par une libération de place. Si SexOn devient vrai dans les 0,5 s, il n'y a pas de déplacement. Si SexOn arrivait plus tard, le placement du sexe (Blueprint) repose de toute façon les deux corps. Risque estimé faible, à voir à l'essai.
  • Pièce quittée (la place pointe vers un meuble détruit) : la référence faible tombe, et il n'y a ni attente ni déplacement.

4. Ce qui n'a pas été fait

  • Compilation et essai : au build COMMUN-8.
  • Le cas de l'annexe A.6 du DIAG (rassis sur _18 sans changement de position) n'est pas traité. C7-a n'y réagit pas : la place reste valide.

5. Points à confirmer à l'essai (à mettre dans la fiche COMMUN-8)

  1. Chambre 9 : s'asseoir sur la chaise, laisser venir « house viewing ». Attendu : la ligne C7-a : … joueur pose devant a 80 cm, William sur la chaise, le joueur à côté, aucun CLOSE entre eux.
  2. D6 : s'asseoir, puis ZQSD : le joueur se lève et marche (« le joueur quitte »), sans ligne C7-a.
  3. Sexe depuis une chaise : aucune ligne C7-a, et le placement du couple est inchangé.
  4. KO3c : comptoir du newsagent, sans régression.

6. MD5 après

Fichier MD5
LPDirectControlSubsystem.cpp 1A74D6B724BD63F04E04FDA42682446D
LPDirectControlSubsystem.h 519E23DC9EB2809FA36C1BBF942A7667

7. Retour arrière (proposé, jamais lancé sans accord)

Restore.ps1 -Lot STG-C7a, qui ramène l'état M1e + C6-b (44ACE47D… / ACFF924A…). Avant tout, prendre l'instantané STG-C7a-retour.

8. Fichiers à commiter

Source/LifePlay/LPDirectControlSubsystem.cpp, Source/LifePlay/LPDirectControlSubsystem.h, Docs/Migration/etat/ST/STG/STG-C7a-IMPL.md, Docs/Migration/etat/ST/STG/STG-C7a.diff.

Tours : 6