From 3189dc7b3fc67621b581756017caddb791770f1d Mon Sep 17 00:00:00 2001 From: autocommit Date: Mon, 18 May 2026 23:01:22 -0700 Subject: [PATCH] =?UTF-8?q?docs(military):=20=F0=9F=93=9D=20Add=20capital?= =?UTF-8?q?=20blackout=20rules=20and=20phase=203=20military=20communicatio?= =?UTF-8?q?n=20protocols=20to=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- public/games/age-of-dwarves/docs/military/COMMUNICATIONS.md | 2 +- .../age-of-dwarves/docs/military/COMMUNICATIONS_PHASE3.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/games/age-of-dwarves/docs/military/COMMUNICATIONS.md b/public/games/age-of-dwarves/docs/military/COMMUNICATIONS.md index 6be3b46c..0c950f4e 100644 --- a/public/games/age-of-dwarves/docs/military/COMMUNICATIONS.md +++ b/public/games/age-of-dwarves/docs/military/COMMUNICATIONS.md @@ -72,7 +72,7 @@ These events are the AI's only asynchronous inputs. The perception filter materi ### 7. Capital-loss blackout -When a player loses their capital, all in-flight outbound envelopes are dropped, comm_tier on remaining links drops by 1, and decay timers accelerate by 50% until a new seat-of-power is named. A capital siege is not just symbolic; it deafens an entire civilization for the duration of the interregnum. +When a player loses their capital, all in-flight outbound envelopes are dropped, comm_tier on remaining links drops by 1, and decay timers accelerate by 50% until a new seat-of-power is named. **The player names a new capital on their next turn** — it is a forced choice surfaced at start-of-turn (pick any surviving city). Blackout lasts a single turn unless the player ends turn without choosing; an auto-promote fallback (highest-pop city, tie-break by lowest `city_id`) prevents AI stalls. A capital siege is not just symbolic; it deafens an entire civilization for the duration of the interregnum, but the interregnum is short by design. ### 8. Beacon-tap counter-intel diff --git a/public/games/age-of-dwarves/docs/military/COMMUNICATIONS_PHASE3.md b/public/games/age-of-dwarves/docs/military/COMMUNICATIONS_PHASE3.md index f847c69e..d921e010 100644 --- a/public/games/age-of-dwarves/docs/military/COMMUNICATIONS_PHASE3.md +++ b/public/games/age-of-dwarves/docs/military/COMMUNICATIONS_PHASE3.md @@ -34,10 +34,10 @@ pub struct BlackoutState { ### Duration and recovery -Blackout ends when the player names a new seat-of-power. Two paths: +Blackout ends when the player names a new seat-of-power. **The player names a new capital on their very next turn** — this is a forced choice surfaced at start-of-turn while the blackout is active. Two paths exist: -- **Player / AI explicit action**: a new `PlayerAction::NameSeatOfPower { city_id }` becomes legal whenever `blackout.is_some()` and the player owns at least one city. The action consumes nothing (no gold, no production); it is a one-click civics declaration. On execution it sets `player.capital_position` to the named city's hex, flips that city's `is_capital = true`, and calls `mc_comms::blackout::end_blackout`. -- **Auto-promote fallback**: if `turn >= blackout.auto_promote_at_turn` and the player still has cities, the turn processor auto-selects the highest-population surviving city (ties broken by lowest `city_id` for determinism) and runs the same `NameSeatOfPower` effect. This guards against AI stalls and surfaces a "capital auto-relocated" event in the replay log. +- **Player / AI explicit action (primary path)**: a new `PlayerAction::NameSeatOfPower { city_id }` becomes legal whenever `blackout.is_some()` and the player owns at least one city. While blackout is active, this action is **required before end-turn** for human players — the end-turn button surfaces a "you must name a new seat of power" gate. The action consumes nothing (no gold, no production); it is a one-click civics declaration. On execution it sets `player.capital_position` to the named city's hex, flips that city's `is_capital = true`, and calls `mc_comms::blackout::end_blackout`. +- **Auto-promote stall guard**: with `auto_promote_after_turns: 1` in `comms.json`, if a player ends their next turn without naming a seat-of-power (AI stall, human mis-click past the gate, headless test), the turn processor auto-selects the highest-population surviving city (ties broken by lowest `city_id` for determinism) and runs the same `NameSeatOfPower` effect. This is a safety net, not a design feature — the intended experience is "you pick on the next turn, blackout lasts one turn". `end_blackout(state, player, turn, new_capital_city_id)` clears `player.blackout = None` and emits the `CapitalBlackoutEnded` event below. Comm-tier penalty disappears at view-time; decay thresholds revert. Future `LastSeen` entries age at full duration again.