From 87d08f0151e643951769e323995f1c5ed89ee200 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 18 Sep 2026 01:50:17 -0400 Subject: fix: harden economy recovery, shutdown concurrency, world validation, and inventory-loss paths --- internal/game/cmd_trigger_combat.go | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'internal/game/cmd_trigger_combat.go') diff --git a/internal/game/cmd_trigger_combat.go b/internal/game/cmd_trigger_combat.go index f9a6bf1..0578c2b 100644 --- a/internal/game/cmd_trigger_combat.go +++ b/internal/game/cmd_trigger_combat.go @@ -64,9 +64,19 @@ func (g *Game) scienceAttack(sess *net.Session, p *player.Player, mob *world.Mob if mob.HP < 0 { mob.HP = 0 } + // Science damage obeys the same finishing-blow rule as melee/ranged: + // a mob with a required finisher cannot be killed by raw damage. + if mob.FinishingBlow != "" && mob.HP <= 0 { + mob.HP = 1 + } if mob.HP < mob.MaxHP && mob.HP > 0 { mob.StartRegen() } + if mob.FinishingBlow != "" && mob.HP == 1 { + sess.WriteLine(g.colorize(sess, "warning", + fmt.Sprintf("%s resists death! Use %s on it to finish it off.", + mobDisplayName(mob, false), g.itemDisplayName(mob.FinishingBlow)))) + } sciXP := mod.BaseXP hpXP := mod.BaseXP / 3 -- cgit v1.2.3