diff options
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r-- | crawl-ref/source/travel.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index 62f9b9ba46..8dfb9a2a96 100644 --- a/crawl-ref/source/travel.cc +++ b/crawl-ref/source/travel.cc @@ -24,6 +24,7 @@ #include "directn.h" #include "envmap.h" #include "exclude.h" +#include "godabil.h" #include "itemname.h" #include "itemprop.h" #include "items.h" @@ -307,6 +308,7 @@ static bool _is_monster_blocked(const coord_def& c) return (mons && mons->visible_to(&you) && mons_is_stationary(mons) + && !feawn_passthrough(mons) && mons_was_seen(mons) && !mons_is_unknown_mimic(mons)); } @@ -386,8 +388,10 @@ static bool _is_safe_move(const coord_def& c) { if (const monsters *mon = monster_at(c)) { - // Stop before wasting energy on plants and fungi. - if (you.can_see(mon) && mons_class_flag(mon->type, M_NO_EXP_GAIN)) + // Stop before wasting energy on plants and fungi, + // unless a worshipping Feawn. + if (you.can_see(mon) && mons_class_flag(mon->type, M_NO_EXP_GAIN) + && !feawn_passthrough(mon)) return (false); // If this is any *other* monster, it'll be visible and @@ -3813,7 +3817,8 @@ bool runrest::run_grids_changed() const if (env.cgrid(you.pos() + pos) != EMPTY_CLOUD) return (true); - if (monster_at(you.pos() + pos)) + monsters * mon = monster_at(you.pos() + pos); + if (mon && !feawn_passthrough(mon)) return (true); for (int i = 0; i < 3; i++) |