93 lines
5.9 KiB
Markdown
93 lines
5.9 KiB
Markdown
# CAM-B2s : orientation de C1 recalée à chaque passage, et pose avant le retour de la vue (Room, fiche lp-mcp-bp, 2026-10-14)
|
|
|
|
Origine : `CAM-COMMUN6-DIAG.md` § 9 (priorité 2 : C1 à côté de la tête après un lever, à-coup à la sortie de CharGen,
|
|
§ 10.3) et § 7 (priorité 3 : vue au plafond après une scène). Ce lot reprend les parties P5 et P6 de
|
|
`CAM-B2p-SPEC.md`, sorties de B2p pour passer tout de suite. Room seul. **Aucune écriture sans UE-GO.**
|
|
|
|
## Barème
|
|
a0 b1 c0 d0 e1 f1 = 3 → N1, ajusté à N3 (MCP, lp-mcp-bp) ; S = C3 1 (procédure `lp-mcp`, gabarit B2k) + f 0 = 1 :
|
|
une fiche. 4 nœuds, 11 liens, environ 35 appels. Case C9a : état de Room relu le jour même (dump
|
|
`CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt`, Room `3A451FDDF991AC01A699AF7BD1FBDC12`).
|
|
|
|
## Conditions d'entrée
|
|
- UE-GO de Big Boss ; `UeState` = 0 ; aucun jeu en cours.
|
|
- Room = `3A451FDDF991AC01A699AF7BD1FBDC12` ; GI, PC et Person non touchés.
|
|
- Instantané : pris le 2026-10-14 (`D:\Game\LifePlay_Backup_5.5\CAM-B2s\`, Room `3A451FDDF991AC01A699AF7BD1FBDC12`). À
|
|
l'UE-GO, revérifier que le MD5 de Room est toujours celui-là ; sinon, reprendre l'instantané.
|
|
- Si l'éditeur demande de recompiler des modules au lancement : arrêt et compte rendu.
|
|
|
|
## État attendu avant écriture (préfixe `/Game/BPs/Room.Room:EventGraph.`)
|
|
| Nœud | Attendu |
|
|
|---|---|
|
|
| `K2Node_CallFunction_512` | `K2_SetWorldLocation` ; execute ← `IfThenElse_83.then` ; **then vide** ; self ← `VariableGet_265.FirstPersonSM` ; NewLocation ← `PromotableOperator_2` |
|
|
| `K2Node_CallFunction_514` | `BreakRotator`, InRot ← `CallFunction_524` (`GetControlRotation`, self ← `VariableGet_262.PC`) ; Yaw → `PromotableOperator_28.A`, `_30.A` |
|
|
| `K2Node_VariableGet_265` | `FirstPersonSM`, self ← `VariableGet_261.PlayerCharacter` ; sorties 430, 431, 433, 446, 512 `.self` |
|
|
| `K2Node_CallFunction_449` | `DelayUntilNextFrame` ; execute ← `VariableSet_53.then` ; then → `CallFunction_434.execute` |
|
|
| `K2Node_CallFunction_434` | `SetViewTargetWithBlend(PlayerCharacter)` ; execute ← `449.then` et `IfThenElse_80.then` ; then → `329` |
|
|
| `K2Node_PromotableOperator_2` | sorties `446.NewLocation`, `512.NewLocation` |
|
|
|
|
Tout écart : arrêt avant écriture.
|
|
|
|
## Écritures (un appel MCP par message)
|
|
1. `load_asset` `/Game/BPs/Room` ; `get_node_infos` sur les 6 nœuds du tableau. Relever les PinID et les positions.
|
|
2. Types : `K2_SetWorldRotation` (`SceneComponent`, filtre « SetWorldRotation », voisin de
|
|
`Transformation|SetWorldLocation`) et `MakeRotator` (filtre « MakeRotator » ; Room en a déjà un : 148). Contrôle par
|
|
`get_node_infos` après création ; sinon, arrêt.
|
|
3. **P5** (orientation à chaque passage de la minuterie C1) :
|
|
- créer `MakeRotator` R1 et `K2_SetWorldRotation` W1, à droite de 512 ;
|
|
- L1 : `512.then` → `W1.execute` ;
|
|
- L2 : `265.FirstPersonSM` → `W1.self` ;
|
|
- L3 : `R1.ReturnValue` → `W1.NewRotation` ;
|
|
- L4 : `514.Yaw` → `R1.Yaw` ;
|
|
- R1 : Pitch et Roll à 0 (défaut). W1 : `bSweep` et `bTeleport` faux (défaut).
|
|
4. **P6** (pose avant le retour de la vue, supprime l'à-coup) :
|
|
- créer `K2_SetWorldLocation` L6 et `K2_SetWorldRotation` W6, entre 449 et 434 ;
|
|
- L5 : `449.then` → `L6.execute` (remplace le lien vers 434) ;
|
|
- L6 : `L6.then` → `W6.execute` ;
|
|
- L7 : `W6.then` → `434.execute`. 434 garde aussi son entrée depuis `80.then` ;
|
|
- L8 : `265.FirstPersonSM` → `L6.self` ; L9 : `PO_2.ReturnValue` → `L6.NewLocation` ;
|
|
- L10 : `265.FirstPersonSM` → `W6.self` ; L11 : `R1.ReturnValue` → `W6.NewRotation`.
|
|
|
|
R1 est pur : il est réévalué à chaque appel.
|
|
5. Relecture :
|
|
- 512 : then → W1 ;
|
|
- 265 : sorties 430, 431, 433, 446, 512, W1, L6, W6 ;
|
|
- 514.Yaw : PO_28, PO_30, R1 ;
|
|
- PO_2 : 446, 512, L6 ;
|
|
- 449 : then → L6 ; 434 : execute ← W6.then et 80.then ;
|
|
- aucun autre lien de 80, 81, 82, 83, 329, 440 ou 441 modifié.
|
|
6. `AssetTools.is_dirty` = vrai (sinon procédure B2f-a) ; `compile_blueprint` avec warnings_as_errors = true ;
|
|
`save_assets` [`/Game/BPs/Room`] seul ; `Saving Package: /Game/BPs/Room` ; MD5 ≠ `3A451FDD…` ; GI, PC et Person
|
|
inchangés.
|
|
|
|
P6 est séparable : si Big Boss ne le veut pas, ne faire que les étapes 1, 2, 3, 5 (partie P5) et 6. Cela fait 2 nœuds
|
|
et 4 liens.
|
|
|
|
## Effets attendus
|
|
- C1 a toujours une vue horizontale, dans la direction de contrôle, quelle que soit la pose de la tête : fin de
|
|
scène, assis, couché, lever, sortie de CharGen.
|
|
- Assis, la souris tourne aussi la vue : le lacet de contrôle est réglé par B2h, et le corps assis ne tourne pas.
|
|
- Hors C1 et pendant le sexe : rien ne change (81, 82, 83, et voie C1 d'`ApplyRoomCamera` seulement).
|
|
- Limite : pas de tangage à la souris en C1 (vue toujours horizontale). C'est une demande à part si l'utilisateur la
|
|
veut.
|
|
|
|
## Garde `Accessed None`
|
|
`FirstPersonSM` (265) et `GetControlRotation` (524) sont déjà lus sans garde par 512 et la voie C2 sur ces mêmes
|
|
chemins : comportement inchangé.
|
|
|
|
## VAL (lp-validator distinct, éditeur fermé)
|
|
- V5 : dump Room ; diff contre `CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt`. Attendu : EventGraph 1272 → 1276
|
|
nœuds (1274 sans P6) ; seules différences : les nœuds créés et les liens ci-dessus.
|
|
- V6 : `CompileAllBlueprints` = référence (3 erreurs `CR_FaceExpRig`, 420 compilations réussies).
|
|
- V7 (build suivant) :
|
|
- CAM-49 (`CAM-B2p-SPEC.md`) ;
|
|
- au bar : s'asseoir, C1, se lever, marcher. Vue aux yeux, horizontale, sans épaule visible ;
|
|
- après une scène lancée depuis C1 : vue horizontale ;
|
|
- sortie de CharGen en C1 : pas d'à-coup de pose (une image de `Birdview` peut rester, elle vient de GI).
|
|
|
|
## Retour arrière
|
|
`.\Tools\Restore.ps1 -Lot CAM-B2s -Only Content\BPs\Room.uasset`, éditeur fermé, sur accord.
|
|
|
|
## Estimation
|
|
Fiche prête. Passage UE : environ 35 min d'éditeur (lp-mcp-bp), puis VAL V5 et V6 environ 15 min. **Correctif
|
|
simple : il peut passer avant ORG4.** Il peut partager le même jeton que B2r : compilation C++ d'abord, puis éditeur.
|