235 lines
35 KiB
Markdown
235 lines
35 KiB
Markdown
Fiche FIX1-F7-PRE — Niveau N2 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths
|
||
# FIX1-F7-PRE : étude préliminaire de dimensionnement de F7 (ERR-011 : CenterBrow, animation « look », accessoires) et de F8b (meshZ au lever) (2026-10-20)
|
||
|
||
Hors gabarit : étude préliminaire (pas une CART complète), sur le modèle de `FIX1-F6-PRE.md`. Les rubriques 1 à 6 du gabarit CART sont gardées ; la rubrique 3 suit les quatre questions de la fiche (existant, localisation, dimensionnement et reproductibilité, recommandation), pour chacun des 4 sous-points : **F7a** avertissement CenterBrow, **F7b** animation « look » restée active, **F7c** accessoires détachés, **F8b** meshZ au lever. Lecture seule : ni copie UE, ni MCP, ni éditeur, ni commandlet. Seul ce fichier est écrit.
|
||
|
||
## Résumé (à lire en premier)
|
||
|
||
1. **La ligne FIX1 du doc 37 est à reclasser** : `37_Feuille_De_Route_Alpha2.md:171` range F6, F7 et F8 en « petits correctifs Blueprint par MCP » (`lp-mcp-bp`). Sur ces 4 sous-points, aucun n'est à la fois un correctif Blueprint net, avec un effet visible établi, et hors de GI.
|
||
2. **F7a CenterBrow** : le lecteur est dans **GI** (`CalculateHeadtrack`, établi sur le dump 5.5) ; la garde utile est donc en **build 2** (GI n'est révisé qu'une fois). Aucun effet visible (`Registre_Erreurs.md:25`). Présent dans 8 journaux sur 11 relevés (141 à 6 138 lignes) : pas déterministe.
|
||
3. **F7b « look »** : un seul constat (COMMUN-8, 2026-10-14), **aucune mesure depuis** (les lignes `STATE … currentAnimation=` n'existent que sous `-LPPersonsLog`, absent des 7 journaux COMMUN-15 à 21). Effet visible non établi. Un correctif d'un nœud dans Person est imaginable, mais ses consommateurs (`UpdateDailyPose`) sont à risque.
|
||
4. **F7c accessoires** : un seul constat « mineur » (COMMUN-7), sans recette, lieu du défaut non lu (Person `spawnProp` / attaches, ou donnée d'animation : inconnu).
|
||
5. **F8b meshZ** : **déjà neutralisé en C++** par M-Z (`LPDirectControlSubsystem.cpp:1200-1223`), validé en jeu (COMMUN-10) ; M-Z se déclenche **18 fois dans 9 journaux** (COMMUN-15 à 21), donc le défaut Blueprint est vivant, mais masqué. **Constat nouveau (estimé)** : les trois valeurs relevées −80,4 / −82,8 / −85,2 sont exactement −90 + 12 × {0,8 ; 0,6 ; 0,4}, la formule de `Person::updateHeelHeight` (talons). Si c'est la cause, forcer −90 (Blueprint ou M-Z) n'est pas un correctif et la ligne F8b est mal posée.
|
||
6. **Recommandation** : build 1 = F8a seul (déjà fait) plus, au choix de l'utilisateur, **une séance de mesure** sur le build COM21 existant (sans copie UE) et **l'instrumentation de la ligne M-Z** (C++, quelques lignes, dans la compilation déjà prévue). F7a, F7c, F8b en **build 2** ; F7b en build 1 **seulement** si la mesure montre un effet visible avant la porte du 23 au soir. Détail en § 3.4.
|
||
|
||
| Sous-point | Où (établi ou estimé) | Effet visible | Reproduction | Agent · niveau | Build |
|
||
|---|---|---|---|---|---|
|
||
| F7a CenterBrow | GI `CalculateHeadtrack` (établi, dump 5.5) ; appelé par les AnimBP `Daily` et `Daily_F` (estimé) | aucun (journal seul) | 8 journaux sur 11, apparition non déterministe | `lp-mcp-bp` N2 (garde dans GI), dump 5.8 d'abord | **2** |
|
||
| F7b « look » | Person : variable `currentAnimation` non vidée au lever (estimé) | non établi | 1 constat (14 octobre), aucune mesure depuis | `lp-diag` N2 (mesure), puis `lp-mcp-bp` N1 si effet | 1 sous condition, sinon après l'alpha |
|
||
| F7c accessoires | inconnu (Person `spawnProp` / attaches, ou donnée) | « mineur » | 1 constat, pas de recette | `lp-diag` N2 | pas en 1 |
|
||
| F8b meshZ | `Person::updateHeelHeight` (estimé) contre animations de place (hypothèse STG) : non tranché ; M-Z (C++) corrige déjà | corrigé en jeu | M-Z : 18 déclenchements en 9 journaux | `lp-impl` N1 (journal M-Z) ; correctif Blueprint : pas avant la mesure | **2** ou abandon |
|
||
|
||
## 1. Objet et périmètre
|
||
|
||
Un domaine : les défauts « animation et placement » de la ligne FIX1 hors F6 et hors F8a, soit F7 (`37_…:60` : « ERR-011 : avertissement CenterBrow ; animation « look » restée active ; accessoires détachés ») et la seconde moitié de F8 (`37_…:61` : « meshZ au lever dans le Blueprint »). Demande de Big Boss : ce qui est établi, ce qui reste et où (Blueprint : lequel ; C++ ; GI), dimensionnement et reproductibilité, recommandation (agent, niveau, durée, risque ; build 1 ou 2). Hors périmètre : F8a (`Aim`), F6, toute correction, tout essai.
|
||
|
||
## 2. Commandes et lectures (exactes) avec compte brut
|
||
|
||
| # | Commande ou lecture | Résultat brut |
|
||
|---|---|---|
|
||
| 1 | Read `gabarits.md` (CART), `FIX1-F6-PRE.md` | gabarit et modèle lus |
|
||
| 2 | Grep `ERR-011` dans `Docs/Registre_Erreurs.md` ; Read `:25` | 1 ligne, `Registre_Erreurs.md:25` (citée en § 3.1) |
|
||
| 3 | Grep `F7`, `F8b`, `meshZ`, `CenterBrow` dans `37_Feuille_De_Route_Alpha2.md` ; Read `:50-69`, `:160-194` | `:60`, `:61`, `:171` ; calendrier `:177-185` |
|
||
| 4 | Grep `CenterBrow`, `meshZ`, `PlayerBusy` dans `BOSS-ETAT.md` ; Read `:222-243`, `:62-73` | `:70`, `:234`, `:235` |
|
||
| 5 | Grep (compte) `CenterBrow` dans `etat/BOSS`, glob `*.log` | `Found 11033 total occurrences across 8 files.` (détail en § 3.1) |
|
||
| 6 | Glob `*.log` dans `D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay\Saved\Logs` | 3 fichiers : `LifePlay.log`, `LifePlay-backup-2026.10.20-17.25.35.log`, `LifePlay-backup-2026.10.20-17.27.13.log` |
|
||
| 7 | Grep (compte) `CenterBrow` puis `GetSocketInfoByName` dans ce dossier | `LifePlay.log:148` ; `LifePlay.log:669` et `…17.27.13.log:119` |
|
||
| 8 | Grep (compte) `GetSocketInfoByName` dans `etat/BOSS`, glob `COMMUN-2*/*.log` | `COMMUN-21_session_1925_rotation.log:119`, `COMMUN-21_session_1927.log:669`, `COMMUN-20_session_1710.log:790` ; total 1578 |
|
||
| 9 | Grep (compte) `GetSocketInfoByName\((Head\|hip\|pelvis\|chestUpper)\)` dans `LifePlay.log` (COM21) | `521` |
|
||
| 10 | Grep `GetSocketInfoByName\(CenterBrow\)` dans `LifePlay.log` (COM21), 3 premières lignes puis `offset 145` | `:1645` (17:33:24.838), `:1676`, `:1712` ; `:2872`, `:2873` (17:36:01.238), `:2916` (ligne de bilan « 147 [LogSkinnedMeshComp Warning] … ») |
|
||
| 11 | Grep `Person_C_2147481923` dans `LifePlay.log` (COM21), 8 premières | `:1060` (BeginPlay), `:1275-1276` (`index SPAWN`, `DESTROY…`), `:1278-1281` (Head ×2, pelvis, chestUpper à 17:32:08.569) |
|
||
| 12 | Grep `M-Z :` dans `etat/BOSS`, glob `COMMUN-{15..21}/*.log`, mode contenu ; puis mode compte (`COMMUN-*/*.log`) | 18 lignes (liste en § 3.1) ; compte : 9 fichiers, `Found 18 total occurrences across 9 files.` |
|
||
| 13 | Grep (compte) `currentAnimation=fnt` et `meshZ=` dans les journaux COMMUN-15 à 21 ; `currentAnimation=fnt` dans `LifePlay.log` COM21 | `No matches found` (trois fois) |
|
||
| 14 | Read `LPDirectControlSubsystem.cpp:1196-1227` ; Grep `meshZ`, `M-Z` dans `Source` | M-Z `:1200-1223`, `MeshZScans` (`.h:88-89`) ; `LPDebugSubsystem.cpp:414` (ligne `STATE … meshZ= … currentAnimation=`) |
|
||
| 15 | Read `LPDebugSubsystem.cpp:385-424`, `:628-647` | `STATE` écrit par `WritePersonsDump` ; déclenché par `-LPPersonsLog[=s]` (`:639-643`) ou la console `LifePlay.PersonsDump` (`:631-634`) |
|
||
| 16 | Grep `CenterBrow`, `CalculateHeadtrack`, `HeadtrackTarget` dans `etat/portage55/L6f/L6f_dump_GI.txt` ; Read `:42272-42301` | `:42284`, `:42296`, `:42592`, `:42609` ; en-tête `:42273` ; appels `Person_C::FaceHeadtrackTarget` `:42832`, `:42834` |
|
||
| 17 | Grep `^=== Person ::` (par tranches), `NewLocation = '`, `RelativeLocation\|currentAnimation\|…`, `updateHeelHeight`, `HeelHeight` sur `L6f_dump_Person.txt` (fichier nommé) ; Read `:19736-19835`, `:39405-39430` | en-têtes cités en § 3.2 ; `updateHeelHeight` appelée `:2528`, `:3767`, `:3772`, `:3794` ; définie `:19714` |
|
||
| 18 | Grep `updateHeelHeight` sur `L6f_dump_GI.txt` (fichier nommé) | `:25258` (`Person_C::updateHeelHeight()`) |
|
||
| 19 | Bash, depuis la racine : `for f in $(rg --files -g "Person.uasset" -g "GI.uasset" -g "Daily.uasset" -g "Daily_F.uasset" Content); do echo "== $f"; rg -a -o -e CalculateHeadtrack -e updateHeelHeight -e unOccupyFnt -e HeadtrackTarget -e CenterBrow -e spawnProp -e PlayFntAnim "$f" \| sort \| uniq -c; done` | `Daily` : CalculateHeadtrack 3, HeadtrackTarget 1 ; `Daily_F` : idem ; `GI` : CalculateHeadtrack 12, CenterBrow 5, HeadtrackTarget 2, spawnProp 2, unOccupyFnt 1, updateHeelHeight 1 ; `Person` : CenterBrow 3, HeadtrackTarget 3, PlayFntAnim 2, spawnProp 5, unOccupyFnt 8, updateHeelHeight 4 ; `exit=0` (comptes **bruts de correspondances dans le binaire** : preuve de présence du nom, pas de nœuds) |
|
||
| 20 | Read `STE-H4-DIAG.md`, `STE-J6-TRACE.md:187-232`, `STG-COMMUN8-DIAG.md`, `STG-COMMUN9-DIAG.md`, `STG-MZ-IMPL.md`, `KEY2-DIAG-01.md:14-25`, `JOURNAUX1/ERR-brouillons.md` | cités en § 3 |
|
||
| 21 | Glob `**/*D8*` sous `etat/ST/STE` ; Glob `*` sous `etat/REL/FIX1` | `No files found` ; 10 fichiers (F6 PRE, SPEC, IMPL, VAL, journaux de build) |
|
||
|
||
Écart de méthode à signaler, deux Grep de dossier **non concluants** : un Grep de dossier sur `etat/portage55/L6f` (motifs `unOccupyFnt`, `^=== Person :: …`, `updateHeelHeight`) a rendu `No matches found` alors que les mêmes motifs trouvent des lignes quand le fichier `.txt` est nommé (n° 17 et 18 : `updateHeelHeight` `:19714`, `:2528`…). Les `.txt` d'`etat/` sont ignorés par git (`.gitignore:53`) et un Grep de dossier les saute. **Un résultat vide d'un Grep de dossier sur `etat/` (hors `.md`/`.csv`) ne prouve rien** ; nommer le fichier (à verser). Les dumps de Blueprint lus sont ceux de 5.5 (L6f, 2026-09-30) : l'état des Blueprint en 5.8 n'a pas été relu (le `rg -a` du n° 19 ne prouve que la présence des noms).
|
||
|
||
## 3. Constats `fichier:ligne`
|
||
|
||
### 3.1 État de l'existant (question 1)
|
||
|
||
**F7a, avertissement CenterBrow**
|
||
|
||
| Constat | Source | Niveau |
|
||
|---|---|---|
|
||
| ERR-011 : signature `GetSocketInfoByName … No SkeletalMesh for CharacterMesh`, « 80/perso en 4.27, 76 en 5.5 », gravité « bruit (existe en 4.27) » ; part F5 du DESTROY corrigée (CHG-326) ; mise à jour JOURNAUX1 du 2026-10-14 : variante `CenterBrow` « à chaque image sur des Person détruites, sans effet visible (COMMUN-5, COMMUN-6) ; rattachement à confirmer » | `Docs/Registre_Erreurs.md:25` ; `COMMUN-6-BILAN.md:33` | établi |
|
||
| Le brouillon JOURNAUX1 classe le rattachement « non établi » (statut « en cours ») | `JOURNAUX1/ERR-brouillons.md:91`, `:104` | établi |
|
||
| Classé « Après l'alpha (non ouverts) » avec la « animation look » et les « accessoires détachés » | `BOSS-ETAT.md:235` | établi |
|
||
| STE-H4 (J5) : 6 408 lignes `CenterBrow` (31,3 % du journal) ; lecteur **estimé fort** : GI `CalculateHeadtrack`, appelé par l'`EventGraph` des AnimBP `Daily` et `Daily_F` pour un vivant dont le `HeadtrackTarget` est resté sur un mannequin caché ; voie D = garde dans `CalculateHeadtrack` (`IsValid(Target)` et corps présent) ou vider le `HeadtrackTarget` au DESTROY ; **dumps STE-D8 requis** | `STE-H4-DIAG.md:6`, `:53`, `:88-105`, `:205-208`, `:262-273` | établi (texte) ; lecteur estimé |
|
||
| Les dumps STE-D8 n'ont pas été produits | Glob `**/*D8*` sous `etat/ST/STE` : `No files found` | établi (cherché dans ce dossier seulement) |
|
||
| Effet de C0 sur `CenterBrow` : 6 408 (J5), 6 227 (H9), 528 (J6) ; « la part de C0 dans cette baisse reste incertaine » | `STE-J6-TRACE.md:223`, `:229-231` | établi |
|
||
| Aucune garde `CenterBrow` n'a été livrée : la ligne `CenterBrow` revient dans les journaux de COM21 | § 3.1 ci-dessous | établi |
|
||
|
||
Comptes de `CenterBrow` dans les journaux récents (Grep en mode compte, n° 5 et 7 ; un fichier absent de la sortie compte pour 0) :
|
||
|
||
| Journal | `CenterBrow` | `GetSocketInfoByName` (tous sockets) |
|
||
|---|---|---|
|
||
| `COMMUN-14\COMMUN-14.4-17_LifePlay_20261020-0757.log` | 141 | non mesuré |
|
||
| `COMMUN-15\…_encours.log` | 0 | non mesuré |
|
||
| `COMMUN-16\COMMUN-16_session_1131.log` | 0 | non mesuré |
|
||
| `COMMUN-16\COMMUN-16_session_1136.log` | 649 | non mesuré |
|
||
| `COMMUN-16\COMMUN-16_session_1207.log` | 151 | non mesuré |
|
||
| `COMMUN-17\COMMUN-17_session_1253.log` | 302 | non mesuré |
|
||
| `COMMUN-18\COMMUN-18_session_1358.log` | 6 138 | non mesuré |
|
||
| `COMMUN-19\COMMUN-19_session_1457.log` | 3 355 | non mesuré |
|
||
| `COMMUN-20\COMMUN-20_session_1710.log` | 149 | 790 |
|
||
| `COMMUN-21\COMMUN-21_session_1925_rotation.log` | 0 | 119 |
|
||
| `COMMUN-21\COMMUN-21_session_1927.log` | 148 | 669 |
|
||
| COM21 `Saved\Logs\LifePlay.log` | 148 | 669 |
|
||
| COM21 `…backup-2026.10.20-17.27.13.log` | 0 | 119 |
|
||
|
||
Somme des 8 journaux non nuls : 11 033 (concorde avec la sortie de l'outil). Le journal `COMMUN-21_session_1927.log` a les mêmes comptes que `LifePlay.log` de COM21 (148 et 669) : copie probable (MD5 non comparés). **Précision** : sur COM21, le compte 148 inclut **la ligne de bilan du journal** (`LifePlay.log:2916`, « 147 [LogSkinnedMeshComp Warning] GetSocketInfoByName(CenterBrow) … ») : il y a **147 avertissements**, et de même 669 = 148 + 521 (n° 9) ; la présence d'une ligne de bilan dans les autres journaux n'a pas été vérifiée.
|
||
|
||
Détail COM21 : les premières et dernières lignes `CenterBrow` (`:1645`, `:1676`, `:1712`, `:2872`, `:2873`) visent toutes `Person_C_2147481923`, acteur qui passe par `index SPAWN` puis `DESTROY…` (`:1275-1276`) ; les avertissements `CenterBrow` commencent à 17:33:24.838 (`:1645`), 76 s après le SPAWN, et finissent à 17:36:01.238 (`:2873`), soit 2 min 36 s. La cadence (une ligne par image ou non) n'a pas été établie. Les 521 autres lignes sont les sockets Head, hip, pelvis, chestUpper (part « bruit accepté » d'ERR-011).
|
||
|
||
**F7b, animation « look » restée active**
|
||
|
||
| Constat | Source | Niveau |
|
||
|---|---|---|
|
||
| COMMUN-8 (2026-10-14, 09:13:44-09:14:04) : le joueur garde `currentAnimation = fnt_new038-f-0-look` dans la rue puis au café, avec `meshZ -80,4` ; « animation de meuble restée active après le changement de pièce (Blueprint d'origine, estimé) » ; « Elle peut ajouter une posture penchée, mais ce n'est pas elle qui enfonce » ; versé à STE, « après l'alpha sauf effet visible » | `STG-COMMUN8-DIAG.md:22`, `:61-63`, `:73-74`, `:84-85` | établi (observation) ; cause estimée |
|
||
| `currentAnimation` reste aussi renseigné après un lever ordinaire (`fnt_new048-f-0-sit`, journal COMMUN-9) : M-Z ne l'utilise donc pas comme garde | `STG-MZ-IMPL.md:45-46` | établi |
|
||
| Registre des brouillons : N45, gravité faible (« mineur »), « ouvert, non instruit », 1 constat | `JOURNAUX1/ERR-brouillons.md:76` ; `JOURNAUX1/SUIVI-propositions.md:53` | établi |
|
||
| Effet visible : non établi ; **aucune mesure depuis le 14 octobre** : les journaux COMMUN-15 à 21 ne contiennent ni `currentAnimation=fnt` ni `meshZ=` (n° 13), parce que la ligne `STATE` n'est écrite que sous `-LPPersonsLog` ou `LifePlay.PersonsDump` | `LPDebugSubsystem.cpp:414`, `:631-643` | établi |
|
||
|
||
**F7c, accessoires détachés**
|
||
|
||
| Constat | Source | Niveau |
|
||
|---|---|---|
|
||
| Seul constat : « Accessoire de place mal attaché (assiette et sandwich près de l'épaule) : mineur » (COMMUN-7) ; « hors B2q » | `BOSS/COMMUN-7-BILAN.md:28` ; `STG-B2q-IMPL.md:70` ; `JOURNAUX1/ERR-brouillons.md:76` | établi |
|
||
| À ne pas confondre : « les accessoires restent visibles » pendant que le personnage assis disparaît (N36) est un autre défaut, **corrigé et validé en jeu** (B2q, COMMUN-9 P1, COMMUN-10 Q6) | `COMMUN-7-BILAN.md:20` ; `JOURNAUX1/ERR-brouillons.md:70` | établi (le bilan COMMUN-10 lui-même n'a pas été relu) |
|
||
| La formule « accessoires détachés » de `BOSS-ETAT.md:235` et du doc 37 résume ce seul constat (estimé) | `BOSS-ETAT.md:235` ; `37_…:60` | estimé |
|
||
|
||
**F8b, meshZ au lever**
|
||
|
||
| Constat | Source | Niveau |
|
||
|---|---|---|
|
||
| Symptôme (COMMUN-9) : les pieds sont à 9,8 cm au-dessus du sol (`delta -9.8`) alors que la capsule est au sol ; `meshZ` relatif −80,4 (ou −82,8) au lieu de −90 ; « rien ne remet −90 au lever » ; PNJ féminines debout concernées (12 relevés, `currentAnimation=-`) ; lecture : `unOccupyFnt` et `PlayIdle` ne rétablissent pas la position du maillage (Blueprint d'origine, **estimé**) | `STG-COMMUN9-DIAG.md:16-31` | établi (mesure) ; cause estimée |
|
||
| **Contournement C++ livré** : M-Z dans `FitPersonBounds` (balayage de 0,5 s) remet le Z relatif du maillage à celui du gabarit de la classe (−90 pour `Person_C`) si : aucun meuble, pas de scène, capsule en collision, écart > 1 cm, **2 balayages de suite** | `LPDirectControlSubsystem.cpp:1200-1223` ; `STG-MZ-IMPL.md:26-46` | établi |
|
||
| Validé en jeu : « plus de flottement après le lever, M-Z confirmé » (COMMUN-10 Q4) | `JOURNAUX1/ERR-brouillons.md:75` (qui cite `C10-BILAN:14`) | établi (bilan non relu) |
|
||
| **M-Z se déclenche encore** : 18 lignes `M-Z :` dans 9 journaux (COMMUN-15 : 1 ; 16/1131 : 1 ; 16/1136 : 3 ; 16/1207 : 1 ; 17 : 4 ; 18 : 4 ; 19 : 1 ; 20 : 2 ; 21 : 1). 16 sur `PlayerCharacter`, 2 sur des PNJ. Valeurs d'origine : −80,4 ×5 ; −85,2 ×6 ; −88,0 ×7 | n° 12 (ex. `COMMUN-20_session_1710.log:1666`, `COMMUN-17_session_1253.log:1484`, `COMMUN-18_session_1358.log:3367`) | établi |
|
||
| Dans le dump 5.5 de Person, la seule fonction qui écrit un Z de maillage autre que −90 est **`updateHeelHeight`** : si le tableau de chaînes contient `Heels`, `HeelHeight` = dernière chaîne convertie en nombre, puis `Mesh.K2_SetRelativeLocation(0, 0, −90 + 12 × HeelHeight)` ; sinon `HeelHeight = 0` et Z = −90. Les autres écritures de Z sont le −90 littéral (`:19832`, `:39421`) | `L6f_dump_Person.txt:19714`, `:19754`, `:19778-19790`, `:19804-19832` ; grep `NewLocation` : `:8315-8370` (X/Y des composants de pénis), `:19832`, `:39421` | établi (dump 5.5) |
|
||
| `updateHeelHeight` est appelée par `Strip` (`:2528`) et `Dress` (`:3767`, `:3772`, `:3794`) dans Person, et une fois dans GI (`:25258`) ; **pas** par `PlayIdle`, `unOccupyFnt`, `standIdle` ni `jumpOffFnt` (leurs en-têtes : `:12042`, `:12836`, `:13117`, `:13536` ; aucune occurrence entre ces lignes dans le Grep du fichier) | `L6f_dump_Person.txt` ; `L6f_dump_GI.txt:25258` | établi (dump 5.5) |
|
||
| Les valeurs relevées sont exactement −90 + 12 × H pour H = 0,8 (−80,4), 0,6 (−82,8), 0,4 (−85,2) ; −88,0 (7 occurrences sur 18) n'est pas sur cette grille (2,0 / 12 = 0,1667) | calcul sur § 3.1 et `STG-COMMUN9-DIAG.md:22` | **estimé** (coïncidence arithmétique, non mesurée) |
|
||
| `meshZ = −88` figure aussi dans l'étude des caméras de scène | `CAM-COMMUN9-DIAG.md:14` | établi (ligne seule lue) |
|
||
| À ne pas confondre avec « personnage enfoncé » : l'enfoncement dans la rue (ancien ERR-128) vu à COMMUN-15 venait de `PlayerBusy` resté vrai après une visite de l'onglet Clavier (`LiftSunkPersons` ne relevait pas le joueur) ; corrigé en C++ (fermeture des réglages pendant une capture, `5ff9f26d`), COMMUN-16.22 PASS. Le `meshZ` relevé, lui, **fait flotter**, il ne fait pas enfoncer | `KEY2-DIAG-01.md:20-24` ; `BOSS-JOURNAL.md:815`, `:840` | établi |
|
||
|
||
### 3.2 Où est le reste (question 2)
|
||
|
||
| Sous-point | Où | Preuve | Niveau |
|
||
|---|---|---|---|
|
||
| F7a | **GI** : fonction `CalculateHeadtrack` (44 nœuds) lit `GetSocketLocation('CenterBrow')` sur le `Mesh` de `From` (`K2Node_CallFunction_3`) et de `To` (`K2Node_CallFunction_1`) ; elle appelle `Person_C::FaceHeadtrackTarget` ; deux autres lectures de `CenterBrow` dans GI, fonction non identifiée | `L6f_dump_GI.txt:42273-42296`, `:42592`, `:42609`, `:42832`, `:42834` | établi (dump 5.5) |
|
||
| F7a | **AnimBP `Daily` et `Daily_F`** portent le nom `CalculateHeadtrack` (3 correspondances chacun) : appelants (estimé, déjà dit par STE-H4) | `rg -a -o` n° 19 ; `STE-H4-DIAG.md:95-97` | estimé |
|
||
| F7a | **Person** : `FaceHeadtrackTarget` lit aussi `CenterBrow` ; `Person.uasset` : 3 correspondances | `STE-H4-DIAG.md:91-94` ; n° 19 | établi (texte STE-H4) |
|
||
| F7a | Aucun C++ ne lit `CenterBrow` : **non cherché ici** (STE-H4 : 0 pour `chestUpper` dans `Source` et `Plugins`) | `STE-H4-DIAG.md:302-304` | incertain |
|
||
| F7b | **Person** : la variable `currentAnimation` est lue par `UpdateDailyPose` (`SetAnimationMode` puis deux affectations `Animation` ← `currentAnimation`), `SetAnimationAsset`, `unOccupyFnt` (lectures seules) ; elle est écrite dans le graphe d'événements (affectée `:33526`, vidée `:33341` et `:38779`) | `L6f_dump_Person.txt:12615-12682` (en-tête `UpdateDailyPose` `:12615`), `:12780-12815`, `:12836-12844`, `:13042`, `:33341`, `:33526`, `:38779` | établi (dump 5.5) |
|
||
| F7b | `unOccupyFnt` ne contient **pas** d'affectation de `currentAnimation` (les trois affectations sont au-delà de la ligne 33000) ; si l'une des deux remises à vide tourne au lever ou au changement de pièce : inconnu | grep `currentAnimation` sur le dump | établi (absence dans la fonction) ; reste inconnu |
|
||
| F7c | **Person** : `spawnProp` (`:14529`), `clearProps` (`:14582`) ; 7 nœuds `K2_AttachToComponent` dans le graphe d'événements (`:37915-38461`) ; `spawnProp` 5 correspondances dans Person et 2 dans GI | dump Person ; n° 19 | établi (existence) ; lieu du défaut inconnu |
|
||
| F8b | **Person** `updateHeelHeight` (Blueprint, appelée par `Strip`, `Dress`, GI) ; **C++** M-Z dans `LPDirectControlSubsystem` | § 3.1 | établi |
|
||
| F8b | `PlayIdle` / `unOccupyFnt` ne rétablissent pas le Z (STG) : consistant avec l'absence d'appel à `updateHeelHeight` ; `PlayFntAnim` (2 correspondances dans `Person.uasset`) : sa définition n'est pas dans les en-têtes lus, le dump la montre appelée au graphe d'événements (`:33740`) | `L6f_dump_Person.txt:33740` ; n° 19 | établi (appel) ; effet sur le Z inconnu |
|
||
|
||
GI touché ? **F7a : oui** (la garde naturelle est dans `GI::CalculateHeadtrack`, voie A de § 3.3), donc build 2 selon la révision unique de GI (`BOSS-JOURNAL.md:693`, `:870` : « révision unique en build 2 »). F7b, F8b : **non** (Person, C++). F7c : inconnu. Les AnimBP `Daily` et `Daily_F` ne seraient pas à modifier pour la voie A.
|
||
|
||
### 3.3 Dimensionnement et reproductibilité (question 3)
|
||
|
||
**F7a**
|
||
|
||
| Voie | Contenu | Taille (estimée) | GI ? |
|
||
|---|---|---|---|
|
||
| A, garde dans `CalculateHeadtrack` | avant `K2Node_CallFunction_1` et `_3` : `IsValid(From)`, `IsValid(To)` et maillage présent (`GetSkinnedAsset` valide), sinon retour sans calcul | 4 à 8 nœuds sur 44, 2 coupures (comparable aux 2 à 3 nœuds de la voie C de STE-H4, `STE-H4-DIAG.md:199`) | **oui** |
|
||
| B, à la cause | vider le `HeadtrackTarget` des vivants qui visent un mannequin au DESTROY, ou exclure les mannequins cachés de `getNearestDummy` | non dimensionnable : « la chaîne exacte (qui pose le `HeadtrackTarget`, pourquoi il reste) » est inconnue (`STE-H4-DIAG.md:252`) | probablement (GI et Person) |
|
||
| C, réglage de journal | abaisser la verbosité de `LogSkinnedMeshComp` par configuration | 1 ligne de configuration ; **masque** aussi les 521 lignes des autres sockets et les vrais cas ; effet en Shipping non lu | non |
|
||
| D, ne rien faire | l'avertissement existe depuis la 4.27 (`Registre_Erreurs.md:25`) | 0 | non |
|
||
|
||
Reproduction : non déterministe. 8 journaux sur 11 contiennent `CenterBrow` (de 141 à 6 138 lignes), 3 n'en ont aucune ; sur COM21 la série commence 76 s après le SPAWN d'un mannequin et dure 2 min 36 s. La condition d'apparition (un vivant dont le `HeadtrackTarget` pointe un mannequin sans corps) est **estimée**, pas démontrée. **Preuve en jeu** : build Development (journal avec avertissements), jouer jusqu'à au moins un `index SPAWN` suivi de `DESTROY`, attendre 3 minutes, compter `GetSocketInfoByName(CenterBrow)` (Grep en mode compte, moins la ligne de bilan). Critère : 0 ligne `CenterBrow` avec au moins un SPAWN, les 521 autres lignes inchangées. Une session à 0 sans SPAWN ne prouve rien (3 journaux de référence sont à 0). Le Shipping n'a pas été examiné (`bUseLoggingInShipping` non lu, `STE-H4-DIAG.md:253-254`).
|
||
|
||
**F7b**
|
||
|
||
| Critère | Établi | Estimé | Inconnu |
|
||
|---|---|---|---|
|
||
| Correctif | — | un nœud « affecter `currentAnimation` = vide » en fin de `unOccupyFnt` ou à l'entrée d'une pièce (Person seul, 1 nœud, 2 liens) | si un autre chemin relit `currentAnimation` après le lever : `UpdateDailyPose` le réaffecte à `Animation` (`:12635-12682`), donc vider peut changer ce que ce chemin joue ; risque moyen |
|
||
| Effet visible | aucun établi | posture penchée possible (`STG-COMMUN8-DIAG.md:62-63`) | tout |
|
||
| Reproduction | 1 constat (COMMUN-8) : `look` d'un meuble (vitrine), puis changement de pièce | — | si le clip joue encore (`anim=single:…`) ou si seule la variable est périmée |
|
||
|
||
Preuve en jeu : sans copie UE, avec le build COM21 lancé avec `-LPPersonsLog=2` (`LPDebugSubsystem.cpp:639-643`), utiliser l'action « regarder » sur un meuble de boutique, sortir, relever pendant 30 s la ligne `STATE PlayerCharacter … anim=… currentAnimation=…`. Attendu avant correctif : `currentAnimation=fnt_…-look` (COMMUN-8). Après : `currentAnimation=-`, et `anim=` sans `single:…look`. Un essai sans effet visible clôt F7b (« ne pas corriger »).
|
||
|
||
**F7c**
|
||
|
||
Taille : non dimensionnable. Une attache de prop mal placée peut venir du Blueprint (`spawnProp`, 7 attaches), d'un décalage de donnée d'animation, ou de la pose de la place (lien avec le Z du maillage : non démontré). Reproduction : aucune recette (1 constat, « mineur », assiette et sandwich ; meuble et animation non notés dans le bilan). **Preuve en jeu** à définir après une première reproduction avec capture d'écran (même place, mêmes accessoires, avant et après).
|
||
|
||
**F8b**
|
||
|
||
| Critère | Établi | Estimé | Inconnu |
|
||
|---|---|---|---|
|
||
| Cause | le Z relatif du maillage n'est pas −90 après le lever et rien dans `PlayIdle` / `unOccupyFnt` ne le remet | −90 + 12 × HeelHeight (talons, `updateHeelHeight`) pour −80,4 / −82,8 / −85,2 | le chemin qui écrit −88,0 (7 cas sur 18) ; si le joueur et les PNJ concernés portent des talons ; le lien avec le premier meuble utilisé (`STG-COMMUN9-DIAG.md:24`) |
|
||
| Contournement | M-Z, 18 déclenchements en 9 journaux | M-Z corrige 1 s au plus tard après le lever | M-Z force −90 **sans lire `HeelHeight`** : si les talons sont la cause, il retire un décalage voulu par le Blueprint ; sa validation (« plus de flottement ») ne dit rien sur les talons |
|
||
| Correctif Blueprint | — | « appeler `updateHeelHeight` en fin de `unOccupyFnt` » (Person seul, 1 nœud d'appel) rétablirait −90 + 12 H plutôt que −90 : **hypothèse**, `updateHeelHeight` lit le tableau de vêtements | effet sur la pose assise ; GI appelle `unOccupyFnt` (1 correspondance dans `GI.uasset`) |
|
||
|
||
Reproduction : **fiable avec les journaux** (M-Z écrit une ligne à chaque correction). Preuve en jeu : (1) compter les lignes `M-Z :` sur une séance avec au moins un meuble utilisé puis quitté : valeur de référence 1 à 4 par séance (COMMUN-15 à 21) ; (2) après un correctif Blueprint, M-Z doit rester **silencieux** (0 ligne) sur la même séance ; (3) départage talons / place : habiller le joueur sans talons, s'asseoir, se lever, relever `meshZ=` (nécessite `-LPPersonsLog`) ; ou ajouter `HeelHeight` à la ligne M-Z (voir § 3.4).
|
||
|
||
### 3.4 Recommandation (question 4)
|
||
|
||
**Agent, niveau, durée (estimés), risque, build**
|
||
|
||
| Sous-point | Étape | Agent · niveau | Durée (estimée, non mesurée) | Risque | Build |
|
||
|---|---|---|---|---|---|
|
||
| F7a | dump 5.8 de `CalculateHeadtrack` (`LPDumpFunction -BP=GI -Fn=CalculateHeadtrack -Pins -Exec`, éditeur fermé : copie UE) ; IMPL de la garde ; VAL | `lp-mcp-bp` N2 pour l'IMPL (GI par MCP, instantané avant) ; `lp-validator` N2 | dump 5 tours ; IMPL 15 à 25 tours ; VAL 10 à 15 tours ; essai 15 à 20 min de jeu | faible pour le jeu (garde sur un nœud lu) ; risque de calendrier : GI n'est révisé qu'une fois, la garde doit partir avec les autres retouches de GI | **build 2** |
|
||
| F7b | mesure sans copie UE (build COM21, `-LPPersonsLog=2`), puis éventuellement 1 nœud dans Person | `lp-diag` N2 pour la mesure ; `lp-mcp-bp` N1 pour l'IMPL | mesure : 20 min de jeu par l'utilisateur ou Big Boss + 10 à 15 tours d'analyse ; IMPL 10 à 15 tours ; VAL 10 tours | moyen : consommateurs de `currentAnimation` (`UpdateDailyPose`) | build 1 **seulement si** la mesure montre un effet visible avant le **23 au soir** (créneau FIX1 sur la copie UE au J3, VAL au J4, `37_…:183-184`) ; sinon après l'alpha |
|
||
| F7c | reproduction avec capture, lecture MCP de `spawnProp` et des attaches | `lp-diag` N2 | 15 à 20 tours après une reproduction | non évaluable | pas en build 1 |
|
||
| F8b | instrumenter la ligne M-Z (C++, dans `LPDirectControlSubsystem.cpp:1216`) : y ajouter `HeelHeight` et `currentAnimation` du Person (lecture par réflexion, comme les autres lectures de variables Blueprint du même module) | `lp-impl` N1 | 5 à 10 tours, **dans la compilation déjà prévue pour F8a** (pas de jeton UE supplémentaire, hors essai) | très faible (journal) | build 1 (option) |
|
||
| F8b | correctif Blueprint | aucun avant la mesure | — | forcer −90 peut retirer un décalage de talons | **build 2** ou abandon (M-Z couvre) |
|
||
|
||
**Ordre conseillé (estimé)** : (1) une séance de jeu de 20 à 30 minutes sur le build COM21 existant, **sans copie UE**, avec `-LPPersonsLog=2`, qui sert F7b et F8b : le joueur avec talons puis sans talons s'assied et se lève ; « regarder » un meuble de boutique puis changer de pièce ; (2) lecture des lignes `STATE`, `M-Z :` et `CenterBrow` (Grep, 10 tours) ; (3) décision par sous-point. Si l'instrumentation de M-Z est acceptée, la réponse « talons ou place » arrive aussi **gratuitement** dans les essais suivants.
|
||
|
||
**Ce qu'il ne faut pas faire (estimé)** : confier F7 et F8b à `lp-mcp-bp` en bloc comme le dit le doc 37 (`:171`) ; toucher GI en build 1 pour un avertissement sans effet visible ; corriger le Z du maillage au lever avant d'avoir départagé talons et place ; ajouter une garde sur `currentAnimation` dans M-Z (M-Z l'écarte exprès, `STG-MZ-IMPL.md:45-46`).
|
||
|
||
**Build 1 ou build 2 (décision de l'utilisateur)** : build 1 = F8a (fait) et, au plus, F7b et l'instrumentation de M-Z. Aucun de ces sous-points ne justifie de risquer le gel du 24 octobre ; F7a est de toute façon bloqué par la règle GI. F7a, F7c, F8b : build 2 (le journal du dépôt garde ERR-011 ouvert ; aucun texte public à corriger n'a été trouvé, README et annonces non relus ici).
|
||
|
||
## 4. Établi / estimé / incertain (synthèse)
|
||
|
||
**Établi (relu à la source)** : ERR-011 et sa mise à jour JOURNAUX1 (`Registre_Erreurs.md:25`) ; classement « après l'alpha » (`BOSS-ETAT.md:235`) ; comptes de `CenterBrow` des 13 journaux de § 3.1 ; sur COM21, 147 avertissements (+ 1 ligne de bilan), un seul acteur sur les 5 lignes vues, 76 s après le SPAWN ; `GI::CalculateHeadtrack` lit `CenterBrow` sur `From.Mesh` et `To.Mesh` (dump 5.5) ; les dumps STE-D8 n'existent pas ; constat « look » du 14 octobre (`STG-COMMUN8-DIAG.md`) ; `currentAnimation` jamais affectée dans `unOccupyFnt` (dump 5.5) ; STATE seulement sous `-LPPersonsLog` ; un seul constat d'accessoire (`COMMUN-7-BILAN.md:28`) ; M-Z (code, journal, 18 déclenchements) ; `updateHeelHeight` (formule et appelants dans le dump 5.5) ; l'enfoncement KEY2 est une autre cause (`PlayerBusy`).
|
||
|
||
**Estimé (déduit)** : le lecteur de `CenterBrow` est `CalculateHeadtrack` appelé par `Daily` et `Daily_F` ; la cible est un mannequin sans corps ; la garde de la voie A suffit (4 à 8 nœuds) ; une variable `currentAnimation` périmée peut être réappliquée par `UpdateDailyPose` ; −80,4 / −82,8 / −85,2 sont des décalages de talons (arithmétique exacte, non mesurée) ; M-Z force −90 sans égard aux talons ; durées et niveaux de § 3.4.
|
||
|
||
**Incertain, essai qui trancherait** :
|
||
- F7a : appelants réels de `CalculateHeadtrack` et origine du `HeadtrackTarget` : `LPDumpFunction -BP=Daily -Fn=EventGraph -Pins -Exec` (AnimBP accepté par la commande : incertain, `STE-H4-DIAG.md:271`) ; état en 5.8 de la fonction : dump 5.8 (copie UE).
|
||
- F7a : effet visible éventuel (regard tourné vers l'origine jusqu'à 57 s, `STE-H4-DIAG.md:285-286`) : jamais observé.
|
||
- F7b : le clip joue-t-il encore ou seule la variable est-elle périmée ? Séance `-LPPersonsLog=2` (§ 3.3).
|
||
- F7c : tout (lieu, cause, recette).
|
||
- F8b : talons ou place ; chemin du −88,0 ; talons portés par les PNJ concernés : séance avec et sans talons, ou `HeelHeight` dans la ligne M-Z.
|
||
- Dumps 5.5 contre Blueprint 5.8 : Person et GI ont été retouchés depuis le 30 septembre (par exemple `IsValid(Person)` dans `moveToPersonStand`, `JOURNAUX1/ERR-brouillons.md:23`) : les fonctions citées sont à relire en 5.8 avant toute SPEC.
|
||
|
||
## 5. Points à confirmer (repris par la fiche suivante)
|
||
|
||
1. Rafraîchir en 5.8, par commandlet (copie UE, éditeur fermé), les dumps `GI :: CalculateHeadtrack`, `Person :: updateHeelHeight`, `Person :: unOccupyFnt`, `Person :: UpdateDailyPose` et l'`EventGraph` de Person (affectations de `currentAnimation`), avec `lp-commandlets` (forme : `.\Tools\RunCommandlet.ps1 -Lot FIX1-F7 -Commandlet LPDumpFunction -Args '-BP=<nom> -Fn=<fonction> -Pins -Exec'`).
|
||
2. Chercher `CenterBrow` dans `Source` et `Plugins` (non fait ici).
|
||
3. Identifier la fonction de GI qui appelle `updateHeelHeight` (`L6f_dump_GI.txt:25258`) et les deux autres lectures de `CenterBrow` dans GI (`:42592`, `:42609`).
|
||
4. Lire `C10-BILAN` (Q4, Q6) et `COMMUN-7-BILAN` en entier pour F7c (meuble, animation, circonstances).
|
||
5. Vérifier si les autres journaux portent une ligne de bilan comptée dans les 141 à 6 138.
|
||
6. Vérifier que le Shipping écrit ou non l'avertissement (`bUseLoggingInShipping`, non lu).
|
||
|
||
## 6. Questions pour la SPEC ou l'utilisateur
|
||
|
||
1. F7a : laisser l'avertissement en build 1 (bruit depuis la 4.27, sans effet visible) et le traiter dans la révision unique de GI en build 2 ?
|
||
2. Autoriser une séance de jeu de 20 à 30 minutes sur le build COM21 avec `-LPPersonsLog=2` (sans copie UE) pour F7b et F8b ?
|
||
3. Autoriser l'ajout de `HeelHeight` et `currentAnimation` à la ligne M-Z dans la compilation de F8a (une ligne C++, journal seul) ?
|
||
4. F8b : si les talons sont la cause, M-Z doit-il cesser de forcer −90 pour un personnage à talons ? (le « flottement » constaté à COMMUN-9 était-il réel à l'écran ?)
|
||
5. F7c : l'utilisateur se souvient-il de la place et du repas concernés (capture) ?
|
||
6. Reclasser la ligne FIX1 du doc 37 : F7a et F8b hors des « petits correctifs Blueprint par MCP » de la build 1, F7b conditionnel ?
|
||
|
||
## Fichiers à commiter
|
||
|
||
A `Docs/Migration/etat/REL/FIX1/FIX1-F7-PRE.md` (dépôt jeu, branche `ue5.8`), par le gardien sur ticket. Aucun autre fichier écrit.
|
||
|
||
Tours : 26 / 25 (budget « environ 25 » dépassé de 1 : recherche des appelants de `updateHeelHeight` et vérification que les Grep de dossier sur `etat/` sautent les `.txt` ; `Tools/FicheStats.py` fait foi)
|
||
|
||
## Constats
|
||
|
||
- Quatre Grep de dossier sur `etat/portage55/L6f` ont rendu un résultat vide à tort (fichiers `.txt` ignorés par git) ; les mêmes motifs, sur le fichier nommé, trouvent les lignes. Rejouer toute recherche négative sur un fichier nommé avant de conclure à une absence.
|
||
- Les comptes d'un Grep en mode compte sur des journaux qui portent une ligne de bilan `LogStats` incluent cette ligne (+ 1 sur COM21).
|