From 78e58171e53b5c7a6af9f4e7c488bc0ef6743212 Mon Sep 17 00:00:00 2001 From: Jonas Reith Date: Sun, 30 Aug 2026 22:16:33 +0200 Subject: [PATCH] Document the multi-culture-per-continent seeding change in CLAUDE.md Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01TMfyZv91tonDnPJqbaTVJE --- CLAUDE.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 27d0b43..c1f25ee 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -479,6 +479,28 @@ on the Live World clock). **Steps 1–7 of the roadmap are done (plus a derived 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 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 @@ -1341,7 +1363,12 @@ triangles (plates are fixed in phase 1). 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 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 knob for how fast/high relief builds. - `relax` (PlanetConfig) — isostatic relaxation toward base elevation. Peaks