123 lines
15 KiB
Markdown
123 lines
15 KiB
Markdown
# 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).
|