From f02712cd2ad9fe54690c9946ce8741ee1c7c4a81 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 26 Mar 2026 11:38:26 -0700 Subject: [PATCH] =?UTF-8?q?feat(terrain):=20=E2=9C=A8=20Introduce=20new=20?= =?UTF-8?q?biome=20definitions=20and=20procedural=20generation=20rules=20f?= =?UTF-8?q?or=20dynamic=20terrain=20variation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- games/age-of-dwarves/data/terrain/frozen.json | 34 ++ .../data/terrain/land_arid.json | 79 +++++ .../data/terrain/land_common.json | 187 +++++++++++ .../data/terrain/land_elevation.json | 104 +++++++ .../data/terrain/land_forest.json | 131 ++++++++ .../data/terrain/land_special.json | 99 ++++++ .../data/terrain/land_tropical.json | 54 ++++ .../data/terrain/land_wetland.json | 54 ++++ .../data/terrain/water_and_wonders.json | 290 ++++++++++++++++++ .../data/terrain/water_extended.json | 104 +++++++ 10 files changed, 1136 insertions(+) create mode 100644 games/age-of-dwarves/data/terrain/frozen.json create mode 100644 games/age-of-dwarves/data/terrain/land_arid.json create mode 100644 games/age-of-dwarves/data/terrain/land_common.json create mode 100644 games/age-of-dwarves/data/terrain/land_elevation.json create mode 100644 games/age-of-dwarves/data/terrain/land_forest.json create mode 100644 games/age-of-dwarves/data/terrain/land_special.json create mode 100644 games/age-of-dwarves/data/terrain/land_tropical.json create mode 100644 games/age-of-dwarves/data/terrain/land_wetland.json create mode 100644 games/age-of-dwarves/data/terrain/water_and_wonders.json create mode 100644 games/age-of-dwarves/data/terrain/water_extended.json diff --git a/games/age-of-dwarves/data/terrain/frozen.json b/games/age-of-dwarves/data/terrain/frozen.json new file mode 100644 index 00000000..66d7fb29 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/frozen.json @@ -0,0 +1,34 @@ +{ + "terrains": [ + { + "id": "ice", + "name": "Ice", + "movement_cost": 2, + "defense_bonus": 0, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.02, + "flags": ["water", "impassable_civilian"], + "color": [150, 210, 240], + "sprite": "sprites/terrain/ice.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": "coast", + "transform_turns": 15, + "climate_zone": "frozen", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 2.0 + }, + "albedo": 0.85, + "evapotranspiration": 0, + "description": "Frozen ocean surface. Impassable to civilians. Aether dominates the polar expanse." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_arid.json b/games/age-of-dwarves/data/terrain/land_arid.json new file mode 100644 index 00000000..363cef11 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_arid.json @@ -0,0 +1,79 @@ +{ + "terrains": [ + { + "id": "chaparral", + "name": "Chaparral", + "movement_cost": 1, + "defense_bonus": 25, + "food": 1, + "production": 0, + "trade": 1, + "culture": 0, + "infiltration": 0.12, + "flags": [], + "color": [176, 158, 107], + "sprite": "sprites/terrain/chaparral.png", + "feature_overlay": "", + "feature_type": "scrub", + "variant_count": 3, + "transform_to": "grassland", + "transform_turns": 20, + "climate_zone": "warm temperate", + "quality_bonuses": { "trade": 1 }, + "terrain_power": {}, + "albedo": 0.32, + "evapotranspiration": 0.003, + "description": "Warm scrubland of drought-resistant shrubs. Some food and trade, prone to wildfire." + }, + { + "id": "savanna", + "name": "Savanna", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.14, + "flags": [], + "color": [189, 179, 102], + "sprite": "sprites/terrain/savanna.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "tropical_dry_forest", + "transform_turns": 24, + "climate_zone": "tropical dry", + "quality_bonuses": { "food": 1 }, + "terrain_power": {}, + "albedo": 0.28, + "evapotranspiration": 0.004, + "description": "Tropical grassland with scattered trees. Balanced yields, seasonal rains sustain grazing herds." + }, + { + "id": "polar_desert", + "name": "Polar Desert", + "movement_cost": 2, + "defense_bonus": 0, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "infiltration": 0.03, + "flags": [], + "color": [199, 204, 186], + "sprite": "sprites/terrain/polar_desert.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": "tundra", + "transform_turns": 30, + "climate_zone": "polar", + "quality_bonuses": {}, + "terrain_power": {}, + "albedo": 0.70, + "evapotranspiration": 0, + "description": "Barren polar wasteland. Too cold and dry for any growth. Nothing yields here." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_common.json b/games/age-of-dwarves/data/terrain/land_common.json new file mode 100644 index 00000000..1d2bc628 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_common.json @@ -0,0 +1,187 @@ +{ + "terrains": [ + { + "id": "grassland", + "name": "Grassland", + "movement_cost": 1, + "defense_bonus": 0, + "food": 2, + "production": 0, + "trade": 1, + "culture": 0, + "mana_major": { "school": "life", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.20, + "flags": ["starter"], + "color": [100, 200, 50], + "sprite": "sprites/terrain/grassland.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "forest", + "transform_turns": 24, + "climate_zone": "temperate", + "quality_bonuses": { "food": 1 }, + "terrain_power": { + "unit_effect": "healing_regen", + "unit_effect_value": 1, + "spell_cost_modifier": -0.10, + "spell_school": "life" + }, + "albedo": 0.22, + "evapotranspiration": 0.005, + "description": "Open grasslands. Good food production and some trade." + }, + { + "id": "plains", + "name": "Plains", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "mana_major": null, + "mana_minor": [{ "school": "life", "amount": 0.5 }], + "infiltration": 0.15, + "flags": [], + "color": [200, 190, 110], + "sprite": "sprites/terrain/plains.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "grassland", + "transform_turns": 20, + "climate_zone": "dry temperate", + "quality_bonuses": { "production": 1 }, + "terrain_power": {}, + "albedo": 0.30, + "evapotranspiration": 0.003, + "description": "Dry open plains. Balanced food and production. Fire aftermath terrain." + }, + { + "id": "hills", + "name": "Hills", + "movement_cost": 2, + "defense_bonus": 100, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "mana_major": null, + "mana_minor": [ + { "school": "nature", "amount": 0.5 }, + { "school": "chaos", "amount": 0.5 } + ], + "infiltration": 0.10, + "flags": [], + "color": [170, 140, 80], + "sprite": "sprites/terrain/hills.png", + "feature_overlay": "", + "feature_type": "hills", + "variant_count": 1, + "transform_to": "grassland", + "transform_turns": 30, + "climate_zone": "any", + "quality_bonuses": { "production": 1 }, + "terrain_power": { + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.28, + "evapotranspiration": 0.004, + "description": "Rolling highlands. Strong defensive position with some mining potential." + }, + { + "id": "mountains", + "name": "Mountains", + "movement_cost": 3, + "defense_bonus": 200, + "food": 0, + "production": 1, + "trade": 0, + "culture": 0, + "mana_major": { "school": "chaos", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.05, + "flags": ["impassable_civilian"], + "color": [160, 160, 180], + "sprite": "sprites/terrain/mountains.png", + "feature_overlay": "", + "feature_type": "mountain", + "variant_count": 3, + "transform_to": "hills", + "transform_turns": 48, + "climate_zone": "elevated", + "quality_bonuses": { "production": 1 }, + "terrain_power": { + "spell_damage_modifier": 0.25, + "spell_cost_modifier": 0.25, + "spell_school": "chaos", + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.55, + "evapotranspiration": 0, + "description": "Towering peaks. Nearly impregnable but barren. Chaos mana converges here." + }, + { + "id": "desert", + "name": "Desert", + "movement_cost": 2, + "defense_bonus": 0, + "food": 0, + "production": 1, + "trade": 1, + "culture": 0, + "mana_major": { "school": "chaos", "amount": 1 }, + "mana_minor": [{ "school": "death", "amount": 0.5 }], + "infiltration": 0.08, + "flags": [], + "color": [230, 180, 80], + "sprite": "sprites/terrain/desert.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "plains", + "transform_turns": 30, + "climate_zone": "hot", + "quality_bonuses": { "trade": 1 }, + "terrain_power": { + "spell_cost_modifier": -0.20, + "spell_school": "chaos" + }, + "albedo": 0.45, + "evapotranspiration": -0.005, + "description": "Barren sands. No food but useful trade routes. Chaos and Death mana simmers here." + }, + { + "id": "tundra", + "name": "Tundra", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.10, + "flags": [], + "color": [180, 195, 210], + "sprite": "sprites/terrain/tundra.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "plains", + "transform_turns": 30, + "climate_zone": "cold", + "quality_bonuses": {}, + "terrain_power": { + "enchantment_duration_modifier": 2.0, + "spell_school": "aether" + }, + "albedo": 0.35, + "evapotranspiration": 0.001, + "description": "Frozen plains. Harsh climate yields little sustenance. Aether winds persist here." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_elevation.json b/games/age-of-dwarves/data/terrain/land_elevation.json new file mode 100644 index 00000000..8b41f61b --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_elevation.json @@ -0,0 +1,104 @@ +{ + "terrains": [ + { + "id": "alpine_tundra", + "name": "Alpine Tundra", + "movement_cost": 2, + "defense_bonus": 50, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "infiltration": 0.06, + "flags": [], + "color": [168, 176, 153], + "sprite": "sprites/terrain/alpine_tundra.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": "alpine_meadow", + "transform_turns": 30, + "climate_zone": "elevated cold", + "quality_bonuses": {}, + "terrain_power": {}, + "albedo": 0.40, + "evapotranspiration": 0.001, + "description": "Treeless high-altitude terrain above the timberline. Wind-scoured and barren." + }, + { + "id": "alpine_meadow", + "name": "Alpine Meadow", + "movement_cost": 1, + "defense_bonus": 25, + "food": 1, + "production": 0, + "trade": 0, + "culture": 1, + "infiltration": 0.15, + "flags": [], + "color": [143, 176, 120], + "sprite": "sprites/terrain/alpine_meadow.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "alpine_tundra", + "transform_turns": 24, + "climate_zone": "elevated temperate", + "quality_bonuses": { "culture": 1 }, + "terrain_power": {}, + "albedo": 0.28, + "evapotranspiration": 0.004, + "description": "Lush high-altitude grassland with wildflowers. Scenic beauty inspires cultural growth." + }, + { + "id": "cloud_forest", + "name": "Cloud Forest", + "movement_cost": 3, + "defense_bonus": 75, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.50, + "flags": [], + "color": [64, 120, 89], + "sprite": "sprites/terrain/cloud_forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "alpine_meadow", + "transform_turns": 20, + "climate_zone": "elevated wet", + "quality_bonuses": { "food": 1 }, + "terrain_power": {}, + "albedo": 0.14, + "evapotranspiration": 0.018, + "description": "High-elevation forest wreathed in perpetual mist. Dense canopy traps moisture from passing clouds." + }, + { + "id": "montane_forest", + "name": "Montane Forest", + "movement_cost": 2, + "defense_bonus": 50, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.35, + "flags": [], + "color": [46, 107, 71], + "sprite": "sprites/terrain/montane_forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "hills", + "transform_turns": 20, + "climate_zone": "elevated", + "quality_bonuses": { "production": 1 }, + "terrain_power": {}, + "albedo": 0.17, + "evapotranspiration": 0.010, + "description": "Dense mid-elevation forest clinging to mountain slopes. Good timber and defensive terrain." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_forest.json b/games/age-of-dwarves/data/terrain/land_forest.json new file mode 100644 index 00000000..598b6fa9 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_forest.json @@ -0,0 +1,131 @@ +{ + "terrains": [ + { + "id": "forest", + "name": "Forest", + "movement_cost": 2, + "defense_bonus": 50, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "mana_major": { "school": "nature", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.40, + "flags": [], + "color": [60, 130, 40], + "sprite": "sprites/terrain/forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "plains", + "transform_turns": 16, + "climate_zone": "temperate", + "quality_bonuses": { "production": 1 }, + "terrain_power": { + "adjacent_forest_quality_bonus": true, + "unit_effect": "summon_hp_bonus", + "unit_effect_value": 10, + "spell_school": "nature" + }, + "albedo": 0.15, + "evapotranspiration": 0.012, + "description": "Temperate hardwood forest. Good cover and production. Nature mana lingers in the canopy." + }, + { + "id": "jungle", + "name": "Jungle", + "movement_cost": 3, + "defense_bonus": 75, + "food": 2, + "production": 1, + "trade": 0, + "culture": 0, + "mana_major": { "school": "nature", "amount": 1 }, + "mana_minor": [{ "school": "life", "amount": 0.5 }], + "infiltration": 0.55, + "flags": [], + "color": [30, 100, 20], + "sprite": "sprites/terrain/jungle.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "forest", + "transform_turns": 20, + "climate_zone": "tropical", + "quality_bonuses": { "food": 1 }, + "terrain_power": { + "spell_school": "nature" + }, + "albedo": 0.12, + "evapotranspiration": 0.025, + "description": "Dense tropical canopy. Bountiful food, heavy cover. Resists fire." + }, + { + "id": "boreal_forest", + "name": "Frostwood", + "movement_cost": 2, + "defense_bonus": 25, + "food": 0, + "production": 2, + "trade": 1, + "culture": 0, + "mana_major": { "school": "nature", "amount": 1 }, + "mana_minor": [{ "school": "aether", "amount": 0.5 }], + "infiltration": 0.30, + "flags": [], + "color": [40, 90, 70], + "sprite": "sprites/terrain/boreal_forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "tundra", + "transform_turns": 20, + "climate_zone": "cold", + "quality_bonuses": { "production": 1 }, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.20, + "evapotranspiration": 0.006, + "description": "Cold conifer forest. High production and timber trade. Aether winds channel through the spires." + }, + { + "id": "enchanted_forest", + "name": "Enchanted Forest", + "movement_cost": 2, + "defense_bonus": 50, + "food": 1, + "production": 2, + "trade": 0, + "culture": 1, + "mana_major": { "school": "nature", "amount": 2 }, + "mana_minor": [{ "school": "aether", "amount": 0.5 }], + "infiltration": 0.45, + "flags": ["magical"], + "color": [20, 120, 30], + "sprite": "sprites/terrain/enchanted_forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "forest", + "transform_turns": 12, + "climate_zone": "any", + "quality_bonuses": { "production": 1, "culture": 1 }, + "terrain_power": { + "unit_effect": "summon_hp_bonus", + "unit_effect_value": 10, + "spell_cost_modifier": -0.10, + "spell_school": "nature", + "archon_mana_regen": 2, + "adjacent_forest_quality_bonus": true + }, + "albedo": 0.18, + "evapotranspiration": 0.015, + "ley_anchor_strength": 1, + "ley_anchor_school": "nature", + "description": "Ancient woods infused with ambient magic. Double Nature mana, +1 culture. Archons recharge here." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_special.json b/games/age-of-dwarves/data/terrain/land_special.json new file mode 100644 index 00000000..ff835f36 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_special.json @@ -0,0 +1,99 @@ +{ + "terrains": [ + { + "id": "swamp", + "name": "Swamp", + "movement_cost": 2, + "defense_bonus": 25, + "food": 1, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "death", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.05, + "flags": [], + "color": [60, 80, 35], + "sprite": "sprites/terrain/swamp.png", + "feature_overlay": "", + "feature_type": "swamp_reeds", + "variant_count": 3, + "transform_to": "grassland", + "transform_turns": 20, + "climate_zone": "temperate", + "quality_bonuses": {}, + "terrain_power": { + "unit_effect": "undead_regen", + "unit_effect_value": 2, + "spell_school": "death" + }, + "albedo": 0.18, + "evapotranspiration": 0.008, + "description": "Murky wetlands. Death mana saturates the stagnant water. Undead thrive here." + }, + { + "id": "volcano", + "name": "Volcano", + "movement_cost": 3, + "defense_bonus": 50, + "food": 0, + "production": 3, + "trade": 0, + "culture": 0, + "mana_major": { "school": "chaos", "amount": 1 }, + "mana_minor": [{ "school": "death", "amount": 0.5 }], + "infiltration": 0.0, + "flags": ["impassable_civilian"], + "color": [190, 50, 20], + "sprite": "sprites/terrain/volcano.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 3, + "transform_to": "mountains", + "transform_turns": 48, + "climate_zone": "extreme", + "quality_bonuses": {}, + "terrain_power": { + "unit_effect": "combat_damage_bonus", + "unit_effect_value": 0, + "spell_school": "chaos", + "enchantment_duration_modifier": 1.5 + }, + "albedo": 0.15, + "evapotranspiration": 0, + "description": "Active volcanic terrain. Chaos mana erupts alongside lava. Death rituals yield double here." + }, + { + "id": "snow", + "name": "Snow", + "movement_cost": 2, + "defense_bonus": 0, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [{ "school": "life", "amount": 0.5 }], + "infiltration": 0.02, + "flags": [], + "color": [240, 245, 255], + "sprite": "sprites/terrain/snow.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": "tundra", + "transform_turns": 20, + "climate_zone": "frozen", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 2.0, + "unit_effect": "healing_regen", + "unit_effect_value": 0 + }, + "albedo": 0.80, + "evapotranspiration": 0, + "description": "Snow-covered terrain. Aether and faint Life mana preserve those who brave the cold." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_tropical.json b/games/age-of-dwarves/data/terrain/land_tropical.json new file mode 100644 index 00000000..46a7a071 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_tropical.json @@ -0,0 +1,54 @@ +{ + "terrains": [ + { + "id": "tropical_dry_forest", + "name": "Tropical Dry Forest", + "movement_cost": 2, + "defense_bonus": 50, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.25, + "flags": [], + "color": [128, 156, 64], + "sprite": "sprites/terrain/tropical_dry_forest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "savanna", + "transform_turns": 16, + "climate_zone": "tropical dry", + "quality_bonuses": { "production": 1 }, + "terrain_power": {}, + "albedo": 0.20, + "evapotranspiration": 0.008, + "description": "Warm deciduous forest with seasonal drought. Moderate yields, sheds leaves in dry season." + }, + { + "id": "tropical_rainforest", + "name": "Tropical Rainforest", + "movement_cost": 3, + "defense_bonus": 75, + "food": 2, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.55, + "flags": [], + "color": [23, 115, 46], + "sprite": "sprites/terrain/tropical_rainforest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "tropical_dry_forest", + "transform_turns": 24, + "climate_zone": "tropical wet", + "quality_bonuses": { "food": 1 }, + "terrain_power": {}, + "albedo": 0.12, + "evapotranspiration": 0.025, + "description": "Hot, perpetually wet dense forest. Extremely productive but difficult to traverse." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/land_wetland.json b/games/age-of-dwarves/data/terrain/land_wetland.json new file mode 100644 index 00000000..7734737c --- /dev/null +++ b/games/age-of-dwarves/data/terrain/land_wetland.json @@ -0,0 +1,54 @@ +{ + "terrains": [ + { + "id": "bog", + "name": "Bog", + "movement_cost": 3, + "defense_bonus": 25, + "food": 0, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.04, + "flags": [], + "color": [115, 99, 56], + "sprite": "sprites/terrain/bog.png", + "feature_overlay": "", + "feature_type": "swamp_reeds", + "variant_count": 1, + "transform_to": "swamp", + "transform_turns": 24, + "climate_zone": "cold", + "quality_bonuses": {}, + "terrain_power": {}, + "albedo": 0.15, + "evapotranspiration": 0.006, + "description": "Waterlogged acidic peatland. Difficult to cross, poor yields. Peat can be harvested for fuel." + }, + { + "id": "temperate_rainforest", + "name": "Temperate Rainforest", + "movement_cost": 3, + "defense_bonus": 75, + "food": 1, + "production": 2, + "trade": 0, + "culture": 0, + "infiltration": 0.50, + "flags": [], + "color": [26, 112, 51], + "sprite": "sprites/terrain/temperate_rainforest.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": "forest", + "transform_turns": 20, + "climate_zone": "temperate wet", + "quality_bonuses": { "production": 1 }, + "terrain_power": {}, + "albedo": 0.13, + "evapotranspiration": 0.020, + "description": "Cool, extremely wet old-growth forest. Towering conifers and moss-draped canopy. Excellent timber." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/water_and_wonders.json b/games/age-of-dwarves/data/terrain/water_and_wonders.json new file mode 100644 index 00000000..ea919c88 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/water_and_wonders.json @@ -0,0 +1,290 @@ +{ + "terrains": [ + { + "id": "coast", + "name": "Coastal Waters", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 0, + "trade": 1, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["water", "naval_only"], + "color": [80, 180, 220], + "sprite": "sprites/terrain/coast.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.08, + "evapotranspiration": 0, + "description": "Shallow coastal waters. Good for fishing and coastal trade. Aether flows freely here." + }, + { + "id": "ocean", + "name": "Ocean", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 0, + "trade": 2, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["water", "naval_only"], + "color": [60, 120, 210], + "sprite": "sprites/terrain/ocean.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 3, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.06, + "evapotranspiration": 0, + "description": "Deep waters. Naval units only. Aether saturates the open sea." + }, + { + "id": "lake", + "name": "Lake", + "movement_cost": 1, + "defense_bonus": 0, + "food": 2, + "production": 0, + "trade": 1, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [{ "school": "life", "amount": 0.5 }], + "infiltration": 0.0, + "flags": ["water", "freshwater"], + "color": [80, 160, 215], + "sprite": "sprites/terrain/lake.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": "coast", + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": { "food": 1 }, + "terrain_power": { + "unit_effect": "healing_regen", + "unit_effect_value": 1, + "spell_school": "aether" + }, + "albedo": 0.08, + "evapotranspiration": 0, + "description": "Freshwater lake. Rich fishing and clean water." + }, + { + "id": "inland_sea", + "name": "Inland Sea", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 0, + "trade": 2, + "culture": 0, + "mana_major": { "school": "aether", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["water", "freshwater", "deep_water"], + "color": [65, 130, 205], + "sprite": "sprites/terrain/inland_sea.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": { "trade": 1 }, + "terrain_power": { + "spell_school": "aether", + "enchantment_duration_modifier": 1.0 + }, + "albedo": 0.08, + "evapotranspiration": 0, + "description": "A vast enclosed body of freshwater. Supports trade and fishing like a miniature ocean." + }, + { + "id": "tower_of_wizardry", + "name": "Tower of Wizardry", + "movement_cost": 2, + "defense_bonus": 150, + "food": 0, + "production": 1, + "trade": 3, + "culture": 0, + "mana_major": { "school": "all", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["natural_wonder"], + "color": [160, 120, 220], + "sprite": "sprites/terrain/tower_of_wizardry.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "any", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "all", + "archon_mana_regen": 3, + "enchantment_duration_modifier": 2.0 + }, + "albedo": 0.35, + "evapotranspiration": 0, + "ley_anchor_strength": 5, + "ley_anchor_school": "all", + "description": "An ancient spire of crystallized magic. Emits 1 mana/turn of every school. Grants immense arcane research." + }, + { + "id": "mana_node", + "name": "Mana Node", + "movement_cost": 1, + "defense_bonus": 50, + "food": 1, + "production": 0, + "trade": 4, + "culture": 0, + "mana_major": { "school": "all", "amount": 2 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["natural_wonder", "power_source"], + "color": [100, 200, 255], + "sprite": "sprites/terrain/mana_node.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "any", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "all", + "archon_mana_regen": 5, + "enchantment_duration_modifier": 2.0 + }, + "albedo": 0.35, + "evapotranspiration": 0, + "ley_anchor_strength": 5, + "ley_anchor_school": "all", + "description": "A convergence of raw magical energy. 2 mana/turn of every school radiates to those who claim it." + }, + { + "id": "ancient_temple", + "name": "Ancient Temple", + "movement_cost": 2, + "defense_bonus": 100, + "food": 0, + "production": 2, + "trade": 2, + "culture": 0, + "mana_major": { "school": "generic", "amount": 1 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["natural_wonder"], + "color": [180, 160, 100], + "sprite": "sprites/terrain/ancient_temple.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "any", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "generic", + "archon_mana_regen": 1, + "enchantment_duration_modifier": 1.5 + }, + "albedo": 0.35, + "evapotranspiration": 0, + "ley_anchor_strength": 3, + "ley_anchor_school": "generic", + "description": "Crumbling ruins of a forgotten civilization. 1 generic mana/turn — player assigns school." + }, + { + "id": "bermuda_anomaly", + "name": "Bermuda Anomaly", + "movement_cost": 3, + "defense_bonus": 0, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "generic", "amount": 2 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["natural_wonder", "unstable"], + "color": [80, 60, 180], + "sprite": "sprites/terrain/bermuda_anomaly.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "generic", + "archon_mana_regen": 2, + "enchantment_duration_modifier": 0.5 + }, + "albedo": 0.3, + "evapotranspiration": 0, + "ley_anchor_strength": 2, + "ley_anchor_school": "generic", + "description": "A churning vortex of unstable magical energy. 2 generic mana/turn plus 1 random school that changes each turn. Dangerous to traverse." + }, + { + "id": "ley_nexus", + "name": "Ley Line Nexus", + "movement_cost": 1, + "defense_bonus": 50, + "food": 0, + "production": 0, + "trade": 0, + "culture": 0, + "mana_major": { "school": "all", "amount": 3 }, + "mana_minor": [], + "infiltration": 0.0, + "flags": ["natural_wonder", "power_source"], + "color": [200, 240, 255], + "sprite": "sprites/terrain/ley_nexus.png", + "feature_overlay": "", + "feature_type": null, + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "any", + "quality_bonuses": {}, + "terrain_power": { + "spell_school": "all", + "archon_mana_regen": 6, + "enchantment_duration_modifier": 3.0 + }, + "albedo": 0.5, + "evapotranspiration": 0, + "ley_anchor_strength": 5, + "ley_anchor_school": "all", + "description": "The rarest wonder — a nexus where all ley lines converge. 3 mana/turn of every school. Archons fully recharge here." + } + ] +} diff --git a/games/age-of-dwarves/data/terrain/water_extended.json b/games/age-of-dwarves/data/terrain/water_extended.json new file mode 100644 index 00000000..ad1b9d55 --- /dev/null +++ b/games/age-of-dwarves/data/terrain/water_extended.json @@ -0,0 +1,104 @@ +{ + "terrains": [ + { + "id": "deep_ocean", + "name": "Deep Ocean", + "movement_cost": 1, + "defense_bonus": 0, + "food": 0, + "production": 0, + "trade": 2, + "culture": 0, + "infiltration": 0.0, + "flags": ["water", "naval_only", "deep_water"], + "color": [31, 69, 161], + "sprite": "sprites/terrain/deep_ocean.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": {}, + "terrain_power": {}, + "albedo": 0.06, + "evapotranspiration": 0, + "description": "Deep open water far from any coast. Only ocean-going vessels can navigate these waters." + }, + { + "id": "coral_reef", + "name": "Coral Reef", + "movement_cost": 1, + "defense_bonus": 0, + "food": 2, + "production": 0, + "trade": 1, + "culture": 0, + "infiltration": 0.0, + "flags": ["water", "naval_only"], + "color": [64, 191, 171], + "sprite": "sprites/terrain/coral_reef.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": { "food": 1 }, + "terrain_power": {}, + "albedo": 0.10, + "evapotranspiration": 0, + "description": "Shallow tropical reef teeming with marine life. Rich fishing grounds near warm coastlines." + }, + { + "id": "estuary", + "name": "Estuary", + "movement_cost": 1, + "defense_bonus": 0, + "food": 1, + "production": 0, + "trade": 2, + "culture": 0, + "infiltration": 0.0, + "flags": ["water", "freshwater"], + "color": [89, 150, 171], + "sprite": "sprites/terrain/estuary.png", + "feature_overlay": "", + "feature_type": "water", + "variant_count": 1, + "transform_to": null, + "transform_turns": null, + "climate_zone": "water", + "quality_bonuses": { "trade": 1 }, + "terrain_power": {}, + "albedo": 0.08, + "evapotranspiration": 0, + "description": "Where river meets ocean. Brackish water supports unique ecosystems and lucrative trade." + }, + { + "id": "mangrove", + "name": "Mangrove", + "movement_cost": 2, + "defense_bonus": 25, + "food": 1, + "production": 1, + "trade": 0, + "culture": 0, + "infiltration": 0.30, + "flags": ["water"], + "color": [71, 120, 89], + "sprite": "sprites/terrain/mangrove.png", + "feature_overlay": "", + "feature_type": "foliage", + "variant_count": 3, + "transform_to": null, + "transform_turns": null, + "climate_zone": "tropical coastal", + "quality_bonuses": { "food": 1 }, + "terrain_power": {}, + "albedo": 0.14, + "evapotranspiration": 0.015, + "description": "Tropical coastal wetland forest. Tangled roots slow movement but shelter diverse life." + } + ] +}