` | `conquer` | Available against non-allied, non-kin neighbors when `population >= 65`, `energy_reserves >= 35.0`, and `truce_turns == 0`. |
---
-## Decision Eligibility & Probability Normalization
-
-### Decision Eligibility Rule (`is_decision_eligible`)
-A decision `dec` is eligible if `dec.required_trait_ids.is_empty()` or the deme possesses **at least one** trait in `dec.required_trait_ids`. Specifically:
-
-* **5 Base Decisions** (`dec-conservative-forage`, `dec-intensive-overexploit`, `dec-selective-migration`, `dec-cooperate-store`, `dec-territorial-dispute`) require no special traits (with `dec-territorial-dispute` filtered out when no rival lineage is present in the current or adjacent hexes).
-* **`dec-exchange-symbiosis` and `dec-explore-innovate`** require cultural capacity (`bio-encephalization` OR `bio-social-instinct`).
+## Quantified Outcome Forecasts (`EvoOutcomeForecast`) & Situation Report (`EvoSituationReport`)
-### Probability Normalization (`normalize_decision_probabilities`)
-Raw LLM probability scores returned by Ollama `/v1/systemone` are normalized via `EvoHeuristicScorer.normalize_decision_probabilities(raw_scores, eligible_ids)`:
+When querying Ollama (`POST http://127.0.0.1:11434/v1/systemone`), `EvoOllamaClient._build_system_one_payload` sends:
-1. Any non-positive, `NaN`, or infinite score for an eligible decision is clamped to $0.0$ (if all eligible scores are $\le 0$, uniform weights $1 / |\text{eligible}|$ are assigned).
-2. The highest-scoring eligible decision $d_{\max}$ is identified as `dominant_decision_id`.
-3. Every other eligible decision $d_i \neq d_{\max}$ is rounded to $4$ decimal places:
- $$p_i = \text{snapped}\left(\frac{s_i}{\sum_{j \in \text{eligible}} s_j},\ 0.0001\right)$$
-4. The dominant decision receives the exact complement $p_{\max} = \text{snapped}\big(\max(0.0,\ 1.0 - \sum_{i \neq \max} p_i),\ 0.0001\big)$ (swapping with the runner-up if rounding caused the complement to dip below the runner-up), guaranteeing that $\sum_{d} P(d) = 1.0000$ and the dominant decision always holds the maximum probability.
+1. **`state` (`EvoSituationReport.build(deme, state)`)**:
+ * **Settlement & Strategy Header**: Settlement name, urban tier (`Camp`, `Village`, `Town`, `Metropolis`), strategy name, and natural-language **Strategy Doctrine** (`strat.doctrine`).
+ * **Vital & Ecological Status**: Population, stored food, per-turn food need (`EvoPayoffs.food_need`), expected base harvest (`EvoPayoffs.expected_income`), local hex biome, wild food ratio, land carrying capacity health (`K / Kmax`), owned rural farm/pasture count, fortification status, global reputation, and innovation progress.
+ * **Causal Feedback (`Last turn`)**: Exact outcome of the settlement's previous action (`deme.last_outcome`) and net food delta (`last_energy_delta`).
+ * **Personal Episodic Memory (`Recent history`)**: Up to 5 recent causal entries from the settlement's 8-event sliding memory (`deme.memory`).
+ * **Frontier & Neighbor Relations**: Best open frontier hexes (`biome`, `food`, `capacity`) and each adjacent neighbor's population, stored food, walls, relation status (`kin`, `ally`, `feud`, `truce`, `neutral`), bilateral `trust` (`[-1, +1]`), last action toward this settlement, and any open proposal (`pact`, `union`, or `tribute` ultimatum).
+2. **`decisions`**: Array of `{ id, criterion }` objects from `EvoActionMenu.build` and `EvoOutcomeForecast.describe`, where every `criterion` states the exact expected food harvest alongside action-specific payoffs, odds, casualties, and diplomatic consequences.
---
-## Startup Ollama Verification, Blocking Offline Notice & Model Download
+## Temperature-Sharpened Policy Sampling (`EvoActionPolicy`)
-When **Evolution** starts, `EvoDecisionModel.check_ollama_status(true)` asynchronously queries `GET http://127.0.0.1:11434/api/tags` to verify connectivity and inspect installed models advertising the `"decision"` capability in their `capabilities` array (`EvoOllamaClient.filter_decision_models_from_tags`).
+Raw option scores returned by `/v1/systemone` are converted into an action probability distribution and sampled via `EvoActionPolicy.sample(menu, raw_scores, rng)`:
-* **Ollama Offline Blocking Popup (`show_ollama_offline_popup`)**:
- * If Ollama is offline or unreachable (`http://127.0.0.1:11434`), **Evolution** displays a full-screen blocking warning popup (`_missing_models_modal`) notifying the user that Ollama is offline and required to run the simulation.
- * While this popup is active, the simulation **cannot be started** (`Play` and `Step +1` controls are disabled and keyboard/map interactions are blocked).
- * Closing the popup (`Close application` button or pressing Escape) cleanly shuts down worker threads and **closes the application** (`get_tree().quit()`).
-* **Missing Models Popup (`show_missing_models_popup`)**:
- * If Ollama is online but either `primary_model` (`d3:4b`) or `secondary_model` (`tev1:4b`) is missing locally, the blocking modal offers:
- * **Automatic In-Game Download (`⬇️ Download automatically`)**: Streams `POST /api/pull` on a background thread with a real-time 0–100% progress bar and unlocks the simulation upon completion.
- * **Close Application (`Close application` / Escape)**: Cancels any pending download and exits the application.
-* **Custom Model Selection**: Open the **Settings Gear (`⚙️`)** in the top-right clock panel at any time to switch Primary and Secondary models among any installed decision-capable Ollama models, adjust `num_ctx` (default `8192`), and persist your configuration to `~/.config/Evolution/settings.json`.
+1. Each menu option $i$'s raw score $s_i \ge 0$ is sharpened with temperature $T = 0.65$:
+ $$w_i = \left(\max(s_i, 0.0001)\right)^{1 / T}$$
+2. Normalized probabilities $p_i = w_i / \sum_j w_j$ are stored in `deme.action_probabilities` (with the highest-probability option recorded in `deme.last_dominant_decision_id` and `deme.last_confidence`).
+3. A single concrete action (`deme.chosen_action = { id, type, target }`) is sampled from $p_i$ using `state.rng` (`RandomNumberGenerator`), enabling both decisive commitment to high-payoff options and genuine emergent variety across turns.
diff --git a/gh-pages/index.md b/gh-pages/index.md
index 577cbf5..d535edb 100644
--- a/gh-pages/index.md
+++ b/gh-pages/index.md
@@ -10,7 +10,7 @@ hide:
Evolution
- An interactive bio-cultural and evolutionary population simulator built with Godot 4.7. Configure 1v1 Evolutionary Strategy Duels (Strategy A ⚔️ Strategy B), forge custom strategies and traits, and shape climates, terrain altitude, sea levels, and carrying capacity ($K$) on a handcrafted 2.5D isometric hexagonal ecosystem—while local subpopulations (demes) autonomously adapt, migrate, cooperate, innovate, or diverge into new species.
+ An interactive bio-cultural and evolutionary population simulator built with Godot 4.7. Configure 1v1 Evolutionary Strategy Duels (Strategy A ⚔️ Strategy B), forge custom strategies and traits, and shape climates, terrain altitude, sea levels, and carrying capacity ($K$) across a 169-hex (map_radius = 7) high-DPI 2.5D illustrated hexagonal ecosystem powered by GPU shaders—while single-deme-per-hex subpopulations (demes) autonomously adapt, cultivate adjacent rural hinterlands (crops & pasture), manage urban salubrity, erect hex-edge perimeter walls, unite into continuous multi-hex walled conurbations (walled_union_id), innovate, or diverge into new species.

