15 KiB
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
bHiddend'un autre acteur (GI.Wall). Le type_id rendu aveccontext_pins(Variables|Rendu|ObtenirActorHiddenInGame) crée le getter de Room lui-même, sans brocheself(connexion : « PinID index_id 0 out of range ») ; idem avecdeclaring_classActor ; aucunClasse|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 ← 152Not_PreBool(Room.bHidden)).WallWasHiddenretiré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
SetViewTargetWithBlenddans Room (V5 : 2). - Écart de méthode : 2e envoi de deux appels MCP en parallèle (
delete_node271 +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 |
| 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ésetat\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ésetat\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 externesCR_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 parUnHideBoneByName(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\, Room2A0C6111→99C2455D) : 436 → (N) 444HideBoneByName(PlayerCharacter.Mesh, 'neckLower', PBO_None)→ 437 ; RestoreC1 : 71 → (N) 445UnHideBoneByName(Mesh, 'neckLower')→ 80. Compilation stricte sans message. PCA19510E6et GI6A957CB2inchangés. SPEC amendée B1c (a40ce095, copie d'avantBackup_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-092122code 0, Room EventGraph 1 076 → 1 078 nœuds, 444 (436 → 444 → 437, Mesh, 'neckLower') et 445 (71 → 445 → 80) conformes ; V6CAM-B1c-VAL_CompileAllBlueprints_20261013-092252code 3 = référence STE-H10V (3 erreurs externesCR_FaceExpRig, 0 signature nouvelle) ; V7CAM-B1c_Build_20261013-092711code 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 ; buildD:\Game\LifePlay_Build_5.8_CAM-B1c_Development\Windows\LifePlay.exe. Traces (TRACE1) : journaux ci-dessus etSaved\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\, Room99C2455D→50E736F8) : voie C1 réordonnée (placement de la caméra, masquages,C1Hidden:= vrai,DelayUntilNextFrame, puisSetViewTargetWithBlend) ; 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,RestoreC1ensuite). 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,rEyesoushead;neckLowerpré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-094414code 0, Room EventGraph 1 078 → 1 084 nœuds, 446K2_SetWorldLocation(431 → 446 → 433, FirstPersonSM, ←PromotableOperator_2) et 449DelayUntilNextFrame(VariableSet_53 → 449 → 434) conformes ; V6CAM-B1d-VAL_CompileAllBlueprints_20261013-094523code 3 = référence STE-H10V (0 signature nouvelle) ; V7CAM-B1d_Build_20261013-094934code 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 ; buildD:\Game\LifePlay_Build_5.8_CAM-B1d_Development\Windows\LifePlay.exe. Traces (TRACE1) : ces journaux etSaved\Logs\CAM-B1d_editeur_20261013-093759.log— Contexte : B1d ; Résultat : correction construite ; Suite : essai de l'utilisateur (homme et femme).