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

9.8 KiB
Raw Blame History

Fiche MAPDL1-P1-IMPL — Niveau N3 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · MAPDL1 » ; compilation et DryRun par le sous-agent lp-builder (MAPDL1-P1-BUILD.md, MAPDL1-P1-BUILD-02.md) — Skills sk-protocol, lp-city, lp-lot, lp-commandlets, lp-paths

MAPDL1-P1 : commandlet LPImportLegacyStreetMap, reprise à l'identique d'une ancienne carte (2026-10-22)

GO de Big Boss (local_d2580e73), décision de l'utilisateur citée : « GO pour MAPDL1 avec les valeurs par défaut D7 à D14 : voie (a), commencer par L1, L2 et P1, vague 1 classée par population. »

Jeton UE : attribué par Big Boss à 11:52, rendu à la fin de cette fiche.

1. Ce qui a été fait

  • Deux fichiers neufs, et seulement eux, sous l'instantané Snapshot.ps1 -Lot MAPDL1 (Existed=False, D:\Game\LifePlay_Backup_5.5\MAPDL1\manifest.csv) :

    Fichier MD5 après Fins de ligne
    Source/LifePlayEditorTools/LPImportLegacyStreetMapCommandlet.h 34874DB2638C26DE378CCAF5E85F297A LF
    Source/LifePlayEditorTools/LPImportLegacyStreetMapCommandlet.cpp 0678BCCB6C86D9C40D55C11B74742AA0 LF
  • Ce que fait le commandlet :

    • il lit le résumé UE4 (legacy −6 ou −7, non versionné ou version 511 et plus), la table de noms, les imports, puis l'export de classe StreetMap ;
    • il recopie chaque propriété étiquetée dans la propriété 5.8 du même nom, par réflexion. Types pris en charge : booléen, entier, flottant, chaîne, nom, octet ou énumération, Vector2D et Vector natifs, structures étiquetées, tableaux ;
    • il ne recalcule aucune donnée ;
    • une propriété inconnue ou incompatible est sautée par sa taille et comptée au rapport ;
    • il garde les mêmes protections que LPImportCityOSM : écriture seulement sous _Pilot/ ou /lpm_city_<v>/StreetMap/<Ville>, jamais sur un paquet existant, -DryRun sans écriture.
  • Aucun fichier de STM1 n'est touché, ni LifePlayEditorTools.Build.cs : StreetMapRuntime et Json y étaient déjà. MD5 relevés avant l'écriture et relus après, identiques :

    • LPAssetRegistryHelpers.cpp 7B44F5FA… et .h 8E3B725A… ;
    • LPCityWaterSubsystem.cpp CC146CC6… et .h 4A6C6711… ;
    • LPCityWaterMask.h E5027FD7… ;
    • LPBuildCityWaterCommandlet.cpp 96EC9503… et .h AEFBBF33… ;
    • LPImportCityOSMCommandlet.cpp CFFBAAEC… ;
    • LifePlayEditorTools.Build.cs 6487F4B6….
  • Correctif après la première compilation : C4456, la variable P masquait une autre variable (.cpp:188, traité en erreur ; MAPDL1-P1-BUILD.md). Les deux variables ont été renommées ByteProp et EnumProp. La seconde compilation donne code 0, 0 erreur, 0 avertissement (MAPDL1-P1-BUILD-02.md).

  • Référence indépendante : le script ponctuel Saved\MAPDL1\lire_streetmap_ue4.py (MD5 10D1133BC2BCD1802E3E863E6CE55F5A) a reçu l'option --totaux, un décodage complet et générique.

2. Mesuré

Référence Python :

python -I -X utf8 Saved\MAPDL1\lire_streetmap_ue4.py <…>\Paris.uasset <…>\Paris.uexp --totaux
TOTAUX routes=6719 points_routes=33916 sens_unique=4477 noeuds=7999 refs_noeuds=18057 batiments=43789
points_batiments=551010 nommes=2082 amenites=1290 hauteurs=296 parcs=273 points_parcs=6067 eaux=0
BORNES (-411527.8, -291203.4) a (417012.0, 308414.8) cm ; soit 8.29 x 6.00 km
code=0

DryRun (MAPDL1-P1-BUILD-02.md, rapport D:\Game\LifePlay_Data\Mega-essai\P1-dryrun.md) :

