3 Commits

Author SHA1 Message Date
af7b6146fd Give realms independent names, gate colonization on culture, label culture-less realms
1. Realm names no longer literally reuse the capital settlement's own name
   ("Kingdom of X" where X == the city). Kingdoms/empires now get an
   independently generated "place name" (namegen::makeName, keyed on the
   capital settlement's permanent id + its own language bank, deterministic
   and stable across yearly recomputes) so a realm and the city it's ruled
   from read as two distinct places, same as any real one.

2. stepColonization() now skips a realm with no assigned culture
   (nat.cultureId < 0) -- nothing to pass on to a new colony, and it stops a
   culture-less realm from propagating that gap to its colonies.

3. Realm labels (3D, 2D, and the atlas export) now always show a culture
   line -- either the real "(the Velmar)" or an explicit "(cultureless)" in
   a muted colour, instead of silently omitting the line when
   Nation.cultureId is unset. Makes a genuinely culture-less realm (can
   still arise from conquest/schism edge cases) a readable, intentional-
   looking state rather than a gap that looks like a rendering bug.

test_culture.cpp updated to rebuild the new independent name deterministically
(mirroring PlanetCulture.cpp's private name-generation formula) instead of
asserting the old capital-name-based format, plus a new assertion that a
realm's place name differs from its capital's own name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TMfyZv91tonDnPJqbaTVJE
2026-08-30 21:53:01 +02:00
1090d2d46e Harden save/load state validation 2026-07-02 19:11:06 +02:00
91f1b90a93 Civ Step 4: culture, beliefs & governments
Give the world peoples and faiths on top of Step 3's realms. All derived
deterministically from the (saved) settlement set + geography (pure hashes,
no RNG, recomputed each sim year -> no save-version bump, step-back free).

- PlanetCulture.{hpp,cpp}: computeCultures() groups living settlements into one
  culture per inhabited continent, each with a generated people name, a dominant
  ethos picked from its cells' environment (Seafaring/Highland/Nomadic/Agrarian,
  else a hashed Mercantile/Warlike), and a religion (a Faith focus biased by the
  dominant biome + a generated faith name). Runs after computeTerritory().
- Governments: each realm (Nation) gets a GovType from its tier + a deterministic
  pick, folded into its name ("Republic of X", "Duchy of X", "X Theocracy", "X
  Confederation", "X Dominion", ...) -- culture-driven renaming.
- Culture-driven grouping: realm vassalage is now restricted to the same
  continent, so every kingdom/empire is mono-cultural.
- Render: a Culture colour mode (cultureColor, cultural blocs) + pale
  buildCultureBorders lines + a Cultures tab + a cell-info culture/faith line +
  government-aware realm labels, all under key X. Cultures recompute with
  territory in rebuildTerritory().
- test_culture.cpp: one culture per continent, valid ethos/faith, governments per
  tier reflected in names, mono-cultural realms, determinism, RNG isolation,
  save->load->recompute parity. All 12 suites green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 07:58:58 +02:00