9.6 KiB
9.6 KiB
05 — Correctifs isolés et protocole de réimport sous contrôle renforcé
Décision D-01 (2026-09-29) : les correctifs appliqués avant la reprise n'ont été ni suivis ni testés. Ils sont isolés : retirés du contenu (retour à la base 4.27 en L1) ou exportés en patchs relisibles pour le code. Chacun est réimporté seul, selon le protocole du §3. Décision D-02 : R-03 et R-04 sont annulés partout.
1. Correctifs de code (conservés, relisibles)
Le code 5.5 est nécessaire pour compiler : il reste en place, mais chaque écart avec 4.27 est
exporté dans Docs/Migration/correctifs/ pour relecture.
| ID | Patch | Contenu | Nécessaire à | Statut |
|---|---|---|---|---|
| CX-C01 | P06 |
Target.cs : BuildSettingsVersion.V5, Unreal5_5 |
compilation | conservé |
| CX-C02 | P06 |
.uproject : EngineAssociation 5.5, suppression des 5 entrées de plugins (Victory, VisualStudioTools, SteamVR, ModdingPlus, MultiTask) |
ouverture du projet | conservé ; section Plugins explicite en L2 |
| CX-C03 | P06 |
.uplugin : suppression de EngineVersion "4.27.0" |
chargement des plugins | conservé |
| CX-C04 | P03 |
ModdingExtra : inclusions UE5 (Engine.h retiré), Path.Combine |
compilation | conservé |
| CX-C05 | P04 |
StreetMap : portage LWC (FVector3f, FBox3f), R-01 (FAssetRegistryTagsContext), R-02 (initialiseurs) |
compilation, 280 villes | conservé ; vérifié en L4 (LPCheckStreetMap 4.27 et 5.5) |
| CX-C06 | P01, P05 |
LPVictoryCompat (2 fonctions) + 3 [CoreRedirects] Victory → LifePlay |
chargement de GI, ExtImg, FaceTexture, MainMenu, Inventory |
conservé ; à contrôler en L4 (T-LOAD-01) |
| CX-C07 | P01 |
LPAssetRegistryHelpers::GetAssetByObjectPath : conversion FSoftObjectPath |
compilation | conservé |
| CX-C08 | P01 |
LPAssetRegistryHelpers::GetAssetsByClassName, GetAssetObjectPath (nouvelles fonctions) |
réimport de CX-B01 | conservé, inutilisé tant que CX-B01 n'est pas réimporté |
| CX-C09 | P01 |
LPNavigationHelpers (enrobage pur de K2_GetRandomLocationInNavigableRadius) |
R-04 | conservé ; utilisé par CX-B11 (L7b) |
| CX-C10 | P01 |
LifePlay.Build.cs : PublicIncludePaths, NavigationSystem, ImageWrapper, ApplicationCore |
compilation | conservé |
| CX-C11 | P05 |
Config : [CoreRedirects], 4 clés PhysX retirées, classes Enhanced Input par défaut, description, StagingDirectory, section McpAutomationBridgeSettings |
— | conservé ; relu en L2 |
| CX-C12 | P03 (hors patch : ajouté le 2026-09-28) |
instrumentation LogLPModdingTrace |
diagnostic | retiré en L3 (CHG-016 : LogModdingExtra en Verbose) |
| CX-C13 | P02 |
commandlets LifePlayEditorTools (1 777 lignes) |
outillage éditeur | conservé ; ne touche pas au jeu |
| CX-C14 | — | LPSessionLogSubsystem : résumé de démarrage, bilan de session, options de diagnostic -LPDump*/-LPTrace* |
EX-07, diagnostic | ajouté (L3, L5, L7i, L7l) |
| CX-C15 | — | LPStringCompat, LPMeshCompat : fonctions au comportement 4.27, cibles de CX-B08, B10, B12 |
parité 4.27 | ajouté |
| CX-C16 | — | LPSecondScreenSubsystem : cadrage du visage du contact pendant un appel |
ERR-031 (amélioration) | ajouté (L7j, CHG-054), validé en jeu |
| CX-C17 | — | LPOutdoorRoomSubsystem : plafond WallT masqué dans les lieux extérieurs |
ERR-036 (amélioration) | ajouté (L7l, CHG-057), validé en jeu |
| CX-C18 | — | Config : rendu explicite (L7c), clés de nativisation retirées, DirectoriesToAlwaysCook=/Game |
parité, cuisson complète | ajouté (CHG-025, CHG-049) |
2. Correctifs de contenu (retirés en L1, à réimporter un par un)
| ID | Outil | Cible | Effet attendu | Justification | Priorité | Statut |
|---|---|---|---|---|---|---|
| CX-B00 | LPFixAssetRegistryNodes (portage 4.27) |
GI, Person, Room, UI/VisualMorph |
GetAssetByObjectPath en nœud pur |
déjà présent dans la base 4.27 (les 4 assets importent LifePlay.LPAssetRegistryHelpers) |
— | inclus dans la base |
| CX-B01 | LPFixAssetRegistryPins |
GI : 3 GetAssetsByClass (+ 2 broches associées) |
nœuds rebranchés sur GetAssetsByClassName avec la valeur de classe d'origine |
candidat n°1 pour ERR-002 : sans lui, GetAssetsByClass interroge avec un chemin de classe vide ; aucun corps, vêtement ni coiffure énumérable |
1 | réimporté (CHG-018, validé statiquement) ; A/B d'exécution après CX-B02 |
| CX-B02 | LPFixEditableTextBoxFont |
UI/CharGen, UI/StatMenu : 6 nœuds Make/Break EditableTextBoxStyle |
broche Font orpheline retirée |
bloque la cuisson (6 erreurs, cook du 2026-09-07) | 2 | réimporté (CHG-022) ; commandlet corrigée au passage (ERR-025) |
| CX-B03 | LPFixZeroScaleActors -Fix -Scale=0.1 |
Scenes/CentralLondon : Wall.StaticMeshComponent0 |
échelle X 0 → 0,1 | corps physique invalide ; ensure InverseFast (plantage éditeur du 2026-09-07) |
3 | réimporté (CHG-023) |
| CX-B04 | LPFixOrphanBoundEvents |
UI/TopRight (1), UI/CharGen (2) |
3 événements On Clicked orphelins supprimés |
avertissements ; clics déjà morts | 4 | réimporté (CHG-024) |
| CX-B05 | LPFixDeprecatedNodes (R-03) |
56 nœuds SkeletalMesh, 10 Blueprints |
GetSkeletalMeshAsset() |
rejeté : aggrave ERR-002 (16,6 → 35 Accessed None/perso) car les proxies sont des USkinnedMeshComponent |
— | à refaire autrement (L7a) |
| CX-B06 | LPFixDeprecatedNodes (R-04) |
6 nœuds, AI, Person, Room |
LPNavigationHelpers |
avertissements de dépréciation seulement | 5 | remplacé par CX-B11 (commandlet sans contrôle, embarquait aussi la variante R-03 rejetée) |
| CX-B08 | LPFixParseIntoArray (nouveau) |
114 nœuds ParseIntoArray, 17 Blueprints |
rebranchés sur LPStringCompat::ParseIntoArray (algorithme UE 4.27) |
UE5 renvoie [""] pour une chaîne vide : cause d'ERR-027 (personnages de quête invisibles/dévêtus) |
1 | réimporté (CHG-029), validé en jeu |
| CX-B09 | LPFixButtonPadding (nouveau) |
430 UButton, 46 Widget Blueprints |
marges des boutons remises au défaut UE 4.27 (Normal 2,2,2,2 ; Pressed 2,3,2,1), composante par composante | le style par défaut de UButton est passé à 12 px horizontaux en UE5 (FUMGCoreStyle) ; les assets 4.27 ne stockent pas la marge par défaut : cause d'ERR-034 (barre de temps décalée) |
1 | réimporté (CHG-033), validé en jeu |
| CX-B10 | LPFixSkeletalMeshGet (nouveau) |
56 nœuds Get SkeletalMesh, 8 Blueprints (Person 28, GI 17, CharGen 3, Inventory 3, Hairstyle 2, CharGenSlider, Cursor, Inventory_Cloth 1) |
remplacés par LPMeshCompat::GetSkeletalMesh(Component) = Cast<USkeletalMesh>(GetSkinnedAsset()), la sémantique exacte du getter déprécié, valable pour tout USkinnedMeshComponent |
R-03 refait (L7a) ; remplace CX-B05 rejeté | 1 | réimporté (CHG-036), validé en jeu |
| CX-B11 | LPFixNavRandomPoint (nouveau) |
6 nœuds GetRandomPointInNavigableRadius (Person 3, Room 2, AI 1) |
remplacés par LPNavigationHelpers::GetRandomLocationInNavigableRadius : nœud pur, mêmes broches, même corps que la fonction dépréciée (appel de K2_GetRandomLocationInNavigableRadius, identique en 4.27 et 5.5) ; liaisons et valeurs par défaut reportées broche par broche |
R-04 (L7b) : 6 derniers avertissements de compilation ; le remplaçant moteur est impur (broches d'exécution), d'où l'enrobage pur | 1 | réimporté (CHG-037), retiré à tort (CHG-038) puis réappliqué (CHG-039) ; validé en jeu |
| CX-B12 | LPFixStringSearch (nouveau) |
385 nœuds Contains (160), Split (222), FindSubstring (3), 28 Blueprints (GI 240, Person 35, Room 16, CharGen 14…) |
rebranchés sur LPStringCompat::Contains/Split/FindSubstring : mêmes broches ; sous-chaîne vide en mode insensible à la casse depuis le début → « non trouvé » comme en 4.27 (UE5 : trouvé en position 0) |
ERR-005 (getBeautyValue ×38 : filterMorphList sans étiquette laissait passer tous les morphs) et toute recherche de texte avec un motif vide |
1 | réimporté (CHG-042), validé en jeu (CHG-043) |
| CX-B07 | LPResavePackages (nouveau) |
239 paquets UE4 restants (UI 147, Structs 57, BPs 22, Render 11, Characters 1, Scenes 1) |
format UE5, contenu inchangé | EX-03 ; T-STAT-01 | 6 | réimporté (CHG-035), diff avant/après neutre ; validé en jeu (build V1rc, V1) |
3. Protocole de réimport sous contrôle renforcé
Un correctif = un sous-lot (L4-CX-B01, …) = un commit. Pas de regroupement.
| Étape | Action | Preuve archivée dans Docs/Migration/etat/ |
|---|---|---|
| 1 | git tag L4-CX-xx-avant ; Tools\Snapshot.ps1 -Lot L4-CX-xx -Path <assets cibles> |
manifeste MD5 |
| 2 | Photographie avant : LPDumpFunction -BP=<asset> -Fn=<fonctions touchées> -Pins |
<id>_dump_avant.txt |
| 3 | Simulation : commandlet avec -DryRun ; le nombre de nœuds trouvés doit égaler celui attendu (§2) |
<id>_dryrun.txt ; tout écart arrête le sous-lot |
| 4 | Application réelle | journal de la commandlet |
| 5 | Photographie après + diff avant/après : seuls les nœuds attendus diffèrent | <id>_dump_apres.txt, <id>_diff.txt |
| 6 | CompileAllBlueprints + LPCheckMeshAssignment : aucune erreur nouvelle par rapport au relevé de base |
résumés RunCommandlet |
| 7 | Si le correctif touche le gameplay (CX-B01) : build Development + A/B avec la référence 4.27 (Tools\LogStats.ps1 -Compare) |
tableau A/B |
| 8 | Journal CHG, commit, git tag L4-CX-xx-apres ; en cas d'échec : Tools\Restore.ps1 -Lot L4-CX-xx |
entrée de journal |
Critère d'acceptation commun : effet attendu observé, aucun effet de bord mesuré.