TOTAUX routes=6719 points_routes=33916 sens_unique=4477 noeuds=7999 refs_noeuds=18057 batiments=43789 points_batiments=551010 nommes=2082 amenites=1290 hauteurs=296 parcs=273 points_parcs=6067 eaux=0
BORNES (-411527.8, -291203.4) a (417012.0, 308414.8) cm ; soit 8.29 x 6.00 km
DryRun : aucun asset ecrit
CODE 0

Écriture du pilote :

& .\Tools\RunCommandlet.ps1 -Lot MAPDL1 -Commandlet LPImportLegacyStreetMap -EtatDir '<…>\etat\REL\MAPDL1' -Args '-Uasset=D:\Game\LifePlay_Data\Mega-essai\MAPDL1-entetes\Paris.uasset -Package=/Game/Heavy/StreetMap/_Pilot/MAPDL1_ParisLegacy -Report=D:\Game\LifePlay_Data\Mega-essai\P1-ecriture.md'
code=0 duree=26s erreurs=0 avertissements=0
proprietes lues jusqu'a l'octet 25005768 ; reste 4 octets apres la fin de liste (attendu : 4)
TOTAUX routes=6719 points_routes=33916 sens_unique=4477 noeuds=7999 refs_noeuds=18057 batiments=43789 points_batiments=551010 nommes=2082 amenites=1290 hauteurs=296 parcs=273 points_parcs=6067 eaux=0
BORNES (-411527.8, -291203.4) a (417012.0, 308414.8) cm ; soit 8.29 x 6.00 km
asset ecrit : /Game/Heavy/StreetMap/_Pilot/MAPDL1_ParisLegacy (…/Content/Heavy/StreetMap/_Pilot/MAPDL1_ParisLegacy.uasset), 29616770 octets
CODE 0

Relecture depuis le disque, par un autre outil :

