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

3.6 KiB

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

IMPL de la mesure M1d (STG-C54-DIAG.md § 5) : ligne COUPLE dans le relevé M1 pendant une scène de sexe, pour trancher entre H1 (décalage propre à l'animation) et H2 (surface tracée au-dessus du matelas). GO de Big Boss (2026-10-14) ; entre dans COMMUN-6. Écrit sans compiler, sous instantané ; VAL statique par un agent distinct. Mesure seulement : aucun effet sur le jeu. Lot STG, registre STG-TACHES.md.

1. Instantané et MD5

Fichier Avant Après
Source/LifePlay/LPDebugSubsystem.cpp E281ACE24AECEC31C23528777FB2F2D9 31E2A3C5… (passe 1, VAL FAIL), puis F0081F9F98DEF2FE3BE130C4F26AEF9E (passe 2)
Source/LifePlay/LPDebugSubsystem.h 78D3A07957D81E0B39C5D9A81E5E03D3 inchangé

Instantané D:\Game\LifePlay_Backup_5.5\STG-M1d\manifest.csv (pwsh, guillemets simples). CRLF : 820 CR = LF (passe 2). Diff : STG-M1d.diff.

2. Geste

Dans WritePersonsDump, juste avant le calcul des paires (CLOSE), un bloc qui ne joue que si GI.SexOn est vrai. Pour chaque personne visible dont la capsule est en NoCollision (les corps de la scène), une ligne :

COUPLE <acteur> anim=<animation single-node> t=<temps>/<durée> root=<Z racine du maillage> lowest=<Z os le plus bas>(<os>) pelvis=<Z bassin>(<os : hip, sinon pelvis, sinon os 0>) under=<composant>:<Z surface sous le bassin> lowestMinusUnder=<écart>

  • Os le plus bas : parcours de tous les os (GetBoneLocation, espace monde).
  • Surface : trace de visibilité complexe (même Query que M1c : bTraceComplex, tous les Person_C ignorés), partant de 5 cm au-dessus du bassin et descendant de 300 cm.
  • Écart : un lowestMinusUnder proche de 0 signifie que le corps repose sur la surface ; une grande valeur positive, qu'il flotte au-dessus.
  • Cadence : celle du relevé M1 (-LPPersonsLog=5, toutes les 5 s) ; coût négligeable (≈ 200 os par corps).

2b. Passe 2, après la VAL FAIL (STG-M1d-VAL.md, P2)

UAnimSingleNodeInstance::GetLength() n'est pas const en UE 5.8 (AnimSingleNodeInstance.h l. 67 ; GetCurrentTime l. 114 l'est). L'appel sur const UAnimSingleNodeInstance* aurait échoué (C2662). Correction : Single est déclaré sans const (GetSingleNodeInstance() const rend déjà un pointeur non const, SkeletalMeshComponent.h l. 1539), avec un commentaire d'une ligne. Aucun autre changement.

3. Lecture attendue (essai COMMUN-6)

Cas lowestMinusUnder under Conclusion
corps au contact du lit ≈ 0 à 5 le lit pas de flottement mesuré : vérifier la capture (H2)
H1 grand et variable selon t ou l'animation le lit décalage d'animation : C54-a
H2 ≈ 0 le lit, mais à un Z plus haut que le matelas visible surface : C54-c

4. Points à confirmer en VAL

  • P1 : diff limité à ce bloc.
  • P2 : API UE 5.8 :
    • USkinnedMeshComponent::GetNumBones, GetBoneName, GetBoneIndex, GetBoneLocation (espace par défaut) ;
    • USkeletalMeshComponent::GetSingleNodeInstance const ;
    • UAnimSingleNodeInstance::GetAnimationAsset, GetCurrentTime, GetLength ;
    • UPrimitiveComponent::GetReadableName, FHitResult::ImpactPoint ;
    • TNumericLimits<double> ;
    • printf : 12 spécificateurs pour 12 arguments ;
    • Query et Persons bien visibles à cet endroit.
  • P3 : aucun effet de bord, en lecture seule (ni écriture, ni déplacement).
  • P4 : compilation au build COMMUN-6.

5. Fichiers à commiter

Source/LifePlay/LPDebugSubsystem.cpp (après build et VAL), Docs/Migration/etat/ST/STG/STG-M1d-IMPL.md, STG-M1d.diff, STG-M1d-VAL.md.