]> granicus.if.org Git - nethack/commitdiff
fix #H9375 - unintended Rider corpse suppression
authorPatR <rankin@nethack.org>
Sat, 23 Nov 2019 02:16:59 +0000 (18:16 -0800)
committerPatR <rankin@nethack.org>
Sat, 23 Nov 2019 02:16:59 +0000 (18:16 -0800)
Don't let Riders swap places with something (fog or ooze, perhaps)
located at a closed door spot because if it gets killed there, there
won't be any corpse and it will stop auto-reviving.

Just avoid moving to spots where mondied() won't place a corpse
instead of worrying about whether a bargethrough creature (if there
ever are any besides the Riders) might be able to survive at the
destination (so ignore pass-walls, door-opening, swimming, &c).

doc/fixes36.3
src/monmove.c

index 97849634860dea9bb1368241887e17cd7493c5f8..e50f1b29624a6c2de32a5194c95d052b5846dc6c 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.188 $ $NHDT-Date: 1574419578 2019/11/22 10:46:18 $
+$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.189 $ $NHDT-Date: 1574475416 2019/11/23 02:16:56 $
 
 This fixes36.3 file is here to capture information about updates in the 3.6.x
 lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -295,6 +295,11 @@ don't strip leading slash from hallucinatory monster name "/b/tard"
 quaffing unknown potion of see invisible resulted in asking what to call the
        potion while updated monster display was buffered so not yet shown,
        hence potentially noticeable effect was concealed from player
+when Riders use their bargethrough capability, don't let them swap places with
+       something located at a spot where corpses can't be created (their
+       door opening ability was letting them exchange places with something
+       co-located with a closed door without opening it; if killed there,
+       there'd be no corpse so no auto-revive)
 unix: Fix double DLB definition in linux hints file
 windows: fix --showpaths output for the data file which relies on being
        constructed programmatically to incorporate the version suffix
index 2f7ae6f5cecf31d4ec9b8b6d2a2a230acdb829c4..c4833c1313815e6f1c64858ccc8d9c6c5dd9efce 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 monmove.c       $NHDT-Date: 1557094802 2019/05/05 22:20:02 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.113 $ */
+/* NetHack 3.6 monmove.c       $NHDT-Date: 1574475416 2019/11/23 02:16:56 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.114 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Michael Allison, 2006. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -1605,8 +1605,8 @@ register struct monst *mtmp;
  */
 boolean
 undesirable_disp(mtmp, x, y)
-struct monst *mtmp;
-xchar x, y;
+struct monst *mtmp; /* barging creature */
+xchar x, y; /* spot 'mtmp' is considering moving to */
 {
     boolean is_pet = (mtmp && mtmp->mtame && !mtmp->isminion);
     struct trap *trap = t_at(x, y);
@@ -1625,6 +1625,17 @@ xchar x, y;
         return TRUE;
     }
 
+    /* oversimplification:  creatures that bargethrough can't do so when
+       target monster is in rock or closed door or water (in particular,
+       avoid moving to spots where mondied() won't leave a corpse) */
+    if (!accessible(x, y)
+        /* mondied() allows ispool() as an exception to !accessible(),
+           but we'll only do that if both or neither of mtmp's spot and
+           destination spot are water so that we don't swap a water
+           critter onto land or the inverse */
+        && (!is_pool(x, y) ^ !is_pool(mtmp->mx, mtmp->my)))
+        return TRUE;
+
     return FALSE;
 }