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.
This commit is contained in:
PatR
2016-03-19 15:46:33 -07:00
parent 96dd800301
commit c53565036c
3 changed files with 16 additions and 8 deletions

View 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

View 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;

View 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;