@@ -23,7 +23,7 @@ hide:
@@ -31,7 +31,7 @@ hide:
1v1 Evolutionary Strategy Duels
-
Before pressing Play at Generation 0, pit any two evolutionary strategies (Strategy A ⚔️ Strategy B) against each other—or craft custom strategies in the Forge and persist them to ~/.config/Evolution/user_catalog.json.
+
Before pressing Play at Generation 0, pit any two evolutionary strategies (Strategy A ⚔️ Strategy B) against each other across a 169-hex world—or craft custom strategies in the Forge and persist them to ~/.config/Evolution/user_catalog.json.
@@ -50,23 +50,23 @@ hide:
-
-
Baldwin Effect & Speciation
-
Sustained behavioral plasticity (8+ turns) assimilates into heritable biological traits derived from the dominant decision, while geographic isolation across ridges or flooded land bridges triggers allopatric speciation.
+
+
4-Tier Urbanism, Hinterlands & Salubrity
+
Single-deme-per-hex settlements progress across 4 urban tiers (I · Camp to IV · Metropolis), cultivating up to 1, 2, or 4 adjacent rural hexes as crops or pasture while balancing urban crowding, salubrity, and epidemics.
-
-
Fortifications, Diplomacy & Synoecism
-
Populations build 3-tier fortifications (Palisade, Stone Wall, Castle), forge Alliance Pacts & Defensive Coalitions, harbor Vendettas, pay Tribute, repel Sieges, and unite into Tier 5 Metropolises.
+
+
Perimeter Walls & Dual Synoecism
+
Settlements erect 3-tier hex-edge fortifications, absorb lower-tier allies into rural hinterlands (Asymmetric Category Absorption), or unite same-tier cities into Continuous Multi-Hex Walled Unions (walled_union_id) with culled internal walls.
-
God-Mode Selective Pressure
-
Wield a 10-slot brush dock to sculpt biomes, raise tectonic ridges, flood glacial archipelagos, enrich carrying capacity $K$, or forge and inject custom strategies, traits, and decisions in the Evolutionary Laboratory.
+
2.5D Illustrated Shaders & God-Mode Tools
+
High-DPI 256x224 tiles and 128x128–160x160 sprites with #23150c ink outlines, GPU ocean & foliage shaders, and a 10-slot brush dock to sculpt biomes, altitude, sea levels, and carrying capacity $K$.
@@ -79,46 +79,51 @@ At Generation 0, every scenario sets up a head-to-head evolutionary experiment b
| Strategy ID | Emblem & Name (EN / ES) | Hex Color | Included Traits (`biological_trait_ids` + `cultural_trait_ids`) | Evolutionary Philosophy |
| :--- | :--- | :---: | :--- | :--- |
-| `strat-cooperation` | 🤝 **Cooperative Alliance**
*Alianza Cooperativa* | `#10B981` | `bio-k-strategy`, `bio-social-instinct` + `cul-communal-conservation` | Fosters social cohesion, communal habitat conservation, and resource buffering. |
+| `strat-cooperation` | 🤝 **Cooperative Alliance**
*Alianza Cooperativa* | `#10B981` | `bio-k-strategy`, `bio-social-instinct` + `cul-communal-conservation` | Fosters social cohesion, communal habitat conservation, urban sanitation, and resource buffering. |
| `strat-expansion` | 🧭 **Expansionist Pioneers**
*Pioneros Expansionistas* | `#3B82F6` | `bio-r-strategy`, `bio-thermal-tolerance`, `bio-social-instinct` + `cul-fire-processing` | Fast reproduction, high mobility, and thermal tolerance to colonize new territories. |
| `strat-trade` | ⚖️ **Merchant League**
*Liga Mercantil* | `#F59E0B` | `bio-k-strategy`, `bio-encephalization` + `cul-interdeme-barter` | Drives inter-village barter, commercial symbiosis, and horizontal cultural diffusion. |
-| `strat-war` | ⚔️ **Conquering Horde**
*Horda Conquistadora* | `#EF4444` | `bio-r-strategy`, `bio-social-instinct` + `cul-warrior-expansion`, `cul-extraction-tools` | Aggressive martial expansion and intensive extraction to dominate rival territories. |
+| `strat-war` | ⚔️ **Conquering Horde**
*Horda Conquistadora* | `#EF4444` | `bio-r-strategy`, `bio-social-instinct` + `cul-warrior-expansion`, `cul-extraction-tools` | Aggressive martial expansion, rural hinterland pillaging, and intensive extraction to dominate rival territories. |
| `strat-innovation` | 🔬 **Innovator Technocrats**
*Tecnócratas Innovadores* | `#A855F7` | `bio-encephalization`, `bio-digestive-spec` + `cul-fire-processing`, `cul-extraction-tools` | High encephalization, thermal food processing, and specialized extraction toolkits. |
---
## Visual Tour & 1v1 Scenario Gallery
-
-*The Rift Valley (`preset-rift-savanna`): Western Forest Hominids (`(-2, 1)`, Strategy A) vs. Eastern Savanna Hominids (`(2, -1)`, Strategy B) separated by a high-mountain tectonic ridge (`q = 0`).*
+
+*The Rift Valley (`preset-rift-savanna`, `169` hexes, `map_radius = 7`): Western Forest Hominids (`(-2, 1)`, Strategy A) vs. Eastern Savanna Hominids (`(2, -1)`, Strategy B) separated by a high-mountain tectonic ridge (`q = 0`), with the Scroll Inspector displaying urban salubrity, stone wall fortifications, and rural hinterlands.*
+
+| Settlement Tiers I–III & Rural Hinterlands | Continuous Multi-Hex Walled Union (`Tier IV`) |
+| :---: | :---: |
+|  |  |
+| *Close-up of 1-deme-per-hex progression: Tier I `Camp` (`-1,0`), Tier II `Village` (`0,0`, Lv.1 Palisade + pasture at `0,-1`), and Tier III `Town` (`1,0`, Lv.2 Stone Wall + golden wheat `crops` at `1,-1` & `pasture` at `2,0` linked by `covered_wagon` farm tracks)* | *Two allied Tier IV Metropolises (`(0,0)` & `(1,0)`) united in a Continuous Multi-Hex Walled Union (`walled_union_id`) with their shared internal wall edge culled, a central union boulevard, and 6 surrounding rural hinterlands* |
| Darwin's Archipelago (`preset-darwin-archipelago`) | The Finite Island (`preset-finite-island`) |
| :---: | :---: |
|  |  |
-| *Symmetric 1v1 insular duel between Western Island Founders (`(-1, 0)`, Strategy A) and Eastern Island Rivals (`(1, 0)`, Strategy B) connected by tidal `coastal_shallows` land bridges (`0,-1`, `0,1`, `2,0`) that flood and emerge every 8 generations* | *1v1 resource stewardship duel between Northern Quarry Clan (`(-1, 0)`, Strategy A) and Southern Timber Clan (`(1, 0)`, Strategy B) on a bounded island viewed through the Ecological Health Lens ($K / K_{\max}$) with the Valley Legend open* |
+| *169-hex volcanic archipelago with GPU ocean waves (`ocean_waves.gdshader`), multi-ring coastal foam, 2.5D island cliffs, and 7 tidal `coastal_shallows` land bridges that flood and emerge every 8 generations* | *169-hex bounded island duel between Northern Quarry Clan (`(-1, 0)`, Strategy A) and Southern Timber Clan (`(1, 0)`, Strategy B) viewed through the Ecological Health Lens ($K / K_{\max}$) with the Valley Legend open* |
| Naturalist's Notebook (Chronicle) | Phylo-Cultural Lineage Tree | Strategy, Trait & Decision Forge (Lab) |
| :---: | :---: | :---: |
|  |  |  |
-| *Chronological log of speciation, Baldwin assimilation, cultural innovation, symbiosis, and extinctions with 1-click hex jump* | *Interactive phylogenetic hierarchy tracking ancestral and diverged lineages, strategy emblems, traits, and active village counts* | *4-tab catalog editor (`🧬`, `🔥`, `⚖️`, `🛡️`) with live Thermodynamic Balance Meter, strategy builder, and `~/.config/Evolution/user_catalog.json` persistence* |
+| *19-filter chronological log of urban epidemics, multi-hex walled unions, category absorptions, speciation, Baldwin assimilation, and wars with 1-click hex jump* | *Interactive phylogenetic hierarchy tracking ancestral and diverged lineages, strategy emblems, traits, and active settlement counts (`I–IV`)* | *4-tab catalog editor (`🛡️`, `🧬`, `🔥`, `⚖️`) with live Thermodynamic Balance Meter, strategy builder, and `~/.config/Evolution/user_catalog.json` persistence* |
---
## How the Generational Loop Works
-Unlike traditional strategy games where players issue unit-level movement orders, **Evolution** strictly separates **behavioral intent** (probabilistic decision-making per deme) from **biophysical consequence** (deterministic laws of energy conservation, carrying capacity $K$, metabolic expenditure, and demography):
+Unlike traditional strategy games where players issue unit-level movement orders, **Evolution** strictly separates **behavioral intent** (probabilistic decision-making per deme) from **biophysical consequence** (deterministic laws of energy conservation, carrying capacity $K$, rural hinterland cultivation, urban salubrity, and demography):
```mermaid
flowchart LR
Env["1. Environmental Phase\n• Flip Season (wet_warm / dry_cold)\n• Glacial Sea-Level Cycle (8 gen)\n• Flood / Emerge Coastal Hexes\n• Regenerate K & Biomass R"] --> Cog["2. Cognitive Phase\n• Coarsened 10-Part Signature\n• 6-Gen Memory & Neighbor Tags\n• System 1 Ollama (d3:4b / tev1:4b)\n• 75% LLM / 25% Env Blend"]
- Cog --> Bio["3. Biophysical & Geopolitical Phase\n• Aggregate Effective Vector v_eff\n• Hawk-Dove, Trade (up to 1.35x) & Pacts\n• Vendettas, Tribute, Raids & 3-Tier Walls\n• Growth, Sieges, Wars & Synoecism (Merge)"]
+ Cog --> Bio["3. Biophysical & Geopolitical Phase\n• Urban Foraging & Rural Hinterlands (crops/pasture)\n• Inter-Hex Hawk-Dove, Trade (up to 1.35x) & Pacts\n• Raids, Rural Pillaging (ruins) & 3-Tier Walls\n• Salubrity & Epidemics, Wars, Dual Synoecism"]
Bio --> Mile["4. Milestone Phase\n• Allopatric Speciation (Prio 0)\n• Baldwin Assimilation (Prio 1)\n• Cultural Innovation (Prio 2)\n• Macro-Outcome Evaluation"]
Mile --> Prefetch["5. Async Prefetch\n• Pre-warm up to 8 Signatures\n• Non-Blocking Worker Pool"]
```
-1. **Environmental Phase (`EvoEnvPhase`)**: Advances the generation counter, alternates seasonal climate between `wet_warm` ($\gamma = 1.20$) and `dry_cold` ($\gamma = 0.75$), oscillates sea level every 8 generations in glacial scenarios, relocates or drowns submerged demes, and regenerates hex carrying capacity $K$ and resources $R$.
+1. **Environmental Phase (`EvoEnvPhase`)**: Advances the generation counter, alternates seasonal climate between `wet_warm` ($\gamma = 1.20$) and `dry_cold` ($\gamma = 0.75$), oscillates sea level every 8 generations in glacial scenarios, relocates submerged demes to empty passable neighbor hexes (or drowns them into `has_ruins = true`), and regenerates hex carrying capacity $K$ and resources $R$.
2. **Cognitive Decision Phase (`EvoDecisionModel`)**: Evaluates each deme via `/v1/systemone` with its intrinsic strategy traits prior (`strategy_traits_prior`), a **6-generation historical memory digest** (`war`, `raided`, `betrayal`, `pact`, `fortify`, `merge`, `tribute`, `siege`), active vendetta count, nearby martial horde detection (1–2 hexes), and **rich neighbor relational labels** (`kin`, `ally`, `rival`, `vendetta` + posture + strength + defense tier)—routing rival factions deterministically between primary (`d3:4b`) and secondary (`tev1:4b`) Ollama System 1 models and blending neural predictions (**$75\%$**) with environmental and geopolitical weights (**$25\%$**).
-3. **Biophysical & Geopolitical Consequence Phase (`EvoBiophysPhase`)**: Computes each deme's effective 6-axis vector $\mathbf{v}_{\text{eff}}$, resolves *Hawk-Dove* territorial conflicts, reciprocal symbiosis and **complementary inter-biome/cross-cultural trade** (up to $1.35\times$ caloric bonus and horizontal cultural transmission), **Alliance Pacts & Defensive Coalitions** ($+15\%$ mutual bonus, distress caloric aid, and up to $+1.10$ shared military defense), **Opportunistic Betrayals & Multi-Turn Vendettas** (`active_pacts < 0`), **Plunder Raids & Tribute Appeasement** ($18\%$ reserve tribute with zero casualties), **Multi-Tier Defense Fortifications** (`defense_tier: 0..3` from Palisade to Stone Wall to Castle with allied co-financing), habitat degradation (*Tragedy of the Commons* when $K < 0.60 \cdot K_{\max}$), metabolic expenditure & wall upkeep, demographic growth/starvation, **Territorial Wars & Fortified Sieges**, population fission, and **City Unification / Synoecism** (`merge` into a **Tier 5 Unified Metropolis**, expanding $K$ and reducing LLM inference calls per turn).
+3. **Biophysical, Urban & Geopolitical Consequence Phase (`EvoBiophysPhase`)**: Computes each deme's effective 6-axis vector $\mathbf{v}_{\text{eff}}$, applies urban wild-foraging multipliers (`0.55` at Tier III, `0.30` at Tier IV), claims and harvests **adjacent rural hinterlands (`crops` and `pasture`, up to `1`/`2`/`4` hexes for Tier II/III/IV)**, resolves inter-hex *Hawk-Dove* conflicts, reciprocal symbiosis and **complementary inter-biome/cross-cultural trade** (up to $1.35\times$), **Alliance Pacts & Defensive Coalitions**, **Opportunistic Betrayals & Multi-Turn Vendettas**, **Plunder Raids (with rural hinterland pillaging into `has_ruins = true`) & Tribute Appeasement**, **Hex-Edge Perimeter Fortifications** (`defense_tier: 0..3`), habitat degradation (*Tragedy of the Commons*), metabolic expenditure & wall upkeep, **Urban Salubrity (`salubrity`) & Epidemic Outbreaks (`"epidemic"`)**, demographic growth, **Territorial Wars (with 1-deme-per-hex retreat/absorption & pooled union defense) & Fortified Sieges**, empty-hex colonist budding, and **Dual Synoecism** (*Asymmetric Category Absorption* converting vacated hexes to rural hinterlands, and *Continuous Multi-Hex Walled Unions* `walled_union_id` culling shared internal walls).
4. **Milestone & Macro-Outcome Phase (`EvoMilestonePhase`)**: Synthesizes thermodynamically balanced emergent traits for *Allopatric Speciation*, *The Baldwin Effect*, or *Cumulative Cultural Innovation*, logs entries to the *Naturalist's Notebook*, and checks global macro-outcomes (*Total Extinction*, *Evolutionary Hegemony*, or *Ecological Equilibrium*).
---
@@ -159,7 +164,7 @@ flowchart LR
=== "Regenerate Screenshots"
```bash
- # Capture all 7 English documentation screenshots into gh-pages/assets/img/
+ # Capture all documentation screenshots into gh-pages/assets/img/
godot --path . --script res://tests/test_visual_capture.gd
```
@@ -169,7 +174,7 @@ flowchart LR
| Input / Shortcut | Slot / Control | Cost (⚡) | Effect in Simulation |
| :--- | :--- | :---: | :--- |
-| 1 / **Left Click** | **Naturalist's Loupe (`inspect`)** | `0` | Select a village or hexagon to inspect its demography, relations, traits, and 6-axis profile in the Scroll Inspector. |
+| 1 / **Left Click** | **Naturalist's Loupe (`inspect`)** | `0` | Select a settlement or hexagon to inspect its demography, salubrity, rural hinterlands, walled union, relations, traits, and 6-axis profile in the Scroll Inspector. |
| 2 | **Jungle Seeds (`tropical_forest`)** | `10` | Transform target hexes into `tropical_forest` ($K_{\max} = 600$, `regen = 0.28`, $T = 0.45$, $H = 0.85$). |
| 3 | **Savanna Seeds (`savanna`)** | `10` | Transform target hexes into `savanna` ($K_{\max} = 420$, `regen = 0.18`, $T = 0.50$, $H = 0.40$). |
| 4 | **Desert Dust (`arid_steppe`)** | `10` | Transform target hexes into `arid_steppe` ($K_{\max} = 280$, `regen = 0.12`, $T = 0.65$, $H = 0.20$). |
@@ -180,16 +185,16 @@ flowchart LR
| 9 | **Drought Sickle (`deplete`)** | `10` | Reduce hex carrying capacity $K$ and available biomass $R$ by $-25\%$ (inducing ecological stress). |
| 0 | **Tidal Conch (`sea_level`)** | `25` / `10` | Open the Tidal Sub-Options Bar: adjust global `sea_level` by $\pm 5\%$ (`⚡25`) or paint `coastal_shallows`, `ocean`, and `high_mountain` (`⚡10`). |
| Space | **Play / Pause** | — | Toggle automatic generational progression (`1x` = `1.50s/gen` or `2x` = `0.30s/gen`). |
-| WASD / **Middle Drag** | **Pan Camera** | — | Smoothly pan across the 2.5D isometric hexagonal valley (`820 px/s`). |
-| QE / RF / **Right Drag** | **Orbit & Tilt Camera** | — | Orbit yaw ($0^\circ\text{–}360^\circ$) and tilt pitch ($28^\circ\text{–}75^\circ$) around the valley. |
-| Mouse Wheel / +- | **Zoom Camera** | — | Cursor-pivoted zoom between `0.28x` macro overview and `3.00x` settlement close-up. |
+| WASD / **Middle Drag** | **Pan Camera** | — | Smoothly pan across the `169`-hex 2.5D isometric hexagonal valley (`820 px/s`, `MAX_PAN_RADIUS = 2800.0`). |
+| RF / **Right Drag** | **Tilt Camera Pitch** | — | Tilt vertical pitch ($32^\circ\text{–}68^\circ$, default $48^\circ$) with horizontal yaw locked to $0^\circ$ so 2.5D illustrated facades remain oriented toward the viewer. |
+| Mouse Wheel / +- | **Zoom Camera** | — | Cursor-pivoted zoom between `0.18x` macro archipelago overview and `2.80x` settlement close-up. |
| Escape | **Close / Reset** | — | Close active modal/popup window or return active brush to `Naturalist's Loupe` (1). |
---
@@ -200,7 +205,7 @@ flowchart LR
Read →
Worlds, Biomes & Presets
- Complete breakdown of axial hex geometry, the 7 biomes, seasonal & glacial cycles, and the 3 scientific scenarios (Rift Valley, Darwin's Archipelago, Finite Island).
+ Complete breakdown of 169-hex axial geometry (map_radius = 7), 1-deme-per-hex exclusivity, the 7 biomes, glacial cycles, and the 3 scientific scenarios.