From bce7c69e77848dab2b9c286f01999bbd9d39a1e3 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Tue, 23 Jan 2024 13:23:51 +0200 Subject: [PATCH] Unify wake up and scare a monster by music --- src/music.c | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/src/music.c b/src/music.c index a283d1b7a..c74369a75 100644 --- a/src/music.c +++ b/src/music.c @@ -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)); } } }