From aabaec35e6b5989c12f57a6985f2e7dee94bf88d Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 4 Jun 2026 17:11:17 -0700 Subject: [PATCH] =?UTF-8?q?feat(mc-turn):=20=E2=9C=A8=20Introduce=20refoun?= =?UTF-8?q?d=20suppression=20tracking=20in=20GameState=20to=20prevent=20du?= =?UTF-8?q?plicate=20refounds=20during=20turn-based=20gameplay?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/simulator/crates/mc-turn/src/game_state.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/simulator/crates/mc-turn/src/game_state.rs b/src/simulator/crates/mc-turn/src/game_state.rs index 24ec191e..da99f545 100644 --- a/src/simulator/crates/mc-turn/src/game_state.rs +++ b/src/simulator/crates/mc-turn/src/game_state.rs @@ -914,6 +914,13 @@ pub struct PlayerState { /// `process_siege` when a city changes ownership. #[serde(default)] pub cities_lost_total: u32, + /// p1-29i: game-turn on which this player most recently LOST a city to + /// capture. Drives the post-capture refound cooldown + /// (`CombatBalance::refound_suppression`): `try_found_city` refuses to found + /// a replacement while `turn - last_city_lost_turn < cooldown_turns`. + /// `None` until the first city loss (and on old saves) → no suppression. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub last_city_lost_turn: Option, /// Derived realm-level statistics recomputed at end of every turn by /// `TurnProcessor::step → recompute_derived_stats`. All future derived /// scalars land here — single recompute site rule, see `mc_core::derived_stats`.