From d04a0f808c05b32e2472599c8c97a40337b5cb6b Mon Sep 17 00:00:00 2001 From: cohrs Date: Tue, 3 Oct 2006 03:32:26 +0000 Subject: [PATCH] H143 - bugles affecting all monsters pointed out that bugles, although noisy, only affect soldiers. This didn't make sense to me either. Added code so they will also affect monsters near the bugler. --- doc/fixes35.0 | 1 + include/extern.h | 2 +- src/muse.c | 2 +- src/music.c | 26 ++++++++++++++++++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/doc/fixes35.0 b/doc/fixes35.0 index 4d0bf3f47..33aa9918f 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -159,6 +159,7 @@ tame/peaceful grabber/engulfer will release hero after conflict ends make changes in hallucination be reflected by changes in mimickery feedback add Unaware pseudo-property to suppress various messages while unconscious missile which kills engulfer will now be placed prior to hero's return to map +bugles affect all monsters to some extent Platform- and/or Interface-Specific Fixes diff --git a/include/extern.h b/include/extern.h index 5febadf0e..ba61c0625 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1427,7 +1427,7 @@ E boolean FDECL(munstone, (struct monst *,BOOLEAN_P)); /* ### music.c ### */ -E void NDECL(awaken_soldiers); +E void FDECL(awaken_soldiers, (struct monst *)); E int FDECL(do_play_instrument, (struct obj *)); /* ### nhlan.c ### */ diff --git a/src/muse.c b/src/muse.c index f1b977ccf..a76421c6b 100644 --- a/src/muse.c +++ b/src/muse.c @@ -574,7 +574,7 @@ struct monst *mtmp; pline("%s plays %s!", Monnam(mtmp), doname(otmp)); else if (!Deaf) You_hear("a bugle playing reveille!"); - awaken_soldiers(); + awaken_soldiers(mtmp); return 2; case MUSE_WAN_TELEPORTATION_SELF: if ((mtmp->isshk && inhishop(mtmp)) diff --git a/src/music.c b/src/music.c index 388334dec..709fd22b4 100644 --- a/src/music.c +++ b/src/music.c @@ -161,12 +161,17 @@ int distance; } } -/* Awake only soldiers of the level. */ - +/* Awake soldiers anywhere the level (and any nearby monster). */ void -awaken_soldiers() +awaken_soldiers(bugler) + struct monst *bugler; /* monster that played instrument */ { register struct monst *mtmp; + int distance, distm; + + /* distance of affected non-soldier monsters to bugler */ + distance = ((bugler == &youmonst) ? + u.ulevel : bugler->data->mlevel) * 30; for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { if (DEADMONSTER(mtmp)) continue; @@ -178,6 +183,19 @@ awaken_soldiers() pline("%s is now ready for battle!", Monnam(mtmp)); else Norep("You hear the rattle of battle gear being readied."); + } else if ((distm = ((bugler == &youmonst) ? + distu(mtmp->mx, mtmp->my) : + 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 ((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); } } } @@ -476,7 +494,7 @@ struct obj *instr; break; case BUGLE: /* Awaken & attract soldiers */ You("extract a loud noise from %s.", the(xname(instr))); - awaken_soldiers(); + awaken_soldiers(&youmonst); exercise(A_WIS, FALSE); break; case MAGIC_HARP: /* Charm monsters */