]> granicus.if.org Git - nethack/commitdiff
fix scatter feedback
authorPatR <rankin@nethack.org>
Sat, 19 Mar 2016 22:46:33 +0000 (15:46 -0700)
committerPatR <rankin@nethack.org>
Sat, 19 Mar 2016 22:46:33 +0000 (15:46 -0700)
Reported directly to devteam (for 3.4.3 but still present in 3.6.0):
an unseen landmine explosion which caused scatter() to break a
boulder or statue would give feedback as if the hero could see the
boulder or statue being destroyed.

Also, a couple of landmine explosion messages didn't take deafness
into account.

doc/fixes36.1
src/explode.c
src/trap.c

index 6f5049a8c5ceb65ab8376a5e8eaef45a64753ecc..815ef5f5e21111df0dfa41fa2198ec9c2aaf5484 100644 (file)
@@ -191,6 +191,7 @@ some instances of stun or confusion timers were being overridden rather than
 female gnome who gains level can grow up into male-only gnome lord; give an
        an alternate message instead of prohibiting the promotion
 kicked weapon which successfully hits monster vanishes from play
+unseen landmine explosion could result in "The <monst-type> statue crumbles."
 
 
 Platform- and/or Interface-Specific Fixes
index 0c736a7f95614bb7cedd96a513447531a9c942f3..3a3b35597d8f4a53dad76d3bdc7d1838d284b579 100644 (file)
@@ -576,7 +576,10 @@ struct obj *obj; /* only scatter this obj        */
             && ((otmp->otyp == BOULDER) || (otmp->otyp == STATUE))
             && rn2(10)) {
             if (otmp->otyp == BOULDER) {
-                pline("%s apart.", Tobjnam(otmp, "break"));
+                if (cansee(sx, sy))
+                    pline("%s apart.", Tobjnam(otmp, "break"));
+                else
+                    You_hear("stone breaking.");
                 fracture_rock(otmp);
                 place_object(otmp, sx, sy);
                 if ((otmp = sobj_at(BOULDER, sx, sy)) != 0) {
@@ -589,7 +592,10 @@ struct obj *obj; /* only scatter this obj        */
 
                 if ((trap = t_at(sx, sy)) && trap->ttyp == STATUE_TRAP)
                     deltrap(trap);
-                pline("%s.", Tobjnam(otmp, "crumble"));
+                if (cansee(sx, sy))
+                    pline("%s.", Tobjnam(otmp, "crumble"));
+                else
+                    You_hear("stone crumbling.");
                 (void) break_statue(otmp);
                 place_object(otmp, sx, sy); /* put fragments on floor */
             }
@@ -604,8 +610,8 @@ struct obj *obj; /* only scatter this obj        */
         }
 
         if (!used_up) {
-            stmp =
-                (struct scatter_chain *) alloc(sizeof(struct scatter_chain));
+            stmp = (struct scatter_chain *)
+                                         alloc(sizeof (struct scatter_chain));
             stmp->next = (struct scatter_chain *) 0;
             stmp->obj = otmp;
             stmp->ox = sx;
index aa8a1724b4ed3bd851e28f3b08e90f3c4591cb94..740f490949415ab572ca9f031f05e779d8d23242 100644 (file)
@@ -2555,18 +2555,19 @@ register struct monst *mtmp;
                 }
             } else if (in_sight) {
                 newsym(mtmp->mx, mtmp->my);
-                pline("KAABLAMM!!!  %s triggers %s land mine!", Monnam(mtmp),
+                pline("%s%s triggers %s land mine!",
+                      !Deaf ? "KAABLAMM!!!  " : "", Monnam(mtmp),
                       a_your[trap->madeby_u]);
             }
-            if (!in_sight)
+            if (!in_sight && !Deaf)
                 pline("Kaablamm!  You hear an explosion in the distance!");
             blow_up_landmine(trap);
             /* explosion might have destroyed a drawbridge; don't
                dish out more damage if monster is already dead */
             if (mtmp->mhp <= 0
-                || thitm(0, mtmp, (struct obj *) 0, rnd(16), FALSE))
+                || thitm(0, mtmp, (struct obj *) 0, rnd(16), FALSE)) {
                 trapkilled = TRUE;
-            else {
+            else {
                 /* monsters recursively fall into new pit */
                 if (mintrap(mtmp) == 2)
                     trapkilled = TRUE;