# Map System ## Vue d'ensemble Le système de carte de Warfactory utilise une architecture hybride combinant une **carte globale réelle éditable** avec des **cartes locales générées** pour optimiser performance et gameplay. ## Architecture Multi-Niveaux ### Zoom Discret - 2 Niveaux **Large Map (Carte Globale)** : - **Carte monde** : Scope planétaire complet - **V1 développement** : Carte faite à la main pour tests - **Éditable** : Modifications possibles selon besoins gameplay - **Navigation longue distance** : Node-based system - **Scope** : Pays, régions, logistique macro **Zoom Local (Tiles de Jeu)** : - **Taille tiles** : 1m x 1m (précision Factorio) - **Chunks locaux** : 64x64 tiles (64m x 64m) [proposition] - **Cartes générées** : Créées à la demande par serveur - **Style Factorio** : Placement précis usines, bras, tapis roulants - **Persistent** : Gardées en mémoire une fois générées - **Scope** : Construction détaillée, combat local ## Système de Navigation ### Navigation Longue Distance **Transport Terrestre** : - **Node routier** : Réseau routier principal - **Node rail** : Infrastructure ferroviaire - **Node maritime** : Ports et voies navigables **Transport Aérien** : - **Point A to Point B** : Navigation directe sans contraintes nodes - **Pas de réseau** : Vol libre dans espace aérien ### Chunks Imbriqués **Optimisation logarithmique** : - **Hiérarchie chunks** : Structure imbriquée pour performance - **Navigation intelligente** : Pathfinding optimisé - **Streaming efficace** : Chargement sélectif selon zoom ## Gameplay et Construction ### Échelles de Construction **Niveau Local (Style Factorio)** : - **Bras (inserter)** : Taille = taille joueur - **Usines joueur** : 2x2, 3x3, 4x4, parfois plus grandes - **Usines IA/personnel** : 40x30, 10x10, 15x30 (grandes installations) - **Infrastructure** : Tapis roulants, réseaux électriques **Niveau Global** : - **Placement macro** : Positionnement bases, régions industrielles - **Infrastructure** : Routes, rails, ports - **Effets cascade** : Modifications locales → impact global ## Combat et Intégration ### Combat Local sur Vraie Map **Principe** : - **Pas d'instances** : Combat sur cartes locales réelles - **Continuité** : Même terrain que construction - **Persistance** : Dégâts restent après combat **Intégration Logistique** : - **Routes visualisées** : Infrastructure visible sur map - **Supply lines** : Convois suivent réseau routier/rail - **Vulnérabilités** : Infrastructure attaquable ## Streaming et Performance ### Système de Chargement **Client-Side** : - **Streaming intelligent** : Charge zone selon zoom/position - **Unload automatique** : Libère mémoire zones non-visitées - **Performance optimale** : Affiche uniquement écran visible **Multi-joueur** : - **Synchronisation serveur** : Redistribue changements aux joueurs en zone - **Pas de conflit** : Système chunk résout collisions ### Transitions de Vue **Zoom automatique** : - **Seuil automatique** : Switch auto global→local selon niveau zoom - **Boutons directs** : "Zoom on player" pour accès rapide - **Transition fluide** : Passage seamless entre niveaux **Isolation joueurs** : - **Pas de notifications** : Connexion/déconnexion autres joueurs invisible - **Pas de chat** : Communication uniquement via système messages (futur) - **Isolation totale** : 10 joueurs sur pays différents peuvent s'ignorer complètement ### Optimisation Visuelle **Rendu Local** : - **Joueur voit** : Sa tile + tiles adjacentes - **Caméras optionnelles** : Accès distant aux usines du joueur - **Performance** : Ultra-simple, affichage écran uniquement ## Fog of War et Reconnaissance ### Système de Mémoire **FOW par Chunks** : - **Full Black** : Zones jamais visitées - **Mémoire persistante** : Client garde info zones explorées - **Granularité** : Par chunk, pas de micro-FOW ### Intel Gathering Progressif **Qualité reconnaissance** : - **Satellite bas** : "Bâtiments ukrainiens en Ukraine" - **Satellite high-end** : "Usines tanks Company X spécifique" - **Progression détail** : Bâtiment → Usine → Usine armement → Usine armement Company X ### Persistance Intelligence **Mémoire par Actor** : - **Sauvegarde info** : État/Company garde intel collecté - **Expiration possible** : Info peut devenir obsolète - **Partage conditionnel** : Selon alliances/accords ## Map Éditable et Modifications ### Carte Globale Réelle **Base authentique** : - **Géographie réelle** : Ukraine, Europe, monde selon scope - **Modifiable** : Adaptations pour gameplay/équilibrage - **Infrastructure réelle** : Routes, villes, ports existants ### Répercussions Croisées **Local → Global** : - **Destruction infrastructure** : Pont local → route globale coupée - **Constructions majeures** : Nouvelle usine → impact économique régional **Global → Local** : - **Artillerie longue portée** : Dégâts route globale → terrain local - **Événements macro** : Bombe nucléaire → dégradation locale généralisée ## Structures de Données Techniques ### Architecture Chunks Optimisée **Tile Structure Principal (Terrain)** : ```cpp struct Tile { uint16_t terrain_type; // 2 bytes (65k types terrain possibles) uint8_t elevation; // 1 byte (0-255 hauteur) uint16_t building_id; // 2 bytes (ref vers building) uint16_t flags; // 2 bytes (passable, destructible, etc.) uint8_t padding; // 1 byte (alignment mémoire) }; // = 8 bytes par tile ``` **Chunk Principal 64x64** : - **Taille** : 4096 tiles × 8 bytes = 32KB par chunk - **Usage** : Terrain, navigation, construction - **Fréquence** : Chargé souvent, dense **Système Ressources par Patches (Factorio-like)** : ```cpp // Chunks ressources non-alignés sur les patches struct ResourcePatch { uint16_t resourceId; // Fer, cuivre, pétrole, uranium, etc. uint64_t original_quantity; // Quantité initiale (future-proof) uint64_t remaining_quantity; // Ce qui reste actuellement uint8_t base_richness; // Richesse de base (items/sec/drill) vector polygon; // Forme réelle du patch (ex: 78x53) uint32_t active_drills; // Nombre de drills qui minent BoundingBox bounds; // Zone couverte par le patch float getCurrentExtractionRate() { if (remaining_quantity == 0) { return 0.0f; // STOP NET - patch épuisé } double depletion_ratio = (double)remaining_quantity / original_quantity; // Formule diminishing returns : rate = base * (1 - (1-depletion)/2) float efficiency = 1.0f - (1.0f - depletion_ratio) / 2.0f; return base_richness * efficiency; } float getTotalOutput() { return getCurrentExtractionRate() * active_drills; } bool isExhausted() { return remaining_quantity == 0; } }; struct MiningDrill { Point2D position; uint8_t coverage_area; // 1-25 tiles selon tech ResourcePatch* target_patch; // Référence au patch miné float getOutput() { if (!target_patch || target_patch->isExhausted()) { return 0.0f; // Drill inutile si patch épuisé } return target_patch->getCurrentExtractionRate(); } }; ``` **Mécaniques d'Extraction** : - **Partage équitable** : N drills = N × extraction_rate du patch - **Diminishing returns** : Plus le patch s'épuise, moins il est efficace - **Arrêt brutal** : 0% restant = 0 extraction (pas de résiduel) - **Exemple** : Patch 50% épuisé = 75% d'efficacité par drill **Exemples de Capacité** : - **Patch fer standard** : 10 millions d'unités - **Gisement pétrole** : 1 milliard d'unités (quasi-infini) - **Mine uranium** : 100 millions d'unités (extraction très lente) **Avantages Architecture** : - **Séparation claire** : Terrain vs ressources = systèmes indépendants - **Performance** : Terrain chargé en continu, ressources à la demande - **Extensibilité** : 65k terrain types = variantes urbain/rural/industriel - **Mémoire optimisée** : Pas de ressources stockées dans chaque tile - **Alignment CPU** : Padding assure performance mémoire ### Metadata Chunks ```cpp struct ChunkMeta { int32_t chunk_x, chunk_y; // Position globale uint32_t generation_seed; // Pour reproduction terrain bool is_dirty; // Modifié depuis last save timestamp last_access; // Pour LRU unloading uint16_t active_buildings; // Compteur optimisation vector; // Bâtiments multi-tiles }; // ~1-5KB selon buildings présents ``` **Total Footprint par Chunk** : - Terrain : 32KB (toujours chargé) - Ressources : 0-16KB (selon density, sparse) - Metadata : 1-5KB (selon buildings) - **Total** : 33-53KB par chunk = très raisonnable ## Génération et Persistance ### Cartes Locales **Génération à la demande** : - **Serveur génère** : Selon besoins joueur/combat - **Persistance** : Sauvegarde une fois créée avec seed - **Reproduction** : Même seed = même terrain généré **Seed System** : ```cpp // Génération déterministe par chunk uint32_t chunk_seed = global_seed ^ (chunk_x << 16) ^ chunk_y; // Assure reproduction exacte du terrain ``` **Déclencheurs génération** : - **Joueur visite** : Zone explorée première fois - **Combat déclaré** : Battlefield généré automatiquement - **Construction** : Développement industriel local ## Architecture Modulaire de Génération Procédurale ### Principe de Modularité **Design pour IA** : Chaque module = interface simple + logic testable + règles claires ```cpp class IGenerator { public: virtual void generate(ChunkData& chunk, GenerationContext& context) = 0; virtual void validate(const ChunkData& chunk) = 0; virtual bool canGenerate(const GenerationContext& context) = 0; }; ``` ### Modules de Génération #### TerrainGenerator ```cpp class TerrainGenerator : public IGenerator { private: PerlinNoiseGenerator elevation; PerlinNoiseGenerator moisture; BiomeClassifier biomes; public: void generate(ChunkData& chunk, GenerationContext& context) override { // Génère elevation, biomes, terrain de base // Input: chunk position, global seed // Output: terrain_type pour chaque tile } }; ``` #### RoadNetworkGenerator ```cpp class RoadNetworkGenerator : public IGenerator { private: DelaunayTriangulation connectivity; MinimumSpanningTree optimizer; public: void generate(ChunkData& chunk, GenerationContext& context) override { // Génère réseau routier cohérent // Input: terrain, points d'intérêt, chunks voisins // Output: routes principales + secondaires } }; ``` #### BuildingLayoutGenerator ```cpp class BuildingLayoutGenerator : public IGenerator { private: BSPTreePartitioner space_divider; BuildingTemplateManager templates; ZoningCalculator land_use; public: void generate(ChunkData& chunk, GenerationContext& context) override { // Place bâtiments selon zoning et templates // Input: terrain, routes, zone type (urbain/rural/industriel) // Output: bâtiments positionnés avec types } }; ``` #### DestructionSystem ```cpp class DestructionSystem : public IGenerator { private: DamagePatternLibrary patterns; HistoricalEventProcessor events; public: void generate(ChunkData& chunk, GenerationContext& context) override { // Applique destruction selon contexte historique // Input: bâtiments, événements historiques (guerra, bombardements) // Output: ruines, cratères, infrastructures endommagées } }; ``` ### Growth Engine Modulaire #### PopulationGrowthCalculator ```cpp class PopulationGrowthCalculator { private: DemographicModel demographics; EconomicFactors economy; public: float calculateGrowthRate(const RegionData& region, float time_delta) { // Calcule croissance population selon facteurs // Input: population actuelle, économie, sécurité // Output: taux de croissance (peut être négatif) } }; ``` #### LandValueCalculator ```cpp class LandValueCalculator { private: ProximityAnalyzer proximity; InfrastructureEvaluator infrastructure; SafetyAssessment security; public: float calculateValue(const TileCoordinate& tile, const RegionContext& context) { // Évalue valeur foncière d'une tile // Input: position, infrastructure proche, sécurité // Output: valeur relative (0.0-1.0) } }; ``` #### DemandCalculator ```cpp class DemandCalculator { private: ResidentialDemand residential; CommercialDemand commercial; IndustrialDemand industrial; public: DemandProfile calculateDemand(const RegionData& region) { // Calcule besoins en construction par type // Input: population, économie, infrastructure existante // Output: demande résidentiel/commercial/industriel } }; ``` #### ExpansionSiteFinder ```cpp class ExpansionSiteFinder { private: SuitabilityAnalyzer suitability; ConstraintChecker constraints; public: vector findSites(const DemandProfile& demand, const RegionData& region) { // Trouve emplacements optimaux pour expansion // Input: demande calculée, terrain disponible // Output: sites classés par priorité } }; ``` #### DevelopmentExecutor ```cpp class DevelopmentExecutor { private: ConstructionPlanner planner; ResourceRequirementCalculator resources; public: bool executeDevelopment(const ExpansionSite& site, const DevelopmentPlan& plan) { // Exécute construction selon plan et ressources // Input: site choisi, plan de développement // Output: succès/échec + modifications terrain } }; ``` ### Pipeline de Génération ```cpp class ChunkGenerationPipeline { private: vector> generators; public: void generateChunk(ChunkData& chunk, const GenerationContext& context) { // Pipeline séquentiel : // 1. TerrainGenerator (base) // 2. RoadNetworkGenerator (infrastructure) // 3. BuildingLayoutGenerator (structures) // 4. DestructionSystem (histoire) for (auto& generator : generators) { if (generator->canGenerate(context)) { generator->generate(chunk, context); generator->validate(chunk); } } } }; ``` ### Avantages Architecture **Pour l'IA** : - **Interfaces claires** : Chaque module a input/output définis - **Testabilité** : Chaque générateur testable indépendamment - **Évolution** : Nouveaux générateurs ajoutables facilement - **Debug** : Isolation des problèmes par module **Pour le Gameplay** : - **Cohérence** : Règles de génération explicites - **Flexibilité** : Modules activables selon contexte - **Performance** : Génération à la demande par module - **Continuité** : Coordination entre chunks via GenerationContext ### Contexte de Génération ```cpp struct GenerationContext { uint32_t global_seed; ChunkCoordinate position; RegionType region_type; // Urbain, rural, industriel HistoricalEvents events; // Guerres, bombardements passés NeighborChunkData neighbors; // Chunks déjà générés CompanyInfluences companies; // Companies dominantes région StatePolicy policies; // Politiques état local GeographicalBias bias; // Modificateurs région (+montagne, -marécage) FixedZones fixed_zones; // Zones prédéfinies (Tchernobyl, etc.) }; ``` ## Système de Génération Procédurale par Points avec Tendances Régionales ### Vision Globale #### Principe Fondamental Chaque tile de la carte mondiale est générée selon un **budget de points** qui détermine ce qui s'y trouve. Les éléments ont des valeurs positives (ressources, opportunités) ou négatives (dangers, contraintes). La génération combine des éléments pour atteindre exactement le score cible, créant automatiquement un équilibre risque/récompense. #### Innovation Clé : Tendances Régionales Au-dessus du système de points, des **zones géographiques** influencent la probabilité d'apparition de certains éléments, créant des régions spécialisées réalistes : bassins pétroliers, zones minières historiques, régions forestières, zones post-industrielles. ### Anatomie d'une Tile #### Budget de Points Chaque tile reçoit un **score cible** (-6 à +6) qui détermine son "potentiel" : - **Scores positifs** : Zones riches mais souvent avec contraintes - **Score zéro** : Terrain équilibré ou neutre - **Scores négatifs** : Zones dangereuses ou difficiles #### Philosophie de Design - **Équilibre automatique** : Richesse compensée par contraintes - **Variété émergente** : Mêmes éléments, contextes différents - **Cohérence géographique** : Éléments appropriés aux régions via tendances régionales - **Découverte progressive** : Certains éléments cachés nécessitent exploration - **Spécialisation territoriale** : Régions développent identités distinctes ## Typologie des Éléments ### Ressources Naturelles (Positives) **Minerais de Base** - Fer = +1 point - Cuivre = +1 point - Charbon = +1 point **Minerais Précieux** - Bauxite = +2 points - Étain = +2 points - Zinc = +2 points **Ressources Énergétiques** - Pétrole = +3 points - Gaz naturel = +2 points - Uranium = +5 points **Ressources Organiques** - Forêt dense = +1 point - Zone de chasse = +1 point - Eau douce = +1 point ### Vestiges et Structures (Variables) **Vestiges Anciens** - Ruines antiques = +1 point (matériaux récupérables) - Ruines médiévales = +1 point - Vestiges industriels = +1 point (scrap métallique) **Ruines Inutiles** - Ruines effondrées = -1 point (obstruction) - Décombres = -1 point - Structures instables = -2 points ### Contraintes Géologiques (Négatives) **Terrain Difficile** - Marécages = -1 point - Terrain rocailleux = -1 point - Pentes abruptes = -2 points - Instabilité géologique = -3 points **Contaminations Historiques** - Pollution minière ancienne = -2 points - Contamination chimique = -2 points - Pollution radioactive = -3 points - Radiations intenses = -5 points ### Features Géologiques Spéciales **Formations Naturelles** - Grottes = +1 point (abri, ressources cachées) - Sources thermales = +1 point - Gisements de sel = +1 point **Anomalies Géologiques** - Formations cristallines = +2 points - Dépôts d'argile rare = +2 points - Sables siliceux = +1 point ## Système de Découverte ### Éléments Visibles Détectables lors de la génération du chunk : **Géologiques Apparents** - Relief et formations rocheuses - Cours d'eau et sources - Couverture forestière - Ruines en surface **Indices Subtils** - Végétation anormale (contamination) - Coloration du sol (minerais) - Formations géologiques particulières ### Éléments Cachés Nécessitent exploration spécialisée : **Niveau 1 - Prospection Géologique** - Gisements souterrains (fer, cuivre, charbon) - Nappes d'hydrocarbures - Eaux souterraines - Grottes et cavités **Niveau 2 - Exploration Magnétométrique** - Structures métalliques enfouies - Monolithes et anomalies magnétiques - Épaves enterrées profondément - Formations métalliques naturelles **Niveau 3 - Analyse Chimique/Radiologique** - Contaminations invisibles - Gisements radioactifs - Pollutions chimiques anciennes - Zones de décontamination nécessaire ### Système de Découverte Stratifié #### Couche Visible **Reconnaissance Standard** : Relief, végétation, structures en surface, cours d'eau **Indices Subtils** : Végétation anormale suggérant contamination, coloration du sol indiquant minerais #### Couche Cachée - Niveau 1 **Véhicule Géologique** : Révèle gisements souterrains, nappes d'hydrocarbures, eaux profondes - Portée : 3×3 chunks depuis position - Temps : 2-5 minutes selon profondeur #### Couche Cachée - Niveau 2 **Véhicule Magnétométrique** : Détecte anomalies magnétiques, structures métalliques enfouies, monolithes - Portée : 1×1 chunk haute précision - Temps : 1-3 minutes #### Couche Cachée - Niveau 3 **Véhicule NRBC** : Révèle contaminations invisibles, radiations, pollutions chimiques - Sécurité : Protection équipage - Temps : 3-8 minutes selon danger ## Tendances Régionales ### Concept de Spécialisation Géographique Des **zones d'influence** superposées à la carte modifient les probabilités d'apparition des éléments, créant des régions avec des "personnalités" distinctes basées sur la géographie et l'histoire réelles. ### Types de Régions #### Bassins Pétroliers (Golfe Persique, Mer du Nord) - Pétrole : probabilité ×5 - Gaz naturel : probabilité ×3 - Terrains marécageux : ×2 - Accès maritime naturel #### Zones Minières Historiques (Ruhr, Donbass, Oural) - Fer et charbon : probabilité ×3-4 - Teritons : probabilité ×8 (très caractéristique) - Vestiges industriels : ×2 - Pollution minière héritée : ×3 #### Régions Forestières/Montagneuses (Alpes, Carpates, Taïga) - Forêt dense et chasse : probabilité ×3-4 - Grottes et sources : ×2-3 - Pentes abruptes : ×2 - Instabilité géologique : ×1.5 #### Zones Post-Nucléaires (Tchernobyl élargi, sites d'essais) - Pollution radioactive : probabilité ×10 - Uranium accessible : ×3 - Structures abandonnées : ×3 - Végétation mutante caractéristique #### Régions Côtières (Littoraux, deltas) - Accès maritime : bonus naturel - Sédiments et argiles : ×2 - Zones humides : ×1.5 - Érosion côtière : contrainte spécifique ### Zones de Transition **Transition Progressive** : L'influence régionale diminue avec la distance du centre, créant des zones mixtes réalistes **Superposition** : Plusieurs influences peuvent se combiner (montagne + ancien bassin minier = métaux précieux en terrain difficile) ## Distribution et Équilibrage ### Répartition des Scores - **40%** des tiles à score 0 (terrain neutre de base) - **45%** des tiles à scores ±1 à ±2 (légèrement positif/négatif) - **15%** des tiles à scores extrêmes ±3 à ±6 (très spéciaux) ### Biais Géographiques Globaux - **Zones montagneuses** : +1 point (concentration minérale naturelle) - **Zones côtières** : +0.5 point (accès et sédiments) - **Zones industrielles historiques** : -1 point (pollution héritée) ### Sites Fixes Historiques **Lieux Emblématiques** conservent leurs caractéristiques réelles : - Tchernobyl : Score fixe -8 (radiations massives) - Golfe Persique : Score fixe +4 (pétrole abondant) - Région Ruhr : Score fixe +3 (richesse industrielle) ## Exemples de Génération ### Tile Score +3 **Combinaisons Possibles :** - Pétrole (+3) = Gisement pur - Fer (+1) + Bauxite (+2) = Double gisement - Cuivre (+1) + Grottes (+1) + Ruines antiques (+1) = Complexe minier ancien - Uranium (+5) + Contamination (-2) = Gisement dangereux ### Tile Score 0 **Combinaisons Possibles :** - Rien = Terrain neutre standard - Fer (+1) + Ruines effondrées (-1) = Gisement obstrué - Forêt (+1) + Marécages (-1) = Forêt marécageuse - Vestiges industriels (+1) + Pollution minière (-1) = Friche industrielle ### Tile Score -3 **Combinaisons Possibles :** - Pollution radioactive (-3) = Zone contaminée simple - Instabilité géologique (-3) = Zone dangereuse - Contamination (-2) + Ruines effondrées (-1) = Site industriel pollué - Uranium (+5) + Radiations (-5) + Pentes abruptes (-2) + Grottes (+1) = Mine uranium abandonnée ## Features de Chunk Intégrées ### Features Géologiques Majeures #### Terikon (Score -1) - **Composition** : Vestiges industriels (+1) + Pollution minière (-2) - **Visible** : Colline artificielle caractéristique - **Caché** : Traces de métaux rares dans les déblais - **Régional** : ×8 probabilité en zones ex-minières - **Gameplay** : Déblaiement révèle ressources enfouies #### Vallée Fluviale (Score +2) - **Composition** : Eau douce (+1) + Sédiments (+1) - **Visible** : Relief et écoulement évidents - **Caché** : Dépôts alluvionnaires précieux - **Gameplay** : Dragage révèle minerais transportés ### Features de Vestiges #### Complexe Industriel Abandonné (Score 0) - **Composition** : Scrap (+1) + Pollution (-2) + Fer résiduel (+1) - **Visible** : Structures industrielles en ruine - **Caché** : Filons non exploités, équipement enterré - **Régional** : Fréquent dans zones ex-industrielles - **Gameplay** : Décontamination + fouilles révèlent trésors ### Features d'Anomalies #### Site d'Anomalie Magnétique (Score +2) - **Composition** : Monolithe mystérieux (+3) + Instabilité (-1) - **Visible** : Formations géologiques étranges - **Caché** : Structure métallique d'origine inconnue - **Régional** : Très rare, distribution aléatoire - **Gameplay** : Exploration magnétométrique révèle secrets ## Évolution Temporelle ### Actions Joueur Modifient Scores - **Décontamination** : -2 → +1 avec technologie appropriée - **Exploitation** : +3 → +1 après épuisement partiel - **Pollution industrielle** : +2 → -1 après accident - **Nettoyage ruines** : -1 → 0 après déblaiement ### Processus Naturels - **Régénération forestière** : +0.1 point/an en zone tempérée - **Érosion contamination** : -0.05 point/an (très lent) - **Sédimentation fluviale** : Peut révéler/cacher ressources - **Instabilité géologique** : Évolution selon activité sismique ## Gameplay Émergent ### Spécialisation Économique Naturelle **Bassins Pétroliers** deviennent naturellement centres énergétiques **Anciennes Zones Minières** évoluent vers centres sidérurgiques **Régions Forestières** se spécialisent dans construction bois et chasse ### Stratégie Territoriale **Contrôle Régional** : Certaines régions deviennent stratégiquement vitales **Exploration Ciblée** : "Je cherche du fer → direction les montagnes ex-minières" **Défis Spécialisés** : Chaque région impose ses contraintes techniques ### Reconnaissance et Apprentissage **Patterns Visuels** : Joueurs apprennent à reconnaître les indices régionaux **Teritons** = Zone ex-minière probable = Fer mais pollution **Végétation anormale** = Contamination = Danger mais ressources rares potentielles ### Équilibre Risque/Récompense Automatique **Zones Riches** compensées par contraintes proportionnelles **Zones Sûres** moins rewarding mais accessibles **Zones Extrêmes** très dangereuses mais très lucratives ## Cohérence et Réalisme ### Géographie Logique Reproduit les patterns géologiques et historiques réels : les bassins pétroliers sont où ils devraient être, les zones minières correspondent aux vraies formations géologiques. ### Histoire Intégrée Chaque région raconte son histoire through les éléments présents : pollution industrielle héritée, vestiges d'exploitation, contaminations d'accidents passés. ### Évolution Temporelle Actions du joueur modifient progressivement les caractéristiques locales : décontamination, épuisement de gisements, accidents industriels. **Objectif Final** : Créer un monde où chaque tile a une identité unique déterminée par sa géographie, son histoire et son équilibre naturel risque/récompense, générant organiquement des choix stratégiques et des opportunités d'exploration meaningfuls.