LifePlay-Revival/Docs/Migration/etat/REL/STM1/STM1-SPEC-06.md
edujiro5972 56dfcfc3d2 LifePlay UE 5.8 : état de développement au 2026-10-20
Tickets : PUB-20261020-T1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:35:10 +02:00

10 KiB
Raw Blame History

Fiche STM1-SPEC-06 — Niveau N2 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · STM1 » (pas de sous-agent) — Skills sk-protocol

STM1-SPEC-06 : packs de villes téléchargeables (étude) ; état du téléchargement P1 de Paris (2026-10-20)

Ordre : Big Boss (local_104ff22d).

  • Accord de l'utilisateur cité : « oui télécharge » (annonce P1 de STM1-SPEC-05).
  • Décisions de l'utilisateur relayées par Big Boss : Paris, Londres et Bath dans le jeu de base ; les autres villes en packs externes à télécharger, avec à terme un bouton Download dans le menu des villes.
  • Consignes : télécharger P1 une seule fois, arrêt sur erreur Overpass ; pas d'import ; étude des packs sans décision à la place de l'utilisateur.

0. Téléchargement P1 de Paris : ÉCHEC (Overpass saturé), aucune donnée

  • Une seule tentative, 2026-10-20T11:37:09Z : POST https://overpass-api.de/api/interpreter, requête qp-paris.txt (QP de SPEC-05 § 3.2).
  • Réponse : HTTP 502, 534 octets, text/plain : « 502 Gateway Timeout. This Overpass API server is currently at capacity. All query workers are busy and the request queue is full. » Le serveur conseille de réessayer plus tard, avec une attente croissante.
  • Arrêt conforme : pas de nouvelle tentative. Réponse conservée sous D:\Game\LifePlay_Data\OSM\STM1-PARIS-20261020\ERREUR-502-overpass-20261020T113709Z.txt ; LISEZMOI.txt écrit (état d'échec, accord cité, licence). Aucune donnée OSM.
  • Options (nouveau GO requis) :
Option Principe Pour Contre
R-A (recommandée) même requête, même serveur, une nouvelle tentative plus tard (en heures creuses), sous le même accord si l'utilisateur le confirme source et requête déjà approuvées dépend de la charge du serveur public
R-B instance Overpass publique alternative (par exemple https://overpass.kumi.systems/api/interpreter, liste officielle : https://wiki.openstreetmap.org/wiki/Overpass_API#Public_Overpass_API_instances) souvent moins chargée nouvelle source : nouvel accord de l'utilisateur
R-C BBBike Paris.osm.pbf (231 Mo), puis découpage et conversion en XML par osmium fichier statique, sans file d'attente installer osmium (outil tiers) et télécharger plus large : décision de l'utilisateur

1. Ce qui existe pour les mods d'assets (établi)

Fait Source
Un mod d'assets est un plugin de type Mod dans LifePlay/Mods/<id>/ (<id>.uplugin, conteneurs Content/Paks/Windows/*). Le moteur le découvre toujours au démarrage (FPluginManager::ReadAllPlugins) et monte /<id>/ et ses conteneurs Docs/23_Cycle_De_Vie_Mod.md:21-24, 75-76, 183-185
Fabrication : LifePlay-Sandbox/Tools/BuildMod.ps1 -Name <id> -Version <jeu>. Cuisson DLC du seul plugin contre une version de référence du jeu (Releases/<jeu>) ; archive <id>-<version>-for-LifePlay-<jeu>.zip 23_Cycle_De_Vie_Mod.md:56-59
Garde au démarrage (LPModGuard, U7-T7) : version du conteneur IoStore et d'AssetRegistry.bin égale à celle du moteur ; EngineVersion du .uplugin ; MODULE_GAME_VERSION entre la version minimale et ProjectVersion. Sinon, le mod est démonté (point de montage retiré, paks démontés) Source/LifePlay/LPModGuard.h:1-25
Les assets d'un mod vivent sous /<id>/, alors que GI.Cities pointe vers /Game/Heavy/StreetMap/<Ville> et Static/<Ville> CART-02 ; trace CITIES
GI.MoveCity résout ces deux chemins par ULPAssetRegistryHelpers::GetAssetByObjectPath (C++ du projet) CART-02 M2 ; Source/LifePlay/LPAssetRegistryHelpers.cpp
Moteur 5.8 : FHttpModule (Runtime/Online/HTTP/Public/HttpModule.h) ; FPlatformMisc::GetSHA256Signature et FSHA256Signature (GenericPlatformMisc.h:322, 1405). FZipArchiveReader est dans le module Developer FileUtilities, donc absent en Shipping : pas de décompression de zip en jeu en-têtes du moteur

2. Format d'un pack de villes

Choix Proposition Pourquoi Alternative
Unité un mod d'assets par pack (plugin Mod, Mods/LPCities_<Région>/), contenant pour chaque ville /<pack>/StreetMap/<Ville>, /<pack>/StreetMap/Static/<Ville> et, en option, /<pack>/StreetMap/Water/<Ville> réutilise toute la chaîne existante : BuildMod, LPModGuard, montage au démarrage, gestionnaire de mods pak « patch » qui remplace directement les chemins /Game/… : plus simple à résoudre, mais hors de la garde et du gestionnaire de mods ; écrase le jeu de base
Résolution des chemins redirection en C++ dans LPAssetRegistryHelpers::GetAssetByObjectPath. Pour un chemin `/Game/Heavy/StreetMap/[Static/ Water/]`, si un pack monté fournit la même ville, rendre l'asset du pack ; sinon le chemin de base aucune modification du GI ni de Cities ; le pack « gagne » s'il est présent
Pack absent la ville factice actuelle reste (comportement d'aujourd'hui) ; option : marquer la ville « carte à télécharger » dans le menu aucune régression ; partie jouable masquer la ville sans pack : change la liste
Découpage par région (par exemple Europe Ouest, Europe Est, Amérique du Nord, Amérique du Sud, Asie-Océanie, Afrique) ; ou par ville pour les grandes métropoles téléchargements choisis un pack par ville : 278 paquets à maintenir
Taille par ville à décider avant tout lot : Londres (11,2 × 8,1 km) pèse 144 Mo cuit. Une zone de 3 × 3 km en ferait environ 15 à 20 (estimé) une région d'environ 50 villes : environ 1 Go en 3 × 3 km, contre environ 7 Go à l'échelle de Londres (estimé) simplifier les maillages (LOD)
Version .lpmod : MODULE_GAME_VERSION = version de référence de cuisson ; .uplugin : EngineVersion ; le pack est recuit à chaque montée de moteur (5.8 → 5.9), pas forcément à chaque version du jeu (selon les contrôles min/max) cohérent avec LPModGuard —
Licence CREDITS.txt du pack : « Map data © OpenStreetMap contributors, ODbL 1.0 », source exacte (requête ou extrait, date). Données dérivées d'OSM : .osm source conservé et fourni sur demande (partage à l'identique, prudence) règle des crédits du projet ; ODbL —

3. Étape 2 : bouton « Download » dans le menu des villes (esquisse)

  1. Manifeste publié (JSON, une URL fixe), par pack :
    • id, version, game_version_min/max, engine_version ;
    • liste des villes ;
    • fichiers (chemin relatif sous Mods/<id>/, taille, SHA-256) ;
    • URL de chaque fichier. Les fichiers sont séparés (.uplugin, .lpmod, CREDITS.txt, Content/Paks/Windows/<id>LifePlay.{pak,utoc,ucas}), puisqu'un zip ne peut pas être décompressé en Shipping (§ 1).
  2. Sous-système C++ ULPCityPacksSubsystem :
    • au menu des villes : lecture du manifeste par FHttpModule (avec délai d'attente) ;
    • pour chaque ville sans pack : bouton Download, avec la taille affichée et une demande de consentement (téléchargement, source, licence) ;
    • téléchargement de chaque fichier dans un dossier temporaire Saved/Downloads/<id>/, avec progression ;
    • vérification SHA-256 (FPlatformMisc::GetSHA256Signature) ; en cas d'écart : suppression du temporaire et message ;
    • si tout est conforme : déplacement atomique vers <jeu>/Mods/<id>/.
    • Message « Le pack sera disponible au prochain lancement » : le montage se fait au démarrage par le moteur (§ 1), contrôlé par LPModGuard. Pas de montage à chaud au pilote.
    • Désinstallation : par le gestionnaire de mods existant (supprimer Mods/<id> et Content/Modules/<id>).
  3. Hébergement en téléchargement direct (choix de l'utilisateur) :
    • releases du Forgejo de l'utilisateur : URL directes, quota et bande passante du serveur à vérifier ;
    • ou un hébergeur public de fichiers (releases GitHub, itch.io…) : conditions et limites à lire. Le manifeste peut vivre au même endroit.
  4. Sûreté : HTTPS seulement ; manifeste et fichiers vérifiés par SHA-256 ; aucune exécution de fichier téléchargé (paks seulement, montés par le moteur) ; aucune donnée personnelle envoyée. Option : signature du manifeste.
  5. Chiffrage (estimé) :
    • redirection C++ des chemins : ≈ 0,5 j ;
    • commandlet de production de pack (import, maillage, eau, BuildMod) : ≈ 2 j ;
    • sous-système de téléchargement et interface (bouton, consentement, progression) : ≈ 3 à 4 j ;
    • publication : ≈ 0,5 j ;
    • par région : production, contrôles, revue.

4. Risques

Risque Niveau Parade
Poids des packs (§ 2) élevé décision de taille de zone avant tout lot ; mesure au pilote de Paris
Parties existantes dans une ville qui reçoit sa vraie carte (bâtiments du gabarit disparus) moyen essai de chargement au pilote de Paris (SPEC-05 § 3.4) ; avertissement au téléchargement
Version : pack cuit pour un autre moteur ou jeu → refusé par LPModGuard moyen game_version_min/max dans le manifeste ; le bouton ne propose que les packs compatibles
Disponibilité de l'hébergement et coût de la bande passante moyen miroirs ; tailles modestes
Charge sur Overpass lors de la production (278 villes) moyen extraits Geofabrik par pays avec osmium (décision) ou instance Overpass locale
Licence ODbL (dérivés distribués) faible crédits et .osm source fournis

5. Décisions attendues (utilisateur, via Big Boss)

  1. Paris P1 : R-A (réessayer plus tard la même requête : confirmation de l'accord), R-B (autre instance : nouvel accord) ou R-C (osmium).
  2. Packs : format mod d'assets avec redirection C++ (proposé) ou pak de remplacement.
  3. Taille de zone par ville (proposé : 3 × 3 km pour les packs ; Paris dans le jeu de base au format de Londres ?).
  4. Découpage : par région (proposé) ou par ville.
  5. Hébergement : releases du Forgejo de l'utilisateur ou autre.

Tours : ≈ 6 / 40 (déclaré ; FicheStats.py fait foi).

À verser : doc 23 ou doc de la carte — un mod d'assets vit sous /<id>/ et ne remplace pas /Game/... ; la résolution des villes passe par LPAssetRegistryHelpers::GetAssetByObjectPath (point d'accroche C++). FZipArchiveReader est absent en Shipping.

Suite : Big Boss doit présenter le § 5 (dont la nouvelle tentative P1) ; aucun import avant le GO du jeton UE. État : étude close ; P1 en échec, sans donnée.