diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-06-02 07:08:25 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-06-02 07:08:25 +0000 |
commit | cfe60dc53d529125ff0bb8b3d15899e82144cd60 (patch) | |
tree | 33d7ea10f18ce8368b4edec4d202ff7995a79488 /crawl-ref/source/view.cc | |
parent | 2945d473b0caecec08477ea475f4c0289fd3a373 (diff) | |
download | crawl-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.cc | 24 |
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) |