# CAM-B2p-G-PC : C3 dans le cycle C du sexe (G-d) et panneau des positions (G-g) (PC, fiche lp-mcp-bp, 2026-10-14) SPEC : `CAM-B2p-G-SPEC.md` § 2 (G-d, option 1) et § 5.4 (G-g). UE-GO de Big Boss (PC pour G-d, et G-g si la DIAG le demande : elle le demande). PC seul ; ni Room, ni GI, ni Person. **Un seul appel MCP à la fois. Type vérifié avant chaque `create_node`.** ## Barème a0 b1 c1 d0 e1 f1 = 4 → N3 (MCP) ; S = C3 1 + f 1 = 2 : une fiche. Environ 6 nœuds, 1 variable, 2 coupures, 14 liens, environ 50 appels. Case C9a : état du PC relu dans `CAM-B2kmn-VAL_LPDumpFunction_20261014-011816.txt` (PC `F45BE57A39D13D3EB19D0B543153AB0B`, 1439 nœuds) ; à relire par `get_node_infos` avant écriture. ## Conditions d'entrée - `UeState` = 0 ; PC = `F45BE57A39D13D3EB19D0B543153AB0B` (sinon : arrêt et compte rendu). - Instantané pris par l'orchestrateur : `.\Tools\Snapshot.ps1 -Lot CAM-B2p-G-PC -Path Content\BPs\PC.uasset`. - unreal-mcp connecté ; éditeur sans demande de recompilation. ## État attendu avant écriture (préfixe `/Game/BPs/PC.PC:EventGraph.`) | Nœud | Attendu | |---|---| | `K2Node_IfThenElse_23` | Condition ← `VariableGet_51.SexOn` ; then → `IfThenElse_44.execute` ; else → `IfThenElse_131` | | `K2Node_IfThenElse_44` | execute ← `23.then` et `CustomEvent_5.then` ; Condition ← `CallFunction_139` ; then → `VariableSet_25` (`POVOn` vrai) ; else → `VariableSet_30` (`POVOn` faux) | | `K2Node_IfThenElse_123` | Condition ← `VariableGet_233.SexOn` ; then → `CallFunction_35` (`LeftMouseSexOn`) ; else → `IfThenElse_0` | | `K2Node_IfThenElse_15` | Condition ← `VariableGet_22.SexOn` ; then → `IfThenElse_10` ; else → `CallFunction_160` | | `K2Node_CustomEvent_11` | événement `LeftMouseSexOn` ; then → `IfThenElse_10` | | `K2Node_InputAction_3` | action **`Pause`** (à confirmer par `get_node_infos` : nom de l'action) ; Pressed → `IfThenElse_63` | | `K2Node_IfThenElse_40` | execute ← `63.else` ; then → `CallFunction_277` (`PlayClick`) | | `K2Node_CallFunction_277` | then → `VariableSet_0` (`GamePaused` = NOT `GamePaused`) | Si `InputAction_3` n'est pas `Pause` (barre espace), ou pour tout autre écart : arrêt avant écriture de G-g. G-d peut se faire seul. ## Écritures ### G-d : `SexC3` 1. Variable de membre `SexC3` (booléen, défaut faux) dans le PC (outil d'ajout de variable de BlueprintTools, comme pour `CamC1On` en B1). Relecture. 2. Nœuds : - Branche A, Condition ← nouveau Get `SexC3` ; - Set `SexC3` = faux (S0) ; - Branche B, Condition ← nouveau Get `POVOn` (variable du PC) ; - Set `SexC3` = vrai (S1). 3. Liens : - `23.then` → `A.execute` (remplace 23.then → 44) ; - `A.then` → `S0.execute` ; `S0.then` → `44.execute` ; - `A.else` → `B.execute` ; - `B.then` → `44.execute` ; - `B.else` → `S1.execute` ; `S1.then` vide. `44.execute` garde aussi `CustomEvent_5.then`. 4. Effet : Scene (`POVOn` faux, `SexC3` faux) → C → C3 (`SexC3` vrai, vue inchangée) → C → `SexC3` faux, puis POV 1 → … → dernier POV → C → Scene (voie d'origine de 44.else). ### G-g : panneau des positions 5. `break_pins` `123.then` → `35.execute` (le clic court gauche ne bascule plus le panneau pendant le sexe). 6. `break_pins` `15.then` → `10.execute` (même chose pour l'autre bouton). 7. Branche S (Condition ← nouveau Get `SexOn` sur `GI` du PC, ou reprise d'un getter existant de `GI.SexOn`) entre `40.then` et `277` : - `40.then` → `S.execute` (remplace 40.then → 277) ; - `S.else` → `277.execute` ; - `S.then` → nouvel appel `LeftMouseSexOn` (événement personnalisé du PC, cible self) ; then vide. 8. Effet : pendant le sexe, Espace bascule le panneau au lieu de mettre en pause. Le clic molette est fait par le C++ (B2p-G). Hors sexe, rien ne change. ### Fin 9. Relecture de tous les nœuds touchés et de leurs voisins (23, 44, CustomEvent_5, 123, 15, 10, 35, 40, 277, 63, et les nœuds créés). Aucun autre lien modifié. 10. `is_dirty` = vrai ; `compile_blueprint` avec warnings_as_errors = true ; `save_assets` [`/Game/BPs/PC`] seul ; `Saving Package: /Game/BPs/PC` ; MD5 du PC ≠ `F45BE57A…` ; Room, GI et Person inchangés. ## Amendement B2p-G-PC-a (2026-10-14, arrêt de `lp-mcp-bp` à l'étape 7, décision de l'orchestrateur) - Refus : `create_node "Variables|Sex|ObtenirSexOn"` → `does not exist`. Ce type n'apparaît que sous contexte (la sortie d'un Get GI), et `create_node` passe un contexte vide (`blueprint.py:912`). - **Option A retenue**, déjà prévue au § 7 (« reprise d'un getter existant de `GI.SexOn` ») : - `VariableGet_22.SexOn` (déjà relié à `IfThenElse_15.Condition`) → `IfThenElse_134.Condition` (une sortie de données peut alimenter plusieurs entrées) ; - `delete_node` du Get GI orphelin `VariableGet_387` ; - puis les 3 liens d'exécution : `40.then` → `134.execute` (remplace 40 → 277), `134.else` → `277.execute`, `134.then` → `CallFunction_408.execute` (`LeftMouseSexOn`) ; - puis les étapes 9 et 10. - Volume : 1 nœud créé de moins, 1 suppression. Le reste de la fiche ne change pas. ## VAL (lp-validator distinct, éditeur fermé) - V5 : dump du PC ; diff contre `CAM-B2kmn-VAL_LPDumpFunction_20261014-011816.txt` ; seules différences : la variable, les nœuds créés, les 2 coupures et les liens ci-dessus. - V6 : `CompileAllBlueprints` = référence. ## Retour arrière `.\Tools\Restore.ps1 -Lot CAM-B2p-G-PC -Only Content\BPs\PC.uasset`, éditeur fermé.