summaryrefslogtreecommitdiffstats
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
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
-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)