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,\}" \| 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 "" --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/.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=` (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