From 5d7b7b823a4b187255888b3369b0fef67b69a520 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Thu, 15 Jan 2026 01:01:07 +0000 Subject: [PATCH] Monster-slowing effects work better against faster enemies Based on the principle that there should always be at least two solutions to any given problem, this allows monster-slowing magic to be an effective solution to fast low-monMR monsters (in particular home-plane air elementals, who after recent commits could reasonably be dealt with using good AC, but I want a second good option to be available, in addition to the existing mediocre options). This helps to make playing with bad AC (for whatever reason) more viable. --- doc/fixes3-7-0.txt | 1 + src/mon.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 2f25851a3..80edfbc0e 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1573,6 +1573,7 @@ fix bug which caused engulf damage from air elementals and fog clouds to elementals do double damage on their home plane water elementals move slightly more slowly the "totally digested" instadeath timer is much faster +slow monster effects are more effective against faster enemies Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/src/mon.c b/src/mon.c index 980e4694d..8d8221ae3 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1112,9 +1112,14 @@ mcalcmove( * MFAST's `+ 2' prevents hasted speed 1 from becoming a no-op; * both adjustments have negligible effect on higher speeds. */ - if (mon->mspeed == MSLOW) - mmove = (2 * mmove + 1) / 3; - else if (mon->mspeed == MFAST) + if (mon->mspeed == MSLOW) { + /* slow-monster effects work better against faster monsters: they + lose 1/3 of their speed below 12 but 2/3 of their speed above */ + if (mmove < 12) + mmove = (2 * mmove + 1) / 3; + else + mmove = 4 + (mmove / 3); + } else if (mon->mspeed == MFAST) mmove = (4 * mmove + 2) / 3; if (mon == u.usteed && u.ugallop && svc.context.mv) {