for(mtmp = fmon; mtmp; mtmp = nmtmp) {
nmtmp = mtmp->nmon;
+ if (DEADMONSTER(mtmp)) continue;
/* Find a monster that we have not treated yet. */
- if(DEADMONSTER(mtmp))
- continue;
if(mtmp->movement < NORMAL_SPEED)
continue;
int got_mad = 0;
/* guardians will sense this attack even if they can't see it */
- for (mon = fmon; mon; mon = mon->nmon)
- if (!DEADMONSTER(mon) && mon->data == q_guardian && mon->mpeaceful) {
+ for (mon = fmon; mon; mon = mon->nmon) {
+ if (DEADMONSTER(mon)) continue;
+ if (mon->data == q_guardian && mon->mpeaceful) {
mon->mpeaceful = 0;
if (canseemon(mon)) ++got_mad;
}
+ }
if (got_mad && !Hallucination)
pline_The("%s appear%s to be angry too...",
got_mad == 1 ? q_guardian->mname :
mtmp->msleeping = 0;
finish_meating(mtmp);
setmangry(mtmp);
- if(mtmp->m_ap_type) seemimic(mtmp);
- else if (context.forcefight && !context.mon_moving && mtmp->mundetected) {
+ if (mtmp->m_ap_type) {
+ seemimic(mtmp);
+ } else if (context.forcefight && !context.mon_moving &&
+ mtmp->mundetected) {
mtmp->mundetected = 0;
newsym(mtmp->mx, mtmp->my);
}
}
-/* Wake up nearby monsters. */
+/* Wake up nearby monsters without angering them. */
void
wake_nearby()
{
register struct monst *mtmp;
- for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (!DEADMONSTER(mtmp) && distu(mtmp->mx,mtmp->my) < u.ulevel*20) {
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if (distu(mtmp->mx,mtmp->my) < u.ulevel * 20) {
mtmp->msleeping = 0;
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
if (mtmp->mtame && !mtmp->isminion)
EDOG(mtmp)->whistletime = moves;
}
register struct monst *mtmp;
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (!DEADMONSTER(mtmp) && mtmp->msleeping && (distance == 0 ||
- dist2(mtmp->mx, mtmp->my, x, y) < distance))
+ if (DEADMONSTER(mtmp)) continue;
+ if (distance == 0 || dist2(mtmp->mx, mtmp->my, x, y) < distance) {
mtmp->msleeping = 0;
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
+ }
}
}
awaken_monsters(distance)
int distance;
{
- register struct monst *mtmp = fmon;
+ register struct monst *mtmp;
register int distm;
- while(mtmp) {
- if (!DEADMONSTER(mtmp)) {
- distm = distu(mtmp->mx, mtmp->my);
- if (distm < distance) {
- mtmp->msleeping = 0;
- mtmp->mcanmove = 1;
- mtmp->mfrozen = 0;
- /* May scare some monsters */
- if (distm < distance/3 &&
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if ((distm = distu(mtmp->mx, mtmp->my)) < distance) {
+ mtmp->msleeping = 0;
+ mtmp->mcanmove = 1;
+ mtmp->mfrozen = 0;
+ /* may scare some monsters -- waiting monsters excluded */
+ if ((mtmp->mstrategy & STRAT_WAITMASK) != 0)
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
+ else if (distm < distance/3 &&
!resist(mtmp, TOOL_CLASS, 0, NOTELL))
- monflee(mtmp, 0, FALSE, TRUE);
- }
+ monflee(mtmp, 0, FALSE, TRUE);
}
- mtmp = mtmp->nmon;
}
}
put_monsters_to_sleep(distance)
int distance;
{
- register struct monst *mtmp = fmon;
-
- while(mtmp) {
- if (!DEADMONSTER(mtmp) && distu(mtmp->mx, mtmp->my) < distance &&
- sleep_monst(mtmp, d(10,10), TOOL_CLASS)) {
- mtmp->msleeping = 1; /* 10d10 turns + wake_nearby to rouse */
- slept_monst(mtmp);
- }
- mtmp = mtmp->nmon;
+ register struct monst *mtmp;
+
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if (distu(mtmp->mx, mtmp->my) < distance &&
+ sleep_monst(mtmp, d(10,10), TOOL_CLASS)) {
+ mtmp->msleeping = 1; /* 10d10 turns + wake_nearby to rouse */
+ slept_monst(mtmp);
+ }
}
}
charm_snakes(distance)
int distance;
{
- register struct monst *mtmp = fmon;
+ register struct monst *mtmp;
int could_see_mon, was_peaceful;
- while (mtmp) {
- if (!DEADMONSTER(mtmp) && mtmp->data->mlet == S_SNAKE && mtmp->mcanmove &&
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if (mtmp->data->mlet == S_SNAKE && mtmp->mcanmove &&
distu(mtmp->mx, mtmp->my) < distance) {
was_peaceful = mtmp->mpeaceful;
mtmp->mpeaceful = 1;
mtmp->mavenge = 0;
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
could_see_mon = canseemon(mtmp);
mtmp->mundetected = 0;
newsym(mtmp->mx, mtmp->my);
was_peaceful ? "" : ", and now seems quieter");
}
}
- mtmp = mtmp->nmon;
}
}
calm_nymphs(distance)
int distance;
{
- register struct monst *mtmp = fmon;
+ register struct monst *mtmp;
- while (mtmp) {
- if (!DEADMONSTER(mtmp) && mtmp->data->mlet == S_NYMPH && mtmp->mcanmove &&
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if (mtmp->data->mlet == S_NYMPH && mtmp->mcanmove &&
distu(mtmp->mx, mtmp->my) < distance) {
mtmp->msleeping = 0;
mtmp->mpeaceful = 1;
mtmp->mavenge = 0;
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
if (canseemon(mtmp))
pline(
"%s listens cheerfully to the music, then seems quieter.",
Monnam(mtmp));
}
- mtmp = mtmp->nmon;
}
}
void
awaken_soldiers()
{
- register struct monst *mtmp = fmon;
+ register struct monst *mtmp;
- while(mtmp) {
- if (!DEADMONSTER(mtmp) &&
- is_mercenary(mtmp->data) && mtmp->data != &mons[PM_GUARD]) {
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp)) continue;
+ if (is_mercenary(mtmp->data) && mtmp->data != &mons[PM_GUARD]) {
mtmp->mpeaceful = mtmp->msleeping = mtmp->mfrozen = 0;
mtmp->mcanmove = 1;
+ mtmp->mstrategy &= ~STRAT_WAITMASK;
if (canseemon(mtmp))
pline("%s is now ready for battle!", Monnam(mtmp));
else
Norep("You hear the rattle of battle gear being readied.");
}
- mtmp = mtmp->nmon;
}
}