feat(mc-combat): ✨ Add 3× defender’s HP damage cap to balance late-game combat challenges
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
bcb464f1d4
commit
8e29d5688e
2 changed files with 5 additions and 5 deletions
|
|
@ -362,11 +362,11 @@ fn compute_predicted_damage(params: &CombatParams) -> PredictedDamage {
|
|||
let strength_diff = attacker_strength - defender_strength;
|
||||
let raw_damage_to_defender =
|
||||
BASE_DAMAGE * (strength_diff / STRENGTH_DIVISOR).exp() * atk_hp_factor;
|
||||
// Stack-of-doom cap: a single attack cannot deal more than 2× the defender's
|
||||
// current HP. Prevents overwhelming odds from one-shotting a city or unit in
|
||||
// a single exchange — multiple attackers still add up, but each hit is capped.
|
||||
// Stack-of-doom cap: a single attack cannot deal more than 3× the defender's
|
||||
// current HP. 2× proved too tight (halved victories, stalled winner_tier_peak).
|
||||
// 3× leaves typical late-game dominance intact while preventing pure one-shots.
|
||||
let damage_to_defender =
|
||||
raw_damage_to_defender.min(2.0 * params.defender.hp as f32);
|
||||
raw_damage_to_defender.min(3.0 * params.defender.hp as f32);
|
||||
|
||||
// Retaliation damage
|
||||
let no_retaliation = prevents_retaliation(¶ms.attacker_keywords, is_ranged)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
},
|
||||
{
|
||||
"name": "stress_first_strike_one_round_kill",
|
||||
"defender_damage": 40,
|
||||
"defender_damage": 60,
|
||||
"attacker_damage": 0,
|
||||
"attacker_outcome": "survived",
|
||||
"defender_outcome": "killed",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue