]> granicus.if.org Git - nethack/commitdiff
H143 - bugles affecting all monsters
authorcohrs <cohrs>
Tue, 3 Oct 2006 03:32:26 +0000 (03:32 +0000)
committercohrs <cohrs>
Tue, 3 Oct 2006 03:32:26 +0000 (03:32 +0000)
<Someone> 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
include/extern.h
src/muse.c
src/music.c

index 4d0bf3f4731a23167fe6d5d08d476b5450431917..33aa9918f2f3ca86a88d674ca271d963e60e869a 100644 (file)
@@ -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
index 5febadf0e510326d49e644e1f5ed4fdb11f24eba..ba61c06257979e5d3da0b75e5b553c3865d6be6f 100644 (file)
@@ -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 ### */
index f1b977ccf0965b9925d5da55adfbe9feda75cdc0..a76421c6b1908e1e27d22ce1f3d4ba3091d9f9bc 100644 (file)
@@ -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))
index 388334decfd8d7acc243a179f63ba4baa51eac62..709fd22b40b3e58f7280893ec28264b059249f65 100644 (file)
@@ -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 */