LifePlay-Revival/Docs/Migration/etat/ST/STG/STG-WALK-DIAG.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.3 KiB

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

DIAG de la demande de l'utilisateur relayée par Big Boss (2026-10-13), dans l'alpha : « les poses walk pour Bridget et Michael ; on ne peut pas laisser le personnage principal glisser sur le sol ». Lecture seule, sans copie UE. Lot STG, registre STG-TACHES.md.

1. Mesures (établies)

Contrôle Commande Résultat
Ligne « Marche : animation » (journal de WalkAnim) grep -c sur COMMUN-2 définitif, COMMUN-3 S1 et S2 fermée 0 / 0 / 0 ; « physique sans controleur » : 1 / 1 / 1 (la marche démarre bien)
Fichier LPAnimTarget.ini dans le jeu empaqueté ls <archive COMMUN-3>\Windows\LifePlay\Saved\Config\Windows\ absent (seulement GameUserSettings.ini, LPKeyboard.ini)
Clips Content/Quaternius/UAL/B_Walk_Loop.uasset (523 104 o), M_Walk_Loop.uasset (513 220 o) présents dans la copie
Cuisson des clips Config/DefaultGame.ini l. 54 +DirectoriesToNeverCook=(Path="/Game/Quaternius") (lot AP7 : « livrés par mods, jamais dans le jeu ») ; Saved/Cooked/Windows/LifePlay/Content/Quaternius absent
Dépendances des clips noms /Game/… lus dans les deux .uasset seulement leur squelette : /Game/Heavy/Daz/Bridget/bridget_gp_Skeleton et /Game/Heavy/Daz/Michael/michael_Skeleton, tous deux cuits (/Game cuit en entier, ERR-026)

2. Causes (établies) : deux verrous l'un derrière l'autre

  1. Garde : Walk n'appelle WalkAnim que si LPAnimRedirect::IsGameTarget() (LPDirectControlSubsystem.cpp). Cette fonction lit [LifePlay.Anim] Target=game dans Saved/Config/Windows/LPAnimTarget.ini (Plugins/LPAnimCore/…/LPAnimRedirect.cpp). Ce fichier n'existe pas dans un jeu empaqueté, ni dans un nouveau dossier Saved (REL-SAV) : la garde est fausse.
  2. Clips absents du paquet : même avec la garde levée, LoadObject(LPAnimRedirect::ClipPath("B_Walk_Loop")) rendrait nul. /Game/Quaternius est exclu de la cuisson. WalkAnim sort alors en silence (if (!WalkCycle) return;). Le joueur glisse.

Usage de IsGameTarget dans Source/ : seulement LPDirectControlSubsystem.cpp (grep -rn). Il n'est pas modifié (contrainte de Big Boss : il peut servir à d'autres redirections, dont celles des scènes de sexe dans l'addon).

3. Contrôles demandés

  • RestoreAnim à l'arrêt : WalkAnim l'appelle dès que la vitesse passe sous 20 (touches relâchées). Il rend l'Anim BP capturée au départ de la marche (SavedAnimClass, ex. Daily_F_C, en mode AnimationBlueprint) ou l'animation simple d'origine. Établi par lecture.
  • À l'entrée dans une action ou une scène : défaut (établi par lecture). Quand un menu, la boîte de scène ou SexOn bloque la marche, Tick ne passe plus par Walk, donc ni par WalkAnim ni par RestoreAnim. Si la marche est coupée en plein pas (scène qui s'ouvre, interaction), le maillage reste sur le cycle de marche jusqu'au prochain passage dans Walk. Avec les clips absents, ce défaut ne se voyait pas.
    • Correction : appeler RestoreAnim dans la branche bloquée de Tick. Elle est sans effet si rien n'a été capturé.
  • Homme ou femme après un changement de sexe (Michael → Bridget) : IsMale est relu à chaque appel de WalkAnim. La capture de l'Anim BP est refaite à chaque nouvelle marche, puisque bAnimCaptured est remis à faux par RestoreAnim. Le choix suit donc IsMale dès la marche suivante. Établi par lecture ; essai à faire en jeu.

4. Correctif proposé

C++ (LPDirectControlSubsystem.cpp, sans asset) :

  • garde locale : (LPAnimRedirect::IsGameTarget() || FPlatformProperties::RequiresCookedData()), en plus du !bSandbox existant :
    • jeu empaqueté : la marche est animée ;
    • éditeur : comportement inchangé, piloté par l'.ini ;
    • IsGameTarget n'est pas modifié ;
  • chemin du clip : d'abord la copie cuite (§ 4, asset), puis LPAnimRedirect::ClipPath (éditeur, mods) ;
  • un avertissement unique si aucun des deux ne se charge (« Marche : clip … introuvable »), au lieu de la sortie silencieuse ;
  • RestoreAnim() dans la branche bloquée de Tick (§ 3).

Asset (nécessaire, sinon le C++ ne suffit pas) : copier les deux clips hors de /Game/Quaternius, dans un dossier cuit, sans toucher aux originaux.

  • Proposé : /Game/Heavy/Daz/Bridget/Anim/B_Walk_Loop et /Game/Heavy/Daz/Michael/Anim/M_Walk_Loop, à côté de leur squelette.
  • Duplication par l'éditeur (EditorAssetLibrary.duplicate_asset, lp-mcp-bp, sous jeton UE et instantané), environ 1 Mo de paquet en plus.
  • Une copie du fichier sur disque est écartée : le nom de paquet est inscrit dans le .uasset.

Alternatives écartées :

  • retirer /Game/Quaternius de DirectoriesToNeverCook : 132 clips, 65 Mo, contraire à la décision AP7 ;
  • livrer les clips par un mod : Mods/ est vide dans les builds.

5. Essai prévu (COMMUN-4)

  • ZQSD avec Michael, puis avec Bridget : les jambes marchent, sans glissement. Au journal, une ligne « Marche : animation M_Walk_Loop » ou « … B_Walk_Loop ».
  • Arrêt : la pose de repos revient.
  • Marche coupée par une scène : la pose de la scène s'affiche, pas la marche.

6. Fichiers à commiter

Docs/Migration/etat/ST/STG/STG-WALK-DIAG.md.