chore(earth): 🔧 Update climate and hydrology simulation parameters for refined environmental rules
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
834e4b5e6a
commit
9f5ba3e926
3 changed files with 1055 additions and 0 deletions
241
engine/src/worlds/earth/climate_params.json
Normal file
241
engine/src/worlds/earth/climate_params.json
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
{
|
||||
"atmosphere": {
|
||||
"pressure_bands": {
|
||||
"polar_high_cut": 0.15,
|
||||
"subpolar_low_cut": 0.30,
|
||||
"subtropical_high_cut": 0.60,
|
||||
"hadley_low_cut": 1.00,
|
||||
"polar_high_hpa": 1030.0,
|
||||
"subpolar_low_hpa": 995.0,
|
||||
"subtropical_high_hpa": 1025.0,
|
||||
"equatorial_low_hpa": 1005.0
|
||||
},
|
||||
"pressure_terrain_modifiers": {
|
||||
"mountain_per_0_1_elevation": 5.0,
|
||||
"ocean_offset": -2.0,
|
||||
"hot_land_threshold": 0.6,
|
||||
"hot_land_offset": -3.0
|
||||
},
|
||||
"anomaly": {
|
||||
"thermal_low_spawn_hpa": -15.0,
|
||||
"cold_high_spawn_hpa": 15.0,
|
||||
"tropical_low_spawn_hpa": -20.0,
|
||||
"spawn_hot_temp_threshold": 0.65,
|
||||
"spawn_cold_temp_threshold": 0.2,
|
||||
"spawn_adjacent_cool_threshold": 0.45,
|
||||
"spawn_ocean_hot_threshold": 0.6,
|
||||
"decay_per_turn_hpa": 2.0,
|
||||
"reinforce_per_turn_hpa": 3.0,
|
||||
"max_anomaly_hpa": 50.0,
|
||||
"drift_wind_fraction": 0.5,
|
||||
"merge_radius_hexes": 2
|
||||
},
|
||||
"pressure_wind": {
|
||||
"gradient_scale": 0.05,
|
||||
"speed_scale": 0.04,
|
||||
"coriolis_scale": 0.3
|
||||
},
|
||||
"humidity": {
|
||||
"ocean_evap_rate": 0.03,
|
||||
"soil_contribution": 0.01,
|
||||
"forest_evapotranspiration": 0.015,
|
||||
"wind_transport_fraction": 0.1,
|
||||
"precipitation_rh_threshold": 0.95,
|
||||
"precipitation_humidity_loss": 0.1,
|
||||
"precipitation_moisture_gain": 0.05,
|
||||
"mountain_barrier_block": 0.8,
|
||||
"decay_per_turn": 0.02
|
||||
},
|
||||
"relative_humidity": {
|
||||
"saturation_base": 0.2,
|
||||
"saturation_temp_scale": 0.8
|
||||
},
|
||||
"dew_point": {
|
||||
"rh_factor": 0.2
|
||||
},
|
||||
"cape": {
|
||||
"lapse_rate_per_elevation": 0.006,
|
||||
"temp_diff_scale": 2.0,
|
||||
"humidity_scale": 1.5,
|
||||
"stability_offset": 0.3,
|
||||
"moisture_feedback_scale": 0.5
|
||||
},
|
||||
"event_thresholds": {
|
||||
"hurricane": {
|
||||
"accumulate_per_turn": 0.15,
|
||||
"decay_per_turn": 0.1,
|
||||
"spawn_threshold": 1.0,
|
||||
"ocean_temp_min": 0.65,
|
||||
"pressure_anomaly_max": -10.0,
|
||||
"humidity_min": 0.6,
|
||||
"wind_shear_max_diff": 1,
|
||||
"latitude_min_pct": 0.1,
|
||||
"latitude_max_pct": 0.5,
|
||||
"planet_rotation_min": 0.2,
|
||||
"mature_pressure_anomaly": -40.0
|
||||
},
|
||||
"tornado": {
|
||||
"accumulate_per_turn": 0.25,
|
||||
"decay_per_turn": 0.2,
|
||||
"spawn_threshold": 0.8,
|
||||
"cape_min": 0.5,
|
||||
"temp_differential_min": 0.2,
|
||||
"dew_point_min": 0.55
|
||||
},
|
||||
"drought": {
|
||||
"accumulate_per_turn": 0.1,
|
||||
"decay_per_turn": 0.2,
|
||||
"spawn_threshold": 1.0,
|
||||
"pressure_anomaly_min": 10.0,
|
||||
"humidity_max": 0.2,
|
||||
"moisture_max": 0.25,
|
||||
"relative_humidity_max": 0.3,
|
||||
"sustain_turns": 3
|
||||
},
|
||||
"flood": {
|
||||
"accumulate_per_turn": 0.2,
|
||||
"spawn_threshold": 0.8,
|
||||
"river_flow_threshold": 80.0,
|
||||
"humidity_min": 0.7,
|
||||
"coastal_pressure_anomaly_max": -20.0,
|
||||
"coastal_temp_threshold": 0.55
|
||||
},
|
||||
"monsoon": {
|
||||
"accumulate_per_turn": 0.1,
|
||||
"spawn_threshold": 1.0,
|
||||
"ocean_temp_min": 0.6,
|
||||
"land_pressure_anomaly_max": -5.0,
|
||||
"season_period": 20
|
||||
},
|
||||
"blizzard": {
|
||||
"accumulate_per_turn": 0.15,
|
||||
"spawn_threshold": 0.8,
|
||||
"temp_max": 0.15,
|
||||
"wind_speed_min": 0.5,
|
||||
"humidity_min": 0.3,
|
||||
"pressure_anomaly_max": -5.0
|
||||
},
|
||||
"heat_wave": {
|
||||
"accumulate_per_turn": 0.1,
|
||||
"spawn_threshold": 0.8,
|
||||
"pressure_anomaly_min": 15.0,
|
||||
"temp_min": 0.7,
|
||||
"humidity_max": 0.3,
|
||||
"wind_speed_max": 0.3,
|
||||
"sustain_turns": 3
|
||||
}
|
||||
},
|
||||
"event_effects": {
|
||||
"hurricane": {
|
||||
"unit_damage_cat1": 5,
|
||||
"unit_damage_cat5": 25,
|
||||
"city_damage_cat1": 10,
|
||||
"city_damage_cat5": 50,
|
||||
"improvement_destroy_chance_cat1": 0.3,
|
||||
"improvement_destroy_chance_cat5": 0.9,
|
||||
"food_yield_penalty": 2,
|
||||
"duration_min": 5,
|
||||
"duration_max": 15
|
||||
},
|
||||
"tornado": {
|
||||
"unit_damage": 15,
|
||||
"city_damage": 20,
|
||||
"improvement_destroy_chance": 0.8,
|
||||
"all_yield_penalty": 1,
|
||||
"quality_penalty": 1,
|
||||
"path_hexes_min": 1,
|
||||
"path_hexes_max": 3,
|
||||
"duration_min": 1,
|
||||
"duration_max": 3
|
||||
},
|
||||
"drought": {
|
||||
"food_yield_penalty": 1,
|
||||
"duration_min": -1
|
||||
},
|
||||
"flood": {
|
||||
"unit_damage": 10,
|
||||
"city_damage": 15,
|
||||
"improvement_destroy_chance": 0.6,
|
||||
"food_yield_after": 1,
|
||||
"duration_min": 2,
|
||||
"duration_max": 8
|
||||
},
|
||||
"monsoon": {
|
||||
"improvement_flood_destroy_chance": 0.2,
|
||||
"food_yield_bonus": 1,
|
||||
"duration_min": 8,
|
||||
"duration_max": 12
|
||||
},
|
||||
"blizzard": {
|
||||
"unit_damage_per_turn": 3,
|
||||
"duration_min": 3,
|
||||
"duration_max": 6
|
||||
},
|
||||
"heat_wave": {
|
||||
"unit_damage_per_turn": 2,
|
||||
"food_yield_penalty": 1,
|
||||
"happiness_penalty": 1,
|
||||
"duration_min": 3,
|
||||
"duration_max": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"moisture_relaxation": 0.04,
|
||||
"ocean_evaporation_hops": 4,
|
||||
"ocean_evaporation_hop_decay": 0.5,
|
||||
"atmospheric_loss_rate": 0.0001,
|
||||
"water_boil_threshold": 0.82,
|
||||
"surface_runoff_rate": 0.3,
|
||||
"deep_earth_water": {
|
||||
"volcano_self": 0.008,
|
||||
"volcano_neighbor": 0.004,
|
||||
"hot_spring_self": 0.005,
|
||||
"hot_spring_neighbor": 0.002,
|
||||
"hot_spring_max_temperature": 0.60,
|
||||
"high_elevation_self": 0.002,
|
||||
"high_elevation_threshold": 0.8
|
||||
},
|
||||
"wind_conductivity": 0.1,
|
||||
"energy_scale": 0.005,
|
||||
"equilibrium_relaxation": 0.08,
|
||||
"evaporation_rate": 0.05,
|
||||
"moisture_transport": 0.15,
|
||||
"precipitation_threshold": 0.7,
|
||||
"moisture_decay": 0.995,
|
||||
"quality_up_threshold": 10,
|
||||
"quality_down_threshold": 5,
|
||||
"lake_thermal_conductivity": 0.05,
|
||||
"river_moisture_transport": 0.075,
|
||||
"mountain_rain_shadow_block": 0.9,
|
||||
"wind_band_polar_cut": 0.15,
|
||||
"wind_band_polar_front_cut": 0.30,
|
||||
"wind_band_ferrel_cut": 0.50,
|
||||
"wind_band_subtropical_cut": 0.60,
|
||||
"wind_band_hadley_cut": 0.85,
|
||||
"wind_speed_polar": 0.6,
|
||||
"wind_speed_polar_front": 0.3,
|
||||
"wind_speed_ferrel": 0.8,
|
||||
"wind_speed_subtropical": 0.3,
|
||||
"wind_speed_hadley": 0.7,
|
||||
"wind_speed_itcz": 0.3,
|
||||
"wind_friction_land": 0.7,
|
||||
"wind_friction_mountain_downwind": 0.1,
|
||||
"solar_min": 0.05,
|
||||
"solar_max": 0.70,
|
||||
"orbital_cycle_1_period": 400,
|
||||
"orbital_cycle_1_amplitude": 0.015,
|
||||
"orbital_cycle_1_phase": 0.0,
|
||||
"orbital_cycle_2_period": 260,
|
||||
"orbital_cycle_2_amplitude": 0.010,
|
||||
"orbital_cycle_2_phase": 1.05,
|
||||
"orbital_cycle_3_period": 1000,
|
||||
"orbital_cycle_3_amplitude": 0.020,
|
||||
"orbital_cycle_3_phase": 2.40,
|
||||
"orbital_moisture_coupling": 0.5,
|
||||
"sea_level_temp_sensitivity": 0.0008,
|
||||
"sea_level_equilibrium_temp": 0.45,
|
||||
"water_freeze_threshold": 0.12,
|
||||
"aerosol_background": 0.002,
|
||||
"aerosol_desert_dust": 0.005,
|
||||
"aerosol_volcanic_outgas": 0.015
|
||||
}
|
||||
758
engine/src/worlds/earth/climate_spec.json
Normal file
758
engine/src/worlds/earth/climate_spec.json
Normal file
|
|
@ -0,0 +1,758 @@
|
|||
{
|
||||
"terrain_classification": {
|
||||
"comment": "Ordered rule list \u2014 first match wins. Mirrors biome_classifier.gd _classify_land(). Water/volcanic/cave handled outside these rules.",
|
||||
"rules": [
|
||||
{
|
||||
"comment": "Wetland override: saturated moisture on lowland",
|
||||
"and": [
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
},
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": "<",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.4
|
||||
}
|
||||
],
|
||||
"terrain": "swamp"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
},
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": "<",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": "<=",
|
||||
"value": 0.4
|
||||
}
|
||||
],
|
||||
"terrain": "bog"
|
||||
},
|
||||
{
|
||||
"comment": "Very high elevation: ice or alpine tundra",
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.85
|
||||
},
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": "<",
|
||||
"value": 0.1
|
||||
}
|
||||
],
|
||||
"terrain": "ice"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.85
|
||||
}
|
||||
],
|
||||
"terrain": "alpine_tundra"
|
||||
},
|
||||
{
|
||||
"comment": "High elevation (0.70-0.85): alpine meadow or alpine tundra",
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.3
|
||||
}
|
||||
],
|
||||
"terrain": "alpine_meadow"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
}
|
||||
],
|
||||
"terrain": "alpine_tundra"
|
||||
},
|
||||
{
|
||||
"comment": "Mid elevation (0.55-0.70): montane forest, cloud forest, or alpine meadow",
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"field": "canopy",
|
||||
"op": ">",
|
||||
"value": 0.4
|
||||
}
|
||||
],
|
||||
"terrain": "montane_forest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
},
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.3
|
||||
}
|
||||
],
|
||||
"terrain": "cloud_forest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "elevation",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
}
|
||||
],
|
||||
"terrain": "alpine_meadow"
|
||||
},
|
||||
{
|
||||
"comment": "Hot lowland (temp > 0.55): tropical biomes or desert",
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
},
|
||||
{
|
||||
"field": "canopy",
|
||||
"op": ">",
|
||||
"value": 0.6
|
||||
}
|
||||
],
|
||||
"terrain": "tropical_rainforest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.4
|
||||
}
|
||||
],
|
||||
"terrain": "tropical_dry_forest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.2
|
||||
}
|
||||
],
|
||||
"terrain": "savanna"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.55
|
||||
}
|
||||
],
|
||||
"terrain": "desert"
|
||||
},
|
||||
{
|
||||
"comment": "Temperate (temp 0.25-0.55): forest, grassland, or chaparral",
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.25
|
||||
},
|
||||
{
|
||||
"field": "canopy",
|
||||
"op": ">",
|
||||
"value": 0.5
|
||||
}
|
||||
],
|
||||
"terrain": "forest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.25
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.7
|
||||
}
|
||||
],
|
||||
"terrain": "temperate_rainforest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.25
|
||||
},
|
||||
{
|
||||
"field": "moisture",
|
||||
"op": ">",
|
||||
"value": 0.3
|
||||
}
|
||||
],
|
||||
"terrain": "grassland"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.25
|
||||
}
|
||||
],
|
||||
"terrain": "chaparral"
|
||||
},
|
||||
{
|
||||
"comment": "Cold (temp 0.10-0.25): boreal forest or tundra",
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.1
|
||||
},
|
||||
{
|
||||
"field": "canopy",
|
||||
"op": ">",
|
||||
"value": 0.3
|
||||
}
|
||||
],
|
||||
"terrain": "boreal_forest"
|
||||
},
|
||||
{
|
||||
"and": [
|
||||
{
|
||||
"field": "temperature",
|
||||
"op": ">",
|
||||
"value": 0.1
|
||||
}
|
||||
],
|
||||
"terrain": "tundra"
|
||||
},
|
||||
{
|
||||
"comment": "Extreme cold fallback",
|
||||
"terrain": "polar_desert"
|
||||
}
|
||||
]
|
||||
},
|
||||
"terrain_transitions": {
|
||||
"comment": "Hysteresis rules for _ideal_terrain(). Each terrain defines conditions to leave it. First match wins; if none match, terrain persists. 'classify' means re-run full classification.",
|
||||
"tropical_rainforest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.70 OR canopy <= 0.60",
|
||||
"becomes": "tropical_dry_forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.55 AND canopy > 0",
|
||||
"becomes": "forest"
|
||||
}
|
||||
],
|
||||
"tropical_dry_forest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.40 AND canopy > 0",
|
||||
"becomes": "savanna"
|
||||
},
|
||||
{
|
||||
"condition": "moisture > 0.70 AND canopy > 0.60",
|
||||
"becomes": "tropical_rainforest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.55 AND canopy > 0",
|
||||
"becomes": "forest"
|
||||
}
|
||||
],
|
||||
"savanna": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.20",
|
||||
"becomes": "desert"
|
||||
},
|
||||
{
|
||||
"condition": "moisture > 0.40 AND canopy > 0",
|
||||
"becomes": "tropical_dry_forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.55",
|
||||
"becomes": "chaparral"
|
||||
}
|
||||
],
|
||||
"desert": [
|
||||
{
|
||||
"condition": "moisture > 0.20 AND temperature > 0.55 AND canopy > 0",
|
||||
"becomes": "savanna"
|
||||
},
|
||||
{
|
||||
"condition": "moisture > 0.20 AND temperature <= 0.55",
|
||||
"becomes": "chaparral"
|
||||
}
|
||||
],
|
||||
"forest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "canopy <= 0.30 AND canopy > 0",
|
||||
"becomes": "grassland"
|
||||
},
|
||||
{
|
||||
"condition": "temperature > 0.55 AND canopy > 0",
|
||||
"becomes": "tropical_dry_forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.25 AND canopy > 0",
|
||||
"becomes": "boreal_forest"
|
||||
}
|
||||
],
|
||||
"temperate_rainforest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.50 AND canopy > 0",
|
||||
"becomes": "forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature > 0.55 AND canopy > 0",
|
||||
"becomes": "tropical_rainforest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.25 AND canopy > 0",
|
||||
"becomes": "boreal_forest"
|
||||
}
|
||||
],
|
||||
"grassland": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "canopy > 0.50",
|
||||
"becomes": "forest"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.30",
|
||||
"becomes": "chaparral"
|
||||
},
|
||||
{
|
||||
"condition": "temperature > 0.55 AND canopy > 0",
|
||||
"becomes": "savanna"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.25 AND canopy > 0",
|
||||
"becomes": "tundra"
|
||||
}
|
||||
],
|
||||
"chaparral": [
|
||||
{
|
||||
"condition": "moisture > 0.30 AND canopy > 0",
|
||||
"becomes": "grassland"
|
||||
},
|
||||
{
|
||||
"condition": "temperature > 0.55 AND moisture <= 0.20",
|
||||
"becomes": "desert"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.25 AND canopy > 0",
|
||||
"becomes": "tundra"
|
||||
}
|
||||
],
|
||||
"boreal_forest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "canopy <= 0.20",
|
||||
"becomes": "tundra"
|
||||
},
|
||||
{
|
||||
"condition": "temperature >= 0.25 AND canopy > 0",
|
||||
"becomes": "forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.10",
|
||||
"becomes": "classify"
|
||||
}
|
||||
],
|
||||
"tundra": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "polar_desert"
|
||||
},
|
||||
{
|
||||
"condition": "canopy > 0.30 AND temperature > 0.10",
|
||||
"becomes": "boreal_forest"
|
||||
},
|
||||
{
|
||||
"condition": "temperature >= 0.25 AND canopy > 0",
|
||||
"becomes": "grassland"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.10",
|
||||
"becomes": "polar_desert"
|
||||
}
|
||||
],
|
||||
"polar_desert": [
|
||||
{
|
||||
"condition": "temperature > 0.10 AND canopy > 0",
|
||||
"becomes": "tundra"
|
||||
}
|
||||
],
|
||||
"swamp": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.60",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "temperature <= 0.40",
|
||||
"becomes": "bog"
|
||||
}
|
||||
],
|
||||
"bog": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.60",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "temperature > 0.40",
|
||||
"becomes": "swamp"
|
||||
}
|
||||
],
|
||||
"montane_forest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "canopy <= 0.30",
|
||||
"becomes": "alpine_meadow"
|
||||
},
|
||||
{
|
||||
"condition": "elevation <= 0.50",
|
||||
"becomes": "classify"
|
||||
}
|
||||
],
|
||||
"cloud_forest": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.60 OR temperature <= 0.25",
|
||||
"becomes": "alpine_meadow"
|
||||
},
|
||||
{
|
||||
"condition": "elevation <= 0.50",
|
||||
"becomes": "classify"
|
||||
}
|
||||
],
|
||||
"alpine_meadow": [
|
||||
{
|
||||
"condition": "canopy <= 0",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "elevation <= 0.50",
|
||||
"becomes": "classify"
|
||||
},
|
||||
{
|
||||
"condition": "moisture <= 0.20 AND elevation > 0.70",
|
||||
"becomes": "alpine_tundra"
|
||||
}
|
||||
],
|
||||
"alpine_tundra": [
|
||||
{
|
||||
"condition": "moisture > 0.30 AND elevation <= 0.85 AND canopy > 0",
|
||||
"becomes": "alpine_meadow"
|
||||
},
|
||||
{
|
||||
"condition": "elevation <= 0.50",
|
||||
"becomes": "classify"
|
||||
}
|
||||
]
|
||||
},
|
||||
"precipitation_latitude": {
|
||||
"comment": "Latitude-dependent moisture adjustment in precipitation step. Models Hadley cell circulation.",
|
||||
"polar_drying": {
|
||||
"band_pct": 0.15,
|
||||
"rate_per_turn": 0.005
|
||||
},
|
||||
"subtropical_drying": {
|
||||
"center_pct": 0.3,
|
||||
"half_width": 0.15,
|
||||
"rate_per_turn": 0.008
|
||||
}
|
||||
},
|
||||
"aerosol": {
|
||||
"comment": "Stratospheric sulfate/ash aerosol physics. Injected by volcanic/impact events. Applied each turn to magic_heat_delta (cooling) and magic_moisture_delta (drying). Spreads downwind, decays per turn. 1 turn \u2248 10 years. Extinction (~20 turns), asteroid (~9 turns), supervolcano (~1-2 turns).",
|
||||
"cooling_rate": 0.06,
|
||||
"drying_rate": 0.03,
|
||||
"wind_transport_rate": 0.12,
|
||||
"decay_rate": 0.05
|
||||
},
|
||||
"reef_bleaching": {
|
||||
"comment": "Coral reef health model. Coast tiles gain/lose reef_health per turn based on temperature.",
|
||||
"bleach_temp_threshold": 0.75,
|
||||
"damage_rate_per_turn": 0.01,
|
||||
"recovery_rate_per_turn": 0.005,
|
||||
"dead_threshold": 0.3
|
||||
},
|
||||
"anchor_decay": {
|
||||
"comment": "Event-created ley anchors lose strength over time as the planet absorbs them.",
|
||||
"rate_per_turn": 0.003
|
||||
},
|
||||
"ley_channeling": {
|
||||
"comment": "Corruption spread multipliers based on receiving tile's ley state.",
|
||||
"off_ley": 1.0,
|
||||
"on_ley_generic": 2.0,
|
||||
"death_ley": 3.0,
|
||||
"nature_life_ley": 0.5
|
||||
},
|
||||
"ley_network": {
|
||||
"comment": "Ley line connection rules between anchors. See also ley_line_params.json for anchor strengths and field density.",
|
||||
"max_connection_distance": 28,
|
||||
"max_connections_per_node": 3,
|
||||
"school_affinity": {
|
||||
"comment": "MTG color wheel: 1.0 = same school, 0.5 = allied neighbor, 0.0 = enemy",
|
||||
"life": {
|
||||
"life": 1.0,
|
||||
"nature": 0.5,
|
||||
"aether": 0.5,
|
||||
"chaos": 0.0,
|
||||
"death": 0.0
|
||||
},
|
||||
"nature": {
|
||||
"life": 0.5,
|
||||
"nature": 1.0,
|
||||
"chaos": 0.5,
|
||||
"aether": 0.0,
|
||||
"death": 0.0
|
||||
},
|
||||
"aether": {
|
||||
"life": 0.5,
|
||||
"aether": 1.0,
|
||||
"death": 0.5,
|
||||
"chaos": 0.0,
|
||||
"nature": 0.0
|
||||
},
|
||||
"chaos": {
|
||||
"nature": 0.5,
|
||||
"chaos": 1.0,
|
||||
"death": 0.5,
|
||||
"life": 0.0,
|
||||
"aether": 0.0
|
||||
},
|
||||
"death": {
|
||||
"aether": 0.5,
|
||||
"death": 1.0,
|
||||
"life": 0.0,
|
||||
"nature": 0.0,
|
||||
"chaos": 0.5
|
||||
}
|
||||
}
|
||||
},
|
||||
"atmospheric_chemistry": {
|
||||
"starting_atmospheres": {
|
||||
"modern": {
|
||||
"o2_fraction": 0.21,
|
||||
"co2_ppm": 420,
|
||||
"ch4_ppb": 1900
|
||||
},
|
||||
"depleted": {
|
||||
"o2_fraction": 0.1,
|
||||
"co2_ppm": 2000,
|
||||
"ch4_ppb": 5000
|
||||
},
|
||||
"lush": {
|
||||
"o2_fraction": 0.3,
|
||||
"co2_ppm": 200,
|
||||
"ch4_ppb": 800
|
||||
},
|
||||
"primordial": {
|
||||
"o2_fraction": 0.0001,
|
||||
"co2_ppm": 300000,
|
||||
"ch4_ppb": 100000
|
||||
}
|
||||
},
|
||||
"photosynthesis": {
|
||||
"land_canopy_rate": 4e-05,
|
||||
"ocean_phyto_rate": 3e-05,
|
||||
"algal_bloom_burst": 0.0008,
|
||||
"aerosol_suppression": 0.6
|
||||
},
|
||||
"respiration": {
|
||||
"fauna_rate": 1.5e-05,
|
||||
"decomp_co2_rate": 8e-06,
|
||||
"decomp_ch4_rate": 2e-06,
|
||||
"wildfire_o2_cost": 0.0005,
|
||||
"wildfire_co2_gain": 800
|
||||
},
|
||||
"greenhouse": {
|
||||
"co2_temp_bias": [
|
||||
{
|
||||
"co2_ppm_min": 0,
|
||||
"co2_ppm_max": 1000,
|
||||
"temp_bias": 0.0
|
||||
},
|
||||
{
|
||||
"co2_ppm_min": 1000,
|
||||
"co2_ppm_max": 5000,
|
||||
"temp_bias": 0.05
|
||||
},
|
||||
{
|
||||
"co2_ppm_min": 5000,
|
||||
"co2_ppm_max": 50000,
|
||||
"temp_bias": 0.15
|
||||
},
|
||||
{
|
||||
"co2_ppm_min": 50000,
|
||||
"co2_ppm_max": 999999,
|
||||
"temp_bias": 0.3
|
||||
}
|
||||
],
|
||||
"ch4_temp_multiplier": 5e-08,
|
||||
"ch4_decay_rate": 0.02,
|
||||
"permafrost_ch4_pulse": 5000,
|
||||
"wetland_ch4_rate": 3e-06
|
||||
},
|
||||
"o2_thresholds": {
|
||||
"safe": 0.18,
|
||||
"thin": 0.15,
|
||||
"dangerous": 0.1,
|
||||
"critical": 0.05,
|
||||
"lethal": 0.03
|
||||
},
|
||||
"ecological_collapse": {
|
||||
"o2_trigger": 0.05,
|
||||
"o2_sustained_turns": 10,
|
||||
"dead_biome_fraction": 0.8,
|
||||
"extinction_events_window": 20,
|
||||
"extinction_events_threshold": 3,
|
||||
"photosynthesis_tipping_multiplier": 0.1,
|
||||
"recovery_rate_per_turn": 0.0001
|
||||
},
|
||||
"volcanic": {
|
||||
"co2_per_aerosol_unit": 120,
|
||||
"t6_co2_bonus": 8000,
|
||||
"t7_co2_bonus": 40000,
|
||||
"t8_co2_bonus": 200000
|
||||
},
|
||||
"fish_collapse": {
|
||||
"critical_threshold": 0.15,
|
||||
"collapse_threshold": 0.05,
|
||||
"global_fish_check_interval": 5,
|
||||
"trophic_cascade_delay_turns": 3,
|
||||
"bloom_phase_duration": 8,
|
||||
"anoxic_phase_duration": 15,
|
||||
"toxification_phase_duration": 30,
|
||||
"o2_production_loss_rate": 0.08,
|
||||
"o2_loss_while_toxic": 0.0008,
|
||||
"coastal_damage_radius": 3,
|
||||
"recovery_fish_threshold": 0.25,
|
||||
"recovery_turns_required": 20,
|
||||
"ocean_toxicity_decay": 0.005,
|
||||
"h2s_coastal_damage_per_turn": 2
|
||||
},
|
||||
"ocean_states": {
|
||||
"healthy": {
|
||||
"fish_floor": 0.3,
|
||||
"o2_contribution": 1.0
|
||||
},
|
||||
"stressed": {
|
||||
"fish_floor": 0.15,
|
||||
"o2_contribution": 0.7
|
||||
},
|
||||
"anoxic": {
|
||||
"fish_floor": 0.05,
|
||||
"o2_contribution": 0.2
|
||||
},
|
||||
"toxic": {
|
||||
"fish_floor": 0.01,
|
||||
"o2_contribution": 0.0,
|
||||
"coastal_damage": true
|
||||
},
|
||||
"dead": {
|
||||
"fish_floor": 0.0,
|
||||
"o2_contribution": 0.0,
|
||||
"coastal_damage": true,
|
||||
"permanent": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
56
engine/src/worlds/earth/hydrology_params.json
Normal file
56
engine/src/worlds/earth/hydrology_params.json
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"rainfall": {
|
||||
"multiplier_tropical": 1.4,
|
||||
"multiplier_temperate": 1.0,
|
||||
"multiplier_cold": 0.5,
|
||||
"multiplier_frozen": 0.2,
|
||||
"multiplier_desert_terrain": 0.15
|
||||
},
|
||||
"source_bonuses": {
|
||||
"snowmelt": {
|
||||
"bonus": 0.8,
|
||||
"terrain": ["mountains", "hills"],
|
||||
"min_elevation": 0.65,
|
||||
"max_temperature": 0.5
|
||||
},
|
||||
"spring": {
|
||||
"bonus": 0.3,
|
||||
"terrain": ["enchanted_forest"],
|
||||
"min_moisture": 0.6
|
||||
},
|
||||
"hot_spring": {
|
||||
"bonus": 0.5,
|
||||
"terrain": ["tundra", "snow"],
|
||||
"adjacent_terrain": ["volcano", "mountains"],
|
||||
"max_temperature": 0.25
|
||||
},
|
||||
"glacial": {
|
||||
"bonus": 0.4,
|
||||
"terrain": ["snow", "ice"],
|
||||
"min_elevation": 0.5
|
||||
}
|
||||
},
|
||||
"depression_fill": {
|
||||
"epsilon": 0.0001
|
||||
},
|
||||
"lakes": {
|
||||
"depth_threshold": 0.02,
|
||||
"inland_sea_min_tiles": 12
|
||||
},
|
||||
"rivers": {
|
||||
"threshold_tropical": 20.0,
|
||||
"threshold_temperate": 25.0,
|
||||
"threshold_cold": 35.0,
|
||||
"threshold_frozen": 50.0,
|
||||
"threshold_desert": 30.0,
|
||||
"width_thresholds": [2.0, 8.0, 20.0],
|
||||
"width_labels": ["stream", "river", "major_river", "great_river"]
|
||||
},
|
||||
"deltas": {
|
||||
"accumulation_threshold": 15.0,
|
||||
"max_branches": 3
|
||||
},
|
||||
"frozen_river_temperature": 0.10,
|
||||
"lake_moisture_injection": 0.6,
|
||||
"river_moisture_per_turn": 0.02
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue