# CAM-B2d : fiche lp-mcp-bp (2026-10-13) GO de Big Boss (2026-10-13), après l'UE-LIBRE de la session street de STG. SPEC : `CAM-SPEC.md` § « CAM-B2d » (MD5 `48aa5499`). Room seul ; ni `LPDirectControlSubsystem` ni Person. ## Barème Grille a1 b2 c1 d1 e1 f1 = 7 → N3 ; S = C3 1 (procédure `lp-mcp`, fiches B2b) + f 1 = 2 < 3 : une fiche. Budget : ≈ 12 nœuds créés, 5 supprimés, ≈ 45 appels ; 60 tours. Case C9a : à cocher à l'envoi (relevé du jour). ## Préalables (orchestrateur) 1. UE-LIBRE de STG reçu ; `UeState` = 0 ; aucun jeu en cours. 2. Relevé : `git status -- Content\BPs\Room.uasset` = M ; MD5 Room `E0517C63` ; GI `C4817B84`. 3. Instantané `Snapshot.ps1 -Lot CAM-B2d -Path Content\BPs\Room.uasset`. 4. Éditeur headless ; attente du serveur MCP (journal) ; `load_asset /Game/BPs/Room` par la session. ## Consignes de l'agent - Rubriques communes : celles de `CAM-B2b-FICHES.md` (un appel MCP par message ; graphe, outils, interdits, arrêt, livrable `CAM-B2d-IMPL.md`). - Ordre économe (leçon F6a) : créer tous les nœuds, faire une seule lecture groupée, puis couper chaque lien et le remplacer aussitôt. - Nœuds existants (préfixe `/Game/BPs/Room.Room:EventGraph.`) : - 453 `GetActorForwardVector` (self ← 261) → 454.A (`Normalize2D`) ; - 262 `GI.PC` ; 261 `GI.PlayerCharacter` ; - IfThenElse_96 (CircleCamera, then → VariableSet_67) ; PO28 (A ← VariableGet_292, B ← CE1.DeltaSeconds, sortie → 67) ; - IfThenElse_97 (LeftRight, then → VariableSet_68) ; PO30 (A ← VariableGet_293, B ← PO29, sortie → 68) ; - CustomEvent_48 (`PlaceC2`, then 1 → CallFunction_461 `EnsureCamRoom`). - Identifiants à trouver par `find_node_types` (filtre court) : `GetControlRotation` (Controller), `SetControlRotation` (Controller ; cible = 262, une référence PC, relire l'index de `self`), `GetForwardVector` (rotateur, catégorie Math|Rotateur), `BreakRotator`, `MakeRotator` (Roll, Pitch, Yaw : relire les index), `GetActorRotation`. - Écritures : 1. B2d-1 : (N) `GetControlRotation` (self ← 262) = CR ; (N) `GetForwardVector(CR)` ; break 453 → 454.A ; `GetForwardVector` → 454.A ; `delete_node` 453. 2. (N) `BreakRotator(CR)` = BR (pur, partagé). 3. B2d-2 : break 292 → PO28.A ; BR.Yaw → PO28.A ; (N) `MakeRotator(0, 0, Yaw ← PO28)` ; (N) `SetControlRotation` (self ← 262, NewRotation ← ce MakeRotator) ; break 96.then → 67 ; 96.then → SetControlRotation ; `delete_node` 67 puis 292. 4. B2d-3 : même chose avec PO30, 97, 68 et 293. 5. B2d-4 : (N) `GetActorRotation` (self ← 261) → (N) `BreakRotator` → Yaw → (N) `MakeRotator(0, 0, Yaw)` → (N) `SetControlRotation` (self ← 262) ; break CE48.then → 461 ; CE48.then → ce nœud ; ce nœud.then → 461. 6. Relecture groupée : nœuds créés, 454, PO28, PO30, 96, 97, CE48, 461. Puis compilation stricte et `save_assets` `/Game/BPs/Room` seul. - Mesures : MD5 de Room après l'enregistrement (≠ E0517C63) ; `git status --short -- Content Source Config`. ## Après (orchestrateur) Fermeture de l'éditeur, `UeState` = 0. V5 : dump Room, critères de la SPEC B2d et de B2b. V6 : CompileAllBlueprints = référence. UE-LIBRE à Big Boss. Ensuite : STG (Person) → build COMMUN-2 → essai commun B2 + B2b + B2d → commit de Room. ## Essai B2d (à ajouter à la marche à suivre) - En C2 : Z éloigne toujours de la caméra ; Q et D vont à gauche et à droite de l'écran ; le personnage se tourne vers sa marche sans faire tourner la caméra. - La souris et les flèches gauche/droite font tourner la caméra, et Z suit la nouvelle direction. - En entrant en C2 (touche C ou entrée en pièce), la caméra est derrière le personnage.