chore(biomes): 🔧 Update biome temperature, humidity, and resource spawn rates in configs and adjust rarity/property definitions globally

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
autocommit 2026-04-16 23:14:46 -07:00
parent c1dc096f12
commit 6d0240ba09
10 changed files with 742 additions and 38 deletions

View file

@ -13,7 +13,10 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 8,
"substrate_types": ["deep_water"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "leviathan_grounds", "base_quantity": 2, "quality_range": [1, 4] }
]
},
{
"id": "shallow_ocean",
@ -27,7 +30,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.3, "fungi": 0.0 },
"fauna_capacity": 12,
"substrate_types": ["shallow_water"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 5, "quality_range": [1, 4] },
{ "resource": "pearl_beds", "base_quantity": 2, "quality_range": [1, 3] }
]
},
{
"id": "coral_reef",
@ -41,7 +48,12 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.6, "fungi": 0.1 },
"fauna_capacity": 20,
"substrate_types": ["shallow_water"],
"food_web_tier": "quaternary"
"food_web_tier": "quaternary",
"collectibles": [
{ "resource": "coral_reef", "base_quantity": 6, "quality_range": [1, 5] },
{ "resource": "pearl_beds", "base_quantity": 3, "quality_range": [2, 5] },
{ "resource": "river_fish", "base_quantity": 4, "quality_range": [1, 3] }
]
},
{
"id": "estuary",
@ -55,7 +67,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.5, "fungi": 0.05 },
"fauna_capacity": 14,
"substrate_types": ["shallow_water"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 5, "quality_range": [1, 4] },
{ "resource": "merfolk_shallows", "base_quantity": 2, "quality_range": [1, 3] }
]
},
{
"id": "lake",
@ -69,7 +85,10 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.3, "fungi": 0.02 },
"fauna_capacity": 10,
"substrate_types": ["lake_bed"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 4, "quality_range": [1, 3] }
]
},
{
"id": "pond",
@ -83,7 +102,10 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.15, "fungi": 0.01 },
"fauna_capacity": 3,
"substrate_types": ["lake_bed"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 1, "quality_range": [1, 2] }
]
},
{
"id": "river",
@ -97,7 +119,10 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.2, "fungi": 0.01 },
"fauna_capacity": 6,
"substrate_types": ["shallow_water"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 3, "quality_range": [1, 3] }
]
},
{
"id": "mangrove",
@ -111,7 +136,12 @@
"flora_climax": { "canopy": 0.6, "undergrowth": 0.5, "fungi": 0.15 },
"fauna_capacity": 14,
"substrate_types": ["wetland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "river_fish", "base_quantity": 4, "quality_range": [1, 3] },
{ "resource": "spice_groves", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "dye_plants", "base_quantity": 2, "quality_range": [1, 3] }
]
}
]
}

View file

@ -13,7 +13,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 1,
"substrate_types": ["deep_water", "shallow_water"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": []
},
{
"id": "glacial",
@ -27,7 +28,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.01, "fungi": 0.0 },
"fauna_capacity": 1,
"substrate_types": ["peak", "mountain", "lowland"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": []
},
{
"id": "polar_desert",
@ -41,7 +43,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.02, "fungi": 0.0 },
"fauna_capacity": 2,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": []
},
{
"id": "tundra",
@ -55,7 +58,13 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.15, "fungi": 0.05 },
"fauna_capacity": 5,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "exotic_furs", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "highland_deer", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "wild_cattle", "base_quantity": 1, "quality_range": [1, 2] },
{ "resource": "garnet", "base_quantity": 1, "quality_range": [1, 2] }
]
},
{
"id": "alpine_tundra",
@ -69,7 +78,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.08, "fungi": 0.02 },
"fauna_capacity": 3,
"substrate_types": ["mountain", "peak"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": [
{ "resource": "exotic_furs", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "sapphire", "base_quantity": 1, "quality_range": [1, 2] }
]
},
{
"id": "boreal_forest",
@ -83,7 +96,13 @@
"flora_climax": { "canopy": 0.7, "undergrowth": 0.35, "fungi": 0.3 },
"fauna_capacity": 12,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "exotic_furs", "base_quantity": 4, "quality_range": [1, 4] },
{ "resource": "highland_deer", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "wild_game", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "iron_ore", "base_quantity": 2, "quality_range": [1, 3] }
]
}
]
}

View file

