static void mkcavearea(boolean);
static int dig(void);
static void dig_up_grave(coord *);
+static boolean watchman_canseeu(struct monst *);
static int adj_pit_checks(coord *, char *);
static void pit_flow(struct trap *, schar);
static boolean furniture_handled(int, int, boolean);
return ECMD_TIME;
}
+static boolean
+watchman_canseeu(struct monst *mtmp)
+{
+ if (is_watch(mtmp->data) && mtmp->mcansee && m_canseeu(mtmp)
+ && couldsee(mtmp->mx, mtmp->my) && mtmp->mpeaceful)
+ return TRUE;
+ return FALSE;
+}
+
/*
* Town Watchmen frown on damage to the town walls, trees or fountains.
* It's OK to dig holes in the ground, however.
if (in_town(x, y)
&& (closed_door(x, y) || lev->typ == SDOOR || IS_WALL(lev->typ)
|| IS_FOUNTAIN(lev->typ) || IS_TREE(lev->typ))) {
- if (!mtmp) {
- for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
- continue;
- if (is_watch(mtmp->data) && mtmp->mcansee && m_canseeu(mtmp)
- && couldsee(mtmp->mx, mtmp->my) && mtmp->mpeaceful)
- break;
- }
- }
+ if (!mtmp)
+ mtmp = get_iter_mons(watchman_canseeu);
if (mtmp) {
if (zap || g.context.digging.warned) {
#include "hack.h"
static int pet_type(void);
+static void set_mon_lastmove(struct monst *);
void
newedog(struct monst *mtmp)
return mtmp;
}
+static void
+set_mon_lastmove(struct monst *mtmp)
+{
+ mtmp->mlstmv = g.moves;
+}
+
/* record `last move time' for all monsters prior to level save so that
mon_arrive() can catch up for lost time when they're restored later */
void
update_mlstmv(void)
{
- struct monst *mon;
-
- /* monst->mlstmv used to be updated every time `monst' actually moved,
- but that is no longer the case so we just do a blanket assignment */
- for (mon = fmon; mon; mon = mon->nmon) {
- if (DEADMONSTER(mon))
- continue;
- mon->mlstmv = g.moves;
- }
+ iter_mons(set_mon_lastmove);
}
void