From: PatR Date: Sat, 19 Mar 2016 22:46:33 +0000 (-0700) Subject: fix scatter feedback X-Git-Tag: NetHack-3.6.1_RC01~863 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c53565036cfd7a23ac353c504d54f49155425b2f;p=nethack fix scatter feedback 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. --- diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 6f5049a8c..815ef5f5e 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -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 statue crumbles." Platform- and/or Interface-Specific Fixes diff --git a/src/explode.c b/src/explode.c index 0c736a7f9..3a3b35597 100644 --- a/src/explode.c +++ b/src/explode.c @@ -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; diff --git a/src/trap.c b/src/trap.c index aa8a1724b..740f49094 100644 --- a/src/trap.c +++ b/src/trap.c @@ -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;