Unify wake up and scare a monster by music

This commit is contained in:
Pasi Kallinen
2024-01-23 13:23:51 +02:00
parent 49338ebb0a
commit bce7c69e77

View File

@@ -28,6 +28,7 @@
#include "hack.h"
static void awaken_scare(struct monst *, boolean);
static void awaken_monsters(int);
static void put_monsters_to_sleep(int);
static void charm_snakes(int);
@@ -38,6 +39,24 @@ static const char *generic_lvl_desc(void);
static int do_improvisation(struct obj *);
static char *improvised_notes(boolean *);
/* wake up monster, possibly scare it */
static void
awaken_scare(struct monst *mtmp, boolean scary)
{
mtmp->msleeping = 0;
mtmp->mcanmove = 1;
mtmp->mfrozen = 0;
/* may scare some monsters -- waiting monsters excluded */
if (!unique_corpstat(mtmp->data)
&& (mtmp->mstrategy & STRAT_WAITMASK) != 0)
mtmp->mstrategy &= ~STRAT_WAITMASK;
else if (scary
&& !mindless(mtmp->data)
&& !resist(mtmp, TOOL_CLASS, 0, NOTELL)
/* some monsters are immune */
&& onscary(0, 0, mtmp))
monflee(mtmp, 0, FALSE, TRUE);
}
/*
* Wake every monster in range...
@@ -52,21 +71,8 @@ awaken_monsters(int distance)
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
if (DEADMONSTER(mtmp))
continue;
if ((distm = mdistu(mtmp)) < distance) {
mtmp->msleeping = 0;
mtmp->mcanmove = 1;
mtmp->mfrozen = 0;
/* may scare some monsters -- waiting monsters excluded */
if (!unique_corpstat(mtmp->data)
&& (mtmp->mstrategy & STRAT_WAITMASK) != 0)
mtmp->mstrategy &= ~STRAT_WAITMASK;
else if (distm < distance / 3
&& !mindless(mtmp->data)
&& !resist(mtmp, TOOL_CLASS, 0, NOTELL)
/* some monsters are immune */
&& onscary(0, 0, mtmp))
monflee(mtmp, 0, FALSE, TRUE);
}
if ((distm = mdistu(mtmp)) < distance)
awaken_scare(mtmp, (distm < distance / 3));
}
}
@@ -179,19 +185,7 @@ awaken_soldiers(struct monst* bugler /* monster that played instrument */)
? mdistu(mtmp)
: dist2(bugler->mx, bugler->my, mtmp->mx,
mtmp->my))) < distance) {
mtmp->msleeping = 0;
mtmp->mcanmove = 1;
mtmp->mfrozen = 0;
/* may scare some monsters -- waiting monsters excluded */
if (!unique_corpstat(mtmp->data)
&& (mtmp->mstrategy & STRAT_WAITMASK) != 0)
mtmp->mstrategy &= ~STRAT_WAITMASK;
else if (distm < distance / 3
&& !mindless(mtmp->data)
&& !resist(mtmp, TOOL_CLASS, 0, NOTELL)
/* some monsters are immune */
&& onscary(0, 0, mtmp))
monflee(mtmp, 0, FALSE, TRUE);
awaken_scare(mtmp, (distm < distance / 3));
}
}
}