# CAM-B2k : recalage de la caméra C1 sur les yeux à chaque passage de la minuterie (fiche lp-mcp-bp, 2026-10-14) Origine : `CAM-COMMUN5-DIAG.md` § 1 (C5-3, caméra C1 dans le buste après une entrée en C1 assise). Room seul, hors sexe (la branche C1 de la minuterie est derrière `IfThenElse_81` = `SexOn` faux). Décision de l'utilisateur relayée par Big Boss : entre dans COMMUN-6. ## Barème a0 b1 c0 d0 e1 f1 = 3 → N1, ajusté à N3 (écriture MCP par `lp-mcp-bp`) ; S = C3 1 (procédure `lp-mcp`, gabarits B2h et B2i) + f 1 = 2 < 3 : une fiche. 1 nœud, 3 liens, environ 15 appels. Case C9a : état de Room relu le jour même. ## Conditions d'entrée - UE-GO de Big Boss ; `UeState` = 0 ; aucun jeu en cours. - Room = `18565365B1195BF2416A1048BF9051B6`. GI et Person : à ne pas toucher. - Instantané au moment de l'UE-GO : `.\Tools\Snapshot.ps1 -Lot CAM-B2k -Path Content\BPs\Room.uasset` (PowerShell, depuis la racine). - Si l'éditeur demande de recompiler des modules au lancement : arrêt et compte rendu à Big Boss. ## État attendu avant écriture (préfixe `/Game/BPs/Room.Room:EventGraph.`, dump `CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt`) | Nœud | Attendu | |---|---| | `K2Node_IfThenElse_83` | execute ← `IfThenElse_82.then` ; Condition ← `PromotableOperator_0` (vue = `PlayerCharacter`) ; **then vide** ; else → `CallFunction_440` (`RestoreC1`) | | `K2Node_IfThenElse_82` | Condition ← `VariableGet_269.CamC1On` ; execute ← `IfThenElse_81.else` (81 = `SexOn`, execute ← `IfThenElse_91.else`, 91 = vue = `CamRoom`) | | `K2Node_VariableGet_265` | variable `FirstPersonSM`, self ← `VariableGet_261.PlayerCharacter` ; sortie → 430, 431, 433, 446 `.self` | | `K2Node_PromotableOperator_2` | `Multiply_VectorVector`, A ← `PromotableOperator_1` (= `GetSocketLocation(lEye)` + `GetSocketLocation(rEye)`, nœuds 447 et 448), B = 0,5 ; sortie → `CallFunction_446.NewLocation` | | Minuterie en C1 (relecture de l'étape 1) | voie C1 d'`ApplyRoomCamera` : `VariableSet_53` (`C1Hidden`) → `CallFunction_449` (`DelayUntilNextFrame`) → `434` (`SetViewTargetWithBlend(PlayerCharacter)`) → **`329` `K2_SetTimerDelegate(UpdateRoomCam, 0,016, en boucle)`** → `VariableSet_54` (`RoomCamTimer`) | Tout écart à ce tableau : arrêt avant écriture. ## Écritures (un appel MCP par message) 1. `load_asset` `/Game/BPs/Room` ; lecture groupée des nœuds du tableau (`get_node_infos`), avec `CallFunction_329`, `_434`, `_449` et `_446`. Relever les PinID et les positions de 83 et 446. 2. Type : le même que `K2Node_CallFunction_446` (`SceneComponent::K2_SetWorldLocation`). Prendre son `type_id` par `get_node_infos` et `find_node_types` (filtre « SetWorldLocation »), avec `context_pins` sur `265.FirstPersonSM` si besoin. Le nœud créé doit être `K2_SetWorldLocation` (`SceneComponent`), avec `bSweep` et `bTeleport` faux par défaut. Sinon, arrêt. 3. `create_node` près de 83 (à droite de sa branche `then`). 4. Liens : - L1 : `IfThenElse_83.then` → nouveau.execute ; - L2 : `VariableGet_265.FirstPersonSM` → nouveau.self ; - L3 : `PromotableOperator_2.ReturnValue` → nouveau.NewLocation. La sortie de PO_2 alimente alors 446 et le nouveau nœud ; ce nœud pur est réévalué à chaque appel. 5. Relecture : - 83 : then → nouveau, else → 440 inchangé ; - 265 : sorties 430, 431, 433, 446 et le nouveau ; - PO_2 : sorties 446 et le nouveau ; - 446 inchangé (execute ← 431.then, then → 433) ; - le nouveau nœud a un `then` libre ; - aucun autre lien de 81, 82, 91, 440 ou 441 modifié. 6. `AssetTools.is_dirty` `/Game/BPs/Room` = vrai (sinon procédure B2f-a). 7. `compile_blueprint` avec warnings_as_errors = true. 8. `save_assets` [`/Game/BPs/Room`] seul ; `Saving Package: /Game/BPs/Room` au journal de l'éditeur. 9. `md5sum` : Room ≠ `18565365…` ; GI et Person inchangés. ## VAL (lp-validator distinct, éditeur fermé) - V5 : dump Room ; diff du corps contre `CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt`. Attendu : EventGraph à 1265 nœuds ; seules différences : le nœud nouveau et les sorties de 83.then, 265 et PO_2. - V6 : `CompileAllBlueprints` = référence. - V7 (COMMUN-6) : s'asseoir, passer en C1, se lever (ZQSD), marcher, se rasseoir, changer de pièce. La vue reste à la hauteur des yeux, jamais dans le buste ni au-dessus de la tête. En C2 et pendant le sexe, rien ne change. ## Retour arrière `.\Tools\Restore.ps1 -Lot CAM-B2k -Only Content\BPs\Room.uasset`, éditeur fermé, sur accord.