@ -13,7 +13,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["regolith", "lowland"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": []
},
{
"id": "canyon",
@ -27,7 +28,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["canyon_wall", "highland_basalt"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": [
{ "resource": "obsidian", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "turquoise", "base_quantity": 1, "quality_range": [1, 3] }
]
},
{
"id": "ancient_lakebed",
@ -41,7 +46,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["clay", "lowland"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": [
{ "resource": "saltpeter_deposit", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "gypsum", "base_quantity": 2, "quality_range": [1, 2] }
]
},
{
"id": "dune_field",
@ -55,7 +64,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["sand", "regolith"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": []
}
]
}

View file

@ -13,7 +13,16 @@
"flora_climax": { "canopy": 0.2, "undergrowth": 0.3, "fungi": 0.1 },
"fauna_capacity": 8,
"substrate_types": ["highland", "midland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "iron_ore", "base_quantity": 4, "quality_range": [1, 4] },
{ "resource": "coal_seam", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "gold_vein", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "sheep_herds", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "amethyst", "base_quantity": 1, "quality_range": [1, 3] },
{ "resource": "pyrite", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "quartz", "base_quantity": 2, "quality_range": [1, 2] }
]
},
{
"id": "mountains",
@ -27,7 +36,17 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.05, "fungi": 0.02 },
"fauna_capacity": 3,
"substrate_types": ["mountain", "peak"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": [
{ "resource": "iron_ore", "base_quantity": 3, "quality_range": [1, 4] },
{ "resource": "coal_seam", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "gold_vein", "base_quantity": 2, "quality_range": [2, 4] },
{ "resource": "diamond", "base_quantity": 1, "quality_range": [2, 5] },
{ "resource": "alexandrite", "base_quantity": 1, "quality_range": [3, 5] },
{ "resource": "fluorite", "base_quantity": 1, "quality_range": [1, 3] },
{ "resource": "calcite", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "ancient_marble", "base_quantity": 1, "quality_range": [3, 5] }
]
},
{
"id": "alpine_meadow",
@ -41,7 +60,12 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.3, "fungi": 0.08 },
"fauna_capacity": 6,
"substrate_types": ["highland", "mountain"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "sheep_herds", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "wild_game", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "garnet", "base_quantity": 1, "quality_range": [1, 3] }
]
},
{
"id": "montane_forest",
@ -55,7 +79,13 @@
"flora_climax": { "canopy": 0.75, "undergrowth": 0.45, "fungi": 0.25 },
"fauna_capacity": 14,
"substrate_types": ["highland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 5, "quality_range": [1, 4] },
{ "resource": "iron_ore", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "emerald", "base_quantity": 1, "quality_range": [2, 4] },
{ "resource": "jade", "base_quantity": 1, "quality_range": [2, 4] }
]
},
{
"id": "cloud_forest",
@ -69,7 +99,13 @@
"flora_climax": { "canopy": 0.8, "undergrowth": 0.65, "fungi": 0.5 },
"fauna_capacity": 20,
"substrate_types": ["highland"],
"food_web_tier": "quaternary"
"food_web_tier": "quaternary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 6, "quality_range": [1, 4] },
{ "resource": "emerald", "base_quantity": 2, "quality_range": [2, 5] },
{ "resource": "jade", "base_quantity": 2, "quality_range": [2, 4] },
{ "resource": "opal", "base_quantity": 1, "quality_range": [2, 4] }
]
}
]
}

View file

@ -13,7 +13,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 1,
"substrate_types": ["mountain"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": [
{ "resource": "obsidian", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "ruby", "base_quantity": 1, "quality_range": [2, 4] }
]
},
{
"id": "subterranean",
@ -27,7 +31,14 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.1, "fungi": 0.6 },
"fauna_capacity": 8,
"substrate_types": ["cave"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "iron_ore", "base_quantity": 4, "quality_range": [1, 4] },
{ "resource": "coal_seam", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "fluorite", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "selenite", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "calcite", "base_quantity": 3, "quality_range": [1, 2] }
]
}
]
}

View file

