LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B1-IMPL.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

123 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CAM-B1-IMPL : C1 hors sexe, commutation C, reclassement (Room, PC, GI) (2026-10-13)
Lot CAM, sous-lot B1 (`CAM-SPEC.md` § (a) CAM-B1, amendée B0a). BUILD-GO de Big Boss le 2026-10-13, réservation de Room,
PC et GI jusqu'au commit de B1, sans tag (référence : commit `f32df0d`). Exécuté par la session CAM (`local_cb58847a`),
appels MCP un à un depuis la session, mode auto ; **0 refus** du mode auto. Journal brut des appels : `CAM-B1-journal.txt`.
## 1. Déroulé et contrôles d'entrée
| Étape | Résultat |
|---|---|
| Entrée | HEAD `f32df0d`, `git status -- Content Source Config` vide, 0 éditeur ; GI `71034a04`, Room `e8f58b2a`, PC `09f54974`, Person `d1b4c63d` |
| Redump GI (lecture seule) | `CAM-B1-PRE_LPDumpFunction_20261013-083048.txt` (EventGraph, 6 241 nœuds) et `…-083157.txt` (CallFunction, 1 563), code 0 |
| Revérification des `K2Node_*` de la SPEC sur ce GI | 18 nœuds conformes (B1-9 30/645, B1-10 3168/1039, B1-11 2699/3053, B4-5 SwitchString_22/242/177/176, B4-6 637/6127, B5-9 682, B5-10 370/269/270, B5-11 107/279) |
| Instantané | `Snapshot.ps1 -Lot CAM-B1` (chemins relatifs) : `Backup_5.5\CAM-B1\`, Room `E8F58B2A…`, PC `09F54974…`, GI `71034A04…`, `Existed=True` ×3 |
| Éditeur headless | PID 20732, journal `Saved\Logs\CAM-B1_editeur_20261013-083347.log`, MCP prêt (code 0) |
| Nœuds existants relus avant écriture | Room 290, IfThenElse_63, 329 ; PC IfThenElse_23, 353 ; GI 30, 3168, 2699 : conformes à la SPEC |
## 2. Écritures par sous-étape (nœuds créés)
| # | Résultat | Détail |
|---|---|---|
| B1-1 | fait, **révisé** | `CamC1On`, `CamC3On`, `C1Hidden` (bool), `RoomCamTimer` (TimerHandle). `WallWasHidden` créée puis retirée (décision utilisateur, § 3) |
| B1-2 | fait | `ApplyRoomCamera` = CustomEvent_43 → IfThenElse_77 (CamC1On) → 78 (GI.SexOn) / 79 (CamC3On) |
| B1-3 | fait, **révisé** | 78.else → 430 Attach(FirstPersonSM, Mesh, `head`, KeepRelative ×3) → 431 SetRelativeTransform(MakeTransform (0,0,0)(90,90,0)(1,1,1)) → 433 Attach(None, KeepWorld ×3) → 434 SetViewTargetWithBlend(GI.PC, GI.PlayerCharacter, 0, Linear) → IfThenElse_80 (C1Hidden) faux → 436 HairSM.SetVisibility(faux) → 437 SceneSun caché → 438 GI.Wall caché → C1Hidden := vrai → 329 ; vrai → 329. **Sans** `WallWasHidden := GI.Wall.bHidden` (§ 3) |
| B1-4 | fait, **écart de forme** | deux voies provisoires **séparées** : C2 = RestoreC1 (94) → SetViewTargetWithBlend(GI.PC, ChargenCameras[0]) (240) ; C3 = 303 → 394, même cible. Room compte donc 3 `SetViewTargetWithBlend` après B1 (V5 en attendait 2 avec un repli commun) ; B2 et B3 remplaceront chacune la sienne |
| B1-5 | fait | `CycleRoomCamera` = CustomEvent_44 → 84 (CamC1On) → CamC1On := faux ; sinon 85 (CamC3On) → CamC3On := faux → CamC1On := vrai ; sinon CamC3On := vrai ; les trois → un seul appel ApplyRoomCamera (442) |
| B1-6 | fait | LoadRoom : 290.then → 86 (GI.BuilderOn) vrai → 63 ; faux → 87 (GI.SexOn) vrai → 63 ; faux → 88 (GI.SpaceOn) vrai → ApplyRoomCamera (443) → 63 ; faux → 63 |
| B1-7 | fait | PC : IfThenElse_23.else → 131 (GI.SpaceOn) vrai → `Room_C::CycleRoomCamera` (134, cible GI.Room) |
| B1-8 | fait | PC : 353.then → `Room_C::ApplyRoomCamera` (140, cible GI.Room) → 194 |
| B1-9 / 10 / 11 | fait | GI : 30 → ApplyRoomCamera (700) → 645 ; 3168 → 710 → 1039 ; 2699 → 713 → MacroInstance_3053 (cibles : 3 `VariableGet Room` 320, 780, 781) |
| B1-12 | fait, **révisé** | `RestoreC1` = CustomEvent_42 → 76 (C1Hidden) vrai → HairSM visible (71) → SceneSun visible (80) → GI.Wall caché = **NON(Room.bHidden)** (88 ← 435 NOT ← 273) → C1Hidden := faux |
| B1-13 | fait | `UpdateRoomCam` = CustomEvent_45 ; 32.OutputDelegate → 329 coupé ; 45 → 329.Delegate ; Time 0,016 ; bMaxOncePerFrame vrai ; 329.then → Définir RoomCamTimer ← 329.ReturnValue ; corps : 81 (GI.SexOn) faux → 82 (CamC1On) vrai → 83 (`GetViewTarget(GI.PC)` == GI.PlayerCharacter) faux, ou 82 faux → RestoreC1 (440) → `ClearandInvalidateTimerbyHandle(RoomCamTimer)` (441) |
Nouveaux identifiants relevés (à ajouter au § « Identifiants de nœuds » de la SPEC) : `Classe|Personnage|ObtenirMesh`,
`Classe|Person|ObtenirFirstPersonSM` / `ObtenirHairSM`, `Classe|GI|Obtenir<Var>`, `Classe|Room|ApplyRoomCamera` /
`CycleRoomCamera`, `Appelerunefonction|RestoreC1` / `ApplyRoomCamera` (dans Room), `Utilitaires|Matrice|Get(unecopie)`,
`Jeu|Joueur|SetViewTargetwithBlend`, `Transformation|AttachComponentToComponent`, `Transformation|SetRelativeTransform`
(+ `declaring_class` SceneComponent), `Math|Transformation|MakeTransform`, `Rendu|SetVisibility` (+ `declaring_class`
SceneComponent), `Rendu|SetActorHiddenInGame`, `Math|Booléen|NOTBoolean`, `Pion|GetViewTarget` (Controller, virtuel ;
refusé avec `declaring_class` PlayerController), `Variables|Rendu|ObtenirActorHiddenInGame` (**self seulement**).
## 3. Échec, décision et écarts
- **Échec MCP** : lecture de `bHidden` d'un **autre** acteur (`GI.Wall`). Le type_id rendu avec `context_pins`
(`Variables|Rendu|ObtenirActorHiddenInGame`) crée le getter de Room lui-même, sans broche `self` (connexion :
« PinID index_id 0 out of range ») ; idem avec `declaring_class` Actor ; aucun `Classe|Acteur|…`. Nœuds 271 et 272
supprimés (créés par CAM). `write_graph_dsl` écarté (réécrit et compile un graphe entier).
- **Décision de l'utilisateur** (Q20, question posée dans la session, 2026-10-13) : « Règle de PC (Recommandé) » : en
sortie de C1, le mur reprend `masqué = NON(Room.bHidden)`, comme PC le fait déjà après sa vue 1re personne (PC:194 ←
152 `Not_PreBool(Room.bHidden)`). `WallWasHidden` retirée (nœud 268 supprimé, `remove_variable`). SPEC à amender
(B1-1, B1-3, B1-12, R18).
- **Écart de forme** : voies provisoires C2 et C3 séparées (B1-4) → 3 `SetViewTargetWithBlend` dans Room (V5 : 2).
- **Écart de méthode** : 2e envoi de deux appels MCP en parallèle (`delete_node` 271 + `find_node_types`), tous deux
réussis, sans effet ; le 1er était en B0. Consigne « un appel à la fois » rappelée par Big Boss.
## 4. VAL
| # | Résultat |
|---|---|
| V3 | `get_node_infos` : 329 (execute ← 53, 80 ; Delegate ← 45 ; Time 0.016 ; bMaxOncePerFrame vrai ; then / ReturnValue → 54), IfThenElse_80, 713, 134, 140, 131 : conformes ; chaque `connect_pins` contrôlé par type à la création |
| V4 | `compile_blueprint` Room, PC, GI, normal puis `warnings_as_errors` : aucune exception ; journal : « Compiling Blueprint » seul, 0 erreur, 0 avertissement |
| save | `save_assets` Room, PC, GI → `true` ; `git status -- Content Source Config` = Room, PC, GI en `M` ; Person `d1b4c63d` inchangé |
| arrêt | `Stop-Process` 20732 ; `UeState.ps1` : processus=0 éditeur=0 compilation=0 shaders=0 jeu=0 |
| V5 | 4 dumps code 0 (`CAM-B1-VAL_LPDumpFunction_20261013-085432` Room `*`, `-085611` PC, `-085727` GI EventGraph, `-085856` GI CallFunction). Room EventGraph 1 010 → 1 076 nœuds (66 nouveaux) ; existants modifiés : **290, CustomEvent_32, 329, IfThenElse_63** seulement ; 0 disparu. PC 1 433 → 1 439 ; modifiés **IfThenElse_23, 353, 194** seulement. GI 6 241 → 6 247 ; modifiés **30, 645, 3168, 1039, 2699** (+ MacroInstance_3053, broche sans nom) ; GI CallFunction : 0 nœud différent. Événements `ApplyRoomCamera`, `CycleRoomCamera`, `RestoreC1`, `UpdateRoomCam` : 4. `K2_ClearTimerDelegate` 0 ; `K2_ClearAndInvalidateTimerHandle` Room 1 → 2 ; `RoomCamTimer` 2 nœuds ; 329 : `Delegate -> CustomEvent_45`, `Time = '0.016'`, `bMaxOncePerFrame = 'true'`. `SetViewTargetWithBlend` : Room 0 → 3 (écart § 3), PC 3 → 3, GI 4 → 4 |
| V6 | `CAM-B1-VAL_CompileAllBlueprints_20261013-090055` : code 3, « Compiling Completed with 3 errors and 0 warnings and 0 blueprints that failed to load » = **identique à la référence STE-H10V** (`ST\STE\STE-H10V_CompileAllBlueprints_20261013-072132`, même ligne) ; 16 signatures d'erreur et 42 d'avertissement, **0 nouvelle, 0 disparue** ; les 3 erreurs sont celles de l'asset moteur externe `/Engine/CC_Shaders/Utilities/CR_FaceExpRig` (E1 de STE-H10-VAL, hors projet). GI, PC, Room : « La compilation … a réussi » |
| V7 | `Build.ps1 -Lot CAM-B1 -Target LifePlay -Config Development -ExtraArgs "-NoUBA"` : code 0, 4 s, 0 unité (aucun C++ changé ; `CAM-B1_Build_20261013-090451`). `BuildDebug.ps1 -Config Development -ArchiveDir "D:\Game\LifePlay_Build_5.8_CAM-B1_Development" -SkipBuild` : UAT code 0, 148 s (`Saved\Logs\portage\BuildDebug_Development_20261013-090501.log`) ; cuisson « Success - 0 error(s), 1 warning(s) » (avertissement connu : LegacyIterative sans ZenStore) ; 163 paquets cuits, 8 752 sautés ; `Saved\Cooked\…\BPs\` Room, PC, GI (et Person) cuits à 09 h 06 ; CheckPackage **PASS** (4/4, code 0) ; exe `D:\Game\LifePlay_Build_5.8_CAM-B1_Development\Windows\LifePlay.exe` |
| V8 | journaux du jeu `D:\Game\LifePlay_Build_5.8_CAM-B1{,c,d}_Development\Windows\LifePlay\Saved\Logs\LifePlay.log` : 0 ligne `ApplyRoomCamera|CycleRoomCamera|RestoreC1|UpdateRoomCam` (B1 : 18 « Accessed None », B1c : 6, B1d : 6, tous hors CAM : `CityMenu`, `GI.isCreatureType`, `GetSkeletalMesh`) : **PASS** |
| V10 | essais de l'utilisateur : essai 1 B1 FAIL (vue dans la tête) → B1c ; essai B1c FAIL (une image de l'intérieur de la tête) → B1d ; essai B1d **PASS** (« c'est bon pour la vue à la première personne, masculin comme féminin », 2026-10-13). C2 / C3 : ancienne vue de pièce, attendu (B2, B3) |
## 5. Traces (règle TRACE1 : Contexte / Résultat / Suite ; rien déplacé)
- `Saved\Logs\CAM-B1_editeur_20261013-083347.log` — Contexte : éditeur headless de B1 (MCP). Résultat : 3 assets
modifiés et enregistrés, compilations sans message. Suite : archivage par TRACE1.
- `Saved\Logs\portage\CAM-B1-PRE_LPDumpFunction_20261013-083048.log`, `…-083157.log` (résumés `etat\CAM\`) — Contexte :
redump de GI avant B1. Résultat : nœuds de la SPEC conformes. Suite : base de comparaison de V5.
- `Saved\Logs\portage\CAM-B1-VAL_LPDumpFunction_20261013-085432/085611/085727/085856.log` (résumés `etat\CAM\`) —
Contexte : V5. Résultat : § 4. Suite : base de B2.
- `Saved\Logs\portage\CAM-B1-VAL_CompileAllBlueprints_20261013-090055.log` (résumé `etat\CAM\`) — Contexte : V6.
Résultat : identique à STE-H10V (3 erreurs externes `CR_FaceExpRig`). Suite : E1 reste à traiter hors CAM.
- `Saved\Logs\portage\CAM-B1_Build_20261013-090451.log`, `BuildDebug_Development_20261013-090501.log` — Contexte : V7.
Résultat : build et archive code 0, CheckPackage PASS. Suite : essais en jeu de l'utilisateur (V8, V10).
Après B1 : Room `2a0c6111…`, PC `a19510e6…`, GI `6a957cb2…` (MD5 de départ de B2 / B4 / B5 après commit) ; Person
`d1b4c63d…` inchangé. SPEC amendée B1b (`CAM-SPEC.md`, copie d'avant `Backup_5.5\CAM\SPEC-avant-B1b.md`).
## 6. Correction B1c (essai 1 de l'utilisateur, 2026-10-13)
- Constat de l'utilisateur (capture) : en C1, la vue est **dans la tête** (intérieur de la bouche, dents, langue).
- Cause (dump PC, lecture seule) : la vue 1re personne d'origine de PC masque la tête par
`Mesh.HideBoneByName('neckLower', PBO_None)` (PC:2319-2324, nœud 1493) et la rétablit par `UnHideBoneByName`
(PC:2328-2340) ; nœud omis par la cartographie CAM-T2, donc absent de la SPEC B1-3.
- Correction (BUILD-GO Big Boss, Room seul, instantané `Backup_5.5\CAM-B1c\`, Room `2A0C6111` → `99C2455D`) :
436 → (N) 444 `HideBoneByName(PlayerCharacter.Mesh, 'neckLower', PBO_None)` → 437 ; RestoreC1 : 71 → (N) 445
`UnHideBoneByName(Mesh, 'neckLower')` → 80. Compilation stricte sans message. PC `A19510E6` et GI `6A957CB2` inchangés.
SPEC amendée B1c (`a40ce095`, copie d'avant `Backup_5.5\CAM\SPEC-avant-B1c.md`).
- Remarque de l'utilisateur « pas de vue plafonnier » : attendu en B1 (C3 provisoire = ancienne vue de pièce ; la
caméra au plafond arrive en B3).
- VAL de B1c : V5 `CAM-B1c-VAL_LPDumpFunction_20261013-092122` code 0, Room EventGraph 1 076 → 1 078 nœuds, 444
(436 → 444 → 437, Mesh, 'neckLower') et 445 (71 → 445 → 80) conformes ; V6 `CAM-B1c-VAL_CompileAllBlueprints_20261013-092252`
code 3 = référence STE-H10V (3 erreurs externes `CR_FaceExpRig`, 0 signature nouvelle) ; V7 `CAM-B1c_Build_20261013-092711`
code 0 (0 unité), UAT code 0 (`BuildDebug_Development_20261013-092713.log`), cuisson « 0 error(s), 1 warning(s) »,
Room recuit à 09 h 28, CheckPackage PASS 4/4 ; build `D:\Game\LifePlay_Build_5.8_CAM-B1c_Development\Windows\LifePlay.exe`.
Traces (TRACE1) : journaux ci-dessus et `Saved\Logs\CAM-B1c_editeur_20261013-091756.log` — Contexte : B1c ; Résultat :
correction appliquée et construite ; Suite : nouvel essai 1 par l'utilisateur.
## 7. Correction B1d (2e essai de l'utilisateur, 2026-10-13)
- Retour : « on peut voir l'intérieur de la tête pendant un frame » ; « déplacer la vue au niveau des yeux ? ».
- Cause de la rémanence : la vue basculait (434) avant `HideBoneByName` ; le masquage ne s'applique qu'à la mise à jour
suivante du squelette.
- Correction (BUILD-GO, Room seul, instantané `Backup_5.5\CAM-B1d\`, Room `99C2455D` → `50E736F8`) : voie C1 réordonnée
(placement de la caméra, masquages, `C1Hidden` := vrai, `DelayUntilNextFrame`, puis `SetViewTargetWithBlend`) ; caméra
placée au **milieu des yeux** : `SetWorldLocation(FirstPersonSM, 0,5 × (GetSocketLocation(Mesh,'lEye') +
GetSocketLocation(Mesh,'rEye')))`, calculé **avant** le masquage (un os masqué sort des os requis et ne bouge plus,
`ENG SkeletalMeshComponent.cpp:2300-2330`) ; sortie inversée dans les voies provisoires C2 / C3 (vue d'abord,
`RestoreC1` ensuite). Compilation stricte sans message ; PC, GI, Person inchangés. SPEC amendée B1d (`ecefee2f`).
- Squelettes féminins (demande de Big Boss) : `get_bone_children(head)` identique sur Michael (`/Game/Heavy/Daz/Michael/michael`)
et Bridget (`/Game/Heavy/Daz/Bridget/bridget_gp`) : `lEye`, `rEye` sous `head` ; `neckLower` présent chez les deux. Le
placement étant calculé à l'exécution sur les os réels, l'écart homme / femme est pris en compte sans constante. Essai
avec un personnage féminin ajouté à la liste.
- Effet résiduel attendu : pendant l'image d'attente, la vue reste celle de la pièce avec la tête déjà masquée (une image
« sans tête » vue de loin), au lieu d'une image vue de l'intérieur de la tête.
- VAL de B1d : V5 `CAM-B1d-VAL_LPDumpFunction_20261013-094414` code 0, Room EventGraph 1 078 → 1 084 nœuds, 446
`K2_SetWorldLocation` (431 → 446 → 433, FirstPersonSM, ← `PromotableOperator_2`) et 449 `DelayUntilNextFrame`
(VariableSet_53 → 449 → 434) conformes ; V6 `CAM-B1d-VAL_CompileAllBlueprints_20261013-094523` code 3 = référence
STE-H10V (0 signature nouvelle) ; V7 `CAM-B1d_Build_20261013-094934` code 0, UAT code 0
(`BuildDebug_Development_20261013-094941.log`), cuisson « 0 error(s), 1 warning(s) », Room recuit à 09 h 51,
CheckPackage PASS 4/4 ; build `D:\Game\LifePlay_Build_5.8_CAM-B1d_Development\Windows\LifePlay.exe`. Traces (TRACE1) :
ces journaux et `Saved\Logs\CAM-B1d_editeur_20261013-093759.log` — Contexte : B1d ; Résultat : correction construite ;
Suite : essai de l'utilisateur (homme et femme).