diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 91e254bd6..63319edb8 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -677,6 +677,7 @@ handle flipped level when fixing up the baalz level "eyes" too prevent normal monster activity from picking up the mines' luckstone or the Sokoban amulet/bag before hero has done so; relying on scare monster and/or engraved Elbereth wasn't sufficient to guard the Sokoban prize +proceed a little further into dochat() if hero is deaf Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/sounds.c b/src/sounds.c index 402a6b16a..8071aced6 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1086,12 +1086,7 @@ dochat(void) Your("speech is unintelligible underwater."); return 0; } - if (Deaf) { - pline("How can you hold a conversation when you cannot hear?"); - return 0; - } - - if (!Blind && (otmp = shop_object(u.ux, u.uy)) != (struct obj *) 0) { + if (!Deaf && !Blind && (otmp = shop_object(u.ux, u.uy)) != (struct obj *) 0) { /* standing on something in a shop and chatting causes the shopkeeper to describe the price(s). This can inhibit other chatting inside a shop, but that shouldn't matter much. shop_object() returns an @@ -1153,7 +1148,7 @@ dochat(void) Hallucination ? rndmonnam((char *) 0) : "statue"); return 0; } - if (IS_WALL(levl[tx][ty].typ) || levl[tx][ty].typ == SDOOR) { + if (!Deaf && (IS_WALL(levl[tx][ty].typ) || levl[tx][ty].typ == SDOOR)) { /* Talking to a wall; secret door remains hidden by behaving like a wall; IS_WALL() test excludes solid rock even when that serves as a wall bordering a corridor */ @@ -1201,13 +1196,23 @@ dochat(void) /* if this monster is waiting for something, prod it into action */ mtmp->mstrategy &= ~STRAT_WAITMASK; - if (mtmp->mtame && mtmp->meating) { + if (!Deaf && mtmp->mtame && mtmp->meating) { if (!canspotmon(mtmp)) map_invisible(mtmp->mx, mtmp->my); pline("%s is eating noisily.", Monnam(mtmp)); return 0; } + if (Deaf) { + const char *xresponse = humanoid(g.youmonst.data) + ? "falls on deaf ears" + : "is inaudible"; + pline("Any response%s%s %s.", + canspotmon(mtmp) ? " from " : "", + canspotmon(mtmp) ? mon_nam(mtmp) : "", + xresponse); + return 0; + } return domonnoise(mtmp); }