Overlays géospatiaux · Cities: Skylines II · v0.1.2

Build cities from the real world.

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.

Fichiers du bundle
34
Sources GeoJSON
31
Familles de services
9
LargeMap · exp.
57,344 km
geojson_pack / all_features.geojsonlayers · 6
RoutesCheminsEauZonageRailServices

01Overview

Un lecteur de bundles, pas un générateur

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.

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.

Calques visuels au sol

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.

Aide au calage

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

Du relevé OpenStreetMap au calque affiché

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.

  1. Extraction OpenStreetMap

    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.

  2. Pack GeoJSON validé

    31 sources GeoJSON contrôlées par index (couches, routes, services) et un rapport d'extraction, assemblées en un bundle de 34 fichiers.

  3. Worldmap + heightmap PNG

    Deux PNG 16 bits jusqu'à 4096 px : worldmap sur l'emprise étendue, heightmap sur l'emprise jouable, avec normalisation d'altitude paramétrable.

  4. Manifeste et synchronisation

    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.

exports / bundles / <bundle_id>34 fichiers
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
Paramètres réels du générateur
Emprise worldmap
57,344 km
Emprise heightmap
14,336 km
Résolution PNG
4096 px · 16 bits
Niveau de mer CS2
511,7 m
Identifiant de bundle
ville_pays_lat_lon

Les altitudes proviennent de tuiles Terrain-RGB (clé d'API requise) ou du service américain 3DEP, limité aux États-Unis continentaux.

03Geospatial Layers

Six familles de calques, telles qu'elles existent dans le bundle

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.

6 classes

Routes

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.

paths.geojson

Chemins

Calque séparé des cheminements piétons et sentiers, utile pour lire la trame fine du tissu urbain sans surcharger les routes.

linéaire + surfacique

Eau

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.

7 couches

Zonage

Résidentiel, commercial, retail, bureau, industriel, mixte et stationnement, avec leurs agrégats et le polygone de zonage global.

calque autonome

Rail

railways.geojson couvre rail, voie étroite, tram, light rail et métro, ainsi que les voies de service (faisceaux, garages, antennes, communications).

9 familles

Services

É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

LargeMap 57,344 km = 14,336 km × 4

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.

  • Carte d'origine 14 336 m ; facteur 4 ; emprise étendue 57 344 m.
  • LargeMap est actif par défaut ; PlayableWorld est désactivé par défaut et en dépend.
  • Les deux modules sont documentés comme expérimentaux dans le dépôt.
  • Des garde-fous de sécurité existent dans le code pour neutraliser le module en cas de faute à l'exécution.
  • Comportement instable attendu sur les grandes emprises : cette couche n'est pas finalisée.
Emprise · proportions réelles×4
LargeMap 57 344 m
14 336 m

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

Côté mod : lecture, vérification, rendu

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.

  1. 01

    Outillage officiel + Harmony

    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.

  2. 02

    Résolution du bundle

    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.

  3. 03

    Overlay au sol

    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.

  4. 04

    Interfaces de contrôle

    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.

C# · SDK de modding officielHarmony 2.2.2Newtonsoft.Json 13.0.3HUD React · interface du jeuGénérateur Python 3.11

06Development Status

Où en est réellement le projet

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.

Implémenté
  • Lecture du bundle GeoJSON et de son index
  • Rendu des calques routes, chemins, eau, zonage, rail, services
  • Aide au calage du terrain et panneau de débogage
  • Pipeline de génération complet côté générateur
Expérimental
  • Module LargeMap 57,344 km (actif par défaut)
  • Module PlayableWorld (désactivé par défaut, dépend de LargeMap)
  • HUD React en cours de construction
  • Stabilité à l'exécution sur emprises très larges
Hors périmètre
  • Import ou spawn de routes en jeu : code exclu de la compilation
  • Aucun téléchargement de données depuis le mod
  • Services en polygones ou réseaux techniques (égouts, lignes)
  • Aucune version de jeu garantie, aucune licence retenue pour le mod

07 — Développement public

Deux dépôts, un pipeline

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.