]> granicus.if.org Git - nethack/commitdiff
B03005 - canceling monster redux
authorcohrs <cohrs>
Sun, 25 May 2003 17:21:21 +0000 (17:21 +0000)
committercohrs <cohrs>
Sun, 25 May 2003 17:21:21 +0000 (17:21 +0000)
Revert the code, but add a comment. The behavior is not obvious to everyone.

doc/fixes34.2
src/artifact.c

index ebc067941fd5fedb6f67199acd9c990847289122..6b7bc8429790d8865916c28e5f7566c327b594d0 100644 (file)
@@ -76,7 +76,6 @@ choking while eating non-food always called the food "quick snack"
 short swords are not throwing weapons
 several sit-in-trap cases were unreachable
 curse candelabrum in bones, like other similar artifacts
-clear up Magicbane messages when it attempts to re-cancel a canceled monster
 detecting a trap in a chest while confused should not exercise wisdom
 
 
index 0205efe6af9eaf821e1c867eea9f8c6df4990e5f..8ee060795618f6850070579b826d9b189e75c2d6 100644 (file)
@@ -766,8 +766,7 @@ char *hittee;                       /* target's name: "you" or mon_nam(mdef) */
     const char *verb;
     boolean youattack = (magr == &youmonst),
            youdefend = (mdef == &youmonst),
-           resisted = FALSE, was_canceled = FALSE,
-           do_stun, do_confuse, result;
+           resisted = FALSE, do_stun, do_confuse, result;
     int attack_indx, scare_dieroll = MB_MAX_DIEROLL / 2;
 
     result = FALSE;            /* no message given yet */
@@ -810,11 +809,6 @@ char *hittee;                      /* target's name: "you" or mon_nam(mdef) */
     verb = mb_verb[!!Hallucination][attack_indx];
     if (youattack || youdefend || vis) {
        result = TRUE;
-       /* canceling monster only happens if not already canceled */
-       if (attack_indx == MB_INDEX_CANCEL && !youdefend && mdef->mcan) {
-           was_canceled = TRUE;
-           verb = "hit"; /* doesn't change its attack to, eg stun */
-       }
        pline_The("magic-absorbing blade %s %s!",
                  vtense((const char *)0, verb), hittee);
        /* assume probing has some sort of noticeable feedback
@@ -827,9 +821,11 @@ char *hittee;                      /* target's name: "you" or mon_nam(mdef) */
     switch (attack_indx) {
     case MB_INDEX_CANCEL:
        old_uasmon = youmonst.data;
-       if (was_canceled) {
-           /* nothing left to cancel */
-       } else if (!cancel_monst(mdef, mb, youattack, FALSE, FALSE)) {
+       /* No mdef->mcan check: even a cancelled monster can be polymorphed
+        * into a golem, and the "cancel" effect acts as if some magical
+        * energy remains in spellcasting defenders to be absorbed later.
+        */
+       if (!cancel_monst(mdef, mb, youattack, FALSE, FALSE)) {
            resisted = TRUE;
        } else {
            do_stun = FALSE;