Document the multi-culture-per-continent seeding change in CLAUDE.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TMfyZv91tonDnPJqbaTVJE
This commit is contained in:
Jonas Reith 2026-08-30 22:16:33 +02:00
parent cd268167b0
commit 78e58171e5

View File

@ -479,6 +479,28 @@ on the Live World clock). **Steps 17 of the roadmap are done (plus a derived
differs from the capital's own name. Touches `src/sim` (`PlanetCulture.cpp`, `PlanetCiv.cpp`) as differs from the capital's own name. Touches `src/sim` (`PlanetCulture.cpp`, `PlanetCiv.cpp`) as
well as `src/render``Nation.name`/`cultureId` are derived/not saved (per the Territory & Culture well as `src/render``Nation.name`/`cultureId` are derived/not saved (per the Territory & Culture
entries above), so no save-format version bump. entries above), so no save-format version bump.
- **Multiple cultures per continent (was always exactly one)** *(done — see `Planet::seedCultures()`,
`src/sim/PlanetCulture.cpp`)* — a continent seeding only ever one culture at the dawn, combined with
the existing border-conversion/backfill dynamics, eroded into one super-dominant culture covering
the whole world over a long run. `seedCultures()` now splits each continent into
**1..`cultDawnMaxPerContinent`** initial peoples via deterministic farthest-point seeding (each
settlement joins its nearest seed point — geographically coherent, Voronoi-like regions, not a
checkerboard); the target count scales with the continent's settlement population via
`cultDawnSettlementsPerCulture` (both new `planet.cfg` knobs). Per-culture ethos/faith/name hashes
now fold in `Culture.id` so same-continent cultures (sharing `regionId`/`bank`) get distinct
identities instead of colliding. This surfaced a real, previously-latent **ordering bug**:
`computeTerritory()` (realm/vassalage grouping, which prefers matching by actual culture and only
falls back to same-continent when culture data doesn't exist yet) ran *before*
`computeCultures()` populated per-settlement culture — harmless when one culture ≡ one continent,
but would leave temporarily multi-cultural realms now. Fixed at the root: `computeCultures()` split
into `refreshSettlementCultures()` (the settlement-level seed/backfill/tally slice, no dependency on
`nations`) which `computeTerritory()` now calls on itself before grouping — every caller (the viewer
and the dozens of existing test call sites) gets correct behaviour automatically. `test_culture.cpp`/
`test_cultevo.cpp` updated to assert the new bounded invariant (a continent has 1..N cultures; a
single culture never itself spans two continents — still enforced) instead of exact equality.
Verified live: one continent now shows six distinct peoples instead of a single dominant culture,
with realms still correctly mono-cultural. `src/sim` + `src/render`; cultures are derived/not saved,
so no save-format version bump.
## Current state ## Current state
@ -1341,7 +1363,12 @@ triangles (plates are fixed in phase 1).
lower = easier colonial breakaways), `cultSchismMinCluster` (2, distant settlements needed to break away lower = easier colonial breakaways), `cultSchismMinCluster` (2, distant settlements needed to break away
together), `cultSchismRate` (0.08, per-year chance per qualifying culture). All rates 0 = the static together), `cultSchismRate` (0.08, per-year chance per qualifying culture). All rates 0 = the static
pre-Step-8 world. Runs in the yearly `stepCulture` tick (pure hashes, no RNG); the culture list is pre-Step-8 world. Runs in the yearly `stepCulture` tick (pure hashes, no RNG); the culture list is
capped at 64 peoples. capped at 64 peoples. Dawn seeding (`Planet::seedCultures()`, before Step 8 evolution runs at all):
`cultDawnSettlementsPerCulture` (5, target dawn settlements per initial culture on a continent —
lower = more initial peoples) and `cultDawnMaxPerContinent` (6, hard cap on how many initial peoples
one continent can seed) — raise `cultDawnSettlementsPerCulture` or lower `cultDawnMaxPerContinent`
for a world that starts more culturally uniform (closer to the old always-one-per-continent
behaviour), lower/raise them the other way for more initial diversity.
- `upliftGain` (PlanetConfig) — m/tick per unit convergence stress; main - `upliftGain` (PlanetConfig) — m/tick per unit convergence stress; main
knob for how fast/high relief builds. knob for how fast/high relief builds.
- `relax` (PlanetConfig) — isostatic relaxation toward base elevation. Peaks - `relax` (PlanetConfig) — isostatic relaxation toward base elevation. Peaks