@ -13,7 +13,12 @@
"flora_climax": { "canopy": 0.1, "undergrowth": 0.35, "fungi": 0.05 },
"fauna_capacity": 8,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "sheep_herds", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "incense_flowers", "base_quantity": 2, "quality_range": [1, 3] }
]
},
{
"id": "temperate_grassland",
@ -27,7 +32,15 @@
"flora_climax": { "canopy": 0.05, "undergrowth": 0.55, "fungi": 0.1 },
"fauna_capacity": 14,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 5, "quality_range": [1, 3] },
{ "resource": "wild_cattle", "base_quantity": 4, "quality_range": [1, 3] },
{ "resource": "sheep_herds", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "grain_fields", "base_quantity": 4, "quality_range": [1, 3] },
{ "resource": "shadow_wine", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "dye_plants", "base_quantity": 2, "quality_range": [1, 2] }
]
},
{
"id": "temperate_forest",
@ -41,7 +54,15 @@
"flora_climax": { "canopy": 0.85, "undergrowth": 0.6, "fungi": 0.35 },
"fauna_capacity": 18,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 7, "quality_range": [1, 4] },
{ "resource": "iron_ore", "base_quantity": 3, "quality_range": [1, 4] },
{ "resource": "bog_mushrooms", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "exotic_furs", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "dye_plants", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "shadow_wine", "base_quantity": 2, "quality_range": [1, 4] }
]
}
]
}

View file

@ -13,7 +13,17 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.08, "fungi": 0.01 },
"fauna_capacity": 4,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "primary"
"food_web_tier": "primary",
"collectibles": [
{ "resource": "gold_vein", "base_quantity": 2, "quality_range": [1, 4] },
{ "resource": "saltpeter_deposit", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "obsidian", "base_quantity": 1, "quality_range": [1, 3] },
{ "resource": "turquoise", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "opal", "base_quantity": 1, "quality_range": [1, 4] },
{ "resource": "agate", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "gypsum", "base_quantity": 2, "quality_range": [1, 2] },
{ "resource": "incense_flowers", "base_quantity": 2, "quality_range": [1, 3] }
]
},
{
"id": "savanna",
@ -27,7 +37,13 @@
"flora_climax": { "canopy": 0.15, "undergrowth": 0.45, "fungi": 0.05 },
"fauna_capacity": 12,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 5, "quality_range": [1, 3] },
{ "resource": "wild_cattle", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "incense_flowers", "base_quantity": 2, "quality_range": [1, 3] },
{ "resource": "dye_plants", "base_quantity": 2, "quality_range": [1, 2] }
]
},
{
"id": "tropical_dry_forest",
@ -41,7 +57,13 @@
"flora_climax": { "canopy": 0.65, "undergrowth": 0.5, "fungi": 0.2 },
"fauna_capacity": 16,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 5, "quality_range": [1, 3] },
{ "resource": "spice_groves", "base_quantity": 3, "quality_range": [1, 4] },
{ "resource": "dye_plants", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "jade", "base_quantity": 1, "quality_range": [2, 4] }
]
},
{
"id": "tropical_rainforest",
@ -55,7 +77,14 @@
"flora_climax": { "canopy": 0.95, "undergrowth": 0.7, "fungi": 0.4 },
"fauna_capacity": 25,
"substrate_types": ["lowland", "midland"],
"food_web_tier": "quaternary"
"food_web_tier": "quaternary",
"collectibles": [
{ "resource": "wild_game", "base_quantity": 8, "quality_range": [1, 4] },
{ "resource": "spice_groves", "base_quantity": 4, "quality_range": [1, 5] },
{ "resource": "dye_plants", "base_quantity": 3, "quality_range": [1, 4] },
{ "resource": "gems", "base_quantity": 2, "quality_range": [2, 5] },
{ "resource": "emerald", "base_quantity": 2, "quality_range": [2, 5] }
]
}
]
}

View file

@ -13,7 +13,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["basalt", "regolith"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": [
{ "resource": "obsidian", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "saltpeter_deposit", "base_quantity": 2, "quality_range": [1, 2] }
]
},
{
"id": "lava_field",
@ -27,7 +31,8 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["lava", "basalt"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": []
},
{
"id": "caldera",
@ -41,7 +46,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["volcanic_rock", "basalt"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": [
{ "resource": "obsidian", "base_quantity": 4, "quality_range": [2, 4] },
{ "resource": "ruby", "base_quantity": 1, "quality_range": [3, 5] }
]
},
{
"id": "basalt_highland",
@ -55,7 +64,11 @@
"flora_climax": { "canopy": 0.0, "undergrowth": 0.0, "fungi": 0.0 },
"fauna_capacity": 0,
"substrate_types": ["basalt", "highland_basalt"],
"food_web_tier": "none"
"food_web_tier": "none",
"collectibles": [
{ "resource": "obsidian", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "iron_ore", "base_quantity": 2, "quality_range": [1, 3] }
]
}
]
}

