aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_trigger_combat.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-09-18 01:50:17 -0400
committerhistoria <[not public]>2026-09-18 01:50:17 -0400
commit87d08f0151e643951769e323995f1c5ed89ee200 (patch)
treedc42a0b30ebb5a00dd7ba505cc4eaa44f4f308bc /internal/game/cmd_trigger_combat.go
parent32a3c59cebf2a16277e54d715a67adfdbe00b456 (diff)
downloadthehouseoficarus-87d08f0151e643951769e323995f1c5ed89ee200.tar.gz
fix: harden economy recovery, shutdown concurrency, world validation, and inventory-loss paths
Diffstat (limited to 'internal/game/cmd_trigger_combat.go')
-rw-r--r--internal/game/cmd_trigger_combat.go10
1 files changed, 10 insertions, 0 deletions
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