10 KiB
10 KiB
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êteqp-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)
- 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).
- 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>etContent/Modules/<id>).
- au menu des villes : lecture du manifeste par
- 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.
- 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.
- 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)
- 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). - Packs : format mod d'assets avec redirection C++ (proposé) ou pak de remplacement.
- Taille de zone par ville (proposé : 3 × 3 km pour les packs ; Paris dans le jeu de base au format de Londres ?).
- Découpage : par région (proposé) ou par ville.
- 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.