LifePlay-Revival/Docs/Migration/etat/CAM/CAM-T2-CART.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

247 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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