]> granicus.if.org Git - nethack/commitdiff
Add vault guards to undisplaceable monsters
authorPasi Kallinen <paxed@alt.org>
Wed, 15 Apr 2020 05:59:35 +0000 (08:59 +0300)
committerPasi Kallinen <paxed@alt.org>
Wed, 15 Apr 2020 05:59:35 +0000 (08:59 +0300)
include/monst.h
src/hack.c

index 1eb33d39ba0e8c75374bfe69801fc01a6f5f20e0..7228056803f029ab4d87e6f5d9d4f2da1f71be1d 100644 (file)
@@ -187,6 +187,14 @@ struct monst {
      || (mon)->cham == PM_VLAD_THE_IMPALER)
 #define vampshifted(mon) (is_vampshifter((mon)) && !is_vampire((mon)->data))
 
+/* monsters which cannot be displaced: priests, shopkeepers, vault guards,
+   Oracle, quest leader */
+#define mundisplaceable(mon) ((mon)->ispriest                    \
+                              || (mon)->isshk                    \
+                              || (mon)->isgd                     \
+                              || (mon)->data == &mons[PM_ORACLE] \
+                              || (mon)->m_id == g.quest_status.leader_m_id)
+
 /* mimic appearances that block vision/light */
 #define is_lightblocker_mappear(mon)                       \
     (is_obj_mappear(mon, BOULDER)                          \
index b3120ebe92446a91339570b34fe752122a004490..b6c69366a9a4034f2c012535e19adad5bca1f767 100644 (file)
@@ -1843,10 +1843,7 @@ domove_core()
         } else if (mtmp->mpeaceful
                    && (!goodpos(u.ux0, u.uy0, mtmp, 0)
                        || t_at(u.ux0, u.uy0) != NULL
-                       || mtmp->ispriest
-                       || mtmp->isshk
-                       || mtmp->data == &mons[PM_ORACLE]
-                       || mtmp->m_id == g.quest_status.leader_m_id)) {
+                       || mundisplaceable(mtmp))) {
             /* displacing peaceful into unsafe or trapped space, or trying to
              * displace quest leader, Oracle, shopkeeper, or priest */
             You("stop.  %s doesn't want to swap places.",