compile-time option for an alternate paniclog format for public server use
make monsters forget where they stepped when fleeing or teleporting
requiver pickup_thrown objects if quiver is empty
+make mimics mimicing walls or trees also block light
Platform- and/or Interface-Specific Fixes
#define is_vampshifter(mon) \
((mon)->cham == PM_VAMPIRE || (mon)->cham == PM_VAMPIRE_LORD \
|| (mon)->cham == PM_VLAD_THE_IMPALER)
+
+/* mimic appearances that block vision/light */
+#define is_lightblocker_mappear(mon) \
+ (is_obj_mappear(mon, BOULDER) || \
+ ((mon)->m_ap_type == M_AP_FURNITURE \
+ && ((mon)->mappearance == S_hcdoor \
+ || (mon)->mappearance == S_vcdoor \
+ || (mon)->mappearance < S_ndoor /* = walls */ \
+ || (mon)->mappearance == S_tree)))
+
#define is_door_mappear(mon) ((mon)->m_ap_type == M_AP_FURNITURE \
&& ((mon)->mappearance == S_hcdoor || (mon)->mappearance == S_vcdoor))
#define is_obj_mappear(mon,otyp) ((mon)->m_ap_type == M_AP_OBJECT \
for (mon = fmon; mon; mon = mon->nmon) {
if (DEADMONSTER(mon))
continue;
- if (mon->minvis && (is_door_mappear(mon)
- || is_obj_mappear(mon,BOULDER))) {
+ if (mon->minvis && is_lightblocker_mappear(mon)) {
if (See_invisible)
block_point(mon->mx, mon->my);
else
seemimic(mtmp)
register struct monst *mtmp;
{
- boolean is_blocker_appear = (is_door_mappear(mtmp)
- || is_obj_mappear(mtmp, BOULDER));
+ boolean is_blocker_appear = (is_lightblocker_mappear(mtmp));
if (has_mcorpsenm(mtmp))
freemcorpsenm(mtmp);
if (obj->otyp == BOULDER)
return 1;
- /* Mimics mimicing a door or boulder block light. */
+ /* Mimics mimicing a door or boulder or ... block light. */
if ((mon = m_at(x, y)) && (!mon->minvis || See_invisible)
- && (is_door_mappear(mon) || is_obj_mappear(mon,BOULDER)))
+ && is_lightblocker_mappear(mon))
return 1;
return 0;