LifePlay-Revival/Docs/Migration/etat/REL/MAPDL1/MAPDL1-E1-IMPL.md
2026-10-22 21:10:39 +02:00

25 KiB
Raw Blame History

Fiche MAPDL1-E1 — Niveau N3 — Modèle prévu sonnet (agent lp-impl ; escalade lp-impl-max) | utilisé claude-sonnet-5-5 — Agent lp-impl — Skills sk-protocol, ue-cpp-build, lp-build, lp-ue-compat (préchargés) ; lp-city (invoqué en fin de travail) ; lp-lot de la fiche non chargé

MAPDL1-E1-IMPL : états des villes et menu, C1 à C5 de SPEC-05 v3, en C++ (2026-10-22)

Hors gabarit : le gabarit IMPL (sections 1 à 6) est suivi dans l'ordre. Les éléments que la fiche § 4 ajoute (MD5, choix, sorties des contrôles § 3, compte rendu) sont dans les sections 1 à 5 et dans ## Constats.

Déroulé : décision de l'utilisateur citée par la fiche (SPEC-05 v3 approuvée). Hors moteur : aucun build, commandlet, éditeur, commit, rien sous Mods\, aucun Blueprint. Pendant la lecture des références, la session MAPDL1 a ordonné de ne rien écrire dans l'arbre (cuisson de la copie en cours), puis a donné le feu vert. Établi : rien n'avait été écrit avant cet ordre (git status --short des fichiers du § 1 vide au 15:55, ls : fichiers neufs absents) ; le dossier E1-prepa\ n'a pas été utilisé ; les écritures de l'arbre ont toutes eu lieu après le feu vert.

1. Fichiers modifiés (chemins, lignes, MD5 avant / après)

MD5 « avant » = manifeste de l'instantané du 15:56 (Get-FileHash -Algorithm MD5). « Après » relevé à la fin.

Fichier (copie D:\Game\LifePlay-master 5.8) État Lignes MD5 avant MD5 après
Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h M +5 (l. 52-56, hors de la classe) 5933990B42C62A02AC59B2A18342E69A 01132482CCDB59F3C3DE3256F3EE905F
Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp M +19 −2 (l. 31-38 filtre, l. 166-167 ExtRecu, l. 235-240 appel) 1F93601C71D126F173FE30636AEC0660 BFADF97CDC90FE168D22FDEDFE2856D0
Source/LifePlay/LifePlay.Build.cs M +4 (l. 43-46) BC37B92F3496B2A3E2BB9B3BBCD74B40 29A02ED098581BC186E679A1C461ABE8
Config/DefaultGame.ini M +1 (l. 75, section [/Script/UnrealEd.ProjectPackagingSettings], après la l. 74) 8D7F4BDF45E4F36620CCFE043B380C66 FBB022145B5C1AC7DB22A13C06F1913A
Source/LifePlay/LPCityMapsSubsystem.h A 160 absent 8D48BB187947025902FF1EC266C94256
Source/LifePlay/LPCityMapsSubsystem.cpp A 842 absent 79C7BBAF4FD72DA869A7AD0849D922F9
Content/Data/LPCityMaps.json A 15 absent 308B46C40A43BC4180B66E46A07018DE
Tools/IndexCartes.ps1 A (hors git, .gitignore:91 /Tools/) 194 absent 30D9DFADB328AA71CCCE4610DEE6EDBF

