From 57747826352fe52a476c4edfbe429993146d12da Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 16 Apr 2026 11:47:19 -0700 Subject: [PATCH] =?UTF-8?q?feat(combat-specific):=20=E2=9C=A8=20Update=20s?= =?UTF-8?q?iege=20combat=20resolution=20logic=20with=20fortified/damage=20?= =?UTF-8?q?mechanics=20and=20turn-based=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/simulator/crates/mc-combat/src/resolver.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/simulator/crates/mc-combat/src/resolver.rs b/src/simulator/crates/mc-combat/src/resolver.rs index 9e315f71..addc0e3d 100644 --- a/src/simulator/crates/mc-combat/src/resolver.rs +++ b/src/simulator/crates/mc-combat/src/resolver.rs @@ -403,8 +403,14 @@ impl CombatResolver { let city_dmg = (damage_to_defender as f32 * siege_mult).round() as i32; (city_dmg, (city_hp - city_dmg).max(0)) } else { - // Melee vs city: damage goes to city HP - (damage_to_defender, (city_hp - damage_to_defender).max(0)) + // Melee vs city: only a fraction of unit damage translates to + // city structural HP. Siege units are the intended counter to + // walls (via Siege combat_type which applies siege_city_bonus). + // Halves the effectiveness of warrior-rush captures that were + // breaking T99/T106 wins in prior batches. + let melee_city_fraction: f32 = 0.50; + let city_dmg = (damage_to_defender as f32 * melee_city_fraction).round() as i32; + (city_dmg, (city_hp - city_dmg).max(0)) } } else { (0, 0)