Tweaks to chatting with mute shopkeeper
A mute shopkeeper shouldn't be able to verbally tell you the prices of objects. For normal chatting, on the other hand, shk_chat can handle a mute shopkeeper (by changing from speech to "indications" -- hand signs, body language, etc), so allow execution to reach that even if the shopkeeper is mute (in a silent polyform). Also more generally allow a shopkeeper to continue chatting with normal shopkeeper responses if polymorphed into another creature, since they apparently retain their minds (are able to tell you prices, can transact, etc). This is mostly inspired by the fact shk_chat has extensive handling for mute shopkeepers, but it was unreachable as far as I can tell. It is also funny to think of a newt or something wriggling around to indicate it's been making a lot of money lately.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
11
src/sounds.c
11
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
|
||||
|
||||
Reference in New Issue
Block a user