diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 3d1353d86..1e69edf7a 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -774,6 +774,7 @@ magic traps can toggle intrinsic invisibility Death attacking a monster does drain life attack add unique Rider revival messages don't dereference NULL u.ustuck in dobuzz() when hero has been swallowed +monsters should growl even if you can't hear it Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/mon.c b/src/mon.c index 137cd2ed5..03f6a763a 100644 --- a/src/mon.c +++ b/src/mon.c @@ -3509,11 +3509,11 @@ setmangry(struct monst* mtmp, boolean via_attack) adjalign(2); } else adjalign(-1); /* attacking peaceful monsters is bad */ - if (couldsee(mtmp->mx, mtmp->my)) { - if (humanoid(mtmp->data) || mtmp->isshk || mtmp->isgd) + if (humanoid(mtmp->data) || mtmp->isshk || mtmp->isgd) { + if (couldsee(mtmp->mx, mtmp->my)) pline("%s gets angry!", Monnam(mtmp)); - else if (flags.verbose && !Deaf) - growl(mtmp); + } else { + growl(mtmp); } /* attacking your own quest leader will anger his or her guardians */ @@ -3613,7 +3613,7 @@ setmangry(struct monst* mtmp, boolean via_attack) } else if (mon->data->mlet == mtmp->data->mlet && big_little_match(mndx, monsndx(mon->data)) && !rn2(3)) { - if (!Deaf && !rn2(4)) { + if (!rn2(4)) { growl(mon); exclaimed = (iflags.last_msg == PLNMSG_GROWL); } diff --git a/src/sounds.c b/src/sounds.c index aced134ac..04de94c5c 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -348,7 +348,7 @@ growl(register struct monst* mtmp) { register const char *growl_verb = 0; - if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound) + if (mtmp->msleeping || !mtmp->mcanmove || mtmp->data->msound == MS_SILENT) return; /* presumably nearness and soundok checks have already been made */ @@ -357,10 +357,12 @@ growl(register struct monst* mtmp) else growl_verb = growl_sound(mtmp); if (growl_verb) { - pline("%s %s!", Monnam(mtmp), vtense((char *) 0, growl_verb)); - iflags.last_msg = PLNMSG_GROWL; - if (g.context.run) - nomul(0); + if (canseemon(mtmp) || !Deaf) { + pline("%s %s!", Monnam(mtmp), vtense((char *) 0, growl_verb)); + iflags.last_msg = PLNMSG_GROWL; + if (g.context.run) + nomul(0); + } wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 18); } }