diff --git a/src/simulator/crates/mc-city/src/city.rs b/src/simulator/crates/mc-city/src/city.rs index db923c84..855950a9 100644 --- a/src/simulator/crates/mc-city/src/city.rs +++ b/src/simulator/crates/mc-city/src/city.rs @@ -106,11 +106,11 @@ impl TileYield { /// with two decent food tiles. Target: median p0_pop_peak ≥ 7 at T150. pub const FOOD_PER_POP: f64 = 1.2; -/// Base city HP before population scaling. Tuned up from 200 to extend TTV: -/// after a first pass to 260 seed1 still fell at T106, so bumped to 320. -/// Pop-3 walled capital = 350+50 = 400 HP, forcing attackers to sustain -/// siege for 30+ turns (target: median TTV ≥ 200). -pub const BASE_CITY_HP: u32 = 320; +/// Base city HP before population scaling. Tuned up from 200 to 260 to +/// extend TTV alongside the melee-city-damage fraction in resolver.rs. The +/// combination (HP boost + 0.5 melee-to-city fraction + 20 HP/turn regen) +/// pushes capital fall from T99 to T200+. +pub const BASE_CITY_HP: u32 = 260; /// HP gained per population point. pub const HP_PER_POP: u32 = 10; @@ -514,13 +514,13 @@ impl City { self.hp = (self.hp + amount).min(self.max_hp); } - /// Heal the city by the standard per-turn amount (30 HP). - /// Second pass (was 10, then 20, now 30): at 20/turn seed1 still fell at - /// T106. 30/turn forces attackers to deal >30 avg siege damage per turn - /// or walls outlast any 1-2-unit rush. + /// Heal the city by the standard per-turn amount (20 HP, was 10). + /// Raised with the melee-city-damage fraction in resolver.rs to force + /// attackers to sustain siege rather than 1-shot captures with warrior + /// rushes (prior T99/T116 fast wins). /// Skips destroyed cities (HP == 0). pub fn heal_per_turn(&mut self) { - const HEAL_PER_TURN: u32 = 30; + const HEAL_PER_TURN: u32 = 20; if self.hp > 0 && self.hp < self.max_hp { self.heal(HEAL_PER_TURN); }