View file

@ -13,7 +13,14 @@
"flora_climax": { "canopy": 0.5, "undergrowth": 0.6, "fungi": 0.45 },
"fauna_capacity": 15,
"substrate_types": ["wetland"],
"food_web_tier": "tertiary"
"food_web_tier": "tertiary",
"collectibles": [
{ "resource": "bog_mushrooms", "base_quantity": 5, "quality_range": [1, 4] },
{ "resource": "nightshade", "base_quantity": 3, "quality_range": [1, 4] },
{ "resource": "dye_plants", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "river_fish", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "gems", "base_quantity": 1, "quality_range": [2, 4] }
]
},
{
"id": "bog",
@ -27,7 +34,12 @@
"flora_climax": { "canopy": 0.05, "undergrowth": 0.3, "fungi": 0.2 },
"fauna_capacity": 6,
"substrate_types": ["wetland"],
"food_web_tier": "secondary"
"food_web_tier": "secondary",
"collectibles": [
{ "resource": "bog_mushrooms", "base_quantity": 3, "quality_range": [1, 3] },
{ "resource": "nightshade", "base_quantity": 1, "quality_range": [1, 3] },
{ "resource": "river_fish", "base_quantity": 2, "quality_range": [1, 2] }
]
}
]
}

View file

@ -0,0 +1,523 @@
{
"_schema_notes": {
"quality_scale": {
"description": "Multiplier applied to all yield bonuses based on deposit richness. Five discrete levels.",
"1": { "multiplier": 0.5, "rationale": "Marginal vein — barely worth extracting. Civ5 equivalent of a sparse tile that barely tips a worker's time investment." },
"2": { "multiplier": 0.75, "rationale": "Workable seam — typical poor-mountain find. Yields something but cities won't grow around it." },
"3": { "multiplier": 1.0, "rationale": "Standard vein — the baseline all listed yields are balanced against. Map-gen targets this as the median." },
"4": { "multiplier": 1.25, "rationale": "Rich vein — notable enough players reroute borders to capture it. Civ5 luxury equivalent with a visible bonus." },
"5": { "multiplier": 1.5, "rationale": "Mother lode — rarest 5% of spawns. Justifies war to hold it. Civ5 analogue: natural wonderadjacent resource tile." }
},
"quantity": "Integer 15. How many units a tile yields when improved. Stacks with quality multiplier. Luxury happiness applies once per unique type regardless of quantity — quantity increases trade value only.",
"category_rules": {
"bonus": "Always visible. No tech gate, no trade. Yields food/production only. happiness_per_copy: 0.",
"luxury": "Tech-gated. Tradeable (1 copy = +happiness_per_copy per turn to receiving empire). Primary diplomatic trade good. Gates no units.",
"strategic": "Tech-gated. Required to train gates_units entries. Tradeable. happiness_per_copy: 0 — strategic value is military, not comfort."
}
},
"bonus": [
{
"id": "deer",
"name": "Deer",
"category": "bonus",
"description": "Wild deer herds providing steady meat and hides.",
"terrains": ["forest", "tundra", "grassland"],
"revealed_by_tech": null,
"yields": { "food": 2, "production": 0, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "hunting_camp",
"sprite": "sprites/resources/deer.png",
"tags": ["fauna", "food"]
},
{
"id": "bison",
"name": "Bison",
"category": "bonus",
"description": "Massive plains aurochs hunted for meat and bone tools.",
"terrains": ["plains", "grassland"],
"revealed_by_tech": null,
"yields": { "food": 1, "production": 1, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "hunting_camp",
"sprite": "sprites/resources/bison.png",
"tags": ["fauna", "food"]
},
{
"id": "fish",
"name": "Fish",
"category": "bonus",
"description": "Freshwater shoals in rivers and lake margins.",
"terrains": ["coast", "lake", "river"],
"revealed_by_tech": null,
"yields": { "food": 2, "production": 0, "trade": 1, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "fishing_boats",
"sprite": "sprites/resources/fish.png",
"tags": ["aquatic", "food"]
},
{
"id": "crabs",
"name": "Crabs",
"category": "bonus",
"description": "Shellfish beds harvested by net and trap along rocky shores.",
"terrains": ["coast"],
"revealed_by_tech": null,
"yields": { "food": 2, "production": 0, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 3],
"gates_units": [],
"improvement_required": "fishing_boats",
"sprite": "sprites/resources/crabs.png",
"tags": ["aquatic", "food"]
},
{
"id": "wheat",
"name": "Wheat",
"category": "bonus",
"description": "Wild grain stands growing thick in temperate lowlands.",
"terrains": ["plains", "grassland"],
"revealed_by_tech": null,
"yields": { "food": 2, "production": 0, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "farm",
"sprite": "sprites/resources/wheat.png",
"tags": ["flora", "food"]
},
{
"id": "cattle",
"name": "Cattle",
"category": "bonus",
"description": "Semi-wild aurochs herds on open grassland.",
"terrains": ["grassland", "plains"],
"revealed_by_tech": "animal_husbandry",
"yields": { "food": 1, "production": 1, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "pasture",
"sprite": "sprites/resources/cattle.png",
"tags": ["fauna", "food"]
},
{
"id": "sheep",
"name": "Sheep",
"category": "bonus",
"description": "Wild mountain sheep providing wool, meat, and milk.",
"terrains": ["hills", "grassland", "tundra"],
"revealed_by_tech": "animal_husbandry",
"yields": { "food": 2, "production": 0, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "pasture",
"sprite": "sprites/resources/sheep.png",
"tags": ["fauna", "food"]
},
{
"id": "stone",
"name": "Stone",
"category": "bonus",
"description": "Exposed limestone and granite outcroppings. Cut stone accelerates early construction.",
"terrains": ["hills", "plains", "grassland"],
"revealed_by_tech": null,
"yields": { "food": 0, "production": 2, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "quarry",
"sprite": "sprites/resources/stone.png",
"tags": ["mineral", "production"]
},
{
"id": "timber",
"name": "Timber",
"category": "bonus",
"description": "Dense old-growth timber stands suitable for beams and construction.",
"terrains": ["forest", "jungle"],
"revealed_by_tech": null,
"yields": { "food": 0, "production": 2, "trade": 1, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 5],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "lumber_mill",
"sprite": "sprites/resources/timber.png",
"tags": ["flora", "production"]
}
],
"luxury": [
{
"id": "furs",
"name": "Furs",
"category": "luxury",
"description": "Premium arctic pelts — warmth and clan status in cold lands.",
"terrains": ["tundra", "forest", "arctic"],
"revealed_by_tech": "trapping",
"yields": { "food": 0, "production": 0, "trade": 4, "culture": 1 },
"happiness_per_copy": 4,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "hunting_camp",
"sprite": "sprites/resources/furs.png",
"tags": ["fauna", "luxury", "cold"]
},
{
"id": "ivory",
"name": "Ivory",
"category": "luxury",
"description": "Carved tusks from ancient horned beasts. Prized by craftsmen and collectors.",
"terrains": ["plains", "grassland", "desert"],
"revealed_by_tech": "trapping",
"yields": { "food": 0, "production": 1, "trade": 3, "culture": 1 },
"happiness_per_copy": 4,
"quantity_range": [1, 2],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "hunting_camp",
"sprite": "sprites/resources/ivory.png",
"tags": ["fauna", "luxury"]
},
{
"id": "silk",
"name": "Silk",
"category": "luxury",
"description": "Thread from rare cave moth cocoons — lightweight and lustrous.",
"terrains": ["forest", "jungle"],
"revealed_by_tech": "scholarship",
"yields": { "food": 0, "production": 0, "trade": 5, "culture": 1 },
"happiness_per_copy": 5,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "plantation",
"sprite": "sprites/resources/silk.png",
"tags": ["flora", "luxury"]
},
{
"id": "spices",
"name": "Spices",
"category": "luxury",
"description": "Rare aromatic herbs from deep jungle undergrowth. Transformative in cuisine and medicine.",
"terrains": ["jungle", "forest"],
"revealed_by_tech": "herbalism",
"yields": { "food": 1, "production": 0, "trade": 3, "culture": 0 },
"happiness_per_copy": 4,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "plantation",
"sprite": "sprites/resources/spices.png",
"tags": ["flora", "luxury"]
},
{
"id": "dyes",
"name": "Dyes",
"category": "luxury",
"description": "Deep-colored mineral and plant pigments used in clan heraldry and trade goods.",
"terrains": ["jungle", "plains", "desert"],
"revealed_by_tech": "culture",
"yields": { "food": 0, "production": 0, "trade": 3, "culture": 2 },
"happiness_per_copy": 4,
"quantity_range": [1, 4],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "plantation",
"sprite": "sprites/resources/dyes.png",
"tags": ["flora", "luxury", "culture"]
},
{
"id": "amber",
"name": "Amber",
"category": "luxury",
"description": "Ancient fossilized tree resin, golden and warm. Traded as curiosity across the known world.",
"terrains": ["forest", "plains"],
"revealed_by_tech": "scholarship",
"yields": { "food": 0, "production": 0, "trade": 5, "culture": 2 },
"happiness_per_copy": 5,
"quantity_range": [1, 2],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/amber.png",
"tags": ["mineral", "luxury"]
},
{
"id": "salt",
"name": "Salt",
"category": "luxury",
"description": "Rock salt veins deep in desert karst. Indispensable for preservation and flavoring.",
"terrains": ["desert", "hills"],
"revealed_by_tech": null,
"yields": { "food": 1, "production": 0, "trade": 3, "culture": 0 },
"happiness_per_copy": 3,
"quantity_range": [1, 4],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/salt.png",
"tags": ["mineral", "luxury"]
},
{
"id": "wine",
"name": "Wine",
"category": "luxury",
"description": "Wild grape vines on warm hillside terraces. Fermented wine is both sustenance and status.",
"terrains": ["grassland", "hills", "plains"],
"revealed_by_tech": "agriculture",
"yields": { "food": 1, "production": 0, "trade": 3, "culture": 1 },
"happiness_per_copy": 4,
"quantity_range": [1, 4],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "plantation",
"sprite": "sprites/resources/wine.png",
"tags": ["flora", "luxury"]
},
{
"id": "incense",
"name": "Incense",
"category": "luxury",
"description": "Fragrant resins burned at clan hearths and before the ancestors.",
"terrains": ["desert", "plains"],
"revealed_by_tech": "culture",
"yields": { "food": 0, "production": 0, "trade": 4, "culture": 2 },
"happiness_per_copy": 5,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "plantation",
"sprite": "sprites/resources/incense.png",
"tags": ["flora", "luxury", "culture"]
},
{
"id": "pearls",
"name": "Pearls",
"category": "luxury",
"description": "River pearls from molluscs in slow, clear waterways. Rare and beautiful.",
"terrains": ["coast", "lake", "river"],
"revealed_by_tech": "fishing",
"yields": { "food": 0, "production": 0, "trade": 5, "culture": 1 },
"happiness_per_copy": 5,
"quantity_range": [1, 2],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "fishing_boats",
"sprite": "sprites/resources/pearls.png",
"tags": ["aquatic", "luxury"]
},
{
"id": "copper",
"name": "Copper",
"category": "luxury",
"description": "Surface copper deposits. Beyond tools, sheet copper becomes currency and ceremonial art.",
"terrains": ["hills", "plains"],
"revealed_by_tech": "bronze_working",
"yields": { "food": 0, "production": 1, "trade": 3, "culture": 0 },
"happiness_per_copy": 3,
"quantity_range": [1, 4],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/copper.png",
"tags": ["mineral", "luxury"]
},
{
"id": "marble",
"name": "Marble",
"category": "luxury",
"description": "White and grey marble veins sought after for monuments and clan halls.",
"terrains": ["hills", "mountains"],
"revealed_by_tech": "masonry",
"yields": { "food": 0, "production": 1, "trade": 2, "culture": 3 },
"happiness_per_copy": 4,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "quarry",
"sprite": "sprites/resources/marble.png",
"tags": ["mineral", "luxury", "culture"]
},
{
"id": "gems",
"name": "Gems",
"category": "luxury",
"description": "Pockets of uncut sapphires, rubies, and garnets found in deep mountain clefts.",
"terrains": ["mountains", "hills"],
"revealed_by_tech": "mining",
"yields": { "food": 0, "production": 0, "trade": 6, "culture": 1 },
"happiness_per_copy": 6,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/gems.png",
"tags": ["mineral", "luxury"]
},
{
"id": "gold",
"name": "Gold",
"category": "luxury",
"description": "Concentrated gold veins in mountain granite. The universal measure of clan wealth.",
"terrains": ["hills", "mountains", "desert"],
"revealed_by_tech": "mining",
"yields": { "food": 0, "production": 0, "trade": 7, "culture": 0 },
"happiness_per_copy": 5,
"quantity_range": [1, 3],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/gold.png",
"tags": ["mineral", "luxury"]
},
{
"id": "obsidian_glass",
"name": "Obsidian Glass",
"category": "luxury",
"description": "Volcanic obsidian knapped to a razor edge. A prestige material in blade-craft and ceremony.",
"terrains": ["volcano", "mountains", "desert"],
"revealed_by_tech": "metallurgy",
"yields": { "food": 0, "production": 1, "trade": 4, "culture": 2 },
"happiness_per_copy": 4,
"quantity_range": [1, 2],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/obsidian_glass.png",
"tags": ["mineral", "luxury", "volcanic"]
}
],
"strategic": [
{
"id": "iron",
"name": "Iron",
"category": "strategic",
"description": "Iron ore deposits suitable for smelting into weapons-grade metal.",
"terrains": ["hills", "mountains"],
"revealed_by_tech": "bronze_working",
"yields": { "food": 0, "production": 3, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 5],
"quality_range": [1, 5],
"gates_units": ["pikeman", "cavalry", "berserker"],
"improvement_required": "mine",
"sprite": "sprites/resources/iron.png",
"tags": ["mineral", "strategic", "military"]
},
{
"id": "horses",
"name": "Horses",
"category": "strategic",
"description": "Wild horse herds on open plains. Domesticated horses transform early military mobility.",
"terrains": ["plains", "grassland", "tundra"],
"revealed_by_tech": "animal_husbandry",
"yields": { "food": 1, "production": 1, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 4],
"gates_units": ["cavalry"],
"improvement_required": "pasture",
"sprite": "sprites/resources/horses.png",
"tags": ["fauna", "strategic", "military"]
},
{
"id": "coal",
"name": "Coal",
"category": "strategic",
"description": "Deep coal seams essential for high-temperature forges and industrial smelting.",
"terrains": ["hills", "mountains"],
"revealed_by_tech": "metallurgy",
"yields": { "food": 0, "production": 4, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 5],
"quality_range": [1, 5],
"gates_units": ["runesmith"],
"improvement_required": "mine",
"sprite": "sprites/resources/coal.png",
"tags": ["mineral", "strategic", "production"]
},
{
"id": "saltpeter",
"name": "Saltpeter",
"category": "strategic",
"description": "Potassium nitrate precipitating in cave karst and desert margins. Essential for advanced military.",
"terrains": ["desert", "hills", "mountains"],
"revealed_by_tech": "alchemy",
"yields": { "food": 0, "production": 1, "trade": 2, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": [],
"improvement_required": "mine",
"sprite": "sprites/resources/saltpeter.png",
"tags": ["mineral", "strategic"]
},
{
"id": "hardwood",
"name": "Hardwood",
"category": "strategic",
"description": "Dense old-growth ironwood and darkwood required for siege equipment and fortifications.",
"terrains": ["forest", "jungle"],
"revealed_by_tech": "engineering",
"yields": { "food": 0, "production": 3, "trade": 0, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 5],
"gates_units": [],
"improvement_required": "lumber_mill",
"sprite": "sprites/resources/hardwood.png",
"tags": ["flora", "strategic", "production"]
},
{
"id": "hides",
"name": "Hides",
"category": "strategic",
"description": "Heavy cave bear and mountain ox hides cured for armor and equipment.",
"terrains": ["forest", "tundra", "plains"],
"revealed_by_tech": "trapping",
"yields": { "food": 0, "production": 2, "trade": 1, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 3],
"quality_range": [1, 4],
"gates_units": ["archer"],
"improvement_required": "hunting_camp",
"sprite": "sprites/resources/hides.png",
"tags": ["fauna", "strategic", "military"]
},
{
"id": "flint",
"name": "Flint",
"category": "strategic",
"description": "Flint-bearing chert beds in chalk plains. The first worked stone — essential for arrow tips.",
"terrains": ["plains", "hills", "desert"],
"revealed_by_tech": null,
"yields": { "food": 0, "production": 1, "trade": 1, "culture": 0 },
"happiness_per_copy": 0,
"quantity_range": [1, 4],
"quality_range": [1, 3],
"gates_units": ["warrior", "archer"],
"improvement_required": "quarry",
"sprite": "sprites/resources/flint.png",
"tags": ["mineral", "strategic"]
}
]
}