The biota density + population layers were hard-gated on elevation<=sea, so
the ocean was barren in the flora/fauna views and held no organisms.
- Density: ocean cells (not under polar Ice) get a marine primary productivity
in computeFloraDensity -- base + (1-base)*max(shelf, coast), where shelf is
shallowness (light) and coast is a BFS ring-distance from land (nutrients).
Rich shelves/coasts, lower open ocean, zero under ice; sMoist (a land field)
is not used at sea. computeFaunaDensity now skips only Ice, so marine fauna =
flora*productivity with the existing carnivore prey-gate clustering big
predators on rich shelves. Funga stays land-only.
- Population: append Ocean-masked archetypes (Kelp/Seagrass/Phytoplankton;
Forage fish/Reef fish/Shark/Baleen whale/Seal/Squid; moistMin=0, SST-zoned).
generateBiota fills ocean cells (skip Ice; no marine funga). fillFlora/
fillFauna unchanged -- their biome-mask filter zones marine vs terrestrial.
Append-only, so v7 saves are unaffected.
- Render: distinct marine ramps (marineFloraColor blue->teal/green bloom,
marineFaunaColor blue->cyan->warm) for water cells in the 8/9 views; land
ramps + funga view unchanged.
- Config: bioMarineBase/bioMarineShelfDepth/bioMarineCoastRings (self-describing
config -> no save bump).
- test_biota.cpp updated: zero life under ice, marine flora/fauna present at sea
+ populate ocean tiles, funga 0 on water; capacity/carnivore-gate/budgets/
determinism still hold. All five headless suites pass; GUI build clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
World-Creation stage after biomes. Two layers (raylib-free engine):
- Per-cell density scalars (flora/fauna/funga in [0,1]) derived from the
climate fields each tick (drive color modes 8/9/0). Flora = Liebig-min of
temp & moisture; fauna ~ flora with carnivores gated on local prey; funga =
moisture/organic-matter-led + cold-tolerant. Zero on water/ice.
- On-demand discrete population (key L, saved as v7): each land cell draws
broad archetypes from a comprehensive table into a per-kind slot cap +
density-scaled point budget (size -> cost), weighted by biome/climate
suitability and a regional bonus for same-biome neighbours. Separate RNG
seeded from cfg.seed so generating biota never perturbs tectonic determinism.
Organisms are labelled by taxonomy (Family + Size + role, e.g. "Felidae
(Big, Carnivore)") with the full Class > Order > Family tree stored, never an
informal common name. Cell-info panel word-wraps + aggregates duplicates so the
lists no longer get cut off.
New: src/sim/PlanetBiota.{hpp,cpp} + PlanetFlora/Fauna/FungiGen.cpp, color
modes/colors, bio* config knobs, save v7 (older saves load with empty
population), test_biota.cpp (densities, fauna<=capacity, carnivore gating,
slot/point budgets, determinism + RNG isolation, v7 round-trip). Docs updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>