chests+large boxes were always immune and ice boxes always vulnerable)
applying an empty brass lantern in an attempt to light it reported "your lamp
has run out of power"; change to "your lantern is out of power"
+when swallowed or underwater, player could be told about events (such as a
+ shapechanger taking on a new form) that the hero sensed but which
+ were not shown on the screen; treat being swallowed or underwater as
+ situations which block telepathy, extended monster detection, warning
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
*
* Returns true if the hero can sense the given monster. This includes
* monsters that are hiding or mimicing other monsters.
+ *
+ * [3.7] Note: the map doesn't display any monsters when hero is swallowed
+ * (or display non-adjacent, non-submerged ones when hero is underwater),
+ * so treat those situations as blocking telepathy, detection, and warning
+ * even though conceptually they shouldn't do so.
*/
#define tp_sensemon(mon) \
(/* The hero can always sense a monster IF: */ \
/* object and in range */ \
|| (Unblind_telepat \
&& (distu(mon->mx, mon->my) <= (BOLT_LIM * BOLT_LIM)))))
-
+/* organized to perform cheaper tests first;
+ is_pool() vs is_pool_or_lava(): hero who is underwater can see adjacent
+ lava, but presumeably any monster there is on top so not sensed */
#define sensemon(mon) \
- (tp_sensemon(mon) || Detect_monsters || MATCH_WARN_OF_MON(mon))
+ ( (!u.uswallow || (mon) == u.ustuck) \
+ && (!Underwater || (distu((mon)->mx, (mon)->my) <= 2 \
+ && is_pool((mon)->mx, (mon)->my))) \
+ && (Detect_monsters || tp_sensemon(mon) || MATCH_WARN_OF_MON(mon)) )
/*
* mon_warning() is used to warn of any dangerous monsters in your
* vicinity, and a glyph representing the warning level is displayed.
*/
-
#define mon_warning(mon) \
(Warning && !(mon)->mpeaceful && (distu((mon)->mx, (mon)->my) < 100) \
&& (((int) ((mon)->m_lev / 4)) >= g.context.warnlevel))
g.potion_unkn = 0;
}
}
- see_monsters();
- if (g.potion_unkn)
- You_feel("lonely.");
- break;
+ /* if swallowed or underwater, fall through to uncursed case */
+ if (!u.uswallow && !Underwater) {
+ see_monsters();
+ if (g.potion_unkn)
+ You_feel("lonely.");
+ break;
+ }
}
if (monster_detect(otmp, 0))
return 1; /* nothing detected */