Bundle déjà généré
Le mod lit bundle_index.json, résout le bundle actif et exige au minimum l'eau linéaire, l'eau surfacique et les polygones de zonage avant d'afficher quoi que ce soit.
Overlays géospatiaux · Cities: Skylines II · v0.1.2
CityTimelineMod charge un bundle GeoJSON déjà généré par cs2-realmap-generator et l'affiche sur la carte du jeu en calques lisibles — routes, chemins, eau, zonage, rail et services — pour servir de repères géographiques pendant la construction.
Le mod ne génère aucune donnée et ne télécharge rien. Les calques restent visuels et informatifs : aucun objet n'est créé dans le jeu. Le module LargeMap 57,344 km et son extension PlayableWorld sont explicitement expérimentaux.
01Overview
La séparation est nette : cs2-realmap-generator prépare les données hors du jeu, CityTimelineMod les lit et les affiche. Le mod vérifie d'abord le contrat du bundle, puis dessine les calques au sol.
Le mod lit bundle_index.json, résout le bundle actif et exige au minimum l'eau linéaire, l'eau surfacique et les polygones de zonage avant d'afficher quoi que ce soit.
Chaque famille de géométries devient un lot de maillage affiché sur le terrain. Aucun prefab, aucun spawner, aucune modification des réseaux du jeu.
Des réglages de calibration aident à faire correspondre les géométries au relief importé ; l'alignement fin du terrain reste un chantier ouvert.
Un aperçu web des calques, construit à partir d'un vrai extrait OpenStreetMap et d'un relief réel, est disponible dans la démo 3D interactive (hors jeu, à titre de démonstration).
02Pipeline de données
Le générateur est un pipeline Python en ligne de commande : une seule entrée produit le pack GeoJSON, les deux PNG, le manifeste, puis synchronise le résultat vers le mod.
Requêtes Overpass avec découpage automatique des grandes emprises, reprises et cache réutilisable, puis classification des objets vers les catégories du jeu.
31 sources GeoJSON contrôlées par index (couches, routes, services) et un rapport d'extraction, assemblées en un bundle de 34 fichiers.
Deux PNG 16 bits jusqu'à 4096 px : worldmap sur l'emprise étendue, heightmap sur l'emprise jouable, avec normalisation d'altitude paramétrable.
manifest.json, timeline_config.json et bundle_index.json sont écrits puis synchronisés vers le mod de façon atomique ; la publication est refusée si le jeu tourne.
geojson_pack/ ├─ geojson/ │ ├─ all_features.geojson # base overlays (hors rail & services) │ ├─ roads.geojson + 8 variantes de classe │ ├─ paths.geojson │ ├─ water_lines_clipped.geojson │ ├─ water_areas_clipped.geojson │ ├─ zoning_polygons.geojson + 7 couches │ ├─ railways.geojson │ └─ services/ ×9 (education, medical, …) ├─ reports/ extraction_report · layer_index │ roads_index · services_index ├─ worldmap.png # emprise étendue, 16 bits ├─ heightmap.png # emprise jouable, 16 bits ├─ manifest.json · timeline_config.json └─ bundle_index.json
Les altitudes proviennent de tuiles Terrain-RGB (clé d'API requise) ou du service américain 3DEP, limité aux États-Unis continentaux.
03Geospatial Layers
Chaque calque provient directement des fichiers du pack. Rien n'est inventé : ce qui n'est pas dans la source n'apparaît pas à l'écran.
Polylignes issues du pack GeoJSON, scindées par classe : highway, ramp, large, medium, small, gravel, plus une variante « driveable » découpée sur l'emprise.
Calque séparé des cheminements piétons et sentiers, utile pour lire la trame fine du tissu urbain sans surcharger les routes.
Deux fichiers distincts, découpés sur l'emprise du heightmap : water_lines_clipped pour les cours d'eau, water_areas_clipped pour les plans d'eau.
Résidentiel, commercial, retail, bureau, industriel, mixte et stationnement, avec leurs agrégats et le polygone de zonage global.
railways.geojson couvre rail, voie étroite, tram, light rail et métro, ainsi que les voies de service (faisceaux, garages, antennes, communications).
Éducation, incendie, santé, parcs, électricité, déchets, transport, eau, communications — en points ou centroïdes uniquement, sans réseaux techniques.
Limites connues du générateur : les services sont réduits à des points ou centroïdes, et la densité résidentielle reste basse par défaut car l'étiquette du nombre d'étages manque souvent dans OpenStreetMap.
04Module expérimental
Le module étend l'emprise de la carte d'origine du jeu par un facteur 4, via des patches Harmony sur les systèmes de terrain et de monde. Le monde étendu sert de contexte géographique autour d'une zone jouable plus restreinte.
Le carré intérieur représente l'emprise du jeu d'origine, soit un quart du côté de l'emprise étendue — l'échelle du schéma est exacte.
05Technical Architecture
Un mod C# compilé avec l'outillage officiel du jeu, volontairement inspectable : le code source public montre aussi ce qui est délibérément exclu de la compilation.
Mod C# compilé avec le SDK de modding Cities: Skylines II (Mod.props / Mod.targets), patché via Harmony 2.2.2 et lecture JSON par Newtonsoft.Json. Ni BepInEx, ni Unity Mod Manager.
Le mod lit bundle_index.json depuis un dossier de bundles configurable, sélectionne le bundle actif et vérifie la présence des fichiers requis avant tout affichage.
Les géométries sont converties en lots de maillage rendus au sol, calque par calque. Aucun objet de jeu n'est créé : l'affichage reste visuel et informatif.
Un HUD React (interface CoHTML du jeu) sur Alt+Z, encore en construction, et un panneau de débogage historique sur Alt+H. Réglages persistés dans config.json.
06Development Status
Le mod est en développement expérimental. Ce qui est listé comme expérimental ou hors périmètre ne doit pas être considéré comme fonctionnel.
07 — Développement public
CityTimeline-Mod contient le mod C#, son interface et la documentation de son fonctionnement à l'exécution. Aucune licence n'a encore été retenue pour ce dépôt : le code est consultable, sans conditions de réutilisation définies à ce stade.
cs2-realmap-generator contient le pipeline Python d'extraction, ses outils de validation et un visualiseur cartographique web ; il est publié sous licence MIT.