summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/view.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index b01456286b..f0e3faf8ff 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -1076,7 +1076,11 @@ void handle_monster_shouts(monsters* monster, bool force)
// Tries to find an entry for "name seen" or "name unseen",
// and if no such entry exists then looks simply for "name".
- if (you.can_see(monster))
+ // We don't use "you.can_see(monster)" here since that would return
+ // false for submerged monsters, but submerged monsters will be forced
+ // to surface before they shout, thus removing that source of
+ // non-visibility.
+ if (mons_near(monster) && (!monster->invisible() || player_see_invis()))
suffix = " seen";
else
suffix = " unseen";
@@ -1131,7 +1135,6 @@ void handle_monster_shouts(monsters* monster, bool force)
}
else
{
- msg = do_mon_str_replacements(msg, monster, s_type);
msg_channel_type channel = MSGCH_TALK;
std::string param = "";
@@ -1166,6 +1169,7 @@ void handle_monster_shouts(monsters* monster, bool force)
}
}
+ msg = do_mon_str_replacements(msg, monster, s_type);
msg::streams(channel) << msg << std::endl;
}
@@ -1221,7 +1225,7 @@ void monster_grid(bool do_updates)
if (monster->alive() && mons_near(monster))
{
- if (mons_player_visible(monster))
+ if (player_monster_visible(monster))
_handle_seen_interrupt(monster);
if (do_updates && (mons_is_sleeping(monster)