From 76bffe5ba47336c002c8faf51e158a490c1282af Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 23 Sep 2018 10:11:02 -0400 Subject: [PATCH] drum of earthquake causing deafness inappropriately Address a drum of earthquake inconsistency reported 2017-03-23: "Drum of earthquake does not make you deaf. Leather drum or depleted drum of earthquake does." bug 1099 --- doc/fixes36.2 | 1 + src/music.c | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 914a3469e..a76f1bb3b 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -135,6 +135,7 @@ gremlins seemed impervious to Sunsword's light yet a flash from a camera caused them to cry out in pain when objects migrate (fall down stairs) and invisible hero (w/o see invisible, no-autopickup) descends, stairs get shown instead of object(s) on them +drum of earthquake was causing deafness but oddly enough only when used up Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository diff --git a/src/music.c b/src/music.c index 71253f6e1..cb63bde90 100644 --- a/src/music.c +++ b/src/music.c @@ -445,6 +445,11 @@ generic_lvl_desc() return "dungeon"; } +const char *beats[] = { + "stepper", "one drop", "slow two", "triple stroke roll", + "double shuffle", "half-time shuffle", "second line", "train" +}; + /* * The player is trying to extract something from his/her instrument. */ @@ -454,6 +459,7 @@ struct obj *instr; { int damage, mode, do_spec = !(Stunned || Confusion); struct obj itmp; + boolean mundane = FALSE; itmp = *instr; itmp.oextra = (struct oextra *) 0; /* ok on this copy as instr maintains @@ -462,8 +468,10 @@ struct obj *instr; /* if won't yield special effect, make sound of mundane counterpart */ if (!do_spec || instr->spe <= 0) - while (objects[itmp.otyp].oc_magic) + while (objects[itmp.otyp].oc_magic) { itmp.otyp -= 1; + mundane = TRUE; + } #ifdef MAC mac_speaker(&itmp, "C"); #endif @@ -579,6 +587,10 @@ struct obj *instr; exercise(A_DEX, TRUE); break; case DRUM_OF_EARTHQUAKE: /* create several pits */ + /* a drum of earthquake does cause not cause deafness + while still magically functional, nor afterwards + when it invokes the LEATHER_DRUM case instead and + mundane is flagged */ consume_obj_charge(instr, TRUE); You("produce a heavy, thunderous rolling!"); @@ -589,10 +601,15 @@ struct obj *instr; makeknown(DRUM_OF_EARTHQUAKE); break; case LEATHER_DRUM: /* Awaken monsters */ - You("beat a deafening row!"); - awaken_monsters(u.ulevel * 40); - incr_itimeout(&HDeaf, rn1(20, 30)); - exercise(A_WIS, FALSE); + if (!mundane) { + You("beat a deafening row!"); + incr_itimeout(&HDeaf, rn1(20, 30)); + exercise(A_WIS, FALSE); + } else + You("%s %s.", + rn2(2) ? "butcher" : rn2(2) ? "manage" : "pull off", + an(beats[rn2(SIZE(beats))])); + awaken_monsters(u.ulevel * (mundane ? 5 : 40)); context.botl = TRUE; break; default: