On entering Live World a one-time pass places volcanoes by tectonic context (very high prob on young spreading-ridge/"new-plate" cells, medium on plate borders, low elsewhere). Over the live clock they erupt; submarine vents build up and breach sea level into new volcanic islands, land vents grow cones, and each eruption injects a drifting ash cloud + local cooling into the weather. Design: eruption state (built height + intensity) is a PURE FUNCTION of liveTime (like insolation/tides/seasons), so the live stepper rewinds islands & eruptions for free -- no per-cell snapshot, no volcano undo history. The only integrated side-effect is the ash plume into sCloud (reverts via the weather snapshot). - src/sim/PlanetVolcano.cpp (new): placeVolcanoes (separate RNG, reservoir- sampled to volcanoMaxCount; tectonic determinism intact) + stepVolcanoes (reassert elevation = baseElev + built(liveTime); breach/un-breach; ash). - Volcano struct + volcano* config knobs (PlanetTypes.hpp); Planet members + decls; readState gains hasVolcanoes; CONFIG_FIELDS + validateConfig. - Save bumped to v14: flag-gated volcano block (set + sVolRng) in writeState/ readState; pre-v14 saves load with none and place on next Live World entry. - Render: 3D cone + eruption glow/ash-plume (DrawCylinderEx) and 2D triangle markers, key V toggle, HUD line, cell-info volcano line. Lazy placement on W entry and on loading a live-world save with no volcanoes. - test_volcano.cpp (new, registered in CMake): determinism, RNG isolation, context classification + probability ordering, monotonic build + sea-level breach + step-back recede (pure function of liveTime), ash->cloud, v14 round-trip. All six headless suites pass; GUI build clean. Docs updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Description
No description provided
Languages
C++
99.6%
CMake
0.4%