74 lines
5.3 KiB
Markdown
74 lines
5.3 KiB
Markdown
|
|
# 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`.
|