5.4 KiB
Fiche STG-WALK — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5
IMPL C++ de la marche animée (DIAG STG-WALK-DIAG.md), sur accord de Big Boss (2026-10-13) : garde locale, chargement du clip cuit
puis de ClipPath, un seul avertissement, RestoreAnim quand la marche est bloquée ; IsGameTarget inchangé. Écrit sans
compiler, par-dessus S-F5 / C1-Walk (VAL PASS-STATIC). VAL par un lp-validator distinct. La duplication des deux clips (asset) est
une fiche à part, sous UE-GO, après l'UE-LIBRE de CAM. Lot STG, registre STG-TACHES.md.
1. Instantané et MD5
| Fichier | Avant | Après |
|---|---|---|
Source/LifePlay/LPDirectControlSubsystem.cpp |
5323C2B2027286098DC3C527FC1F39BD (C1-Walk) |
A2E46943… (passe 1, VAL FAIL), puis 8A680F80111D742A924FF655FDB21B61 (passe 2, § 6) |
Source/LifePlay/LPDirectControlSubsystem.h |
3CDB498591DFF98DD53FCFD65D7322D0 |
inchangé |
Instantané : D:\Game\LifePlay_Backup_5.5\STG-WALK2\manifest.csv (5323C2B2…). CRLF : 1 263 CR = LF (passe 2). Diff : STG-WALK.diff
(format diff classique).
Incident : un premier Snapshot.ps1 lancé depuis Bash a perdu les \ du chemin. Backup_5.5\STG-WALK\manifest.csv contient
une seule ligne erronée (SourceLifePlayLPDirectControlSubsystem.cpp, Existed=False), sans copie. Ce manifeste n'est pas à
utiliser : son Restore ne ferait rien d'utile. La référence est STG-WALK2.
2. Gestes
#include "HAL/PlatformProperties.h".WalkClip(bMale), dans l'espace anonyme :- charge
/Game/Heavy/Daz/<Bridget|Michael>/Anim/<B|M>_Walk_Loop, la copie cuite à venir ; - sinon
LPAnimRedirect::ClipPath(<nom>), comme avant (éditeur, mods) ; - les deux chargements sont faits avec
LOAD_NoWarn | LOAD_Quiet; - le clip trouvé est gardé en mémoire (
TWeakObjectPtr, un par sexe), pour ne pas recharger à chaque image ; - si aucun des deux ne se charge : un seul avertissement par sexe, « Marche : clip … introuvable (…, …), marche sans animation », puis plus aucun essai pendant la session.
- charge
Walk: la garde devient!bSandbox && (LPAnimRedirect::IsGameTarget() || FPlatformProperties::RequiresCookedData()).- jeu empaqueté : la marche est animée ;
- éditeur : selon
LPAnimTarget.ini, comme avant ; IsGameTargetn'est pas modifié.
WalkAnim:WalkClip(bMale)remplaceLoadObject(ClipPath(...)).IsMaleest toujours relu à chaque appel. La ligne « Marche : animation » est inchangée : elle s'écrit quand le cycle démarre.Tick, branche bloquée (menu, boîte de scène,SexOn) : appel deRestoreAnim(), sans effet si rien n'est capturé.RestoreAnim: si le maillage ne joue plus un*_Walk_Loopen modeAnimationSingleNode, le jeu (scène, action) a déjà posé sa propre animation. Elle n'est pas écrasée : seule la vitesse de lecture est rendue (1), et la capture est abandonnée. Sinon, l'Anim BP ou l'animation capturée est rendue, comme avant.- Ajout au DIAG, motivé : sans ce contrôle, le point 5 pourrait remplacer l'animation qu'une scène vient de poser.
bMenuBlocksn'est relu que toutes les 0,25 s.
- Ajout au DIAG, motivé : sans ce contrôle, le point 5 pourrait remplacer l'animation qu'une scène vient de poser.
Nom nouveau de l'espace anonyme : WalkClip, absent du reste de Source/LifePlay.
2b. Passe 2 (WALK-fix), après la VAL FAIL (STG-WALK-VAL.md, P5)
Défaut établi par la VAL et contre-vérifié dans la source du moteur (SkeletalMeshComponent.cpp, PlayAnimation →
SetAnimation → UAnimSingleNodeInstance::SetAnimationAsset). PlayAnimation ne met pas à jour
AnimationData.AnimToPlay. Le contrôle ajouté au geste 6 rendait donc toujours « animation posée par le jeu » : l'Anim BP n'était
plus rendue à l'arrêt. Les deux lectures d'origine de WalkAnim (capture de SavedSingleAnim, et test « déjà sur le cycle ») avaient
le même défaut, latent tant que les clips manquaient : PlayAnimation et le journal auraient été relancés à chaque image.
Correction :
#include "Animation/AnimSingleNodeInstance.h";- fonction
SingleNodeAnim(Mesh)dans l'espace anonyme :GetSingleNodeInstance()->GetAnimationAsset(), nulle en mode Anim BP ; - les 3 lectures de
AnimationData.AnimToPlaysont remplacées :WalkAnim(capture, test) etRestoreAnim(contrôle du geste 6). Il ne reste plus aucune lecture de ce champ, seulement le commentaire.
3. Points à confirmer en VAL
P1 : diff limité aux gestes du § 2. P2 : API (FPlatformProperties::RequiresCookedData, LoadObject avec drapeaux,
AnimationData.AnimToPlay, GetAnimationMode), includes. P3 : garde éditeur inchangée (IsGameTarget seul quand
RequiresCookedData est faux). P4 : aucune boucle de chargement (cache et bMissing). P5 : RestoreAnim ne touche pas une
animation posée par le jeu. P6 : KO3b, C1-Walk et 3a inchangés. P7 : compilation (BUILD de COMMUN-4).
4. Essai prévu (COMMUN-4, après la duplication des clips)
- Michael puis Bridget en ZQSD : les jambes marchent. Au journal, « Marche : animation M_Walk_Loop » ou « B_Walk_Loop », et aucune ligne « clip … introuvable ».
- Arrêt : la pose de repos revient.
- Scène ouverte en marchant : la pose de la scène s'affiche, pas la marche.
- Changement de sexe, puis marche : le bon clip est joué.
5. Fichiers à commiter
Source/LifePlay/LPDirectControlSubsystem.cpp (après COMMUN-4 et VAL), Docs/Migration/etat/ST/STG/STG-WALK-DIAG.md,
STG-WALK-IMPL.md, STG-WALK.diff, STG-WALK-VAL.md.