summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/travel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r--crawl-ref/source/travel.cc11
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++)