# CAM-B2i : garde « hors sexe » sur les 5 branches « C2 ? » de Room (fiche lp-mcp-bp, 2026-10-13) Origine : `CAM-COMMUN4-DIAG.md` (accepté par Big Boss). Room seul, sans toucher à la scène (GI, PC et logique de sexe inchangés). UE-GO à la fin de la session de jeu COMMUN-4. ## 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) + f 1 = 2 < 3 : une fiche. 3 nœuds, 10 liens, environ 25 appels. Case C9a : état de Room à relire le jour même. ## Conditions d'entrée - `UeState` = 0 avant le lancement de l'éditeur ; aucun jeu en cours. - Room = `0C8EB59F55CB02AD2C4FA1413840B84B`. GI `E64B5B37…` et Person `8668A47C…` : à ne pas toucher. - `.\Tools\Snapshot.ps1 -Lot CAM-B2i -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-B2g-VAL_LPDumpFunction_20261013-211708.txt`) | Nœud | Rôle | Lien à relire | |---|---|---| | `K2Node_PromotableOperator_8` | vue = `CamRoom` (`EqualEqual_ObjectObject`) | ReturnValue → `IfThenElse_91`, `_98`, `_99`, `_100` `.Condition`, `CommutativeAssociativeBinaryOperator_60.A` | | `K2Node_CommutativeAssociativeBinaryOperator_60` | OU de B2h | A ← PO_8 ; B ← `VariableGet_269.CamC1On` ; ReturnValue → `IfThenElse_96`, `_97` `.Condition` | | `K2Node_VariableGet_86` | `SexOn` (self ← `VariableGet_103.GI`) | SexOn → `CommutativeAssociativeBinaryOperator_19.B`, `IfThenElse_29`, `IfThenElse_28` `.Condition` | | `K2Node_IfThenElse_96` à `_100` | branches « C2 ? » de `CircleCamera`, `LeftRight`, `ScrollDownUp`, `RotateCamera`, `DownUp` | then et else à relever avant, inchangés après | Tout écart à ce tableau : arrêt avant écriture. ## Écritures (un appel MCP par message) 1. `load_asset` `/Game/BPs/Room`. Lecture groupée du tableau ci-dessus (`get_node_infos`), avec relevé des PinID et des positions de 96 et 98. 2. Types : `find_node_types` (filtres « NOT » et « AND ») ; types attendus `Math|Booléen|NOTBoolean` et `Math|Booléen|ANDBoolean` (même famille que `ORBoolean` de B2h). Tout autre résultat : arrêt. 3. `create_node` NOT (près de 86 ou de 96) ; `create_node` AND n° 1 (près de 96) ; `create_node` AND n° 2 (près de 98). 4. Liens : - L1 : `VariableGet_86.SexOn` → NOT.entrée ; - L2 : `OR_60.ReturnValue` → AND1.A ; - L3 : NOT.ReturnValue → AND1.B ; - L4 : AND1.ReturnValue → `IfThenElse_96.Condition` (remplace le lien de `OR_60`) ; - L5 : AND1.ReturnValue → `IfThenElse_97.Condition` (idem) ; - L6 : `PromotableOperator_8.ReturnValue` → AND2.A ; - L7 : NOT.ReturnValue → AND2.B ; - L8 : AND2.ReturnValue → `IfThenElse_98.Condition` (remplace le lien de PO_8) ; - L9 : AND2.ReturnValue → `IfThenElse_99.Condition` (idem) ; - L10 : AND2.ReturnValue → `IfThenElse_100.Condition` (idem). Si le NOT ou le AND créé a des entrées en plus de celles prévues (AND à 2 entrées par défaut) : arrêt. 5. Relecture : - PO_8.ReturnValue → `IfThenElse_91.Condition`, `OR_60.A`, `AND2.A` **seulement** (plus 98, 99, 100) ; - `OR_60.ReturnValue` → `AND1.A` seulement (plus 96, 97) ; `OR_60` A ← PO_8 et B ← 269 inchangés ; - `VariableGet_86.SexOn` → 19.B, 29, 28 et NOT (4 liens) ; - NOT.ReturnValue → AND1.B, AND2.B ; - AND1 → 96, 97 ; AND2 → 98, 99, 100 ; - then et else de 96 à 100 identiques au relevé de l'étape 1 ; - `IfThenElse_91` toujours sur PO_8 (minuterie `UpdateRoomCam` inchangée). 6. `AssetTools.is_dirty` `/Game/BPs/Room` = vrai (sinon procédure B2f-a : créer puis supprimer une Branche isolée, puis contrôler à nouveau). 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 ≠ `0c8eb59f…` ; GI et Person inchangés. ## VAL (lp-validator distinct, éditeur fermé) - V5 : dump Room ; diff du corps contre `CAM-B2g-VAL_LPDumpFunction_20261013-211708.txt`. Attendu : - EventGraph à 1264 nœuds ; - seules différences : 3 nœuds nouveaux, conditions de 96 à 100, sorties de PO_8, `OR_60` et 86. - V6 : `CompileAllBlueprints` = référence (3 erreurs `CR_FaceExpRig`, Room compilé). - V7 : build suivant, cas CAM-29 à CAM-32 de `CAM-COMMUN4-DIAG.md` § 4. ## Retour arrière `.\Tools\Restore.ps1 -Lot CAM-B2i -Only Content\BPs\Room.uasset`, éditeur fermé, sur accord.