summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/view.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-06-02 07:08:25 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-06-02 07:08:25 +0000
commitcfe60dc53d529125ff0bb8b3d15899e82144cd60 (patch)
tree33d7ea10f18ce8368b4edec4d202ff7995a79488 /crawl-ref/source/view.cc
parent2945d473b0caecec08477ea475f4c0289fd3a373 (diff)
downloadcrawl-ref-cfe60dc53d529125ff0bb8b3d15899e82144cd60.tar.gz
crawl-ref-cfe60dc53d529125ff0bb8b3d15899e82144cd60.zip
[1727099] Monster spotted on the edge of FOV that immediately turns invisible
was not stopping explore, fixed. Well, hacked. There's no perfect solution to this if we also want to avoid stopping travel/explore for monsters that show up and then leave FOV. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1507 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/view.cc')
-rw-r--r--crawl-ref/source/view.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index d297b4807e..20ca4468ea 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -555,6 +555,14 @@ static int get_mons_colour(const monsters *mons)
return (col);
}
+static std::set<const monsters*> monsters_seen_this_turn;
+
+static bool mons_was_seen_this_turn(const monsters *mons)
+{
+ return (monsters_seen_this_turn.find(mons) !=
+ monsters_seen_this_turn.end());
+}
+
void monster_grid(bool do_updates)
{
struct monsters *monster = 0; // NULL {dlb}
@@ -679,6 +687,15 @@ void monster_grid(bool do_updates)
if (!mons_is_mimic( monster->type ))
set_show_backup(ex, ey);
+ if (player_monster_visible(monster)
+ && !mons_is_submerged(monster)
+ && !mons_friendly(monster)
+ && !mons_class_flag(monster->type, M_NO_EXP_GAIN)
+ && !mons_is_mimic(monster->type))
+ {
+ monsters_seen_this_turn.insert(monster);
+ }
+
env.show[ex][ey] = monster->type + DNGN_START_OF_MONSTERS;
env.show_col[ex][ey] = get_mons_colour( monster );
} // end "if (monster->type != -1 && mons_ner)"
@@ -691,9 +708,10 @@ void fire_monster_alerts()
{
monsters *monster = &menv[s];
- if (monster->type != -1 && mons_near(monster))
+ if (monster->alive() && mons_near(monster))
{
- if (player_monster_visible( monster )
+ if ((player_monster_visible(monster)
+ || mons_was_seen_this_turn(monster))
&& !mons_is_submerged( monster )
&& !mons_friendly( monster ))
{
@@ -706,6 +724,8 @@ void fire_monster_alerts()
}
}
}
+
+ monsters_seen_this_turn.clear();
}
bool check_awaken(int mons_aw)