& .\Tools\RunCommandlet.ps1 -Lot MAPDL1 -Commandlet LPCheckStreetMap -EtatDir '<…>\etat\REL\MAPDL1' -Args '-Path=/Game/Heavy/StreetMap/_Pilot -CSV=D:\Game\LifePlay_Data\Mega-essai\P1-relecture.csv'
code=0 duree=21s erreurs=0 avertissements=24          (les 24 lignes sont la synthèse de l'outil, écrite au niveau Warning)
Ville;Charge;Routes;Noeuds;Batiments;Eaux;Parcs;BatimentsNommes;AvecAmenity;TypesAmenity
MAPDL1_ParisLegacy;1;6719;7999;43789;0;273;2082;1290;120
Paris;1;22280;25221;110949;0;658;4246;1781;111

MD5 du pilote : 5BCB7785B9E5564377D9EE54E7D85A02. UeState.ps1 -Kind Editeur en fin de fiche : processus=0 editeur=0, code 0.

3. Verdict

  • Les 13 comptes et les bornes sont identiques entre trois lectures :
    • le lecteur Python, indépendant du moteur ;
    • le commandlet en DryRun et en écriture ;
    • la relecture du paquet écrit par LPCheckStreetMap.
  • Le paquet se charge, avec 0 propriété inconnue et 0 propriété incompatible.

La voie (a) est établie pour Paris : l'ancienne carte est reprise à l'identique en UStreetMap 5.8.

Non mesuré :

  • le maillage Static/<Ville> régénéré par LPBuildCityStatic et sa comparaison avec l'ancien Static\Paris.uexp (lot P2) ;
  • un zip d'une autre année (2020 à 2022) ;
  • l'aspect en jeu.

La ligne Paris du CSV est l'ancien pilote STM1 (_Pilot/Paris, OSM de 2026, 11 × 8 km). Elle n'est pas à comparer.

4. Écarts

  • Snapshot : pwsh -File Snapshot.ps1 -Path a, b a inscrit une entrée fautive …Commandlet.h, (avec la virgule). Les deux fichiers ont ensuite été inscrits un par un. L'entrée fautive est à ignorer au retour arrière : la ligne Existed=False d'un chemin inexistant ne retire rien.
  • Résumés de Build.ps1 : ils sont dans Docs\Migration\etat\MAPDL1\, avec l'avertissement « EtatDir.ps1 : lot 'MAPDL1' hors table », donc un dossier nouveau à la racine d'etat\, ce qui est contraire à lp-lot (« Où écrire »). Je ne l'ai ni déplacé ni corrigé : Tools\EtatDir.ps1 est un outil partagé avec l'addon. Décision à Big Boss : ajouter MAPDL1 (projet REL) à la table, puis déplacer les deux .txt.
  • Commandlets de lecture lancés en plus, sous le même jeton, pour préparer L4 comme Big Boss l'a demandé : LPDumpFunction -BP=City, -BP=City -Fn=EventGraph -Pins -Exec, -BP=CityMenu -Fn=EventGraph -Pins -Exec. Ils sont en lecture seule. Résultat dans MAPDL1-L4-CART-01.md.

5. Fichiers

À commiter (ticket du lot ; aucun fichier partagé) :

  • A Source/LifePlayEditorTools/LPImportLegacyStreetMapCommandlet.h
  • A Source/LifePlayEditorTools/LPImportLegacyStreetMapCommandlet.cpp
  • A Docs/Migration/etat/REL/MAPDL1/ : MAPDL1-CART-01.md, MAPDL1-SPEC-01.md, MAPDL1-SPEC-02.md, MAPDL1-SPEC-03.md, MAPDL1-L1-CART-02.md, MAPDL1-L2-RECH-01.md, MAPDL1-P1-IMPL.md, MAPDL1-P1-BUILD.md, MAPDL1-P1-BUILD-02.md, MAPDL1-L4-CART-01.md, MAPDL1-JOURNAL-BROUILLON.md

Hors git :

  • Content/Heavy/StreetMap/_Pilot/MAPDL1_ParisLegacy.uasset (pilote) ;
  • Saved/MAPDL1/lire_streetmap_ue4.py ;
  • D:\Game\LifePlay_Data\Mega-essai\ (extraits et rapports) ;
  • résumés .txt dans etat\REL\MAPDL1\ et etat\MAPDL1\, non suivis par git.

Retour arrière : .\Tools\Restore.ps1 -Lot MAPDL1 -WhatIf, puis sans -WhatIf. Il retire les deux sources et le pilote.

6. Compte rendu

  • Résultat : réussi. Le commandlet est compilé, le pilote Paris écrit et relu, avec des comptes identiques à la référence.
  • Tours : ≈ 22 pour P1 (déclaré ; FicheStats.py fait foi).
  • À verser :
    • lp-commandlets § Cartes de villes : ajouter LPImportLegacyStreetMap (-Uasset= [-Uexp=] (-DryRun | -Package=) [-Report=], reprise d'une carte « NEW Maps » UE4 cuite) ;
    • lp-commandlets : avec RunCommandlet.ps1, passer -Args par une variable dans la même session pwsh ($a = '-Uasset=…'; & .\Tools\RunCommandlet.ps1 … -Args $a). Par pwsh -File, une valeur qui commence par - est prise pour un paramètre (« Argument manquant pour le paramètre Args ») ;
    • lp-lot : Snapshot.ps1 -Path a, b par pwsh -File inscrit a, comme chemin. Un chemin par appel, ou -Command.
    • lp-city § 7 et lp-commandlets § Cartes de villes : aucun asset de travail ne reste sous Content\ entre deux sessions. DirectoriesToAlwaysCook couvre tout /Game. Un asset de travail sous _Pilot/, absent de la release de base, fait échouer la cuisson des packs (« Uncooked … referenced by DLC »), comme ici avec MAPDL1_ParisLegacy. Il faut l'écrire sous un chemin exclu de la cuisson, ou le retirer, par déplacement, à la fin du lot.

Après coup (Big Boss) : le pilote a été déplacé hors de Content\, vers D:\Game\LifePlay_Backup_5.5\MAPDL1\pilote-hors-content\MAPDL1_ParisLegacy.uasset (MD5 5BCB7785… inchangé). La mention « Hors git : … pilote » du § 5 désigne maintenant ce chemin. Un Restore.ps1 -Lot MAPDL1 n'a plus de pilote à retirer.

  • Suite : P2, le pilote du maillage, sur la première ville de la vague 1 (Tokyo) : l'utilisateur télécharge Tokyo.zip, puis LPBuildCityStatic -CompareStreetMap et la comparaison avec l'ancien Static. État : P1 clos, jeton UE rendu.