LifePlay-Revival/Docs/Migration/etat/U58/UA/UA-JEU.md

336 lines
30 KiB
Markdown
Raw Normal View History

# UA-JEU — Audit du jeu avant migration UE 5.5 → 5.8
Fiche UA-T1 — Niveau N1 — Modèle prévu sonnet | utilisé sonnet
Date : 2026-10-08. Racine : `D:\Game\LifePlay-master 5.5`. Lecture seule : aucun build, aucun lancement, aucun `.uasset` ouvert (tailles et noms uniquement), aucun git d'écriture. Plan de référence : `Docs/Migration/27_Plan_Migration_UE58.md`.
Les commandes sont notées en tête de chaque section (shell POSIX, depuis la racine). « Ligne » = ligne de texte (`grep -c` compte des lignes, pas des occurrences multiples par ligne).
## 1. Modules C++ du jeu
Commandes : `ls Source/<module> | wc -l` ; `cat Source/<module>/*.cpp Source/<module>/*.h | wc -l` ; `grep -h "UCLASS" Source/<module>/* | wc -l` ; `grep -ho "class [A-Z_]* *U[A-Za-z]*Subsystem" Source/LifePlay/*.h`.
| Module | Type (uproject) | Fichiers (.h + .cpp + Build.cs) | Lignes (.h + .cpp) | UCLASS | dont `U*Subsystem` |
|---|---|---|---|---|---|
| LifePlay | Runtime, Default | 51 | 9 212 | 25 | 16 |
| LifePlayEditorTools | Editor, Default (AdditionalDependencies: Engine) | 69 | 7 915 | 32 (tous des commandlets) | 0 |
Cibles (`Source/*.Target.cs`) : `LifePlay.Target.cs` (Game) et `LifePlayEditor.Target.cs` (Editor), toutes deux `DefaultBuildSettings = BuildSettingsVersion.V5` et `IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_5`. Aucune cible Server/Client. L'éditeur charge LifePlay + LifePlayEditorTools. LifePlayEditorTools a `bUseUnity = false`.
Classes de LifePlay (25 UCLASS, `grep -h -A1 UCLASS Source/*/*.h`) :
- 16 sous-systèmes : ColorGrade, Debug, DirectControl, Hairstyle, Keyboard, MapMarkersGuard, ModDailies, ModInfo, OutdoorRoom, PersonPropGuard, SecondScreen, SessionLog, Settings, ShowCouple, Version, VideoQuality (include `Subsystems/GameInstanceSubsystem.h` x16).
- 8 bibliothèques/compat : `ULPAssetRegistryHelpers`, `ULPDataCompat`, `ULPMeshCompat`, `ULPModDailiesLibrary`, `ULPModSettingsLibrary`, `ULPNavigationHelpers`, `ULPStringCompat`, `ULPVictoryCompat`.
- 1 : `ALifePlayGameModeBase`.
Fonctions exposées aux Blueprints : `grep -h -E "UFUNCTION\(.*BlueprintCallable" Source/LifePlay/*.h | wc -l` = 7 ; `...BlueprintPure` = 10 ; UFUNCTION au total = 36. Répartition (callable + pure, 17) : LPStringCompat 4, LPAssetRegistryHelpers 3, LPDataCompat 2, LPVictoryCompat 2, LPMeshCompat 1, LPModDailies 1, LPModInfoSubsystem 1, LPModSettingsLibrary 1, LPNavigationHelpers 1, LPSessionLogSubsystem 1.
### Dépendances (Build.cs)
LifePlay.Build.cs (`PCHUsage = UseExplicitOrSharedPCHs`) :
- Publiques : Core, CoreUObject, Engine, InputCore, AssetRegistry, NavigationSystem, LPAnimCore (plugin du jeu).
- Privées : ImageWrapper, ApplicationCore, RHI, EngineSettings, Projects, Slate, SlateCore, UMG, Chaos.
LifePlayEditorTools.Build.cs :
- Publiques : Core, CoreUObject, Engine, LifePlay.
- Privées : UnrealEd, BlueprintGraph, KismetCompiler, AssetRegistry, StreetMapRuntime, SlateCore, NavigationSystem, UMG, UMGEditor, MeshDescription, Json.
### En-têtes moteur inclus, par module UE
Commandes : `grep -ho '#include *"[^"]*"' Source/<module>/* | sort | uniq -c | sort -rn`, en excluant les en-têtes `LP*`, `LifePlay*` et `.generated.h`. Le regroupement par module UE est déduit du préfixe du chemin (heuristique, non IWYU) ; le détail par en-tête est reproductible avec la commande.
LifePlay (316 inclusions moteur) :
| Module UE (déduit) | Inclusions | En-têtes les plus fréquents |
|---|---|---|
| Engine | 120 | Engine/GameInstance.h 15, Engine/World.h 8, Kismet/BlueprintFunctionLibrary.h 8, EngineUtils.h 5, Components/StaticMesh, SkeletalMesh, Capsule 4 chacun, GameFramework/* |
| Core | 87 | CoreMinimal 25, Containers/Ticker.h 14, Misc/Paths 8, Misc/FileHelper 6, HAL/FileManager 5, Misc/CommandLine 4, HAL/IConsoleManager 4, Modules/ModuleManager 3 |
| UMG | 45 | Components/TextBlock 4, ScrollBox 4, Button 3, Blueprint/UserWidget 4 |
| Slate / SlateCore | 33 | Styling/CoreStyle 6, Styling/SlateTypes 5, Widgets/Text/STextBlock 3, SBox / SBorder / SButton 3 chacun, SlateApplication 2 |
| CoreUObject | 15 | UObject/UnrealType.h 11 |
| AssetRegistry | 5 | IAssetRegistry.h 2, AssetRegistryModule.h 2, AssetData.h 1 |
| RHI | 3 | RHI.h, RHIStats.h, DynamicRHI.h |
| EngineSettings | 3 | GeneralProjectSettings.h |
| ImageWrapper | 2 | IImageWrapper.h, IImageWrapperModule.h |
| Projects, NavigationSystem, InputCore, Chaos, Scalability | 1 chacun | Interfaces/IPluginManager.h, NavigationSystem.h, InputCoreTypes.h, Chaos/TriangleMeshImplicitObject.h, Scalability.h |
LifePlayEditorTools (390 inclusions moteur) :
| Module UE (déduit) | Inclusions | En-têtes les plus fréquents |
|---|---|---|
| UnrealEd / BlueprintGraph / UMGEditor | 117 | Kismet2/KismetEditorUtilities.h 17, EdGraph/EdGraph.h 17, EdGraphSchema_K2.h 16, Kismet2/BlueprintEditorUtils.h 15, K2Node_CallFunction.h 14, EdGraphPin 14, WidgetBlueprint.h 4, une vingtaine d'en-têtes K2Node_* |
| Core / Json | 72 | CoreMinimal 34, Misc/FileHelper 8, Misc/Paths 3, Json* 3 |
| Engine | 63 | Engine/Blueprint.h 17, Engine/World.h 6, Components/* |
| CoreUObject | 56 | UObject/SavePackage.h 21, UObject/Package.h 21, UObject/UObjectGlobals.h 10 |
| Engine (Commandlet) | 32 | Commandlets/Commandlet.h 32 |
| AssetRegistry | 30 | AssetRegistryModule.h 21, AssetData.h 9 |
| UMG | 17 | Blueprint/WidgetTree.h 4, Components/TextBlock, Button, Image… |
| NavigationSystem, StreetMapRuntime, MeshDescription, Slate | 2, 1, 1, 1 | NavigationSystem.h, StreetMap.h, MeshDescription.h, Styling/SlateTypes.h |
## 2. API moteur à risque (nos sources)
Commande type : `grep -n -E "<motif>" Source/LifePlay/* Source/LifePlayEditorTools/*` ; décompte par `grep -c` (lignes), LifePlay / LifePlayEditorTools.
| Motif | LifePlay | EditorTools | Détail fichier:ligne |
|---|---|---|---|
| FTSTicker | 40 | 0 | 14 sous-systèmes : `AddTicker(FTickerDelegate::CreateUObject…)` / `RemoveTicker` : LPColorGradeSubsystem.cpp:76,81 ; LPDirectControlSubsystem.cpp:566,582 ; LPHairstyleSubsystem.cpp:157,162 ; LPKeyboardSubsystem.cpp:538,547 ; LPMapMarkersGuardSubsystem.cpp:61,66 ; LPModDailies.cpp:88,93 ; LPModInfoSubsystem.cpp:79,85 ; LPOutdoorRoomSubsystem.cpp:29,34 ; LPPersonPropGuardSubsystem.cpp:66,72 ; LPSecondScreenSubsystem.cpp:50,55 ; LPSessionLogSubsystem.cpp:144,365,456 ; LPSettingsSubsystem.cpp:432,437 ; LPVideoQualitySubsystem.cpp:159,164 ; `FTSTicker::FDelegateHandle` en .h (ColorGrade:51, DirectControl:50, Hairstyle:91…) |
| UGameplayStatics | 3 | 2 | LPModSettingsLibrary.cpp:18,23,32 (Does/Load/SaveGameToSlot) ; LPDumpSaveCommandlet.cpp:42 (`LoadGameFromMemory`) ; LPTitleModManagerCommandlet.cpp:351 (`GetPlayerController` par nom) |
| AssetRegistry (motif large) | 34 | 141 | LPAssetRegistryHelpers.cpp:10-75 (`GetAssetByObjectPath(FSoftObjectPath)`, `GetSoftObjectPath`) ; LPHairstyleSubsystem.cpp:499,595 ; LPModDailies.cpp:60,63,68 (`ScanPathsSynchronous`, `GetAssetsByPath`, `AssetClassPath`) ; 21 fichiers de commandlets appellent `SearchAllAssets(true)` |
| IPluginManager | 3 | 0 | LPModDailies.cpp:9,50 (`GetEnabledPluginsWithContent`) |
| MountExplicitlyLoaded / FPakPlatformFile / IoStore | 0 | 0 | aucun usage dans nos sources (voir §5.6 pour ModdingExtra) |
| ParseIntoArray | 24 | 20 | LifePlay : LPDataCompat.cpp (2), LPDirectControlSubsystem.cpp (3), LPHairstyleSubsystem.cpp (3), LPModInfoSubsystem.cpp (1), LPSessionLogSubsystem.cpp (6), LPStringCompat.cpp / .h (2 + 7) ; EditorTools : LPFixParseIntoArrayCommandlet (8 + 6) + 6 autres fichiers (1 chacun) |
| FString::Find | 2 | 2 | uniquement en commentaires : LPStringCompat.h:17,53 ; LPTestStringCompatCommandlet.cpp:35 ; LPTestStringCompatCommandlet.h:4 (le correctif CX-B12 réimplémente `Find` 4.27 dans `ULPStringCompat`) |
| GetSkinnedAsset | 4 | 0 | LPMeshCompat.cpp:18 ; LPSecondScreenSubsystem.cpp:31 ; LPMeshCompat.h:5,29 (commentaires) |
| USkeletalMesh | 27 | 6 | surtout LPDirectControlSubsystem, LPHairstyleSubsystem, LPMeshCompat |
| UPoseableMeshComponent | 0 | 0 | — |
| FSlate | 44 | 0 | LPKeyboardSubsystem.cpp (13), LPSettingsSubsystem.cpp (11), LPVideoQualitySubsystem.cpp / .h (7 + 2), LPColorGradeSubsystem.cpp / .h (6 + 1), LPDirectControlSubsystem.cpp (4) |
| SNew | 28 | 0 | LPKeyboardSubsystem.cpp (17), LPModInfoSubsystem.cpp (8 ; popup `SOverlay/SBox/SBorder`, l.158-163), LPDirectControlSubsystem.cpp (3) |
| UMG (motif) | 3 | 4 | LifePlay.Build.cs ; plus 45 inclusions de widgets UMG dans LifePlay (tableau §1) |
| Navigation | 20 | 18 | LPNavigationHelpers.h / .cpp ; NavigationSystem.h ; LPFixNavRandomPoint / LPFixDeprecatedNodes |
| Chaos | 4 | 1 | LPDebugSubsystem.cpp:9 (`Chaos/TriangleMeshImplicitObject.h`), :136 (`Chaos::FTriangleMeshImplicitObjectPtr` sur `Body->TriMeshGeometries`), :215, :227 ; le comptage EditorTools est un commentaire (LPSetComponentCollisionCommandlet.h:6) |
| Lumen | 0 | 0 | non utilisé dans les sources (GI dynamique désactivée en config, §5.2) |
| RHI | 8 | 0 | LPVideoQualitySubsystem.cpp:22-24 (`DynamicRHI.h`, `RHI.h`, `RHIStats.h`), :38 (`GDynamicRHI`), :43 (`RHIGetTextureMemoryStats`) |
| Scalability | 17 | 0 | LPVideoQualitySubsystem.cpp:184 (`Scalability::FQualityLevels`, `GetQualityLevels`) + 16 autres lignes du .cpp / .h |
| FCoreDelegates | 2 | 0 | LPDebugSubsystem.cpp:371 (`OnEndFrame.AddUObject`), :387 (`RemoveAll`) |
| UGameViewportClient | 0 | 0 | seul l'include `Engine/GameViewportClient.h` : LPDirectControlSubsystem.cpp:21, LPKeyboardSubsystem.cpp:10, LPModInfoSubsystem.cpp:7 |
| FScreenshotRequest | 0 | 0 | — |
| TObjectPtr | 5 | 1 | LPDirectControlSubsystem.h:64,67,70,73 ; LPModDailies.h:45 ; LPPatchDailiesCommandlet.cpp:103 |
| UE_DEPRECATED | 0 | 0 | aucune déclaration ; les avertissements de dépréciation du compilateur ne sont pas mesurés (aucun build) |
Autres API notées au passage (grep ciblé, hors liste de la fiche) :
- Sortie de journal : `GLog->AddOutputDevice` + 2 classes `FOutputDevice` (LPSessionLogSubsystem.cpp:71,122,170).
- Commandlets : `FSavePackageArgs` 21 occurrences ; `ReconstructNode` 11 ; `EdGraphSchema_K2.h` 16 inclusions.
- Chargement d'image : `IImageWrapperModule::CreateImageWrapper` (LPVictoryCompat.cpp:34-42).
- `FAssetData::ObjectPath` (supprimé en 5.1) déjà remplacé par `FSoftObjectPath` (LPAssetRegistryHelpers).
## 3. Commandlets de LifePlayEditorTools (32)
Commande : `ls Source/LifePlayEditorTools/*Commandlet.h` + lecture des premières lignes de commentaire de chaque `.h` ; lignes = `wc -l` du `.cpp`. Classement d'après le texte d'en-tête et le nom, à confirmer par le propriétaire.
| Commandlet | Lignes .cpp | Classe | Source du classement |
|---|---|---|---|
| LPFixAssetRegistryNodes | 219 | portage 4.27 | en-tête : « correctif introduit lors du portage 4.27, toujours actif » |
| LPFixAssetRegistryPins | 319 | portage 4.27 | « correctif du 2026-09-28 » |
| LPFixButtonPadding | 183 | portage 4.27 | « CX-B09 (ERR-034) » |
| LPFixDeprecatedNodes | 323 | portage 4.27 | « remédiations R-03 et R-04 » |
| LPFixEditableTextBoxFont | 264 | portage 4.27 | en-tête (broche Font) |
| LPFixFindCenter | 255 | portage 4.27 | en-tête (FindCenterOfPolygon) |
| LPFixNavRandomPoint | 303 | portage 4.27 | « lot L7b (R-04, CX-B11) » |
| LPFixOrphanBoundEvents | 200 | portage 4.27 | « remédiation R-05 » |
| LPFixParseIntoArray | 210 | portage 4.27 | « CX-B08 (ERR-027) » |
| LPFixPawnResponse | 165 | portage 4.27 | en-tête (Room::addObject) |
| LPFixSceneCapture | 159 | portage 4.27 | « lot L7j (ERR-031) » |
| LPFixSkeletalMeshGet | 253 | portage 4.27 | « lot L7a (R-03, ERR-012) » |
| LPFixStringSearch | 323 | portage 4.27 | « lot L7i (CX-B12) » |
| LPFixWhatWhere | 315 | portage 4.27 | « couche de données, étape 4b » |
| LPFixZeroScaleActors | 223 | portage 4.27 | « remédiation R-06 » |
| LPConvertAtmosphericFog | 171 | portage 4.27 | « lot L7d, AAtmosphericFog dépréciée depuis 4.26 » |
| LPTestStringCompat | 164 | portage 4.27 (test) | « lot L7i, test de ULPStringCompat » |
| LPResavePackages | 96 | portage 4.27 | « CX-B07 (ERR-022, EX-03) » |
| LPSetComponentCollision | 137 | portage / optimisation | « lot O9, défaut déjà présent en 4.27 » |
| LPCheckMeshAssignment | 155 | diagnostic ponctuel | « diagnostic du 2026-09-08 » |
| LPCheckMeshes | 84 | diagnostic ponctuel | « lot L7h (ERR-018) » |
| LPPairCollisionTest | 519 | essai isolé | « essai isolé, éditeur seulement » |
| LPCheckStreetMap | 192 | actif | « vérification du chargement des assets ville après migration » |
| LPDumpAssets | 127 | actif (outil) | « photographie de paquets pour diff avant / après » |
| LPDumpCDO | 91 | diagnostic réutilisable | « lot L7i » |
| LPDumpComponents | 155 | diagnostic réutilisable | « ERR-031 » |
| LPDumpFunction | 180 | actif (outil d'analyse) | « outil d'analyse » |
| LPDumpSave | 94 | diagnostic réutilisable | « lot L7i » |
| LPDumpWidgetTree | 124 | diagnostic réutilisable | « ERR-034, ERR-031 » |
| LPEditWidget | 240 | actif | « lot UI14 » |
| LPPatchDailies | 241 | actif | « lot AP5, chaîne d'animations » |
| LPTitleModManager | 403 | actif | « lot UI15, gestionnaire de mods » |
Décompte : 18 « portage 4.27 » (15 LPFix*, ConvertAtmosphericFog, TestStringCompat, ResavePackages) ; 1 portage / optimisation (SetComponentCollision) ; 3 diagnostics ponctuels ou essais (CheckMeshAssignment, CheckMeshes, PairCollisionTest) ; 10 outils actifs ou diagnostics réutilisables (CheckStreetMap, DumpAssets, DumpCDO, DumpComponents, DumpFunction, DumpSave, DumpWidgetTree, EditWidget, PatchDailies, TitleModManager). Total 32.
Les commandlets du portage 4.27 reposent sur les API éditeur les plus instables d'une version à l'autre (K2Node, EdGraph, SavePackage) : candidats à « retrait ou désactivation du module » pour réduire la surface de compilation en 5.8 ; décision à prendre à un niveau supérieur.
## 4. Blueprints et contenu
Commandes : `for d in */; do find "$d" -name '*.uasset' | wc -l; done` depuis `Content/` ; tailles par `find -printf '%s'`. Aucun fichier ouvert.
| Dossier racine `Content/` | .uasset | .umap | Taille (Mo) |
|---|---|---|---|
| AnimPacks | 20 | 0 | 20,9 |
| BPs | 27 | 0 | 85,7 |
| Characters | 1 | 0 | 7,9 |
| Collections, Developers, Modules, Movies, Saves | 0 | 0 | 0 |
| FreeAnimationsPack | 134 | 1 | 495,7 |
| Heavy (exclu de l'audit) | 8 270 | 0 | 6 219,3 |
| Quaternius | 137 | 0 | 64,5 |
| Render | 11 | 0 | 0,1 |
| Retarget_ue5 | 5 | 0 | 0,5 |
| Scenes | 1 | 1 | 0,5 |
| Structs | 57 | 0 | 0,4 |
| UI | 195 | 0 | 32,7 |
| __ExternalActors__ | 190 | 0 | 178,9 |
| __ExternalObjects__ | 20 | 0 | 0,0 |
Total hors `Heavy` et `Modules` : 798 `.uasset` (`find . -name '*.uasset' -not -path './Heavy/*' -not -path './Modules/*' | wc -l`) ; avec `Heavy` : 9 068. `Content/Modules` est vide dans cet arbre (il est cuit en « non UFS », §5.3).
Les 15 plus gros `.uasset` (hors Heavy / Modules), `find -printf '%s %p\n' | sort -rn | head -15` :
| # | Taille (octets) | Fichier |
|---|---|---|
| 1 | 72 640 384 | FreeAnimationsPack/Demo/Characters/Mannequins/Meshes/SKM_Manny.uasset |
| 2 | 69 080 160 | FreeAnimationsPack/…/Meshes/SKM_Quinn.uasset |
| 3 | 51 917 561 | BPs/GI.uasset |
| 4 | 37 594 042 | FreeAnimationsPack/…/Meshes/SKM_Manny_Simple.uasset |
| 5 | 35 665 481 | FreeAnimationsPack/…/Meshes/SKM_Quinn_Simple.uasset |
| 6 | 22 111 776 | __ExternalActors__/VehicleTemplate/Maps/VehicleOffroadExampleMap/9/O4/E3Z8H79ZU52XLU8ILP50RQ.uasset |
| 7 | 21 135 848 | FreeAnimationsPack/…/Textures/Manny/T_Manny_02_BN.uasset |
| 8 | 20 616 335 | BPs/Person.uasset |
| 9 | 19 703 340 | FreeAnimationsPack/…/Textures/Quinn/T_Quinn_02ID_BN.uasset |
| 10 | 19 137 278 | __ExternalActors__/VehicleTemplate/…/3/S0/RJKVJCDVTHKGGSDSDG2W9T.uasset |
| 11 | 19 116 860 | __ExternalActors__/VehicleTemplate/…/D/1P/LIVOURXQMVQB9GBPKV0RLA.uasset |
| 12 | 18 511 165 | FreeAnimationsPack/…/Textures/Manny/T_Manny_01_BN.uasset |
| 13 | 16 106 381 | FreeAnimationsPack/…/Textures/Quinn/T_Quinn_01ID_BN.uasset |
| 14 | 16 064 152 | __ExternalActors__/VehicleTemplate/…/2/5C/5G8PYJ4E4VYUH6BJJZ6714.uasset |
| 15 | 13 673 464 | FreeAnimationsPack/…/Textures/Manny/T_Manny_02_MSR_MSK.uasset |
Blueprints de jeu les plus lourds (`find Content/BPs Content/UI`) : GI 51,9 Mo, Person 20,6 Mo, Room 5,7 Mo, CharGen 4,9 Mo, StreetMap_Static 4,5 Mo, ContactMenu 3,9 Mo, TopRight 3,6 Mo, PC 3,4 Mo. `GI.uasset` est la `GameInstanceClass` (`/Game/BPs/GI.GI_C`, DefaultEngine.ini). Contenu des graphes (nœuds obsolètes, dépendances) : à approfondir (niveau supérieur), non analysé ici.
Les 4 plus gros fichiers de `FreeAnimationsPack` (mannequins) et les `__ExternalActors__/VehicleTemplate` relèvent de contenu de modèle de projet ; `FreeAnimationsPack` est en `DirectoriesToNeverCook`.
## 5. Configuration
Commandes : `cat Config/DefaultEngine.ini`, `DefaultGame.ini`, `DefaultScalability.ini`, `LifePlay.uproject` ; `grep -h -o '^r\.[A-Za-z0-9.]*' Config/DefaultScalability.ini | sort -u`.
### 5.1 Versions
| Clé | Valeur | Source |
|---|---|---|
| `EngineAssociation` | `"5.5"` | LifePlay.uproject |
| `ProjectVersion` | `2026.10.1.6` | Config/DefaultGame.ini |
| `Description` (uproject) | « LifePlay 2026.9 beta - portage UE 5.5 » | LifePlay.uproject |
| `IncludeOrderVersion` / `DefaultBuildSettings` | `Unreal5_5` / `V5` | Source/*.Target.cs |
### 5.2 Rendu (DefaultEngine.ini)
| Réglage | Valeur | Remarque |
|---|---|---|
| `r.AntiAliasingMethod` | 2 (TAA) | commentaire : TSR (défaut UE5 = 4) fait scintiller les morphs ; lot L6a |
| `r.DynamicGlobalIlluminationMethod` | 0 (pas de Lumen) | lot L7c |
| `r.ReflectionMethod` | 2 (SSR) | lot L7c |
| `r.Shadow.Virtual.Enable` | 0 (pas de VSM) | lot L7c |
| `r.DefaultFeature.AutoExposure` | False | |
| `r.TextureStreaming` | True | |
| `r.DefaultFeature.AmbientOcclusionStaticFraction` | False | |
| `r.AllowStaticLighting` | True | |
| `r.MinScreenRadiusForCSMDepth` | 0.01 | |
| `r.AllowOcclusionQueries` | True | |
| `DefaultGraphicsRHI` | `DefaultGraphicsRHI_DX12` | WindowsTargetSettings ; SM5 |
| Nanite | non réglé | aucune clé Nanite dans les .ini (`grep -c -i nanite Config/*.ini` : 0 dans chaque fichier) |
| HardwareTargeting | Desktop / Maximum | |
| RecastNavMesh | AgentRadius 13, CellSize 19, TileSizeUU 1000, RuntimeGeneration Dynamic | |
| PhysicsSettings | clés héritées 4.27 (`PhysXTreeRebuildRate`, `bEnablePCM`, `bSubstepping`…) | à confirmer par UA-T4 (clés possiblement ignorées ou renommées côté Chaos) |
`[CoreRedirects]` : 1 redirection de package, 1 de classe, 1 d'enum vers `/Script/LifePlay` (Victory Plugin → LPVictoryCompat).
### 5.3 Empaquetage (DefaultGame.ini)
| Clé | Valeur |
|---|---|
| `Build` / `BuildConfiguration` | IfProjectHasCode / PPBC_Shipping |
| `StagingDirectory` | `D:/Game/LifePlay_Build_5.5` (chemin codé en dur) |
| `UsePakFile` | True |
| `bUseIoStore` | True (Oodle Kraken, lot O2) |
| `bCompressed` | True |
| `bGenerateChunks` / `bGenerateNoChunks` | False / False |
| `DirectoriesToAlwaysCook` | `/Game` (1 entrée) |
| `DirectoriesToNeverCook` | 20 entrées (`grep -c`) : `/Game/Heavy/New/fBlah`, 4 dossiers de la chaîne d'animation (`/Game/Quaternius`, `/Game/FreeAnimationsPack`, `/Game/AnimPacks`, `/Game/Retarget_ue5`), 15 plugins éditeur (`/Interchange`, `/InterchangeAssets`, `/NNEDenoiser`, `/NNERuntimeORT`, `/SpeedTreeImporter`, `/Paper2D`, `/MovieRenderPipeline`, `/USDCore`, `/Bridge`, `/Fab`, `/LiveLink`, `/MetaHumanSDK`, `/Takes`, `/PythonScriptPlugin`, `/ChaosVD`) |
| `DirectoriesToAlwaysStageAsNonUFS` | `Modules` |
| `IncludePrerequisites` | True |
| McpAutomationBridge | `bEnableNativeMCP=True`, port 3000 |
### 5.4 Scalabilité (DefaultScalability.ini, 127 lignes)
Groupes couverts : ShadowQuality @0-3, TextureQuality @0-3, EffectsQuality @0-3, AntiAliasingQuality @0-3. 17 variables distinctes : `r.DetailMode`, `r.MaxAnisotropy`, `r.PostProcessAAQuality`, `r.RefractionQuality`, `r.SSS.SampleSet`, `r.SSS.Scale`, `r.Shadow.CSM.MaxCascades`, `r.Shadow.CSM.TransitionScale`, `r.Shadow.DistanceScale`, `r.Shadow.MaxCSMResolution`, `r.Shadow.MaxResolution`, `r.Shadow.PreShadowResolutionFactor`, `r.Shadow.RadiusThreshold`, `r.Streaming.MaxEffectiveScreenSize`, `r.Streaming.MipBias`, `r.Streaming.PoolSize`, `r.TranslucencyLightingVolumeDim`. Les autres groupes et le niveau Cinematic sont laissés aux valeurs de `Engine/Config/BaseScalability.ini` (spécification VQ1, en-tête du fichier) : tout changement de valeurs par défaut du moteur 5.8 s'y applique sans décision.
Autres fichiers : `DefaultInput.ini` (1 section `InputSettings`), `DefaultEditor.ini` (1 section, profils de scène de prévisualisation), `DefaultEditorSettings.ini`.
### 5.5 Plugins moteur (LifePlay.uproject, 27 entrées)
- Plugins du projet (5) : LPAnimCore (Win64), LPSandbox (`Optional`, Win64), ModdingExtra, StreetMap, McpAutomationBridge (`Optional`, Editor).
- Moteur, jeu et éditeur : EnhancedInput (1).
- Moteur, désactivé : AndroidFileServer (1).
- Moteur, éditeur seulement (`TargetAllowList: Editor`, 20) : NNEDenoiser, NNERuntimeORT, Interchange, InterchangeAssets, InterchangeTests, Fab, Bridge, MetaHumanSDK, SpeedTreeImporter, HairStrands, MovieRenderPipeline, Paper2D, USDCore, ChaosVD, LiveLink, ConcertMain, ConcertSyncClient, ConcertSyncCore, Takes, PythonScriptPlugin.
- `AdditionalPluginDirectories` : `../LifePlay-Sandbox/Plugins` (chemin relatif hors dépôt).
- Plugins susceptibles d'être renommés, déplacés ou passés en expérimental en 5.8 : à vérifier par UA-T4 (notamment HairStrands, NNEDenoiser / NNERuntimeORT, Bridge, MetaHumanSDK, Paper2D, ChaosVD, Concert*).
### 5.6 Plugins du projet (code)
Commande : `find Plugins/<p>/Source \( -name '*.cpp' -o -name '*.h' \) | wc -l` ; `... -exec cat {} + | wc -l`.
| Plugin | Type | Fichiers | Lignes | Version |
|---|---|---|---|---|
| LPAnimCore | Runtime | 5 | 783 | 1.0.0 |
| ModdingExtra | Runtime (contenu : oui) | 6 | 710 | 1.0 |
| StreetMap | Runtime + Editor (contenu : oui) | 28 | 4 853 | 1.0 |
| McpAutomationBridge | Editor, 2 modules (McpAutomationBridge, McpAutomationBridgeFab) | 1 624 | 237 902 | 0.6.0-beta-b |
Aucun `.uplugin` du projet ne porte de champ `EngineVersion` (grep sur les 4 fichiers). Dépendances de modules : StreetMap utilise UnrealEd, AssetTools, EditorStyle, PropertyEditor, XmlParser, Projects, Slate (API éditeur) ; ModdingExtra : AssetRegistry, Json, Engine, Slate, SlateCore ; LPAnimCore : Core, CoreUObject, Engine. McpAutomationBridge est de loin le plus gros volume de code éditeur à recompiler en 5.8 (code tiers en bêta) : décision garder / désactiver à un niveau supérieur. Le mécanisme de montage des mods (ModdingExtra) n'est pas analysé ici : à approfondir (niveau supérieur).
## 6. Chemins moteur codés en dur
Commande : `grep -rIn -E "UE_5\.[0-9]|UE_4\.[0-9]+|UE4\.27|4\.27|Launcher|UnrealEditor|RunUAT" Tools Config Source Plugins/*/Source Build *.bat` ; `find . -maxdepth 2 \( -name '*.bat' -o -name '*.cmd' \)` : aucun lanceur `.bat`/`.cmd` trouvé hors `Releases` et `Intermediate`.
| Fichier:ligne | Contenu | Action en 5.8 |
|---|---|---|
| Tools/BuildDebug.ps1:19 | `$UE = 'D:\Game\Launcher\Engine\UE_5.5\Engine'` ; l.29 `RunUAT.bat` | changer le chemin par défaut |
| Tools/RunCommandlet.ps1:20 | `$Engine = 'D:\Game\Launcher\Engine\UE_5.5\Engine'` ; l.23 `UnrealEditor-Cmd.exe` | changer le chemin par défaut |
| Config/DefaultGame.ini:16 | `StagingDirectory=(Path="D:/Game/LifePlay_Build_5.5")` | dossier de sortie, pas un chemin moteur |
| Tools/CheckIntegrity.ps1:21 | `$Root427 = 'D:\Game\LifePlay-master 4.27'` | référence 4.27, indépendante de 5.8 |
| Tools/AuditAssets.py, AuditScriptDeps.py, BuildCollections.py, FixTextureMips.py | en-têtes : `UnrealEditor-Cmd.exe <projet> -run=pythonscript …` | aucun chemin moteur ; scripts Python éditeur (API `unreal` à confirmer en 5.8) |
| Config/*.ini | aucun chemin `UE_5.5` / `UE_4.27` ; seulement des commentaires (« 4.27 », « 5.5 ») | aucun |
| Source/**, Plugins/*/Source | aucun `UE_5.5` / `UE_4.27` | aucun |
| Docs : 02, 03, 08, 09, 13, 18, 24, 25, 27, Journal_Modifications | mentions d'éditeur / moteur (`grep -rIl`) | à mettre à jour après migration |
La version du moteur est aussi fixée par `EngineAssociation` (« 5.5 ») ; `Misc/EngineVersion.h` est inclus 1 fois dans LifePlay (consultation de version, rôle exact à approfondir au niveau supérieur).
## 7. Surface exposée : les 20 points les plus susceptibles de casser en 5.8
Classement par probabilité et coût estimés par le rédacteur (aucune compilation faite). Chaque point est **à confirmer par UA-T4** (notes de version / en-têtes 5.8). Les mentions « à approfondir (niveau supérieur) » signalent un mécanisme qu'il faudrait suivre, non analysé ici.
| # | Point | Où | Motif de risque |
|---|---|---|---|
| 1 | `Chaos::FTriangleMeshImplicitObjectPtr` / `Body->TriMeshGeometries` | LPDebugSubsystem.cpp:9,136,215,227 | API interne Chaos, non stable ; type du pointeur de géométrie sujet à refonte |
| 2 | `RHIGetTextureMemoryStats`, `GDynamicRHI`, `FTextureMemoryStats` | LPVideoQualitySubsystem.cpp:22-24,38,43 | API RHI privée, refontes récurrentes |
| 3 | Plugin McpAutomationBridge (1 624 fichiers, 237 902 lignes) | Plugins/McpAutomationBridge | gros volume de code éditeur tiers en bêta, compilé avec l'éditeur. À approfondir (niveau supérieur) |
| 4 | Commandlets du portage 4.27 : K2Node / EdGraph / `ReconstructNode` | LifePlayEditorTools (117 inclusions éditeur, 11 `ReconstructNode`) | API Blueprint éditeur régulièrement modifiée ; 18 commandlets à usage unique : candidats au retrait |
| 5 | `FSavePackageArgs` / `UPackage::SavePackage` | 21 commandlets (`UObject/SavePackage.h` x21) ; LPConvertAtmosphericFogCommandlet.cpp:149-152 | signature et options de sauvegarde déjà modifiées entre 5.0 et 5.5 |
| 6 | `UEdGraphSchema_K2`, `K2Node_*` (≈20 types) | LifePlayEditorTools | noms de pins et de fonctions de bibliothèques susceptibles de bouger |
| 7 | `FTSTicker` (14 sous-systèmes, 40 lignes) | LPColorGradeSubsystem.cpp:76 … LPVideoQualitySubsystem.cpp:159 | usage massif ; vérifier toute dépréciation de `FTickerDelegate` / `FDelegateHandle` en 5.8 |
| 8 | `IPluginManager::GetEnabledPluginsWithContent` | LPModDailies.cpp:50 | dépend du comportement de montage des plugins de contenu de mod |
| 9 | Montage des mods et conteneurs (ModdingExtra, `DirectoriesToAlwaysStageAsNonUFS=Modules`, IoStore) | Plugins/ModdingExtra ; DefaultGame.ini | mécanisme non analysé. À approfondir (niveau supérieur) |
| 10 | `Scalability::FQualityLevels` / `GetQualityLevels` | LPVideoQualitySubsystem.cpp:184 (+16 lignes) | structure des niveaux de scalabilité (groupes ajoutés ou renommés) ; lien avec DefaultScalability.ini |
| 11 | `FSlateApplication`, `SNew`, widgets Slate (44 + 28 lignes) | LPKeyboardSubsystem.cpp, LPModInfoSubsystem.cpp, LPSettingsSubsystem.cpp, LPDirectControlSubsystem.cpp | API Slate (styles `FCoreStyle`, `FSlateTypes`) : dépréciations probables |
| 12 | `FCoreDelegates::OnEndFrame` | LPDebugSubsystem.cpp:371,387 | signature d'événement de fin de frame |
| 13 | `GetSkinnedAsset` / `USkeletalMesh` | LPMeshCompat.cpp:18 ; LPSecondScreenSubsystem.cpp:31 | transition `USkinnedAsset` / `USkeletalMesh` ; 27 usages de `USkeletalMesh` à vérifier |
| 14 | `FSoftObjectPath`, `GetAssetByObjectPath`, `AssetClassPath`, `ScanPathsSynchronous` | LPAssetRegistryHelpers.cpp:10-75 ; LPHairstyleSubsystem.cpp:499,595 ; LPModDailies.cpp:60-73 | API AssetRegistry déjà migrée une fois (5.1) ; 21 commandlets appellent `SearchAllAssets` |
| 15 | `ParseIntoArray` (44 lignes), `FString::Find` | LPStringCompat.*, LPDataCompat.cpp, LPSessionLogSubsystem.cpp (6) … | le correctif CX-B12 suppose le comportement 5.5 ; tout changement en 5.8 touche les données du jeu. À approfondir (niveau supérieur) |
| 16 | `GLog->AddOutputDevice` + `FOutputDevice` | LPSessionLogSubsystem.cpp:71,122,170 | signature de `Serialize` (verbosité, catégorie) et thread-safety |
| 17 | `UGameplayStatics` SaveGame (Load / SaveGameToSlot) | LPModSettingsLibrary.cpp:18,23,32 ; LPDumpSaveCommandlet.cpp:42 | format et compatibilité des sauvegardes existantes. À approfondir (niveau supérieur) |
| 18 | `NavigationSystem` / `K2_GetRandomLocationInNavigableRadius` | LPNavigationHelpers.h / .cpp ; LPFixNavRandomPointCommandlet | surface déjà modifiée en 5.5 (R-04) ; `RecastNavMesh` en config |
| 19 | Réglages de rendu hérités : TAA, SSR, pas de VSM / Lumen, DX12 ; `BaseScalability.ini` du moteur | DefaultEngine.ini ; DefaultScalability.ini | valeurs par défaut du moteur 5.8 ; verrouillage actuel en config, mais les groupes non couverts suivent le défaut moteur |
| 20 | Plugins moteur éditeur (20) et `PhysicsSettings` hérités 4.27 | LifePlay.uproject ; DefaultEngine.ini | plugins renommés / dépréciés / expérimentaux ; clés `PhysXTreeRebuildRate` etc. possiblement ignorées |
Points secondaires non classés : chemins de `Tools/*.ps1` (§6, changement trivial) ; `TObjectPtr` (6 usages, API stable) ; `UE_DEPRECATED` (0 dans nos sources).
## 8. Commandes utilisées (récapitulatif)
```
# depuis D:\Game\LifePlay-master 5.5
ls Source Source/*; cat Source/*/*.Build.cs Source/*.Target.cs; cat LifePlay.uproject
cat Source/<m>/*.cpp Source/<m>/*.h | wc -l ; grep -h "UCLASS" Source/<m>/* | wc -l
grep -ho '#include *[<"][^>"]*[>"]' Source/<m>/* | sort | uniq -c | sort -rn
grep -c -E "<motif>" Source/<m>/* # §2 ; grep -n pour fichier:ligne
grep -h -E "UFUNCTION\(.*Blueprint(Callable|Pure)" Source/LifePlay/*.h
find Content/<dossier> -name '*.uasset' | wc -l ; find ... -printf '%s %p\n' | sort -rn | head -15
cat Config/DefaultEngine.ini Config/DefaultGame.ini Config/DefaultScalability.ini
grep -rIn -E "UE_5\.[0-9]|UE_4\.[0-9]+|Launcher|UnrealEditor|RunUAT" Tools Config Source Plugins/*/Source
find Plugins/<p>/Source \( -name '*.cpp' -o -name '*.h' \) | wc -l
```
Limites : regroupement des en-têtes par module UE déduit du chemin ; `grep -c` compte des lignes ; classement des commandlets d'après leurs commentaires d'en-tête ; aucune mesure de dépréciation par le compilateur (aucun build, conformément à la fiche).