From 346b1c5195bffc71ceaa9262453e3c189656400b Mon Sep 17 00:00:00 2001 From: godosa Date: Tue, 6 Oct 2026 23:52:03 +0200 Subject: worldgen: initial public history --- mapgen/fields.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 mapgen/fields.py (limited to 'mapgen/fields.py') diff --git a/mapgen/fields.py b/mapgen/fields.py new file mode 100644 index 0000000..bf83d3f --- /dev/null +++ b/mapgen/fields.py @@ -0,0 +1,36 @@ +"""Stage `fields` and shared zone modifiers.""" +from __future__ import annotations + +import numpy as np + +from .config import MASK_DEFAULTS, params + + +def gravity_mod(cfg, m_gravity): + M = params(cfg, "masks", MASK_DEFAULTS) + return np.clip(1.0 + M["gravity_range"] * np.asarray(m_gravity, dtype=np.float64), 0.05, None) + + +def o2_mod(cfg, m_o2): + M = params(cfg, "masks", MASK_DEFAULTS) + return np.clip(1.0 + M["o2_range"] * np.asarray(m_o2, dtype=np.float64), 0.0, None) + + +def pressure(p0_bar, z_m, scale_height_m): + """Air pressure at ground height z (bar): sea-level pressure p0 falling with height (below 0 m: p0).""" + return p0_bar * np.exp(-np.maximum(np.asarray(z_m, dtype=np.float64), 0.0) / scale_height_m) + + +def plant_height(g_planet, gravity_g): + """How much taller plants grow than under the planet's normal gravity (height limit ∝ 1 / g).""" + return g_planet / np.asarray(gravity_g, dtype=np.float64) + + +def run(ctx) -> dict: + pl = ctx.cfg["planet"] + zs, m_o2, m_g = ctx.need("z_surface_m", "m_o2_zones", "m_gravity_zones") + p = pressure(pl["sea_level_pressure_bar"], zs, pl["scale_height_km"] * 1000.0) + o2 = pl["o2_fraction"] * o2_mod(ctx.cfg, m_o2) + return {"po2_bar": o2 * p, "gravity_g": pl["gravity_g"] * gravity_mod(ctx.cfg, m_g), "pressure_bar": p, + "o2_fraction": o2, "fire_reactivity": np.ones(len(p)), # zone events (eras) set other values + "plant_height_x": plant_height(pl["gravity_g"], pl["gravity_g"] * gravity_mod(ctx.cfg, m_g))} -- cgit