|| (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) \
} 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.",