feat(terrain): ✨ Introduce new biome definitions and procedural generation rules for dynamic terrain variation
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
3df55cf4b3
commit
f02712cd2a
10 changed files with 1136 additions and 0 deletions
34
games/age-of-dwarves/data/terrain/frozen.json
Normal file
34
games/age-of-dwarves/data/terrain/frozen.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
79
games/age-of-dwarves/data/terrain/land_arid.json
Normal file
79
games/age-of-dwarves/data/terrain/land_arid.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
187
games/age-of-dwarves/data/terrain/land_common.json
Normal file
187
games/age-of-dwarves/data/terrain/land_common.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
104
games/age-of-dwarves/data/terrain/land_elevation.json
Normal file
104
games/age-of-dwarves/data/terrain/land_elevation.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
131
games/age-of-dwarves/data/terrain/land_forest.json
Normal file
131
games/age-of-dwarves/data/terrain/land_forest.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
99
games/age-of-dwarves/data/terrain/land_special.json
Normal file
99
games/age-of-dwarves/data/terrain/land_special.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
54
games/age-of-dwarves/data/terrain/land_tropical.json
Normal file
54
games/age-of-dwarves/data/terrain/land_tropical.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
54
games/age-of-dwarves/data/terrain/land_wetland.json
Normal file
54
games/age-of-dwarves/data/terrain/land_wetland.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
290
games/age-of-dwarves/data/terrain/water_and_wonders.json
Normal file
290
games/age-of-dwarves/data/terrain/water_and_wonders.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
104
games/age-of-dwarves/data/terrain/water_extended.json
Normal file
104
games/age-of-dwarves/data/terrain/water_extended.json
Normal file
|
|
@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue