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
Queryque M1c :bTraceComplex, tous lesPerson_Cignorés), partant de 5 cm au-dessus du bassin et descendant de 300 cm. - Écart : un
lowestMinusUnderproche 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::GetSingleNodeInstanceconst ;UAnimSingleNodeInstance::GetAnimationAsset,GetCurrentTime,GetLength;UPrimitiveComponent::GetReadableName,FHitResult::ImpactPoint;TNumericLimits<double>;- printf : 12 spécificateurs pour 12 arguments ;
QueryetPersonsbien 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.