LifePlay-Revival/Docs/Migration/etat/CAM/CAM-T2-CART.md

248 lines
27 KiB
Markdown
Raw Normal View History

Fiche CAM-T2 — Niveau N3 — Modèle prévu opus | utilisé claude-opus-5-5 — Agent lp-cart — Skills sk-protocol, lp-commandlets (préchargés présents : ue-cpp-build, lp-paths)
# CAM-T2-CART : caméras des graphes Blueprint et chaînes d'activation, d'après les dumps existants (2026-10-11)
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8`, HEAD `4283c13` (`git rev-parse --short HEAD`). Lecture seule.
Abréviations de chemins : `PC` = `Docs/Migration/etat/ST/STE/dumps/PC__EventGraph.txt` ; `GI` =
`.../ST/STE/dumps/GI__EventGraph_V5.txt` ; `GICF` = `.../ST/STE/dumps/GI__CallFunction_V5.txt` ; `ROOM` =
`.../ST/STE/dumps/Room__EventGraph_V5.txt` ; `MM` = `.../ST/STB/dumps/MainMenu__EventGraph.txt` ; `PERS` =
`.../portage55/L6f/L6f_dump_Person.txt` ; `CLSC` = `.../portage55/L6f/L6f_components_CentralLondon_SceneCapture.txt`.
« Mort » = nœud dont l'entrée d'exécution est `execute (vide)` dans le dump.
## Tableau récapitulatif
| # | Caméra | Où | Type | Qui l'active (preuve) | Suit le MC | Vivante / morte | Rôle apparent |
|---|---|---|---|---|---|---|---|
| K1 | `GI.Birdview` (classe `Birdview_C`) | acteur placé dans `CentralLondon.umap` (chaînes `Birdview_C`, `Default__Birdview_C` du .umap) ; classe fille de `CameraActor` (chaînes `Default__CameraActor`, `CameraActor` de `Birdview.uasset`) | CameraActor (BP) | PC `BeginAutoLoad` → `SetViewTargetWithBlend(Birdview)` (PC:521-529, 2762-2779) ; GI `ShowRender` → `SetViewTargetWithBlend(Birdview)` (GI:3144-3152, 13229-13233) | non attachée ; déplacée par les entrées (PC:616-625, 743-747, 3092-3121) et `PanToBuilding` (GI:628-633) ; aucun suivi du MC vu (graphe de Birdview non dumpé) | vivante | vue de dessus / carte de la ville |
| K2 | `GI.ChargenCameras[0]` = `Room.SceneCamera` | CameraActor placé dans `CentralLondon.umap` (estimé : chaînes `CameraScene`, `CameraFullBody`, `CameraPortrait`, `ChargenCameras` du .umap) ; copié dans `Room.SceneCamera` au BeginPlay de Room (ROOM:404-416, 420-426) | CameraActor (`CameraComponent` lu : MM:1547-1549, ROOM:2033-2035) | GI `HideRender(0)` → `SetViewTargetWithBlend(ChargenCameras[CurrentCamera])` (GI:772-775, 4452-4466, 3117-3125) ; fin de sexe (GI:14505-14513) ; PC `SwitchCamera`/`ResetCamera` index 0 (PC:1752-1760, 2351-2355, 3344-3346) | non attachée ; `AutoCamera` la tourne vers la tête du MC et la recale par rapport au MC (ROOM:3406-3593, 3796-3872) ; position par défaut `GI.CameraSceneTransformDefault` (ROOM:1250-1263) | vivante | caméra de pièce / de scène ; CharGen index 0 |
| K3 | `GI.ChargenCameras[1]` | idem K2 (ordre du tableau non prouvé) | CameraActor (estimé) | GI `OpenContacts` → `HideRender(StartingCamera=1)` (GI:6252-6254, 6226-6234) ; `ZoomCharGen` (GI:879-881, 4417-4448) | non (position fixe ; aucun déplacement vu) | vivante | contacts / CharGen (portrait ou plein pied : incertain) |
| K4 | `GI.ChargenCameras[2]` | idem K2 | CameraActor (estimé) | seulement `ZoomCharGen` : `CurrentCamera = (CurrentCamera < 2) ? CurrentCamera + 1 : 0` (GI:4423-4441) | non | vivante (par ZoomCharGen) | CharGen (zoom) |
| K5 | `Person.FirstPersonSM` (classe `FirstPerson_C`) | composant de `Person` (chaînes `FirstPersonSM`, `FirstPersonSM_GEN_VARIABLE`, `FirstPerson_C` de `Person.uasset`) ; `FirstPerson.uasset` = BP fils de `CameraComponent` (chaînes `Default__CameraComponent`, `BlueprintSpawnableComponent`) | CameraComponent (BP) | PC `SwitchCamera` pendant le sexe : `SetViewTargetWithBlend(SexPersons[i])` après attache de `FirstPersonSM` au socket `head` (PC:3312-3317, 2263-2266, 3378-3396, 3364-3373, 1788-1796) | attachée à la tête de `SexPersons[i]` (MC ou partenaire), seulement pendant le sexe | vivante sous `SexOn` | 1re personne (POV) |
| K6 | `SecondScreen`, `FaceCapture` | acteurs `SceneCapture2D` du niveau `CentralLondon` (CLSC:2, 252) | SceneCapture2D, pas une caméra de vue | GI `secondScreen()` (GI:25826-25843), appelé par l'événement `Sex` (GI:6762-6764) | sans objet | vivante | rendu vers texture (second écran, visage) |
| K7 | Pawn par défaut (`Pawn_C`) | `Pawn.uasset` (chaînes `AutoPossessPlayer`, `bUseControllerRotation*`, aucune chaîne `Camera`) ; `GM.uasset` chaîne `DefaultPawnClass` | Pawn sans caméra (estimé) | aucun `Possess` dans les dumps PC et GI | sans objet | vue implicite avant le 1er `SetViewTarget` (estimé) | aucun rôle de caméra prouvé |
Hors caméra de vue (piège 5 de la fiche) : `CameraShake_C` (LegacyCameraShake, effet) joué par `PlayWorldCameraShake`
(GI:10868-10873, événement `Cum`, GI:10803-10805, 27673-27676) ; action d'animation `camera` de Person = accessoire
tenu en main (`spawnProp` socket `rHand`, PERS:34797, 35399-35404).
**Caméras de rue en enfilade : aucune trouvée.** **Caméra de plafond : aucune trouvée.** **SpringArm : aucun.**
## 1. Objet et périmètre
Domaine : caméras de vue des Blueprints et leurs chaînes d'activation (qui active, quand, suivi du MC, vivante/morte),
d'après les dumps texte présents sur disque. Hors périmètre : C++ et .ini (CAM-T3), comptage dans les .uasset (CAM-T1).
Fonctions C++ vues depuis les BP (noms seulement) : `LPUserSettingsLibrary::ApplyCameraSpeedAtStartup` (GI:30024-30028).
Version des sources : GI et Room = V5 (HEAD selon la fiche) ; PC = dump STE-D du 2026-10-10 11:31 (PC:1-3), postérieur
au dernier commit de `PC.uasset` (`809102a`, 2026-10-08) ; Person = L6f (2026-09-30), **antérieur** au dernier commit
de `Person.uasset` (`ee2821a`, 2026-10-09) ; MainMenu = STB, dernier commit de `MainMenu.uasset` `547dcdd` (2026-10-10).
## 2. Commandes et lectures (exactes) avec compte brut
| Commande / lecture | Compte brut |
|---|---|
| `Grep "(?i)camera\|viewtarget\|springarm\|TargetArmLength\|FieldOfView\|Possess"` sur `PC` | 66 lignes ; 0 `SpringArm`, 0 `TargetArmLength`, 0 `FieldOfView`, 0 `Possess` |
| `Grep "(?i)camera\|viewtarget\|springarm\|TargetArmLength\|FieldOfView\|possess\|birdview\|firstperson\|secondscreen\|POVOn"` sur `GI` | 113 lignes ; 0 SpringArm / ArmLength / FieldOfView / Possess |
| `Grep "(?i)camera\|viewtarget\|springarm\|TargetArmLength\|FieldOfView\|possess\|birdview\|firstperson\|secondscreen\|ceiling"` sur `ROOM` | 122 lignes ; Room = 1010 nœuds (ROOM:1) |
| `Grep -c "SetViewTarget\|CameraComponent\|SpringArm\|CameraActor\|TargetArmLength\|FieldOfView\|Birdview_C\|FirstPersonSM\|ChargenCameras"` sur `Docs/Migration/etat/**/*.txt` | 832 occurrences dans 42 fichiers |
| `SetViewTargetWithBlend` dans les dumps HEAD | PC : 3 nœuds (PC:521, 1752, 1788) ; GI : 4 nœuds (GI:3117, 3132, 3144, 14505) ; Room : 0 |
| `Grep "VariableSet_\d+ +variable '(Birdview\|ChargenCameras\|BirdviewOriginal\|CameraSceneTransformDefault\|PC\|Wall)'"` sur `etat/**/*.txt` | 2 lignes, toutes `PC := self` (PC:190) : **aucun dump n'écrit `Birdview` ni `ChargenCameras`** |
| `grep -a -o "[A-Za-z_][A-Za-z0-9_]\{3,\}" <uasset> \| sort \| uniq -c` filtré camera/view/arm/fov/spring/… sur `Content/BPs/{Birdview,FirstPerson,CameraShake,Pawn,SecondScreenFloor,GM}.uasset`, puis `Scenes/CentralLondon.umap`, `BPs/{Person,PC,GI}.uasset`, `UI/ContactMenu.uasset` | chaînes citées dans 3 ; tailles : Birdview 925 792 o, FirstPerson 6 348, CameraShake 7 392, Pawn 24 691, SecondScreenFloor 25 116, GM 21 349 |
| `grep -rl -a "<motif>" --include=*.uasset --include=*.umap Content` | `ChargenCameras` : 6 fichiers (GI, PC, Room, CentralLondon.umap, UI/ContactMenu, UI/MainMenu) ; `FirstPerson_C` : 4 (FirstPerson, PC, Person, CentralLondon.umap) ; `Birdview_C` : 11 (Birdview, GI, PC, Room, CentralLondon.umap, UI/ContactMenu, Cursor, Recommend, SearchResult, Shortcut, TopRight) ; `CameraShake_C` : 2 (CameraShake, GI) |
| `Grep` camera sur `post-v1/PawnDyn/*`, `post-v1/PawnGlobal/*` | ces dumps portent sur **Room**, pas sur Pawn (`-BP=Room`, `PawnDyn_LPDumpComponents_20261004-223842.txt:1`, `PawnGlobal_LPDumpFunction_20261004-222937.txt:1`) ; composants de Room : `StaticMeshComponent0`, `Box`, `Wall1-4`, `WallT`, aucune caméra (`PawnDyn_LPDumpComponents_20261004-223842.txt:32-41`) |
| `post-v1/STUDIO-EST/*` (CharGen, BodyShapeMenu, BodyShape, CharGenSlider, Preset, FaceTexture) | 0 occurrence `camera\|viewtarget\|spring` dans les 6 fichiers |
| `AP5_LPDumpFunction_20261006-134746/134949.txt` | asset dumpé = Room (`-BP=Room -Fn=*`, ligne 1 de `-134949`), version du 2026-10-06 ; fonctions `getFocalDistance` (l. 2293) et `isPointInsideRoom` (l. 4026) lisent `SceneCamera` |
| `STE-V5_LPDumpFunction_20261010-231918.txt` | asset = Room EventGraph (l. 1), même contenu caméra que `ROOM` |
| `git log -1 -- Content/BPs/<x>.uasset` | PC, Birdview, FirstPerson, Pawn, GM, ContactMenu, CentralLondon : `809102a` (2026-10-08) ; Person `ee2821a` (2026-10-09) ; Room, GI `4283c13` |
## 3. Constats `fichier:ligne`
### 3.1 K1 Birdview (vue de dessus)
- Activation au chargement : `BeginAutoLoad` (PC:2762-2765) → `GI.AutoLoad` (PC:1424-1428) → `Delay` (PC:1435-1437) →
si `TopRight` visible (PC:2772-2779) → `SetViewTargetWithBlend(self, GI.Birdview)`, BlendTime 0, `VTBlend_Linear`
(PC:521-529) → `GamePaused := AutoPauseAfterAction` → `Birdview.AskForHover` (PC:1429-1434, 1709-1712).
Branche `else` vide : si `TopRight` n'est pas visible, aucune vue n'est posée ici (PC:2779).
- Retour à la vue de dessus : `ShowRender` (GI:776-778) → `SetVisibility` (GI:794-797) → `IfThenElse_213` (GI:30074-30077)
→ `SetActorHiddenInGame(MapMarkers, StreetMapStatic, false)` (GI:13229-13233) → `SetViewTargetWithBlend(PC, Birdview)`,
blend 0 (GI:3144-3152) → `SpaceOn := false` (GI:23939-23944). Appelants de `ShowRender` : `CloseSpace` (GI:23574-23576,
23613-23616, 23658-23660, 23583-23586, 23601-23604), `CloseContacts` sans `NPCSelector` (GI:6235-6239), sortie du mode
construction de Room (ROOM:1246-1249, puis `ResetSceneCamera` ROOM:1296-1298 et `BuilderOn := false` ROOM:1290-1293).
- Commandes (PC → fonctions de `Birdview_C`) : `RotateCamera(AxisValue CursorY)` si `MoveCamera` et pas de sexe
(PC:583-586, 597-609, 616-620, 629-633) ; `CircleCamera(leftright)` (PC:621-625) ; `ScrollDownUp(downup)` si pas de sexe
(PC:735-739, 743-747) ; `DownUpBirdview` (axe `DownUp`, PC:3043-3046, 3087-3096) ; `LeftRightBirdView` (axe
`LeftRight`, PC:3097-3121). `MoveCamera` : vrai à l'appui, faux au relâchement de `InputAction_50` et des événements
`StartMoveCamera`/`StopMoveCamera` (PC:547-562, 2852-2857).
- `PanToBuilding(Building)` depuis GI (GI:628-633). `ResetCameraAndPlayer` : `Birdview.SetActorTransform(BirdviewOriginal)`
puis `StreetMapStatic.PlayerWC.SetRelativeTransform((20000,0,0))` (GI:4881-4918), appelé par `CloseCityMenu` si
`Changed` (GI:4648-4652, 4943-4955). Transformation sauvegardée/rechargée (`BirdeyeTransform`, GI:9405-9446).
- `OpenSpace` n'agit que si la cible de vue est `Birdview` (GI:23571-23573, 23669-23672, 23677-23686).
- Fonctions internes de Birdview (chaînes de `Birdview.uasset`) : `CheckIfCameraMovable`, `PreventCameraMove`,
`CameraSpeed`, `FindLookAtRotation`, `isScreenPositionOccupied`, `SpawnMarker`, `OrthoWidth`, `OrthoNearClipPlane`,
`bAutoCalculateOrthoPlanes` : **incertain, dump requis** (aucun dump du graphe de Birdview).
### 3.2 K2-K4 `GI.ChargenCameras[]` (caméra de pièce, CharGen, contacts)
- `HideRender(StartingCamera)` (GI:772-775) → `IfThenElse_212` / `SetVisibility(RootComponent, false)` (GI:30049-30063)
→ `CurrentCamera := StartingCamera` (GI:4452-4457) → `SetViewTargetWithBlend(PC, ChargenCameras[CurrentCamera])`, blend 0
(GI:3117-3125, 4458-4466) → `PlayerCharacter.ShowAppropriateGenital` (GI:17489-17492).
- Appelants de `HideRender` (valeur de `StartingCamera`) : Room `EditBedroom` → `HideUI` → `HideRender(0)` (ROOM:5-7,
28-36) ; GI : après `StripAll`/`MoveCharacterBeingEdited` (édition de personnage) `0` (GI:4397-4400, 3863-3866, 750-752,
803-807) ; après `StopMoodTimer` `0` (GI:22424-22427, 4293-4301, puis `MoveCharacterBeingEdited` et
`Room.ResetSceneCamera`, GI:23975-23985) ; démarrage de scène si `SpaceOn` faux `0` (GI:23705-23708, 5866-5870, puis
`CreateSceneWidget` GI:6086-6088) ; `OpenContacts` `1` (GI:6252-6254, 6226-6234) ; `CloseContacts` si `NPCSelector` `0`
(GI:6259-6262, 17481-17484, 17470-17474) ; `OpenSpace` → `SpaceOn := true` → `Exit Action Menu` → `0` (GI:23577-23580,
23592-23600).
- `ZoomCharGen` → `CurrentCamera := SelectInt(CurrentCamera+1, 0, CurrentCamera < 2)` → `SetViewTargetWithBlend(PC,
ChargenCameras[CurrentCamera])` (GI:879-881, 4417-4448, 3132-3140) : le tableau a au moins 3 entrées (estimé).
- Fin de sexe : `SexOn := false` (GI:21018-21020) → `Room.UpdateDOF` → `UpdatePartnerList` → `ForEach SexPersons` →
`Completed` → `SetViewTargetWithBlend(PC, ChargenCameras[0])` (GI:22144-22146, 21319-21321, 6992-6998, 14498-14513).
- Room : `SceneCamera := GI.ChargenCameras[0]` après `ForEach AllComponents` + `Delay 1 s` au `ReceiveBeginPlay`
(ROOM:2-4, 289-295, 420-426, 404-416), puis `TestAutoCamera` (ROOM:3456-3459), événement vide (ROOM:3453-3455).
- Déplacements de `SceneCamera` dans Room, tous conditionnés par `BuilderOn OR SexOn OR SpaceOn`
(ROOM:1326-1331, 1335-1340) : `ScrollDownUp` (avance en X local, `Values × 1.5 × CameraSpeed`, ROOM:394-397, 427-475,
551-555, 713-717), `LeftRight` (Y local, ROOM:492-550), `DownUp` (Z, ROOM:482-485, 566-627), `CircleCamera` (lacet,
ROOM:629-662), `RotateCamera` (tangage, ROOM:665-700). Ces événements de Room ne sont appelés par aucun nœud de PC
(PC n'appelle de Room que `SelectUnderCursor`, `StartMoveObject`, `StopMoveObject`, `AddLightOptions`,
`refreshIdleDummies`, `UpdateDOF` : PC:3911-3936, 4019-4022, 4527-4531, 5001-5004) ; leur appelant est inconnu
(estimé : Birdview relaie, chaînes `CircleCamera`, `RotateCamera`, `DownUp`, `LeftRight`, `ScrollDownUp` dans
`Birdview.uasset`).
- `ResetSceneCamera` → `SceneCamera.SetActorTransform(GI.CameraSceneTransformDefault)` (ROOM:1250-1270) ; appelée par GI
après `RestartAnimation` (GI:23872-23874, 23935-23938) et après `MoveCharacterBeingEdited` (GI:23975-23985), par Room
(ROOM:1296-1298, 1924-1926).
- `AutoCamera` (ROOM:3406-3408) : si la cible de vue est `SceneCamera` (ROOM:3428-3439), `PlayerHead :=
PlayerCharacter.Mesh` socket `head` (ROOM:3441-3447, 3513-3518) ; `isPointInsideRoom(caméra)` (ROOM:3796-3801) ;
`SetActorRotation(SceneCamera, FindLookAtRotation(caméra, PlayerHead))` si la tête sort de l'écran
(ROOM:3448-3452, 3482-3486, 3522-3539) ; si la caméra est hors pièce et la tête dans la pièce : 10 pas de
`(PlayerHead - caméra)/10` jusqu'à rentrer (ROOM:3805-3872) ; sinon `SetActorLocation(SceneCamera,
(-3131543, -14967213, 75) + (PlayerCharacter.Location - GI.ActorTransforms[3].Location))` (ROOM:3547-3593, 3816-3820) ;
puis `UpdateDOF`. Appel : `CallFunction_363` depuis `IfThenElse_63.else` (ROOM:3873-3876, 4068-4072), amont non remonté.
Minuterie `SetTimerDelegate(AutoCamera, 1 s, boucle)` **morte** (ROOM:3643-3653).
- `CameraFocusPoint(Loc)` → `SetActorRotation(SceneCamera, LookAt)` (ROOM:4404-4410, 4431-4434).
`CameraFocus(Person)` → `SetActorRotation` avec `self (vide)` : la cible est **l'acteur Room**, pas `SceneCamera`
(ROOM:4396-4399, 4435-4439) — constat, effet en jeu non vérifié.
- Commandes de script de scène (`GI.CallFunction`, `SwitchString_22`, GICF:209-219) : `cameraMove` →
`Room.SceneCamera.SetActorTransform(Location, Rotation des paramètres, échelle 1)` puis `UpdateDOF` (GICF:6179-6203) ;
`cameraFocus` → `Room.CameraFocus(Person)` (GICF:6292-6299) ; `CameraFocusPoint` (GICF:6469) ; `cameraLock` /
`cameraUnlock` → `PreventCameraMove := true / false` (GICF:6730-6739). `PreventCameraMove := false` aussi en GI:28028-28031.
- Profondeur de champ : `UpdateDOF` → `SceneCamera.CameraComponent.PostProcessSettings.DepthOfFieldFocalDistance :=
getFocalDistance()` ou 0 (ROOM:2004-2095) ; réglage → `ChargenCameras[0].CameraComponent.PostProcessSettings.
DepthOfFieldFarBlurSize` (GI:21058-21106, puis `CameraSpeed` GI:11926-11930) ; MainMenu `SpinBox_0` écrit le même champ
(MM:1532-1564). `CameraSpeed` lu depuis `GameSettingsInstance` (GI:11902-11907).
- Lecteurs de `Room.SceneCamera` dans Person (dump L6f, antérieur à HEAD) : `updateButtonSize` (PERS:13585, 13601-13649) ;
dans l'EventGraph, `if GetViewTarget == SceneCamera → SetActorRotation(SceneCamera, LookAt(tête du MC))` **mort**
(`IfThenElse_70 execute (vide)`, PERS:34520-34580).
### 3.3 K5 POV `FirstPersonSM` (1re personne pendant le sexe)
- Déclencheurs de `SwitchCamera` : `InputAction_12` (nom d'action absent du dump ; chaîne `InpActEvt_SwitchCamera` dans
`PC.uasset`) → si `BuilderOn` faux → `PlayClick` → si `SexOn` (PC:1713-1716, 3876-3880, 4430-4432, 1723-1727) ;
minuterie `SwitchCameraDelayed` 0,2 s (PC:3347-3360) ; bouton d'action « Switch camera », `Animation = 'Switchcamera'`
(PC:2505-2531).
- `SwitchCamera` (PC:2532-2534) → `SexCameraIndex < len(SexPersons)` (PC:1728-1740, 1770-1773) :
- vrai : `POVOn := true` (PC:3312-3317) → `CurrentActor := SexPersons[SexCameraIndex]` (PC:1784-1787, 2263-2266) →
`SceneSun` caché (PC:2346-2350) → `FirstPersonSM.AttachToComponent(Mesh, socket 'head', KeepRelative)` (PC:3375-3388) →
`SetRelativeTransform` (PC:3389-3396) → `AttachToComponent(Mesh, sans socket, KeepWorld)` (PC:3364-3373) →
`SetViewTargetWithBlend(GI.PC, CurrentActor)`, blend 0 (PC:1788-1796) → `SexCameraIndex++` (PC:1741-1744) →
`Wall` caché (PC:1800-1804) → `HairSM` caché (PC:2293-2297).
- faux : `POVOn := false` (PC:3318-3323) → `SexCameraIndex := 0` (PC:1746-1751) → `SceneSun` visible (PC:2351-2355) →
`SetViewTargetWithBlend(GI.PC, ChargenCameras[0])` (PC:1752-1760, 1777-1783) → `Wall` visible selon `bHidden`
(PC:1805-1809, 3995-3998) → `ForEach SexPersons` (PC:2256-2262).
- `ResetCamera` → même branche « faux » sans remise à 0 de l'index (PC:3344-3346, 2351-2355) ; `ContinuePOV` →
`SexCameraIndex := …` → attache (PC:3324-3331, 3378-3380).
- Regard en POV : souris → `FirstPersonSM.AddWorldRotation` (PC:1896-1903 via PC:1924-1928 ; `CallFunction_951` via
PC:1999-2003) ; `CallFunction_204` **mort** (PC:1888-1895) ; `SetRelativeRotation(FirstPersonSM, 90, 90, 0)` **mort**
(PC:2055-2062).
- Entrée en sexe (GI) : `Sex` → `secondScreen` → `clearAllTalks` → `CompleteAllMovements` → `SexOn := true` →
`WaitingScene := true` → `PC.POVOn := false` (GI:6762-6764, 25826-25831, 24101-24104, 25067-25070, 6896-6901,
6773-6776, 20528-20533) ; aucun `SetViewTarget` sur ce chemin (vue conservée : estimé). `SexCameraIndex := 0` en
GI:12828-12833 (amont non remonté).
- Sélection de la caméra par le moteur : `SetViewTarget` sur un acteur `Person` utilise le premier `CameraComponent`
actif de l'acteur (comportement moteur, `bFindCameraComponentWhenViewTarget = True` lu pour un autre acteur en CLSC:30)
— estimé ; état `bAutoActivate` de `FirstPersonSM` : incertain, CDO non dumpé.
### 3.4 Autres
- `SecondScreen` / `FaceCapture` : `SceneCapture2D` dans `/Game/Scenes/CentralLondon`, dossier `Poser/Cameras`
(CLSC:2-3, 84, 252-253) ; `SecondScreenFloor` n'a qu'un `StaticMeshComponent0`
(`portage55/L6f/L6f_LPDumpComponents_20260930-101930.txt:1, 35`). Le dump plus récent
`ST/STE/dumps/CentralLondon__SceneCapture.txt` existe et n'a pas été relu.
- `ContactMenu.uasset` contient `CharGenButton`, `SelectCamera`, `CurrentCamera`, `ReturnFromChargen`,
`SetViewTargetWithBlend`, `ChargenCameras` (chaînes) : **un site d'activation sans dump** (incertain : dump requis).
- `CentralLondon.umap` contient `CameraScene`, `CameraFullBody`, `CameraPortrait` (chacune avec
`_ExecuteUbergraph_CentralLondon_RefProperty`, donc référencées par le script du niveau), `Birdview`, `CamOrthoZoom`,
`ChargenCameras` : le remplissage de `GI.ChargenCameras` et `GI.Birdview` par le script du niveau est estimé, non prouvé.
- `Person.uasset` contient `DetermineBirdviewLooking`, `MoveCamera`, `GetViewTarget`, `SceneCamera`, `CameraActor`.
- Nœuds caméra morts (résumé) : PC:2055-2062, 1888-1895 ; PC `Delay(1)` PC:1696-1702 ; PC `InputAction_51` sans liens
PC:563-566 ; GI `refreshIdleDummies` → `SetViewTarget` PC GI:24030-24035 et `UpdateWall` GI:20939-20943 (entrées mortes,
le 3e appelant de GI:14506 reste vivant) ; GI `SetActorHiddenInGame(Skylight)` GI:21049-21052 ; ROOM minuterie
`AutoCamera` 3643-3653, `TestAutoCamera` 3453-3455, `DownUp` 561-565, `IfThenElse_1` (déplacement X × -10) 389-393,
`CenterCameraToAction` vide 2102-2104, `DrawDebugBox` 3674-3676 ; PERS:34520-34580.
### 3.5 Machine à états (reconstituée)
| État (variables) | Caméra active | Entrée (déclencheur, preuve) | Sortie |
|---|---|---|---|
| Démarrage / chargement auto | K1 Birdview si `TopRight` visible | `BeginAutoLoad` (PC:2762-2779, 521-529) | — |
| Ville / rue (`SpaceOn` faux) | K1 Birdview | `ShowRender` (GI:3144-3152) ; `CloseSpace` (GI:23574) ; `CloseContacts` sans `NPCSelector` (GI:6235-6239) ; fin du constructeur (ROOM:1246) | `OpenSpace` |
| Pièce « Space » (`SpaceOn` vrai) | K2 `ChargenCameras[0]` = `Room.SceneCamera` | `OpenSpace` si vue = Birdview et `SpaceOn` faux → `HideRender(0)` (GI:23571-23600) | `CloseSpace` → Birdview |
| Constructeur de pièce (`BuilderOn`) | K2 | `EditBedroom` → `HideRender(0)` (ROOM:5-7, 28-36) | `ShowRender` + `ResetSceneCamera` (ROOM:1246-1298) |
| Édition de personnage / CharGen | K2, puis K3, K4 | `HideRender(0)` (GI:803-807) ; `ZoomCharGen` 0→1→2→0 (GI:4417-4448) | `ShowRender` (estimé) |
| Contacts | K3 `ChargenCameras[1]` | `OpenContacts` → `HideRender(1)` (GI:6226-6234) | `CloseContacts` → K2 (si `NPCSelector`) ou Birdview |
| Scène scriptée (`WaitingScene`) | K2, déplacée par `cameraMove` / `cameraFocus` / `cameraFocusPoint` | `HideRender(0)` si `SpaceOn` faux (GI:5866-5870) ; commandes GICF:209-219 | `ShowRender` (estimé) |
| Sexe (`SexOn`), `POVOn` faux | K2 (vue conservée à l'entrée : estimé) | `Sex` (GI:6762-6776) ; `SwitchCamera` index = n ou `ResetCamera` → K2 (PC:1752-1760) | fin : `ChargenCameras[0]` (GI:14505) |
| Sexe, `POVOn` vrai | K5 POV de `SexPersons[i]` | `SwitchCamera` index < n (PC:1788-1796) | `SwitchCamera` suivant / `ResetCamera` |
Trous nommés : déclencheur de `OpenSpace` / `CloseSpace` (touche ? `.ini` : CAM-T3) ; amont de `AutoCamera`
(ROOM `CallFunction_290`) ; logique interne de Birdview ; site `ContactMenu` (`SelectCamera`) ; écriture de
`ChargenCameras` / `Birdview` / `BirdviewOriginal` / `CameraSceneTransformDefault` ; noms des actions d'entrée
`InputAction_12`, `InputAction_50` (dump sans nom ; chaînes `InpActEvt_SwitchCamera`, `InpActEvt_RotateCamera` dans `PC.uasset`).
## 4. Établi / estimé / incertain
- **Établi** : 7 nœuds `SetViewTargetWithBlend` vivants ou morts (PC 3, GI 4, Room 0), tous avec BlendTime 0 et
`VTBlend_Linear` ; cibles = `Birdview`, `ChargenCameras[i]`, un acteur `Person` (§ 3) ; aucun `SpringArm`,
`TargetArmLength`, `SetFieldOfView`, `Possess` dans les dumps GI/PC/Room ni dans les chaînes des 11 assets lus ;
aucune caméra de rue ni de plafond ; Room n'a aucun composant caméra ; `CameraFocus` vise l'acteur Room (ROOM:4435-4439) ;
la poursuite du MC par `SceneCamera` dans Person (L6f) est morte.
- **Estimé** : Birdview et ChargenCameras sont des CameraActor placés dans `CentralLondon` et affectés par le script du
niveau (chaînes du .umap) ; ordre de `ChargenCameras` (scène, plein pied, portrait ?) ; le jeu démarre sur la vue du
Pawn par défaut avant `BeginAutoLoad` ; Birdview relaie les commandes vers `Room.SceneCamera` en mode Space/sexe.
- **Incertain** : valeurs des composants (FOV, projection orthographique de Birdview — chaînes `OrthoWidth` présentes —,
post-process, `bAutoActivate` de `FirstPersonSM`), transformations par défaut des caméras placées, contenu de
`GI.CameraSceneTransformDefault` et `BirdviewOriginal` : **CDO non dumpé**. Effet réel de `PlayWorldCameraShake` (broche
`Shake (vide)` dans GI:10873 alors que `GI.uasset` référence `CameraShake_C`). Version HEAD de Person et MainMenu.
## 5. Points à confirmer (phase 1b, copie UE demandée à Big Boss ; rien lancé ici)
| Asset | Commandlet (lp-commandlets) | But |
|---|---|---|
| `Birdview` | `LPDumpFunction -BP=Birdview -Fn=* -Pins -Exec` | RotateCamera, CircleCamera, ScrollDownUp, DownUpBirdview, LeftRightBirdView, PanToBuilding, CheckIfCameraMovable, relais vers Room, BeginPlay (écrit-il `GI.Birdview` ?) |
| `Birdview`, `Person` (`FirstPersonSM`), `Pawn`, `GM`, `FirstPerson`, `CameraShake` | `LPDumpComponents -BP=<nom>` (imprime les propriétés, défauts compris : format vu en CLSC:30) ; `LPDumpCDO` si ses options sont lues dans `Source/LifePlayEditorTools` (non documentées dans lp-commandlets) | FOV, `ProjectionMode`, `OrthoWidth`, `bAutoActivate`, transform relatif, post-process, `DefaultPawnClass` |
| niveau `/Game/Scenes/CentralLondon` | `LPDumpComponents -Map=/Game/Scenes/CentralLondon -Filter=Camera` (et `-Filter=Birdview`) | position, rotation, FOV de `CameraScene`, `CameraFullBody`, `CameraPortrait`, `Birdview`, `CamOrthoZoom` |
| script du niveau CentralLondon | `LPDumpFunction` sur le Level Blueprint : support non prouvé (à vérifier dans le `.h`) | qui remplit `GI.ChargenCameras`, `GI.Birdview`, `BirdviewOriginal` |
| `ContactMenu` | `LPDumpFunction -BP=ContactMenu -Fn=* -Pins -Exec` | `CharGenButton`, `SelectCamera`, `ReturnFromChargen` |
| `Person` (HEAD) | `LPDumpFunction -BP=Person -Fn=EventGraph -Pins -Exec` | redump à HEAD (L6f date du 2026-09-30) : `MoveCamera`, `DetermineBirdviewLooking`, chaîne morte PERS:34520 |
| `GI` | `LPDumpFunction -BP=GI -Fn=* -Pins -Exec` (ou liste ciblée) | qui écrit `CameraSceneTransformDefault`, fonctions `ShowRender`/`HideRender` hors EventGraph s'il y en a |
| `MainMenu` | `LPDumpFunction -BP=MainMenu -Fn=EventGraph -Pins -Exec` | confirmer MM:1532-1564 à HEAD (`547dcdd`) |
À relire sans commandlet : `ST/STE/dumps/CentralLondon__SceneCapture.txt` ; amont de `Room.AutoCamera` (`CallFunction_290`
dans ROOM) ; amont de `GI.SexCameraIndex := 0` (GI:12828).
## 6. Questions pour la SPEC ou l'utilisateur
1. Cible C2 (3e personne à 1,75 m) : la créer comme nouveau composant sur le MC, ou réutiliser `ChargenCameras[0]` /
`Room.SceneCamera` déjà pilotée par `AutoCamera` (regard vers la tête du MC) ?
2. Cible C1 (1re personne) : réutiliser `Person.FirstPersonSM` (`FirstPerson_C`), aujourd'hui active seulement pendant
le sexe via `SwitchCamera`, hors sexe aussi ?
3. Cible C3 (plafond) et caméras de rue : aucune base existante ; Birdview (vue de dessus de la ville) doit-elle rester
la vue « rue » ou être remplacée ?
4. Le défaut `CameraFocus` (rotation de l'acteur Room au lieu de la caméra, ROOM:4435-4439) et les chaînes mortes
(`AutoCamera` sans minuterie, suivi du MC mort dans Person) sont-ils dans le périmètre du lot CAM ?
5. `ChargenCameras` sert à la fois au CharGen, aux contacts, à la pièce et au sexe (index 0) : faut-il séparer la caméra
de pièce de la caméra de CharGen ?
## Constats
- Écarts de méthode : deux appels Bash ont utilisé `sed -n 1p` et `grep -ci` sur des `.txt` (en-têtes de STUDIO-EST),
au lieu de Read/Grep (sk-protocol § 7), lecture seule, sans effet ; un `Grep` trop large sur `GI` (sortie 217 Ko non
exploitée). Un `Grep` sur le dossier `post-v1` a rendu 0 résultat alors que les fichiers (ASCII, CRLF) contiennent les
motifs : le dossier a dû être lu fichier par fichier (une absence vue par Grep sur un dossier d'`etat/` ne prouve rien).
- `Docs/Migration/etat/CAM/CAM-T1_matrice.txt` (livrable de CAM-T1) existe, non lu.
- Fichiers écrits : `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM\CAM-T2-CART.md` (A). Aucun autre.
Tours : 48 / 60