From d007decbe80a1aa8b28ce6f31e75ecaf8b1ec403 Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 29 Mar 2021 10:46:29 -0700 Subject: [PATCH] fix github issue #477 - incorrect MC calculation when wearing an amulet. Wearing any amulet while having the Protected attribute was conferring an amulet of guarding's +2 MC bonus. Mattered when Protected via worn ring(s) of protection or wearing Mitre of Holiness or wielding Tsurugi of Muramasa for hero, or the latter two or being a high priest[ess] for monsters. (Being Proteced via cloak of protection already yields maximum MC, or via amulet of guarding yields intended result.) The fixes37.0 entry oversimplifies. Fixes #477 --- doc/fixes37.0 | 2 ++ src/mhitu.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/fixes37.0 b/doc/fixes37.0 index fce516d0a..9301c24ad 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -563,6 +563,8 @@ avoid complaints of "nothing to foo" for 'force_invmenu' if there are no likely candidates to foo with but there are hidden acceptable choices avoid "Not carrying anything. Never mind." for 'force_invmenu' 'altmeta' option could be toggled On but once On could not be toggled back Off +wearing a ring of protection and any amulet behaved as if wearing an amulet of + guarding when determining MC value curses: 'msg_window' option wasn't functional for curses unless the binary also included tty support diff --git a/src/mhitu.c b/src/mhitu.c index 664c7cd4e..faf177388 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -902,7 +902,7 @@ magic_negation(struct monst *mon) if (armpro > mc) mc = armpro; } else if ((o->owornmask & W_AMUL) != 0L) { - via_amul = TRUE; + via_amul = (o->otyp == AMULET_OF_GUARDING); } /* if we've already confirmed Protection, skip additional checks */ if (is_you || gotprot) @@ -917,7 +917,8 @@ magic_negation(struct monst *mon) } if (gotprot) { - /* extrinsic Protection increases mc by 1; 2 for amulet */ + /* extrinsic Protection increases mc by 1 (2 for amulet of guarding); + multiple sources don't provide multiple increments */ mc += via_amul ? 2 : 1; if (mc > 3) mc = 3; -- 2.50.1