Fichiers de ville de STM1 non commités (LPCityWaterSubsystem.*, LPCityWaterMask.h, LPCityNamesSubsystem.*, LPCityHouses.h, LPCityLandmarks.h, LPAssetRegistryHelpers.*) : 9 empreintes relevées avant et après, identiques (sortie collée dans ## Constats).

Diff résumé :

  • ModdingExtra : alias FModdingExtraFileListFilter et MODDINGEXTRA_API void ModdingExtraSetFileListFilter(...) (.h:55-56) ; variable static FModdingExtraFileListFilter GLPFileListFilter et définition (.cpp:33-38) ; copie ExtRecu de Ext avant sa transformation en *.uasset (.cpp:167) ; appel GLPFileListFilter(RootFolderFullPath, ExtRecu, Files) juste avant return true; (.cpp:236-239). Le plugin ne dépend toujours pas du jeu.
  • Build.cs : "ModdingExtra" et "Json" en dépendances privées, avec le commentaire « Lot MAPDL1 (SPEC-05) ».
  • DefaultGame.ini : +DirectoriesToAlwaysStageAsUFS=(Path="Data"), pour livrer Content/Data/LPCityMaps.json dans le pak.
  • ULPCityMapsSubsystem (C1 à C4) : index (Saved puis Content/Data), état Installed / Downloadable / Unavailable mis en cache, filtre de la liste Heavy/StreetMap, ticker de 0 s pour le menu (tri stable en trois groupes, textes, couleurs, bouton grisé, relais de clic ULPCityRowClick), bandeau de 10 s sur OnCityMapResolved.
  • LPCityMaps.json : format 2, base, licences (osm et lifeplay_ancienne, titre = texte de MAPDL1-SPEC-05-v2.md § 4, identique au caractère près, comparaison sensible à la casse : 333 / 333 caractères, True), villes: []. UTF-8 sans BOM, LF.
  • IndexCartes.ps1 (C5) : voir § 2 pour les choix ; ASCII, LF, 0 erreur de syntaxe.

2. Écarts à la SPEC (obligatoire) et choix là où la fiche laisse une latitude

Écart :

  • E-1. Le ticker du menu est un FTSTicker de 0 s, comme la fiche § 2.3 le prescrit. La SPEC v1 (C3) et lp-city § 3 (R12-14) disent FWorldDelegates::OnWorldPostActorTick. Estimé (non lu dans le moteur) : le ticker du cœur passe avant les acteurs ; si le Blueprint réécrit InstalledText après notre passage dans la même image, une image peut montrer le texte d'origine. Suivi : la fiche. Repli si l'essai en jeu (E4) montre un clignotement : poser le même corps dans OnWorldPostActorTick (modèle : LPCityWaterSubsystem). Non mesuré.

Choix (latitude, tous dans les fichiers de § 1) :

  • C-1. La recherche de CityScrollBox par TObjectIterator n'a pas lieu à chaque image : toutes les 0,1 s sans liste connue, toutes les 0,5 s avec une liste connue (pour détecter une instance plus récente). La liste connue est revalidée à chaque image (mêmes conditions que la fiche : nom CityScrollBox, objet extérieur de classe CityMenu_C, IsVisible(), GetCachedWidget().IsValid(), plus même instance de jeu). Raison : le parcours de tous les UScrollBox à chaque image tournerait toute la partie, menu fermé.
  • C-2. Plusieurs CityMenu_C vivants : celui qui est au viewport (IsInViewport()) l'emporte, puis la liste déjà suivie.
  • C-3. Liens non HTTPS écartés à la lecture de l'index (SPEC v3 § 2, « HTTPS seulement ») : « au moins une URL » de la fiche s'entend donc « au moins une URL HTTPS ». page non HTTPS est vidée.
  • C-4. Versions : composante absente = 0, comparaison textuelle insensible à la casse quand l'une des composantes n'est pas un nombre ; borne jeu_min ou jeu_max vide = pas de limite de ce côté.
  • C-5. « Mo » = 1 048 576 octets, arrondi supérieur. octets = 0 donne « Download (0 MB) » (le texte reste dans les deux autorisés du § 2.3).
  • C-6. Plusieurs entrées pour une même ville : la première éligible dans l'ordre du fichier.
  • C-7. Index présent mais base absente ou vide : CentralLondon et 00BathCC. Index présent mais illisible : pas de repli sur le second fichier (la fiche dit « le premier fichier présent »), avertissement, aucune ville téléchargeable.
  • C-8. Nom de ville d'une ligne : champ StreetMapName* lu en FNameProperty ; repli FStrProperty si le champ est une chaîne (non demandé, sans effet si c'est un nom).
  • C-9. Ligne City_C dont la ville est illisible (valeur vide ou par défaut …/) : rangée avec les installées, non décorée.
  • C-10. Tri sauté (pas de ClearChildren) quand l'ordre est déjà le bon.
  • C-11. Le filtre de ModdingExtra n'est retiré par Deinitialize que s'il a été posé par cette instance (en PIE, plusieurs instances de jeu).
  • C-12. Chemins de l'index passés tels que le moteur les donne (ProjectSavedDir, ProjectContentDir), sans ConvertRelativePathToFull, pour que le pak retrouve le fichier.
  • C-13. IndexCartes.ps1 :
    • base et licences sont reprises de Content\Data\LPCityMaps.json (le texte de licence n'existe qu'à un endroit) ;
    • sha256 en minuscules ;
    • -Toutes écarte, avec un message, un pack dont le CREDITS n'a pas de ligne - file … SHA-256 … (Paris : pas une ancienne carte, CREDITS d'une autre forme) ; avec -Villes Paris, c'est une erreur (code 2) ;
    • VersionName du .uplugin source différent de la version de l'archive : code 2 ;
    • source = la ligne du CREDITS sans le - file du début ;
    • -Villes et -Toutes exclusifs, validation de -Hebergeur à la main (code 2 et non l'erreur de liaison de ValidateSet).
  • C-14. Espaces de fin : deux lignes du .cpp de ModdingExtra qui portaient des espaces en fin (la ligne vide avant // FPaths::NormalizeDirectoryName et return true;) sont normalisées par le remplacement. Aucun autre octet de ce fichier ne change (git diff --stat : 19 insertions, 2 suppressions).
  • C-15. Trois commentaires du .cpp contiennent le signe « § » (non ASCII, comme LPModInfoSubsystem.h) ; rien d'autre n'est hors ASCII dans le .h et le .cpp (grep : 3 lignes).

3. Instantané

  • Lot MAPDL1-E1, un chemin par appel (Tools\Snapshot.ps1 -Lot MAPDL1-E1 -Path <chemin>, 8 appels, code 0), manifeste : D:\Game\LifePlay_Backup_5.5\MAPDL1-E1\manifest.csv.
  • 4 fichiers existants sauvegardés (MD5 du § 1) ; 4 fichiers neufs notés absents (Existed=False) : LPCityMapsSubsystem.h, .cpp, Content\Data\LPCityMaps.json, Tools\IndexCartes.ps1.
  • Pris à 15:56:38-47, avant toute écriture dans l'arbre. Retour arrière : Tools\Restore.ps1 -Lot MAPDL1-E1, seulement proposé.

4. Ce qui n'a pas été fait

  • Aucun build, commandlet, éditeur ni essai en jeu (étape E2 et suivantes). Rien n'est compilé : tout ce qui suit est « écrit, non compilé ».
  • C6 (fenêtre de téléchargement, HTTP, SHA-256, libzip, pose) : étape E5. Le clic d'une ligne téléchargeable ouvre le navigateur.
  • Pas de Saved/LPCityMaps.json d'essai posé (la fiche renvoie à MAPDL1-ESSAI-FJ F4) ; Content/Data/LPCityMaps.json livré avec villes: [].
  • Pas de ligne ajoutée à Tools\LISEZMOI.md (hors du § 1). Proposition de ligne d'index : | IndexCartes.ps1 | Écrit l'index LPCityMaps.json (format 2) des cartes de villes téléchargeables depuis les archives lpm_city_* de la publication et les sources des packs ; hébergeur en paramètre (Forgejo, GitHub, modèle d'URL), aucun réseau | .\Tools\IndexCartes.ps1 (-Villes A,B | -Toutes) -Hebergeur Forgejo -Owner o -Repo r -Tag t [-Miroir "https://…/{zip}"] [-Sortie f [-Livre]] [-ABlanc] (lot MAPDL1) |. À reporter par l'orchestrateur avec une entrée CHG (Tools\ est local, non suivi).
  • Tools\FicheStats.py non relancé.

5. Points à confirmer en VAL / à la compilation (E2), un par ligne

  • V-1 (E2) UHT accepte, dans ModdingExtraBPLibrary.h, un alias using … = TFunction<…> et une fonction libre MODDINGEXTRA_API après la classe.
  • V-2 (E2) Édition de liens : LifePlay (dépendance privée) appelle ModdingExtraSetFileListFilter exportée par ModdingExtra ; l'en-tête ModdingExtraBPLibrary.h (avec son .generated.h) est trouvé depuis LifePlay. Le module a LoadingPhase: PreLoadingScreen.
  • V-3 (E2) Compilation de LPCityMapsSubsystem.cpp : surtout SNew(SOverlay).Visibility(…) + SOverlay::Slot()…, SBox::Padding(FMargin), TSet<TWeakObjectPtr<UObject>>::Contains, AddUniqueDynamic sur UButton::OnClicked, CastField<…> sur un const FProperty*, ContainerPtrToValuePtr<void> sur un const UUserWidget*, boucle sur FJsonObject::Values (const auto&, clé UE::FSharedString).
  • V-4 (E2) 0 avertissement nouveau (aucun membre déprécié utilisé : UScrollBoxSlot par accesseurs) ; collisions d'unity build (tous les noms du .cpp sont dans LPCityMapsImpl).
  • V-5 (jeu) Journal au premier menu : [LPCity] CARTES index …, ETAT <V> pour chaque ville vue (de l'ordre de 280 lignes), LISTE Heavy/StreetMap : <n> entrees, <m> retirees, MENU tri : ….
  • V-6 (jeu) Le Blueprint City relance Construct quand une ligne est retirée puis remise (ClearChildren + AddChild) : textes, couleurs et boutons doivent se rétablir ; pas de clignotement (cf. E-1).
  • V-7 (jeu) Le champ StreetMapName* de la structure City est lisible (type, suffixe) ; variables City, InstalledText, CityButton trouvées sur les lignes City_C.
  • V-8 (jeu) Tokyo (pack monté) reste « Installed » en vert et se charge ; une ville de gabarit apparaît « Not available », grisée, en bas ; une ville de l'index d'essai apparaît « Download (xx MB) » en bleu, au milieu.
  • V-9 (jeu) Le clic sur une ligne téléchargeable n'appelle pas MoveCity et ouvre le navigateur ; journal [LPCity] CLIC <V> : navigateur <url>.
  • V-10 (jeu) Bandeau : texte, 10 s, une fois par ville, au-dessus de la fenêtre des mods (Z 1100 contre 1000), sans bloquer la souris.
  • V-11 (cuisson) Content/Data/LPCityMaps.json est dans le pak (DirectoriesToAlwaysStageAsUFS) et IFileManager::FileExists / LoadFileToString le lisent en Shipping.
  • V-12 (jeu) Moment du premier appel de ResolveCityPath : il met en cache un résultat négatif ; l'état n'est calculé qu'à l'ouverture du menu (dossier Heavy/StreetMap), après le montage des packs. À confirmer qu'aucun autre appelant de GetAllFilesFromFolder("Heavy/StreetMap") ne le déclenche plus tôt (E0 : un seul Blueprint porte ce littéral).
  • V-13 (dépôt) Dépendance de commit : OnCityMapResolved et ResolveCityPath sont dans LPAssetRegistryHelpers.*, encore en M (STM1, non commité). Le commit de ce lot ne se compile pas seul : ordre STM1 d'abord, ou ensemble, décision du gardien.

6. Fichiers à commiter

Dépôt du jeu (D:\Game\LifePlay-master 5.8, branche ue5.8) ; aucun agent ne commite, le gardien le fait sur ticket :

  • M Config/DefaultGame.ini
  • M Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp
  • M Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h
  • M Source/LifePlay/LifePlay.Build.cs
  • A Source/LifePlay/LPCityMapsSubsystem.cpp
  • A Source/LifePlay/LPCityMapsSubsystem.h
  • A Content/Data/LPCityMaps.json
  • A Docs/Migration/etat/REL/MAPDL1/MAPDL1-E1-IMPL.md

Hors git : Tools/IndexCartes.ps1 (ignoré, .gitignore:91, instantané + CHG + ligne d'index remplacent le commit) ; instantané D:\Game\LifePlay_Backup_5.5\MAPDL1-E1\.

Tours : 47 / 60 (décompte de l'agent ; FicheStats non relancé)

Constats

Sorties des contrôles du § 3 de la fiche (collées)

  1. git diff --stat des fichiers M ; git status --short des fichiers du § 1 :
 Config/DefaultGame.ini                              |  1 +
 .../ModdingExtra/Private/ModdingExtraBPLibrary.cpp  | 21 +++++++++++++++++++--
 .../ModdingExtra/Public/ModdingExtraBPLibrary.h     |  5 +++++
 Source/LifePlay/LifePlay.Build.cs                   |  4 ++++
 4 files changed, 29 insertions(+), 2 deletions(-)
 M Config/DefaultGame.ini
 M Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp
 M Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h
 M Source/LifePlay/LifePlay.Build.cs
?? Content/Data/
?? Source/LifePlay/LPCityMapsSubsystem.cpp
?? Source/LifePlay/LPCityMapsSubsystem.h

Fichiers A : LPCityMapsSubsystem.h, LPCityMapsSubsystem.cpp, Content/Data/LPCityMaps.json (suivis par git une fois commités) ; Tools/IndexCartes.ps1 ignoré (git check-ignore -v : .gitignore:91:/Tools/).

  1. MD5 avant / après : tableau du § 1. Fichiers de STM1 (avant = après, diff des deux relevés : IDENTIQUE) :
CC146CC6979ED4321413130DCD1B4417  .\Source\LifePlay\LPCityWaterSubsystem.cpp
4A6C67116A76BFFB9D8D04E38A6C9AC5  .\Source\LifePlay\LPCityWaterSubsystem.h
E5027FD7FD2B827831D52E8CE5727A36  .\Source\LifePlay\LPCityWaterMask.h
F378333812EFD901C72F252131F28E47  .\Source\LifePlay\LPCityNamesSubsystem.cpp
1063948323E856860350F143296D8611  .\Source\LifePlay\LPCityNamesSubsystem.h
01CC49D85CA415B11A04D19E8EA23FBB  .\Source\LifePlay\LPCityHouses.h
B4FF95AE838F241DBBAB23C7DDAB4D5A  .\Source\LifePlay\LPCityLandmarks.h
7B44F5FA7A1CB33EA8E96C9ECC1C7BDE  .\Source\LifePlay\LPAssetRegistryHelpers.cpp
8E3B725A609CC8E5E23D2F0CEC309C1A  .\Source\LifePlay\LPAssetRegistryHelpers.h
  1. Fins de ligne, git ls-files --eol (fichiers M suivis), puis CR / BOM / non-ASCII des fichiers neufs (tr -cd '\r' | wc -c, head -c 3 | od, grep -c -P '[^\x00-\x7F]') :
i/lf    w/lf    attr/-text            	Config/DefaultGame.ini
i/lf    w/lf    attr/-text            	Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp
i/lf    w/lf    attr/-text            	Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h
i/lf    w/lf    attr/-text            	Source/LifePlay/LifePlay.Build.cs
Source/LifePlay/LPCityMapsSubsystem.h : CR=0 BOM=2f2f20 nonASCII-lignes=0
Source/LifePlay/LPCityMapsSubsystem.cpp : CR=0 BOM=2f2f20 nonASCII-lignes=3
Content/Data/LPCityMaps.json : CR=0 BOM=7b0a20 nonASCII-lignes=1
Tools/IndexCartes.ps1 : CR=0 BOM=3c230a nonASCII-lignes=0

(LPCityMaps.json : 1 ligne non ASCII = le tiret demi-cadratin U+2013 de « 2018–2022 », octets 342 200 223 ; premiers octets { \n = pas de BOM. La console de l'outil affiche ce tiret en - : l'affichage seul est en cause.)

  1. Analyse syntaxique PowerShell de IndexCartes.ps1 ([System.Management.Automation.Language.Parser]::ParseFile) :
erreurs de syntaxe: 0
  1. Test-Json sous pwsh sur Content/Data/LPCityMaps.json :
Test-Json: True
villes: 0 ; base: CentralLondon,00BathCC
titre identique a v2 par 4 : True  (match: True ; longueurs v2/json : 333 / 333)
  1. Essai à blanc du § 2.7, valeurs fictives (pwsh -NoProfile -File Tools/IndexCartes.ps1 -Villes Manila -Hebergeur Forgejo -Owner exemple -Repo exemple -Tag cartes-test-1 -ABlanc, code 0 ; octets et SHA-256 identiques à PRODUCTION.csv ligne Manila : 22075120 ; 2BA28C4E…B4CF) :
packs retenus : 1 ; ecartes : 0 ; archives : D:\Game\LifePlay_Publication\Mods ; hebergeur : Forgejo
{
  "format": 2,
  "base": [
    "CentralLondon",
    "00BathCC"
  ],
  "licences": {
    "osm": {
      "titre": "Map data (c) OpenStreetMap contributors, ODbL 1.0",
      "fichier": "Licenses/OpenStreetMap_Geodata_License.txt"
    },
    "lifeplay_ancienne": {
      "titre": "Original LifePlay city map (2018-2022), inherited from the original LifePlay game's \"NEW Maps\" download folder. Author and licence of the original map asset are not recorded in the source. Map data (c) OpenStreetMap contributors, ODbL 1.0. LifePlay code and assets by Vinfamy are under the MIT licence (Licenses/Vinfamy_License.txt).",
      "fichier": "Licenses/Vinfamy_License.txt"
    }
  },
  "villes": [
    {
      "ville": "Manila",
      "pack": "lpm_city_manila",
      "version": "1.0.1",
      "jeu_min": "2026.10.2.2a",
      "jeu_max": "2026.12.99",
      "zip": "lpm_city_manila-1.0.1-for-LifePlay-2026.10.2.2a.zip",
      "octets": 22075120,
      "sha256": "2ba28c4edfb98e7b0265be719e3a42489f0fd79b17268c6ee9f3fbe2dc08b4cf",
      "urls": [
        "https://forgejo.edujiro5972.fr/exemple/exemple/releases/download/cartes-test-1/lpm_city_manila-1.0.1-for-LifePlay-2026.10.2.2a.zip"
      ],
      "page": "",
      "licences": [
        "osm",
        "lifeplay_ancienne"
      ],
      "source": "Manila.zip, 19 946 453 bytes, SHA-256 cb0fce4be80df76e54b7a6c5a8a448b46739c7944644925f59be9d7c2bf0f308"
    }
  ]
}

a blanc : rien n'a ete ecrit
exit=0

(Le tiret de « 2018–2022 » s'affiche - à la console, voir 3 ; le JSON de l'outil le reprend du fichier livré.)

  1. Essais complémentaires de IndexCartes.ps1 (non demandés, tous à blanc ou refusés, rien d'écrit) :
  • -Toutes -Hebergeur Modele -Modele "https://cartes.exemple.org/{zip}" -Miroir "https://github.com/exemple/exemple/releases/download/t/{zip}" -ABlanc : packs retenus : 10 ; ecartes : 1 (ligne : lpm_city_paris ecarte : CREDITS sans ligne "- file ... SHA-256 ..." (pas une ancienne carte)) ; villes : Bangalore 1.0.0, Beijing 1.0.1, Manila 1.0.1, MexicoCity 1.0.1, Moscow 1.0.1, Mumbai 1.0.0, NYC 1.0.0, Seoul 1.0.1, Shanghai 1.0.1, Tokyo 1.0.0 ; deux URL par ville (principal puis miroir). Paris a plusieurs dizaines d'archives de versions différentes dans la publication ; les copies precedent_* ne correspondent pas au motif et sont ignorées.
  • -Villes Paris … : IndexCartes.ps1 : CREDITS de lpm_city_paris sans ligne '- file ... SHA-256 ...' : …\ModSources\lpm_city_paris\Module\CREDITS.txt, code 2.
  • -Villes Atlantis … : archive absente pour le pack lpm_city_atlantis dans D:\Game\LifePlay_Publication\Mods, code 2.
  • -Sortie Content/Data/LPCityMaps.json sans -Livre : ecrire Content\Data\LPCityMaps.json (copie livree avec le jeu) exige -Livre, code 2.
  • sans argument : -Villes ou -Toutes attendu. …, code 2.

API moteur UE 5.8 lues dans les sources (D:\Game\Launcher\Engine\UE_5.8\Engine\Source, chemins sous Runtime\ sauf mention)

  • UMG/Public/Components/PanelWidget.h:28 (GetChildrenCount), :36 (GetChildAt), :59 (AddChild(UWidget*)), :122 (virtual ClearChildren).
  • UMG/Public/Components/ScrollBoxSlot.h:46, 49, 55, 58, 60, 63 (GetPadding, SetPadding, Get/SetHorizontalAlignment, Get/SetVerticalAlignment ; les membres Padding etc. sont UE_DEPRECATED(5.1), lignes 29-42, donc non utilisés).
  • UMG/Public/Components/Widget.h:264 (TObjectPtr<UPanelSlot> Slot), :541 / :545 (GetIsEnabled / SetIsEnabled), :582 (IsVisible), :598 / :602 (Get/SetRenderOpacity), :857 (GetCachedWidget) ; UMG/Private/Components/Widget.cpp:395-404 (IsVisible lit la visibilité du widget Slate en cache).
  • UMG/Public/Components/TextBlock.h:95, 103, 106, 114 (GetText, SetText, GetColorAndOpacity, SetColorAndOpacity) ; UMG/Public/Components/Button.h:76 (OnClicked) ; SlateCore/Public/Styling/SlateColor.h:134 (GetSpecifiedColor).
  • Core/Public/GenericPlatform/GenericPlatformProcess.h:563 (LaunchURL(const TCHAR*, const TCHAR*, FString*)), Core/Public/Windows/WindowsPlatformProcess.h:238.
  • Json/Public/Dom/JsonObject.h:237 (Values à clé FStringType, UE::FSharedString par défaut, UE_JSONOBJECT_LEGACY_STRING_KEYS à 0 : :46-47), :414-441 (TryGetNumberField, dont int64& à :429), :450 (TryGetStringField), :494 (TryGetArrayField), :507 (TryGetObjectField), tous avec FStringView ; Json/Public/Dom/JsonValue.h:74 (TryGetString), :89 (TryGetObject(const TSharedPtr<FJsonObject>*&) const) ; Json/Public/Serialization/JsonSerializer.h:676 (FJsonSerializer) ; Json/Public/Serialization/JsonReader.h:1088 (TJsonReaderFactory::Create(const StringType&)) ; Core/Public/Containers/SharedString.h:92 (ToView). Même emploi dans le jeu : LPBuildCityLandmarksCommandlet.cpp:118, LPDataCache.cpp:150 et :203.
  • CoreUObject/Public/UObject/UnrealType.h:801-816 (ContainerPtrToValuePtr), :1663 (GetPropertyValue_InContainer des propriétés de valeur : FName, FString), :2896 (GetObjectPropertyValue_InContainer), :3723 (FNameProperty), :6387 (FStructProperty) ; CoreUObject/Public/UObject/Class.h:663 (FindPropertyByName(FName)).
  • Core/Public/Containers/UnrealString.h.inl:1219 (FindChar), :1231 (FindLastChar) ; Core/Public/Misc/Char.h:240 (IsDigit), :261 (IsHexDigit) ; Core/Public/Misc/Paths.h:527 (GetBaseFilename) ; Core/Public/HAL/FileManager.h:116 (FileExists).
  • Engine/Classes/Engine/GameViewportClient.h:258 (AddViewportWidgetContent), :265 (RemoveViewportWidgetContent) ; SlateCore/Public/Widgets/SOverlay.h:57 (arguments de FOverlaySlot) ; Slate/Public/Widgets/Layout/SBox.h:55 (SLATE_ATTRIBUTE(FMargin, Padding)) ; SlateCore/Public/Layout/Visibility.h:23 (HitTestInvisible).
  • Livraison du JSON dans le pak : Developer/DeveloperToolSettings/Classes/Settings/ProjectPackagingSettings.h:586-591 (DirectoriesToAlwaysStageAsUFS : « added to the .pak », chemins relatifs à Content) et Programs/AutomationTool/Scripts/CopyBuildToStagingDirectory.Automation.cs:2052-2054 (la clé est lue par StageAdditionalDirectoriesFromConfig avec ProjectContentRoot).

Compte rendu (sk-protocol)

[sk-protocol] Skills présents dans mon contexte : sk-protocol, ue-cpp-build, lp-build, lp-ue-compat (préchargés) ; lp-city (invoqué en fin de travail).

  1. Résultat : réussi hors moteur (C1 à C5 écrits, contrôles du § 3 faits) ; rien n'est compilé, la compilation est l'étape E2.
  2. Preuves : MAPDL1-E1-FICHE.md, SPEC-05-v3 § 1, SPEC-05 § 1-2, SPEC-05-v2 § 4, E0-INV, L1-CART-02, L4-CART-01 ; modèle LPModInfoSubsystem.h/.cpp:308-373 ; LPAssetRegistryHelpers.h:19, .cpp:37, 101-133 ; API moteur ci-dessus (fichier:ligne).
  3. Mesuré : sorties collées dans ## Constats (git diff --stat, status, ls-files --eol, MD5 avant / après, analyse syntaxique 0 erreur, Test-Json True, essai à blanc, code 0).
  4. Incertitudes : toute la compilation (V-1 à V-4) ; le comportement dans le Blueprint (V-6 à V-10 : relance de Construct après le tri, ordre d'écriture de InstalledText face au ticker de 0 s, E-1) ; la livraison du JSON dans le pak (V-11) ; le moment du premier ResolveCityPath (V-12). Non mesuré : tout ce qui demande le moteur.
  5. Écarts : E-1 (ticker de 0 s) et choix C-1 à C-15 (§ 2). Fichiers écrits : les 8 du § 1, plus ce livrable D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\MAPDL1\MAPDL1-E1-IMPL.md. À commiter : liste du § 6 (Tools/IndexCartes.ps1 hors git).
  6. Tours : 47 / 60 (décompte de l'agent).
  7. À verser : lp-city § 3 — le menu des villes est décoré par ULPCityMapsSubsystem (ticker de 0 s, CityScrollBox / City_C, filtre de GetAllFilesFromFolder dans ModdingExtra) ; lp-commandlets ou Tools\LISEZMOI.md — ligne d'index de IndexCartes.ps1 (§ 4) ; sk-protocol § 7 — Write d'un fichier contenant un tiret demi-cadratin : les octets sont bons (od -c), la console des outils l'affiche en -, vérifier par od, pas par l'affichage.
  8. Handoff : Suite : lp-builder doit lancer E2 (Tools\Build.ps1 -Lot MAPDL1-E2, éditeur puis jeu Development, jeton UE) puis rapporter les erreurs sans les corriger ; état : code écrit et non compilé, fichiers de STM1 inchangés, instantané MAPDL1-E1 en place, ordre de commit à fixer avec STM1 (V-13).