From: Pasi Kallinen Date: Wed, 15 Apr 2020 05:59:35 +0000 (+0300) Subject: Add vault guards to undisplaceable monsters X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02f222bc0ca3a897200b0a6d1ae6139de2402964;p=nethack Add vault guards to undisplaceable monsters --- diff --git a/include/monst.h b/include/monst.h index 1eb33d39b..722805680 100644 --- a/include/monst.h +++ b/include/monst.h @@ -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) \ diff --git a/src/hack.c b/src/hack.c index b3120ebe9..b6c69366a 100644 --- a/src/hack.c +++ b/src/hack.c @@ -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.",