34 KiB
Fiche OBA-T23-CODE — Niveau N3 — Modèle prévu modèle de l'agent lp-cart (non précisé par la fiche) | utilisé Opus 5.5 (claude-opus-5-5) — Agent lp-cart — Skills sk-protocol, lp-ue-compat (préchargés aussi : ue-cpp-build, lp-commandlets, lp-paths)
OBA-T23-CODE-CART : dépendances Build.cs, API dépréciées 5.8 et correctifs UE4 des modules C++ du jeu (2026-10-09)
1. Objet et périmètre
- Domaine : le code C++ des deux modules du jeu,
LifePlay(Runtime) etLifePlayEditorTools(Editor), dans la copieD:\Game\LifePlay-master 5.8(brancheue5.8, HEAD657ce7f,git status --porcelain: 0 ligne, en lecture seule). Moteur :D:\Game\Launcher\Engine\UE_5.8\Engine(sources présentes : en-têtes etPrograms/UnrealBuildToollus). Plugins présents :Plugins/LPAnimCore,Plugins/StreetMap(Glob) ; addonD:\Game\LifePlay-Sandbox-5.8\Plugins\LPSandbox(Glob). - Trois questions : (a) les 30 dépendances
Build.csdeOBA-T1-modules.csv, utilisée ou non, avec preuve ; (b) les API dépréciées en 5.8 que touche ce code ; (c) les correctifs UE4LPStringCompat,LPMeshCompatetLPNavigationHelpers: leur rôle, leurs appelants, l'équivalent natif en 5.8, l'effort (lien U9). - Hors périmètre : les plugins
LPAnimCore,ModdingExtra,StreetMap(seulement cités comme dépendances), les voisinsLPDataCompatetLPVictoryCompat, les Blueprints (pas d'éditeur ni de commandlet : interdit, fiche § 6). Aucun build, aucun UE lancé, aucun fichier modifié hors de ce livrable.
2. Commandes et lectures (exactes) avec compte brut
| # | Commande ou lecture | Compte brut |
|---|---|---|
| C1 | Read Source/LifePlay/LifePlay.Build.cs, Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs, OBA-T1-modules.csv, OBA-T1-INV.md |
16 + 14 = 30 dépendances (CSV : 30 lignes de données) |
| C2 | Grep ^\s*#include (content) sur Source\LifePlay, puis sur Source\LifePlayEditorTools ; Grep count sur Source |
429 lignes + 211 lignes ; count : 640 occurrences dans 88 fichiers |
| C3 | Glob sur UE_5.8\Engine\Source\Runtime : 25 en-têtes inclus par le jeu (InputCoreTypes.h, IAssetRegistry.h, GeneralProjectSettings.h, …) |
25 trouvés sur 25 cherchés |
| C4 | Glob sur UE_5.8\Engine\Source : 29 en-têtes éditeur (EdGraphSchema_K2.h, K2Node_*.h, KismetEditorUtilities.h, WidgetBlueprint.h, Commandlet.h, MeshDescription.h, Json…, KismetCompiler.h, KismetCompilerModule.h) |
29 trouvés |
| C5 | Glob Plugins/{LPAnimCore/…/LPAnimRedirect.h, LPCoupleSim.h, StreetMapRuntime/…/StreetMap.h} (copie 5.8) |
3 trouvés + LPAnimCore.Build.cs |
| C6 | Grep KismetCompiler|FKismetCompilerContext|IKismetCompilerInterface|FKismetCompilerOptions|FCompilerResultsLog|KismetCompilerModule sur Source |
1 (LifePlayEditorTools.Build.cs:29) |
| C7 | Grep public UK2Node|FKismetCompilerContext|FNodeHandlingFunctor|FBPTerminal|FKismetCompilerUtilities sur Source (count) |
0 |
| C8 | Grep "KismetCompiler" dans {BlueprintGraph,UMGEditor,UnrealEd,Kismet}/*.Build.cs du moteur ; Grep ModuleNames|KismetCompiler dans UnrealEd.Build.cs ; Read BlueprintGraph.Build.cs |
7 lignes ; UnrealEd : PublicIncludePathModuleNames à la l. 323, "KismetCompiler" à la l. 330 |
| C9 | Grep #include .*(Kismet|Compiler) sur les en-têtes BlueprintGraph / UMGEditor / UnrealEd inclus par le jeu ; Glob **/KismetCompilerMisc.h |
38 lignes ; 1 fichier (Editor/KismetCompiler/Public/KismetCompilerMisc.h) |
| C10 | Read Programs/UnrealBuildTool/Configuration/UEBuildModule.cs:592-669 |
propagation des PublicIncludePathModules |
| C11 | Grep combiné de symboles (IPluginManager::Get, RHIGetTextureMemoryStats, GetDefault<UGeneralProjectSettings>, FKey, …) -o sur Source\LifePlay\*.cpp ; Grep idem éditeur (FMeshDescription, FJsonObject, UStreetMap, FWidgetBlueprintEditorUtils::, FKismetEditorUtilities::, …) |
99 lignes (LifePlay) ; 33 lignes (éditeur) |
| C12 | Grep LoadModule\w*(<\w+>)?\( sur Source |
13 lignes |
| C13 | Grep UE_VERSION_OLDER_THAN|UE_VERSION_NEWER_THAN|ENGINE_MINOR_VERSION|ENGINE_MAJOR_VERSION|ENGINE_PATCH_VERSION|PRAGMA_DISABLE_DEPRECATION|UE_DEPRECATED sur Source |
2 occurrences, 2 fichiers |
| C14 | Grep count warning C4996 sur Saved\Logs\portage (copie 5.8) |
5, toutes dans STM_Build_20261009-144519.log |
| C15 | Read etat\ST\STM\STM_Build_20261009-144519.txt, etat\U58\U8\U8_Build_20261009-175553.txt, …-181732.txt, etat\U58\U4\U4_Build_20261008-181959.txt ; Grep C4996|LPDumpAssetsCommandlet|Unites compilees|code de sortie sur etat\*_Build_*.txt ; Glob *Build*.log sur Saved\Logs\portage |
22 journaux de build 5.8 ; C4996 du code du jeu : 0 |
| C16 | Glob U58/U3/*Build* sur D:\Game\LifePlay-master 5.5\Docs\Migration\etat ; Read U3-T2_Build_20261008-165632.txt (journal UBT complet, 109 lignes) |
1 fichier ; 1 C4996 dans le code du jeu |
| C17 | Grep Compile \[x64\] (LP\w+Commandlet|LPAssetListUtils|LifePlayEditorTools)\.cpp sur Saved\Logs\portage |
10 lignes |
| C18 | Read LPStringCompat.h/.cpp, LPMeshCompat.h/.cpp, LPNavigationHelpers.h/.cpp, LifePlayEditorTools.cpp, LPDumpAssetsCommandlet.cpp:106-119 |
— |
| C19 | Grep ULPStringCompat::|ULPMeshCompat::|ULPNavigationHelpers::|LPStringCompat\.h|LPMeshCompat\.h|LPNavigationHelpers\.h sur {Source,Plugins}/**/*.{h,cpp} (copie 5.8) ; même famille de motifs sur D:\Game\LifePlay-Sandbox-5.8\Plugins |
28 lignes (appels C++ : 8) ; addon : 0 |
| C20 | Grep moteur 5.8 : K2_GetRandom… dans NavigationSystem.h ; GetSkinnedAsset()|GetSkeletalMesh_DEPRECATED|GetSkeletalMeshAsset() dans SkinnedMeshComponent.h / SkeletalMeshComponent.h ; ::ParseIntoArray(…) dans Core/Private/Containers ; Read UObjectHash.h:186-199 ; Grep DEPRECATED|GetAssetsByClass\( dans IAssetRegistry.h |
3 ; 12 ; 1 (String.cpp.inl:1356) ; — ; 4 |
| C21 | Grep 3120 sur le skill lp-validate ; Read etat\OUT1\OUT1_LPTestStringCompat_20261009-161745.txt |
3 lignes ; 95 lignes |
| C22 | Grep des noms des correctifs sur Docs (count) ; Grep sur etat\U58\UA\UA-JEU.md et 05_Correctifs_Isoles.md ; Read 05_Correctifs_Isoles.md:50-53, 27_Plan_Migration_UE58.md:368-377 ; Grep O3|O5|U9 sur 30_Projet_Audit_Obsolescence.md |
430 occurrences, 41 fichiers ; lignes citées en § 3 |
| C23 | WebSearch (3 requêtes, standard) : nœud de navigation pur ou impur, ParseIntoArray et ParseTokens, GetSkinnedAsset et GetSkeletalMesh |
sources en fin de § 3.4 |
| C24 | git log --oneline -1 ; git status --porcelain | wc -l (copie 5.8) |
657ce7f ; 0 |
3. Constats fichier:ligne
3.1 Les 30 dépendances Build.cs
Abréviations : LP.B = Source/LifePlay/LifePlay.Build.cs ; ET.B = Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs ;
R/ = UE_5.8/Engine/Source/Runtime/, E/ = UE_5.8/Engine/Source/Editor/. Les chemins d'en-têtes moteur viennent de C3, C4 et C5.
| # | Module | Dépendance (ligne) | Type | Verdict | Preuve par inclusion (jeu → en-tête 5.8) | Preuve par symbole |
|---|---|---|---|---|---|---|
| 1 | LifePlay | Core (LP.B:17) |
Public | utilisé | LifePlay.h:5 CoreMinimal.h → R/Core/Public/CoreMinimal.h ; LPHairstyleSubsystem.h:40 → R/Core/Public/Containers/Ticker.h |
LPStringCompat.cpp:13 FCString::Strstr |
| 2 | LifePlay | CoreUObject (LP.B:17) |
Public | utilisé | LPDataCompat.cpp:10 → R/CoreUObject/Public/UObject/UnrealType.h ; LPAssetRegistryHelpers.h:15 → R/CoreUObject/Public/AssetRegistry/AssetData.h |
UCLASS et UHT de tous les .h |
| 3 | LifePlay | Engine (LP.B:17) |
Public | utilisé | LPStringCompat.h:29 → R/Engine/Classes/Kismet/BlueprintFunctionLibrary.h |
LPStringCompat.h:33 : public UBlueprintFunctionLibrary |
| 4 | LifePlay | InputCore (LP.B:17) |
Public | utilisé | LPKeyboardSubsystem.h:14 → R/InputCore/Classes/InputCoreTypes.h |
LPKeyboardSubsystem.cpp:60, 75, 200 FKey |
| 5 | LifePlay | AssetRegistry (LP.B:17) |
Public | utilisé | LPHairstyleSubsystem.cpp:5, LPModGuard.cpp:11, LPAssetRegistryHelpers.cpp:7 → R/AssetRegistry/Public/AssetRegistry/IAssetRegistry.h ; LPModDailies.cpp:6, LPAssetRegistryHelpers.cpp:6 → …/AssetRegistryModule.h |
LPModGuard.cpp:194, 452 IAssetRegistry::Get ; LPHairstyleSubsystem.cpp:533, 617 ; LPModDailies.cpp:50 ; LPAssetRegistryHelpers.cpp:13, 63 |
| 6 | LifePlay | NavigationSystem (LP.B:28) |
Public | utilisé (et requis par UHT) | LPNavigationHelpers.cpp:5 → R/NavigationSystem/Public/NavigationSystem.h |
LPNavigationHelpers.cpp:16 UNavigationSystemV1::K2_GetRandomLocationInNavigableRadius ; types ANavigationData, UNavigationQueryFilter dans la signature UFUNCTION (LPNavigationHelpers.h:46-47) |
| 7 | LifePlay | LPAnimCore (LP.B:45) |
Public | utilisé | LPShowCoupleSubsystem.h:10 → Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSim.h ; LPDirectControlSubsystem.cpp:10 → …/LPAnimRedirect.h |
LPDirectControlSubsystem.cpp:880 LPAnimRedirect::IsGameTarget, :960 LPAnimRedirect::ClipPath ; LPShowCoupleSubsystem.h:53-54 |
| 8 | LifePlay | ImageWrapper (LP.B:20) |
Private | utilisé | LPVictoryCompat.cpp:7-8 → R/ImageWrapper/Public/IImageWrapper.h, IImageWrapperModule.h |
LPVictoryCompat.cpp:34 LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper")) |
| 9 | LifePlay | ApplicationCore (LP.B:20) |
Private | utilisé | LPVictoryCompat.cpp:6 → R/ApplicationCore/Public/HAL/PlatformApplicationMisc.h |
LPVictoryCompat.cpp:79 FPlatformApplicationMisc::ClipboardCopy |
| 10 | LifePlay | RHI (LP.B:23) |
Private | utilisé | LPVideoQualitySubsystem.cpp:22-24 → R/RHI/Public/DynamicRHI.h, RHI.h, RHIStats.h |
LPVideoQualitySubsystem.cpp:43 RHIGetTextureMemoryStats |
| 11 | LifePlay | EngineSettings (LP.B:31) |
Private | utilisé | LPModInfoSubsystem.cpp:15, LPSessionLogSubsystem.cpp:6, LPVersionSubsystem.cpp:6 → R/EngineSettings/Classes/GeneralProjectSettings.h |
LPSessionLogSubsystem.cpp:492, LPModInfoSubsystem.cpp:124, LPVersionSubsystem.cpp:15 GetDefault<UGeneralProjectSettings> |
| 12 | LifePlay | Projects (LP.B:34) |
Private | utilisé | LPModDailies.cpp:9, LPModGuard.cpp:17 → R/Projects/Public/Interfaces/IPluginManager.h |
LPModDailies.cpp:51, LPModGuard.cpp:247 IPluginManager::Get |
| 13 | LifePlay | Slate (LP.B:38) |
Private | utilisé | LPKeyboardSubsystem.cpp:12-13, 23-26 → R/Slate/Public/Framework/Application/…, Widgets/Input/SButton.h, Widgets/Layout/… |
LPKeyboardSubsystem.cpp:618, 637, 649 FSlateApplication::Get ; :284 SNew(SButton) |
| 14 | LifePlay | SlateCore (LP.B:38) |
Private | utilisé | LPColorGradeSubsystem.h:13 → R/SlateCore/Public/Styling/SlateTypes.h ; LPKeyboardSubsystem.h:16 → …/Widgets/SWidget.h |
LPSettingsSubsystem.cpp:294, 311 FCoreStyle::Get |
| 15 | LifePlay | UMG (LP.B:38) |
Private | utilisé | LPDirectControlSubsystem.cpp:14 → R/UMG/Public/Blueprint/UserWidget.h ; LPMapMarkersGuardSubsystem.cpp:5 → …/Components/WidgetComponent.h ; LPSettingsSubsystem.cpp:6 → …/Components/Button.h |
LPSettingsSubsystem.cpp:81 UUserWidget ; LPMapMarkersGuardSubsystem.cpp:106 UWidgetComponent |
| 16 | LifePlay | Chaos (LP.B:41) |
Private | utilisé | LPDebugSubsystem.cpp:9 → R/Experimental/Chaos/Public/Chaos/TriangleMeshImplicitObject.h |
LPDebugSubsystem.cpp:136 FTriangleMeshImplicitObject |
| 17 | LifePlayEditorTools | Core (ET.B:17) |
Public | utilisé | LifePlayEditorTools.h:5-6 → CoreMinimal.h, Modules/ModuleManager.h |
LifePlayEditorTools.cpp:6 IMPLEMENT_MODULE |
| 18 | LifePlayEditorTools | CoreUObject (ET.B:18) |
Public | utilisé | LPEditWidgetCommandlet.cpp:17-18 → R/CoreUObject/Public/UObject/Package.h, SavePackage.h |
LPDumpAssetsCommandlet.cpp:115 GetObjectsWithPackage (déclaré UObjectHash.h:193) |
| 19 | LifePlayEditorTools | Engine (ET.B:19) |
Public | utilisé | 16 en-têtes de commandlet incluent Commandlets/Commandlet.h (ex. LPDumpAssetsCommandlet.h:14) → R/Engine/Classes/Commandlets/Commandlet.h |
16 classes dérivées de UCommandlet (UHT) |
| 20 | LifePlayEditorTools | LifePlay (ET.B:20) |
Public | utilisé | LPPatchDailiesCommandlet.cpp:16 LPModDailies.h ; LPTestStringCompatCommandlet.cpp:6 LPStringCompat.h ; LPTitleModManagerCommandlet.cpp:21 LPModSettingsLibrary.h |
LPPatchDailiesCommandlet.cpp:89, 93 ULPModDailiesLibrary ; LPTestStringCompatCommandlet.cpp:115, 135, 136, 142 ; LPTitleModManagerCommandlet.cpp:356 |
| 21 | LifePlayEditorTools | UnrealEd (ET.B:27) |
Private | utilisé | LPEditWidgetCommandlet.cpp:12, LPPatchDailiesCommandlet.cpp:14-15, LPSetComponentCollisionCommandlet.cpp:9, LPTitleModManagerCommandlet.cpp:24-25 → E/UnrealEd/Public/Kismet2/KismetEditorUtilities.h, BlueprintEditorUtils.h |
FKismetEditorUtilities::CompileBlueprint : LPSetComponentCollisionCommandlet.cpp:98, LPEditWidgetCommandlet.cpp:221, LPPatchDailiesCommandlet.cpp:214, LPTitleModManagerCommandlet.cpp:193, 275, 380, 381 |
| 22 | LifePlayEditorTools | BlueprintGraph (ET.B:28) |
Private | utilisé | LPCheckMeshAssignmentCommandlet.cpp:8, 10, LPDumpFunctionCommandlet.cpp:8, 10-11, LPPatchDailiesCommandlet.cpp:7, 9-13, LPEditWidgetCommandlet.cpp:10-11, LPTitleModManagerCommandlet.cpp:14-20 → E/BlueprintGraph/Classes/EdGraphSchema_K2.h, K2Node*.h |
par inclusion (classes UK2Node_* des en-têtes cités) |
| 23 | LifePlayEditorTools | KismetCompiler (ET.B:29) |
Private | non trouvé en direct (besoin indirect couvert par UnrealEd ; candidat au retrait, à confirmer par build) | aucune inclusion d'un en-tête E/KismetCompiler/Public dans les 211 lignes #include lues (C2) ; mais les en-têtes inclus K2Node_CallFunction.h:15, K2Node_IfThenElse.h:10, K2Node_Self.h:10, K2Node_VariableGet.h:13, K2Node_VariableSet.h:13 incluent KismetCompilerMisc.h (E/KismetCompiler/Public/, C9) |
aucun : C6 = 1 (le Build.cs seul), C7 = 0 |
| 24 | LifePlayEditorTools | AssetRegistry (ET.B:30) |
Private | utilisé | LPAssetListUtils.cpp:5 (et 7 autres .cpp) → R/AssetRegistry/Public/AssetRegistry/AssetRegistryModule.h |
LPAssetListUtils.cpp:43 LoadModuleChecked<FAssetRegistryModule> (et 8 autres sites, C12) |
| 25 | LifePlayEditorTools | StreetMapRuntime (ET.B:32) |
Private | utilisé | LPCheckStreetMapCommandlet.cpp:9 → Plugins/StreetMap/Source/StreetMapRuntime/Public/StreetMap.h |
LPCheckStreetMapCommandlet.cpp:53, 60, 72, 85 UStreetMap |
| 26 | LifePlayEditorTools | UMG (ET.B:35) |
Private | utilisé | LPDumpWidgetTreeCommandlet.cpp:6-10, LPEditWidgetCommandlet.cpp:5-7, LPTitleModManagerCommandlet.cpp:5-11 → R/UMG/Public/Blueprint/WidgetTree.h, WidgetBlueprintLibrary.h, Components/… |
par inclusion |
| 27 | LifePlayEditorTools | UMGEditor (ET.B:36) |
Private | utilisé | LPDumpWidgetTreeCommandlet.cpp:11, LPEditWidgetCommandlet.cpp:19, LPTitleModManagerCommandlet.cpp:29-30 → E/UMGEditor/Public/WidgetBlueprint.h, WidgetBlueprintEditorUtils.h |
LPTitleModManagerCommandlet.cpp:218, 221, 243, 244 FWidgetBlueprintEditorUtils::* |
| 28 | LifePlayEditorTools | MeshDescription (ET.B:38) |
Private | utilisé | LPCheckMeshesCommandlet.cpp:8 → R/MeshDescription/Public/MeshDescription.h |
LPCheckMeshesCommandlet.cpp:60 FMeshDescription / GetMeshDescription |
| 29 | LifePlayEditorTools | Json (ET.B:40) |
Private | utilisé | LPEditWidgetCommandlet.cpp:8, 15, 16 → R/Json/Public/Dom/JsonObject.h, Serialization/JsonReader.h, JsonSerializer.h |
LPEditWidgetCommandlet.cpp:79, 101, 152 FJsonObject |
| 30 | LifePlayEditorTools | Projects (ET.B:42, CHG-260 / STM) |
Private | utilisé | LifePlayEditorTools.cpp:4 → R/Projects/Public/Interfaces/IPluginManager.h |
LifePlayEditorTools.cpp:13 IPluginManager::Get().FindPlugin(TEXT("HyperAIStudio")) |
Bilan : 30 lignes tranchées ; 29 utilisées (LifePlay 16 sur 16, LifePlayEditorTools 13 sur 14) ; 1 non trouvée en direct : KismetCompiler.
Détail de KismetCompiler (ligne 23), au sens du piège de la fiche § 5 (module requis par un autre en-tête, sans inclusion directe) :
BlueprintGraphgardeKismetCompileren dépendance privée et circulaire (BlueprintGraph.Build.cs:24-27, 42-44) : il ne transmet pas ce chemin d'inclusion. OrK2Node_CallFunction.h:15(inclus parLPCheckMeshAssignmentCommandlet.cpp:10,LPDumpFunctionCommandlet.cpp:10,LPPatchDailiesCommandlet.cpp:9,LPTitleModManagerCommandlet.cpp:15) inclutKismetCompilerMisc.h. Le cheminE/KismetCompiler/Publicest donc nécessaire à la compilation.UnrealEdle fournit déjà :PublicIncludePathModuleNames(UnrealEd.Build.cs:323) contient"KismetCompiler"(:330). UBT ajoute lesPublicIncludePathModulesde chaque dépendance privée (UEBuildModule.cs:610-612→FindModulesInPublicCompileEnvironment,:644-647, récursion:654-664).- Édition de liens : aucun symbole de KismetCompiler n'est référencé dans
Source(C6, C7 : pas de sous-classe deUK2Node, pas deFKismetCompilerContext). Conclusion estimée : la ligneET.B:29est redondante. Seul un buildLifePlayEditorsans cette ligne (compilation et édition de liens) peut le confirmer (non fait ici, fiche § 6).
Autres constats sur les types de dépendance (rien n'est décidé ici) :
AssetRegistryest déclaré Public (LP.B:17), mais aucun en-tête deLifePlayn'inclut d'en-tête de ce module. Le seul en-tête exposé estAssetRegistry/AssetData.h(LPAssetRegistryHelpers.h:15), qui appartient à CoreUObject (R/CoreUObject/Public/AssetRegistry/AssetData.h). LifePlayEditorTools déclare déjàAssetRegistrylui-même (ET.B:30). Passage en Private possible : estimé.NavigationSystemest déclaré Public (LP.B:28, le commentaire:25-27invoque la signature du.h). MaisLPNavigationHelpers.h:21-22ne fait que des déclarations anticipées, et aucun autre module n'inclutLPNavigationHelpers.h(C19 : inclus seulement parLPNavigationHelpers.cpp:3). Le besoin UHT (le.gen.cppréférence lesUClassdu moteur) reste interne à LifePlay. Passage en Private possible : estimé.SlateCoreest déclaré Private (LP.B:38), alors que des en-têtes de LifePlay en incluent des en-têtes (LPColorGradeSubsystem.h:13,LPVideoQualitySubsystem.h:14,LPKeyboardSubsystem.h:16). Sans effet aujourd'hui : LifePlayEditorTools n'inclut queLPModDailies.h,LPStringCompat.hetLPModSettingsLibrary.h(C2).- Chargements par nom, hors Build.cs :
LifePlayEditorTools.cpp:16FModuleManager::Get().LoadModule(TEXT("AutomationController")). C'est cohérent avec « DynamicallyLoadedModuleNames : 0 » (OBA-T1). Ce préchargement et la dépendanceProjects(ligne 30) n'existent que pour HyperAIStudio (LifePlayEditorTools.cpp:10-14). Leur sort suit celui de ce plugin (pistes OBA-T1, Constats).
3.2 API dépréciées touchant le code du jeu
Résultat : aucune à HEAD 657ce7f. Une seule a existé en 5.8, et elle est corrigée.
- Build complet 5.8 de référence :
U3-T2_Build_20261008-165632.txt(copie 5.5,etat\U58\U3\), code 0 (:108). Il compileModule.LifePlay.cpp(:31; aucune exclusion adaptive pour LifePlay,:17-18) et les 18.cppde LifePlayEditorTools (:38-58, 18 = nombre de.cppdu dossier, Glob C1). Il contient 1 C4996 dans ces deux modules :LPDumpAssetsCommandlet.cpp(110,3)'GetObjectsWithPackage': … boolean bIncludeNestedObjects has been deprecated - please use the EGetObjectsFlags enum instead(:43). Ses 7 autres C4996 sont dans le plugin StreetMap (:26,:68-83), hors de ces modules. - Correction en place :
LPDumpAssetsCommandlet.cpp:111-116, gardeUE_VERSION_OLDER_THAN(5, 8, 0)et surcharge enumEGetObjectsFlags::IncludeNestedObjects(5.8 :UObjectHash.h:193; la surcharge booléenne est marquée parUE_INCLUDENESTEDOBJECTS_BOOL_DEPRECATEDen:195-199). Recompilé en U4 :U4_Build_20261008-181959.log:40, résumé.txt:14-16(1 avertissement, un C4457 dans l'addon ; 0 C4996). - Recompilations suivantes, toutes sans C4996 :
LPPatchDailiesCommandlet.cpp(U7_Build_20261009-022040.log:24) ;LifePlayEditorTools.cppetModule.LifePlay.cpp(STM :.log:76,.txt:47-80) ;Module.LifePlay.cppen cible jeu Shipping et Development (U8 :U8_Build_20261009-175553.txt:14, 18-19,U8_Build_20261009-181732.txt:14, 18-19). C14 : les 5 ligneswarning C4996des journaux 5.8 de la copie sont toutes de HyperAIStudio (STM_Build_20261009-144519.txt:15-21). - Grep ciblé des
UE_DEPRECATEDsur les fonctions moteur appelées par les correctifs et les gardes :K2_GetRandomLocationInNavigableRadiusnon dépréciée (NavigationSystem.h:515-516) ;GetSkinnedAssetnon dépréciée (SkinnedMeshComponent.h:1222-1223) ;GetAssetsByClass(FTopLevelAssetPath, …)non dépréciée (IAssetRegistry.h:335, appelée enLPDumpFunctionCommandlet.cpp:88) ;GetObjectsWithPackage(enum) non dépréciée (UObjectHash.h:193). Les dépréciations voisines ne sont pas appelées en C++ (C19 et C20) :K2_GetRandomPointInNavigableRadius(dépréciée 5.1, toujours présente en 5.8 :NavigationSystem.h:1483-1485),GetSkeletalMesh_DEPRECATED(SkinnedMeshComponent.h:1194-1196) et la propriétéSkeletalMesh(:277-278). - Les Blueprints ne sont pas couverts par C4996. Les deux nœuds dépréciés ci-dessus existent encore en 5.8 ; des Blueprints qui les appelleraient encore n'ont pas été recherchés ici (voir § 5, P5).
3.3 Gardes de version dans Source (C13 : 2 occurrences)
| Site | Garde | État |
|---|---|---|
LPDumpAssetsCommandlet.cpp:111 (inclusion Misc/EngineVersionComparison.h en :8) |
#if UE_VERSION_OLDER_THAN(5, 8, 0) … #else enum 5.8 |
utile tant que la copie 5.5 vit (règle de lp-ue-compat § 1) |
LPDumpFunctionCommandlet.cpp:87 |
#if ENGINE_MAJOR_VERSION >= 5 ; la branche UE4 est en :89-90 |
branche UE4 morte dans les deux copies, qui sont toutes deux en 5.x |
Même commande : 0 PRAGMA_DISABLE_DEPRECATION_WARNINGS, 0 UE_DEPRECATED dans Source. |
3.4 Les 3 correctifs UE4 : rôle, appelants, équivalent natif 5.8, effort
| Correctif | Rôle (fichier:ligne) | Appelants C++ (C19) | Appelants Blueprint (historique, non recompté) | Équivalent natif 5.8 (en-tête lu) | Écart de sémantique en 5.8 | Effort et risque d'un passage natif (U9) |
|---|---|---|---|---|---|---|
ULPStringCompat (Source/LifePlay/LPStringCompat.h/.cpp) : ParseIntoArray, FindSubstring, Contains, Split (BlueprintPure, .h:39-52) ; FindUE4 en C++ seulement (.h:55) |
ParseIntoArray transcrit l'algorithme UE4 (.cpp:5-27) : chaîne vide → [] ; séparateur sensible à la casse (FCString::Strstr, .cpp:13). FindUE4 : sous-chaîne vide en mode IgnoreCase depuis le début → INDEX_NONE (.cpp:29-37) ; Contains, FindSubstring et Split passent par FindUE4 (.cpp:39-63) |
8 appels : LPDataCompat.cpp:71, 87 (ParseIntoArray), :107 (Contains), :131 (Split) ; test LPTestStringCompatCommandlet.cpp:115, 135, 136, 142 |
CX-B08 : 114 nœuds ParseIntoArray, 17 Blueprints ; CX-B12 : 385 nœuds (Contains 160, Split 222, FindSubstring 3), 28 Blueprints (05_Correctifs_Isoles.md:49, 53) |
UKismetStringLibrary::ParseIntoArray / FString::ParseIntoArray : en 5.8, String.cpp.inl:1356-1370 passe par UE::String::ParseTokens avec EParseTokensOptions::IgnoreCase forcé (:1363) et sans cas particulier pour la chaîne vide. Contains / Find / Split natifs : voir colonne suivante |
Persiste. Find / Contains : 60 écarts moteur contre UE4 sur 3120 cas, 0 écart pour le correctif (OUT1_LPTestStringCompat_20261009-161745.txt:9-10, 22-92, mesuré en 5.8). ParseIntoArray : la recherche insensible à la casse est établie (:1363) ; « [""] pour une chaîne vide » est estimé (ParseTokens visite les jetons vides, doc Epic) et n'est pas couvert par le test (C19 : ParseIntoArray absent de LPTestStringCompatCommandlet.cpp) |
Élevé. Aucune option native ne redonne la sémantique UE4 : passer au natif change le découpage des données de jeu (causes historiques ERR-027 et ERR-005, 05_Correctifs_Isoles.md:49, 53). Le C++ de LPDataCompat est touché aussi (4 appels). Interrupteur U9 (27_Plan_Migration_UE58.md:372-373) : 4 fonctions, petit côté C++. Banc à étendre à ParseIntoArray. Un nettoyage des Blueprints toucherait environ 499 nœuds (historique) |
ULPMeshCompat::GetSkeletalMesh (Source/LifePlay/LPMeshCompat.h:30-31, .cpp:9-19) |
Cast<USkeletalMesh>(Component->GetSkinnedAsset()) pour tout USkinnedMeshComponent (.cpp:18) ; None et une trace Verbose si le composant est None (.cpp:11-16). Remplace le getter Blueprint déprécié |
0 | CX-B10 : 56 nœuds, 8 Blueprints (05_Correctifs_Isoles.md:51) |
USkinnedMeshComponent::GetSkinnedAsset() BlueprintPure (SkinnedMeshComponent.h:1222-1223) suivi d'un cast vers SkeletalMesh. USkeletalMeshComponent::GetSkeletalMeshAsset() (SkeletalMeshComponent.h:374-375) ne vaut que pour USkeletalMeshComponent : rejeté (CX-B05, 05_Correctifs_Isoles.md:47, composants proxy USkinnedMeshComponent) |
Aucun sur la valeur : le correctif appelle déjà l'API UE5 non dépréciée. Seul écart : sur une cible None, le natif émet « Accessed None » au lieu de la trace Verbose (estimé) |
Moyen, risque faible. Il faut remplacer 1 nœud par 2 (GetSkinnedAsset + cast) sur environ 56 sites, par outil (modèle : LPFixSkeletalMeshGet, retiré en U2, historique git) ou à la main. Gain : une fonction C++ de moins. Un interrupteur U9 n'aurait rien à basculer |
ULPNavigationHelpers::GetRandomLocationInNavigableRadius (Source/LifePlay/LPNavigationHelpers.h:37-47, .cpp:7-18) |
Enveloppe pure qui relaie l'appel (.cpp:16-17) vers la fonction impure du moteur, avec les noms de broches de l'ancien nœud (.h:31-36) |
0 | CX-B11 : 6 nœuds (Person 3, Room 2, AI 1) (05_Correctifs_Isoles.md:52) |
UNavigationSystemV1::K2_GetRandomLocationInNavigableRadius existe en 5.8 mais est BlueprintCallable (impur, broches d'exécution : NavigationSystem.h:515-516) ; l'ancien nœud pur est déprécié depuis 5.1 (:1483-1485) ; K2_GetRandomReachablePointInRadius est pur (:510-511), mais sa sémantique diffère (point atteignable contre navigable, forum Epic cité) |
Aucun sur le calcul (simple relais). Écart d'évaluation possible : un nœud pur est réévalué pour chaque consommateur, un nœud impur une seule fois. Le tirage aléatoire peut donc différer selon le câblage (estimé, non vérifié sur les 6 graphes) | Faible en volume, risque faible à moyen. 6 nœuds à recâbler à la main sur le flux d'exécution (le rebranchement automatique élaguerait les nœuds, .h:5-7). À vérifier sur chaque graphe : la réévaluation du nœud pur. Un interrupteur U9 n'a pas de sens (pur ou impur est une propriété du nœud) |
Sources web (C23 ; seules les deux premières sont des pages de doc API Epic, le reste vient de forums ou du suivi des bogues ; toutes les valeurs reprises ont été relues dans les en-têtes 5.8 cités ci-dessus) :
- Epic API : K2_GetRandomPointInNavigableRadius (dépréciée)
- Epic API : USkinnedMeshComponent::GetSkeletalMesh_DEPRECATED
- Epic Blueprint API : GetSkinnedAsset, GetSkeletalMeshAsset
- Epic API : UE::String::ParseTokens, EParseTokensOptions, FString::ParseIntoArray
- Python API 5.1 NavigationSystemV1 ; forum : point navigable contre point atteignable ; UE-17138
4. Établi / estimé / incertain
Établi (lu à la source ou dans un journal rejoué ici) :
- Les 30 dépendances ; leurs lignes dans les Build.cs ; les 29 utilisations directes (inclusion d'un en-tête du module trouvé dans le moteur 5.8 ou dans le plugin, et symbole cité).
- Aucune inclusion ni aucun symbole de KismetCompiler dans
Source(C6 = 1, le Build.cs ; C7 = 0).KismetCompilerMisc.hest inclus indirectement par 5 en-têtes de BlueprintGraph. UnrealEd exposeKismetCompilerenPublicIncludePathModuleNames, et UBT le propage aux dépendances privées (UEBuildModule.cs:610-612, 638-664). - C4996 du code des deux modules : 1 au build complet U3-T2 (
LPDumpAssetsCommandlet.cpp:110), 0 depuis la correction (:111-116) sur toutes les unités recompilées ensuite (U4, U7, STM, U8). - Les 2 gardes de version de
Source. - 5.8 :
K2_GetRandomLocationInNavigableRadiusest impur ; l'ancien nœud pur est déprécié et toujours présent ;GetSkinnedAssetest pur et non déprécié ;FString::ParseIntoArrayforceIgnoreCase. - Find / Contains : 60 écarts du moteur 5.8 contre UE4, 0 pour le correctif.
- Appels C++ des correctifs : 8. Appels depuis l'addon (sources C++) : 0.
Estimé :
KismetCompilerest retirable du Build.cs (raisonnement ci-dessus ; non compilé).AssetRegistryetNavigationSystempeuvent passer en Private.- Les unités non recompilées depuis U3-T2 sont identiques à celles compilées alors : UBT recompile tout fichier changé, et
git statusest propre. ParseIntoArraynatif renvoie[""]pour une chaîne vide en 5.8 : déduit deParseTokens, sans cas particulier dansString.cpp.inl:1356-1370.- Les comptes de nœuds Blueprint (114, 385, 56, 6) datent du réimport de chaque correctif, pas de HEAD.
- Effort exprimé en volume de nœuds et en nature du changement, sans chiffrage en séances.
Incertain (essai qui trancherait) :
- Retrait de
KismetCompiler, et passage en Private deAssetRegistry/NavigationSystem: buildLifePlayEditor Win64 Development, etLifePlay Win64 Shippingpour la cible jeu, code 0, édition de liens comprise. - Nombre actuel d'appelants Blueprint des 3 correctifs, et absence de nœuds dépréciés restants :
LPDumpFunction -BP=* -Fn=…ouLPAuditBlueprintCallsde l'addon, plus le journalCompileAllBlueprints5.8. - Effet de la réévaluation des nœuds purs sur les 6 graphes de navigation : lecture des 6 graphes (
LPDumpFunction -Pins).
5. Points à confirmer (repris par la fiche suivante)
- P1 : build
LifePlayEditorsans la ligneET.B:29(KismetCompiler) : compilation et édition de liens en code 0. Retirer ensuite, ou garder en documentant le besoin indirect. - P2 : build
LifePlayEditor+LifePlayShipping avecAssetRegistryetNavigationSystemen Private. - P3 : recompter les appelants Blueprint actuels des 3 correctifs (
ULPStringCompat::*,ULPMeshCompat::GetSkeletalMesh,ULPNavigationHelpers::GetRandomLocationInNavigableRadius) par commandlet, en copie 5.8. Base historique : 114 + 385 + 56 + 6. - P4 : étendre
LPTestStringCompatàParseIntoArray(chaîne vide, casse du séparateur,CullEmptyvrai ou faux), comme le prévoit le banc U9 (27_Plan_Migration_UE58.md:374). - P5 : contrôler dans un journal Blueprint 5.8 (
CompileAllBlueprints) qu'il ne reste aucun nœudGet Skeletal MeshniGetRandomPointInNavigableRadius. - P6 :
Projectset le préchargement d'AutomationControllerdans LifePlayEditorTools (LifePlayEditorTools.cpp:10-17) dépendent de la décision sur HyperAIStudio (OBA-T2/T3). - P7 : sur les 6 nœuds de navigation, relever si
RandomLocationetReturnValuealimentent plusieurs consommateurs (réévaluation du nœud pur).
6. Questions pour la SPEC ou l'utilisateur
- Q1 : si P1 passe, retirer
KismetCompilerdeET.B:29, ou le garder par prudence (besoin indirect viaK2Node_*.h) ? - Q2 : passer
AssetRegistryetNavigationSystemde Public à Private dansLP.B(P2) ? Gain faible, risque faible. - Q3 : supprimer la branche UE4 morte
LPDumpFunctionCommandlet.cpp:89-90(gardeENGINE_MAJOR_VERSION >= 5) ? - Q4 (U9,
27_Plan_Migration_UE58.md:368-377) :LPMeshCompatetLPNavigationHelpersn'ont aucun écart de valeur avec le natif 5.8 ; leur passage natif ne serait qu'un nettoyage de Blueprints (56 et 6 nœuds).LPStringCompatgarde un écart mesuré en 5.8 et n'a pas d'équivalent natif. Faut-il réduire U9 àLPStringCompat(interrupteur et banc) et traiter les deux autres en simple nettoyage facultatif ?
Constats
- Le livrable est écrit dans la copie 5.5 (
D:\Game\LifePlay-master 5.5\Docs\Migration\etat\OB\OBA\), comme le dit la fiche, alors que toutes les sources lues sont celles de la copie 5.8. Même remarque qu'en OBA-T1 § 3. - La fiche cite
STM_Build_20261009-144519.txtcomme dernier build. Ce build ne recompile queLifePlayEditorTools.cppetModule.LifePlay.cppcôté jeu (.txt:47-80) : à lui seul, il ne prouve pas l'absence de C4996 dans les 17 autres.cppde l'éditeur. La preuve complète vient du build U3-T2, conservé dans la copie 5.5, puis de U4 pour le fichier corrigé. - La garde
UE_VERSION_OLDER_THAN(5, 8, 0)deLPDumpAssetsCommandlet.cpp:111devient sans objet quand la copie 5.5 cessera de compiler ce code. La forme enum existe-t-elle déjà en 5.5 ? Si oui, une forme commune sans garde serait possible (ue-cpp-build§ 5). Non vérifié dansUE_5.5(hors périmètre).