- Comprehensive map system with point-based procedural generation - Regional tendencies system for geographical specialization - 10-engine autonomous architecture documentation - Vehicle design system with 3-layer structure - Technology trees with breakthrough mechanics - Economic system with company features and cultural doctrines - Complete metrics and analytics system - Military mechanics and AI systems
28 KiB
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) :
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) :
// 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<Point2D> 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
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<ComplexBuildingData>; // 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 :
// 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
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
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
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
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
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
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
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
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
class ExpansionSiteFinder {
private:
SuitabilityAnalyzer suitability;
ConstraintChecker constraints;
public:
vector<ExpansionSite> 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
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
class ChunkGenerationPipeline {
private:
vector<unique_ptr<IGenerator>> 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
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.