diff --git a/src/shk.c b/src/shk.c index 73d563d80..e4a376600 100644 --- a/src/shk.c +++ b/src/shk.c @@ -4582,7 +4582,7 @@ shop_object(register coordxy x, register coordxy y) break; /* note: otmp might have ->no_charge set, but that's ok */ return (otmp && costly_spot(x, y) - && NOTANGRY(shkp) && !helpless(shkp)) + && NOTANGRY(shkp) && !muteshk(shkp)) ? otmp : (struct obj *) 0; } @@ -4628,15 +4628,15 @@ price_quote(register struct obj* first_obj) } else if (cnt == 1) { if (!cost) { /* ", no charge" */ - pline("%s!", upstart(buf)); /* buf still contains the string */ + verbalize("%s!", upstart(buf)); /* buf contains the string */ } else { /* print cost in slightly different format, so can't reuse buf; cost and contentsonly are already set up */ Sprintf(buf, "%s%s", contentsonly ? the_contents_of : "", doname(first_obj)); - pline("%s, price %ld %s%s%s", upstart(buf), cost, currency(cost), - (first_obj->quan > 1L) ? " each" : "", - contentsonly ? "." : shk_embellish(first_obj, cost)); + verbalize("%s, price %ld %s%s%s", upstart(buf), cost, + currency(cost), (first_obj->quan > 1L) ? " each" : "", + contentsonly ? "." : shk_embellish(first_obj, cost)); } } destroy_nhwindow(tmpwin); diff --git a/src/sounds.c b/src/sounds.c index 49e2c2c50..ab07595c3 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -608,7 +608,9 @@ domonnoise(register struct monst* mtmp) /* presumably nearness and sleep checks have already been made */ if (Deaf) return ECMD_OK; - if (is_silent(ptr)) + if (is_silent(ptr) + /* shk_chat can handle nonverbal monsters */ + && !mtmp->isshk) return ECMD_OK; /* leader might be poly'd; if he can still speak, give leader speech */ @@ -617,13 +619,16 @@ domonnoise(register struct monst* mtmp) /* make sure it's your role's quest guardian; adjust if not */ else if (msound == MS_GUARDIAN && ptr != &mons[gu.urole.guardnum]) msound = mons[genus(monsndx(ptr), 1)].msound; + /* even polymorphed, shopkeepers retain their minds and capitalist bent */ + else if (mtmp->isshk) + msound = MS_SELL; /* some normally non-speaking types can/will speak if hero is similar */ else if (msound == MS_ORC && ((same_race(ptr, gy.youmonst.data) /* current form, */ || same_race(ptr, &mons[Race_switch])) /* unpoly'd form */ || Hallucination)) msound = MS_HUMANOID; - /* silliness, with slight chance to interfere with shopping */ + /* silliness; formerly had a slight chance to interfere with shopping */ else if (Hallucination && mon_is_gecko(mtmp)) msound = MS_SELL; @@ -645,7 +650,7 @@ domonnoise(register struct monst* mtmp) quest_chat(mtmp); break; case MS_SELL: /* pitch, pay, total */ - if (!Hallucination || (mtmp->isshk && !rn2(2))) { + if (!Hallucination || is_silent(ptr) || (mtmp->isshk && !rn2(2))) { shk_chat(mtmp); } else { /* approximation of GEICO's advertising slogan (it actually