feat(mars): ✨ Introduce Mars-specific simulation mechanics and entities
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
c37e0c4f12
commit
9c7f7da244
5 changed files with 286 additions and 0 deletions
126
engine/src/worlds/mars/climate_params.json
Normal file
126
engine/src/worlds/mars/climate_params.json
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
{
|
||||
"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": 610.0,
|
||||
"subpolar_low_hpa": 595.0,
|
||||
"subtropical_high_hpa": 608.0,
|
||||
"equatorial_low_hpa": 600.0
|
||||
},
|
||||
"pressure_terrain_modifiers": {
|
||||
"mountain_per_0_1_elevation": 15.0,
|
||||
"ocean_offset": 0.0,
|
||||
"hot_land_threshold": 0.25,
|
||||
"hot_land_offset": -3.0
|
||||
},
|
||||
"anomaly": {
|
||||
"thermal_low_spawn_hpa": -8.0,
|
||||
"cold_high_spawn_hpa": 8.0,
|
||||
"tropical_low_spawn_hpa": -5.0,
|
||||
"spawn_hot_temp_threshold": 0.20,
|
||||
"spawn_cold_temp_threshold": 0.05,
|
||||
"spawn_adjacent_cool_threshold": 0.12,
|
||||
"spawn_ocean_hot_threshold": 0.30,
|
||||
"decay_per_turn_hpa": 1.5,
|
||||
"reinforce_per_turn_hpa": 2.0,
|
||||
"max_anomaly_hpa": 25.0,
|
||||
"drift_wind_fraction": 0.6,
|
||||
"merge_radius_hexes": 3
|
||||
},
|
||||
"pressure_wind": {
|
||||
"gradient_scale": 0.06,
|
||||
"speed_scale": 0.05,
|
||||
"coriolis_scale": 0.25
|
||||
},
|
||||
"humidity": {
|
||||
"ocean_evap_rate": 0.0,
|
||||
"soil_contribution": 0.0,
|
||||
"forest_evapotranspiration": 0.0,
|
||||
"wind_transport_fraction": 0.0,
|
||||
"precipitation_rh_threshold": 99.0,
|
||||
"precipitation_humidity_loss": 0.0,
|
||||
"precipitation_moisture_gain": 0.0,
|
||||
"mountain_barrier_block": 0.5,
|
||||
"decay_per_turn": 0.0
|
||||
},
|
||||
"relative_humidity": {
|
||||
"saturation_base": 0.0,
|
||||
"saturation_temp_scale": 0.0
|
||||
},
|
||||
"dew_point": {
|
||||
"rh_factor": 0.0
|
||||
},
|
||||
"cape": {
|
||||
"lapse_rate_per_elevation": 0.004,
|
||||
"temp_diff_scale": 0.5,
|
||||
"humidity_scale": 0.0,
|
||||
"stability_offset": 0.0,
|
||||
"moisture_feedback_scale": 0.0
|
||||
},
|
||||
"event_thresholds": {},
|
||||
"event_effects": {}
|
||||
},
|
||||
"moisture_relaxation": 0.0,
|
||||
"ocean_evaporation_hops": 0,
|
||||
"ocean_evaporation_hop_decay": 0.0,
|
||||
"atmospheric_loss_rate": 0.0,
|
||||
"water_boil_threshold": 0.15,
|
||||
"surface_runoff_rate": 0.0,
|
||||
"deep_earth_water": {
|
||||
"volcano_self": 0.0,
|
||||
"volcano_neighbor": 0.0,
|
||||
"hot_spring_self": 0.0,
|
||||
"hot_spring_neighbor": 0.0,
|
||||
"hot_spring_max_temperature": 0.0,
|
||||
"high_elevation_self": 0.0,
|
||||
"high_elevation_threshold": 0.95
|
||||
},
|
||||
"wind_conductivity": 0.12,
|
||||
"energy_scale": 0.004,
|
||||
"equilibrium_relaxation": 0.02,
|
||||
"evaporation_rate": 0.0,
|
||||
"moisture_transport": 0.0,
|
||||
"precipitation_threshold": 99.0,
|
||||
"moisture_decay": 1.0,
|
||||
"quality_up_threshold": 10,
|
||||
"quality_down_threshold": 5,
|
||||
"lake_thermal_conductivity": 0.0,
|
||||
"river_moisture_transport": 0.0,
|
||||
"mountain_rain_shadow_block": 0.4,
|
||||
"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.5,
|
||||
"wind_speed_polar_front": 0.4,
|
||||
"wind_speed_ferrel": 0.6,
|
||||
"wind_speed_subtropical": 0.35,
|
||||
"wind_speed_hadley": 0.55,
|
||||
"wind_speed_itcz": 0.3,
|
||||
"wind_friction_land": 0.6,
|
||||
"wind_friction_mountain_downwind": 0.3,
|
||||
"solar_min": 0.03,
|
||||
"solar_max": 0.18,
|
||||
"orbital_cycle_1_period": 686,
|
||||
"orbital_cycle_1_amplitude": 0.018,
|
||||
"orbital_cycle_1_phase": 0.0,
|
||||
"orbital_cycle_2_period": 51000,
|
||||
"orbital_cycle_2_amplitude": 0.030,
|
||||
"orbital_cycle_2_phase": 1.05,
|
||||
"orbital_cycle_3_period": 95000,
|
||||
"orbital_cycle_3_amplitude": 0.025,
|
||||
"orbital_cycle_3_phase": 2.40,
|
||||
"orbital_moisture_coupling": 0.0,
|
||||
"sea_level_temp_sensitivity": 0.0,
|
||||
"sea_level_equilibrium_temp": 0.12,
|
||||
"water_freeze_threshold": 0.25,
|
||||
"aerosol_background": 0.008,
|
||||
"aerosol_desert_dust": 0.025,
|
||||
"aerosol_volcanic_outgas": 0.0,
|
||||
"dust_storm_threshold": 0.8,
|
||||
"dust_storm_aerosol_boost": 0.25
|
||||
}
|
||||
71
engine/src/worlds/mars/climate_spec.json
Normal file
71
engine/src/worlds/mars/climate_spec.json
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"terrain_classification": {
|
||||
"comment": "Mars terrain rules — ordered, first match wins. Cold, dry, abiotic. No biological biomes. CO2 ice caps at poles.",
|
||||
"rules": [
|
||||
{
|
||||
"comment": "CO2 polar ice — extreme cold at any elevation",
|
||||
"and": [
|
||||
{ "field": "temperature", "op": "<=", "value": 0.06 }
|
||||
],
|
||||
"terrain": "glacial"
|
||||
},
|
||||
{
|
||||
"comment": "Olympus Mons summit / Tharsis calderas — extreme elevation volcanic peaks",
|
||||
"and": [
|
||||
{ "field": "elevation", "op": ">", "value": 0.82 }
|
||||
],
|
||||
"terrain": "caldera"
|
||||
},
|
||||
{
|
||||
"comment": "Tharsis highlands / highland basalt — elevated ancient terrain",
|
||||
"and": [
|
||||
{ "field": "elevation", "op": ">", "value": 0.70 }
|
||||
],
|
||||
"terrain": "basalt_highland"
|
||||
},
|
||||
{
|
||||
"comment": "Valles Marineris canyon floor — deep lowland valleys",
|
||||
"and": [
|
||||
{ "field": "elevation", "op": "<", "value": 0.12 }
|
||||
],
|
||||
"terrain": "canyon"
|
||||
},
|
||||
{
|
||||
"comment": "Hellas / Argyre basin — ancient impact basins and low plains",
|
||||
"and": [
|
||||
{ "field": "elevation", "op": "<", "value": 0.28 }
|
||||
],
|
||||
"terrain": "ancient_lakebed"
|
||||
},
|
||||
{
|
||||
"comment": "Dune field — aeolian sand deposits on mid-elevation terrain",
|
||||
"and": [
|
||||
{ "field": "elevation", "op": ">=", "value": 0.28 },
|
||||
{ "field": "elevation", "op": "<=", "value": 0.55 },
|
||||
{ "field": "temperature", "op": ">", "value": 0.06 },
|
||||
{ "field": "temperature", "op": "<", "value": 0.18 }
|
||||
],
|
||||
"terrain": "dune_field"
|
||||
},
|
||||
{
|
||||
"comment": "Default: dust plain — the vast regolith-covered lowlands",
|
||||
"and": [],
|
||||
"terrain": "dust_plain"
|
||||
}
|
||||
]
|
||||
},
|
||||
"terrain_transitions": {},
|
||||
"ley_network": {
|
||||
"enabled": false,
|
||||
"anchor_spawn_chance": 0.0,
|
||||
"link_max_distance": 0,
|
||||
"residue_decay_per_turn": 1.0,
|
||||
"quality_threshold_for_node": 99
|
||||
},
|
||||
"atmospheric_chemistry": {
|
||||
"enabled": true,
|
||||
"co2_concentration": 0.953,
|
||||
"so2_concentration": 0.0,
|
||||
"acid_rain_threshold": 9999.0
|
||||
}
|
||||
}
|
||||
33
engine/src/worlds/mars/hydrology_params.json
Normal file
33
engine/src/worlds/mars/hydrology_params.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"rainfall": {
|
||||
"multiplier_tropical": 0.0,
|
||||
"multiplier_temperate": 0.0,
|
||||
"multiplier_cold": 0.0,
|
||||
"multiplier_frozen": 0.0,
|
||||
"multiplier_desert_terrain": 0.0
|
||||
},
|
||||
"source_bonuses": {},
|
||||
"depression_fill": {
|
||||
"epsilon": 0.0001
|
||||
},
|
||||
"lakes": {
|
||||
"depth_threshold": 9999.0,
|
||||
"inland_sea_min_tiles": 9999
|
||||
},
|
||||
"rivers": {
|
||||
"threshold_tropical": 9999.0,
|
||||
"threshold_temperate": 9999.0,
|
||||
"threshold_cold": 9999.0,
|
||||
"threshold_frozen": 9999.0,
|
||||
"threshold_desert": 9999.0,
|
||||
"width_thresholds": [9999.0, 9999.0, 9999.0],
|
||||
"width_labels": ["stream", "river", "major_river", "great_river"]
|
||||
},
|
||||
"deltas": {
|
||||
"accumulation_threshold": 9999.0,
|
||||
"max_branches": 0
|
||||
},
|
||||
"frozen_river_temperature": 0.25,
|
||||
"lake_moisture_injection": 0.0,
|
||||
"river_moisture_per_turn": 0.0
|
||||
}
|
||||
23
engine/src/worlds/mars/manifest.json
Normal file
23
engine/src/worlds/mars/manifest.json
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"id": "mars",
|
||||
"name": "Mars — Red Planet",
|
||||
"description": "Thin CO2 atmosphere, -60°C average, no water cycle. Seasonal CO2 sublimation at poles, global dust storms reshape the regolith plains.",
|
||||
"has_climate": true,
|
||||
"has_weather": false,
|
||||
"has_ecology": false,
|
||||
"grid_width": 40,
|
||||
"grid_height": 24,
|
||||
"polar_rows": 3,
|
||||
"physics_features": {
|
||||
"water_cycle": false,
|
||||
"weather_events": false,
|
||||
"ecology": false,
|
||||
"volcanism": false,
|
||||
"co2_cycle": true,
|
||||
"dust_storms": true,
|
||||
"acid_clouds": false
|
||||
},
|
||||
"subscribes_biomes": ["arid_world", "volcanic_world", "elevated", "arctic"],
|
||||
"subscribes_substrates": ["substrates"],
|
||||
"subscribes_events": []
|
||||
}
|
||||
33
engine/src/worlds/mars/runtime_biomes.json
Normal file
33
engine/src/worlds/mars/runtime_biomes.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"comment": "Transient Mars terrain states that normalize back to stable biomes each turn.",
|
||||
"biomes": [
|
||||
{
|
||||
"id": "co2_frost",
|
||||
"name": "CO₂ Frost",
|
||||
"comment": "Seasonal CO2 frost deposition outside the permanent cap",
|
||||
"normalizes_to": "glacial",
|
||||
"tags": ["is_frozen", "is_dry"]
|
||||
},
|
||||
{
|
||||
"id": "dust_storm_track",
|
||||
"name": "Dust Storm Track",
|
||||
"comment": "Active dust storm deposit — high aerosol load, reduced insolation",
|
||||
"normalizes_to": "dust_plain",
|
||||
"tags": ["is_dry"]
|
||||
},
|
||||
{
|
||||
"id": "crater_floor",
|
||||
"name": "Crater Floor",
|
||||
"comment": "Impact crater flat floor — fine-grained sediment, sheltered from wind",
|
||||
"normalizes_to": "ancient_lakebed",
|
||||
"tags": ["is_dry"]
|
||||
},
|
||||
{
|
||||
"id": "ancient_riverbed",
|
||||
"name": "Ancient Riverbed",
|
||||
"comment": "Dried Noachian-era fluvial channel — distinctive linear lowland",
|
||||
"normalizes_to": "canyon",
|
||||
"tags": ["is_dry"]
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue