fix #H7397 - pronoun for unseen shopkeeper
Most shop messages accurately identify the shopkeeper even when he or she can't be seen, but some also include a pronoun reference that ended up as "it" or "its" when not seen. Extend pronoun selection so that visibility can be ignored: noit_mhe(mon), noit_mhim(mon), and noit_mhis(mon). Note that despite being called noit_foo(), those will still return "it" if mon is neuter. "Accurately identify shopkeeper" is misleading if the hero is hallucinating; a random shopkeeper name is used then. noit_foo() yields the pronoun applicable to the actual shopkeeper and might not match the gender of a hallucinatory name. That could be fixed in a couple of ways (add shk_mhe()/shk_mhim()/shk_mhis() and either pass them the randomly chosen name so that they can figure out the appropriate gender, or just have them use a random gender whenever hallucinating) but I don't think that's worth bothering with. A bunch of shop messages needed noit_foo(); only a couple of those have actually been tested. A bunch more were using shkname() at the beginning of a sentence where Shknam() should be used instead. (All the existing shk names are already capitalized so there's no noticeable difference.) The three places outside shk.c and vault.c which directly use pronoun_gender() have been successfully tested.
This commit is contained in:
@@ -140,6 +140,8 @@ known bear trap was being forgotten about by a player polymorphed into a
|
|||||||
flying monster if the player unsuccessfully tried to #untrap it and
|
flying monster if the player unsuccessfully tried to #untrap it and
|
||||||
moved onto the trap square as a result
|
moved onto the trap square as a result
|
||||||
no leash-related message is given when a leashed pet yellow light explodes
|
no leash-related message is given when a leashed pet yellow light explodes
|
||||||
|
shop messages refer to shk by name even when shk is not visible but some
|
||||||
|
used pronoun "it" or "its" in same sentence; ditto for vault guards
|
||||||
|
|
||||||
|
|
||||||
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
@@ -1458,7 +1458,7 @@ E int FDECL(monsndx, (struct permonst *));
|
|||||||
E int FDECL(name_to_mon, (const char *));
|
E int FDECL(name_to_mon, (const char *));
|
||||||
E int FDECL(name_to_monclass, (const char *, int *));
|
E int FDECL(name_to_monclass, (const char *, int *));
|
||||||
E int FDECL(gender, (struct monst *));
|
E int FDECL(gender, (struct monst *));
|
||||||
E int FDECL(pronoun_gender, (struct monst *));
|
E int FDECL(pronoun_gender, (struct monst *, BOOLEAN_P));
|
||||||
E boolean FDECL(levl_follower, (struct monst *));
|
E boolean FDECL(levl_follower, (struct monst *));
|
||||||
E int FDECL(little_to_big, (int));
|
E int FDECL(little_to_big, (int));
|
||||||
E int FDECL(big_to_little, (int));
|
E int FDECL(big_to_little, (int));
|
||||||
|
|||||||
@@ -236,12 +236,18 @@ struct Gender {
|
|||||||
increment to 3 if you allow neuter roles */
|
increment to 3 if you allow neuter roles */
|
||||||
|
|
||||||
extern const struct Gender genders[]; /* table of available genders */
|
extern const struct Gender genders[]; /* table of available genders */
|
||||||
|
/* pronouns for the hero */
|
||||||
#define uhe() (genders[flags.female ? 1 : 0].he)
|
#define uhe() (genders[flags.female ? 1 : 0].he)
|
||||||
#define uhim() (genders[flags.female ? 1 : 0].him)
|
#define uhim() (genders[flags.female ? 1 : 0].him)
|
||||||
#define uhis() (genders[flags.female ? 1 : 0].his)
|
#define uhis() (genders[flags.female ? 1 : 0].his)
|
||||||
#define mhe(mtmp) (genders[pronoun_gender(mtmp)].he)
|
/* corresponding pronouns for monsters; yields "it" when mtmp can't be seen */
|
||||||
#define mhim(mtmp) (genders[pronoun_gender(mtmp)].him)
|
#define mhe(mtmp) (genders[pronoun_gender(mtmp, FALSE)].he)
|
||||||
#define mhis(mtmp) (genders[pronoun_gender(mtmp)].his)
|
#define mhim(mtmp) (genders[pronoun_gender(mtmp, FALSE)].him)
|
||||||
|
#define mhis(mtmp) (genders[pronoun_gender(mtmp, FALSE)].his)
|
||||||
|
/* override "it" if reason is lack of visibility rather than neuter species */
|
||||||
|
#define noit_mhe(mtmp) (genders[pronoun_gender(mtmp, TRUE)].he)
|
||||||
|
#define noit_mhim(mtmp) (genders[pronoun_gender(mtmp, TRUE)].him)
|
||||||
|
#define noit_mhis(mtmp) (genders[pronoun_gender(mtmp, TRUE)].his)
|
||||||
|
|
||||||
/*** Unified structure specifying alignment information ***/
|
/*** Unified structure specifying alignment information ***/
|
||||||
struct Align {
|
struct Align {
|
||||||
|
|||||||
@@ -215,12 +215,9 @@ int rx, ry, *resp;
|
|||||||
/* (most corpses don't retain the monster's sex, so
|
/* (most corpses don't retain the monster's sex, so
|
||||||
we're usually forced to use generic pronoun here) */
|
we're usually forced to use generic pronoun here) */
|
||||||
if (mtmp) {
|
if (mtmp) {
|
||||||
mptr = &mons[mtmp->mnum];
|
mptr = mtmp->data = &mons[mtmp->mnum];
|
||||||
/* can't use mhe() here; it calls pronoun_gender() which
|
/* TRUE: override visibility check--it's not on the map */
|
||||||
expects monster to be on the map (visibility check) */
|
gndr = pronoun_gender(mtmp, TRUE);
|
||||||
if ((humanoid(mptr) || (mptr->geno & G_UNIQ)
|
|
||||||
|| type_is_pname(mptr)) && !is_neuter(mptr))
|
|
||||||
gndr = (int) mtmp->female;
|
|
||||||
} else {
|
} else {
|
||||||
mptr = &mons[corpse->corpsenm];
|
mptr = &mons[corpse->corpsenm];
|
||||||
if (is_female(mptr))
|
if (is_female(mptr))
|
||||||
|
|||||||
@@ -664,12 +664,8 @@ int x, y;
|
|||||||
|
|
||||||
mon->mundetected = 0; /* wakeup() will handle mimic */
|
mon->mundetected = 0; /* wakeup() will handle mimic */
|
||||||
mnam = a_monnam(mon); /* after unhiding */
|
mnam = a_monnam(mon); /* after unhiding */
|
||||||
pronoun = mhim(mon);
|
pronoun = noit_mhim(mon);
|
||||||
if (!strcmp(mnam, "it")) {
|
if (!strcmp(mnam, "it")) {
|
||||||
/* mhim() uses pronoun_gender() which forces neuter if monster
|
|
||||||
can't be seen; we want him/her for humanoid sensed by touch */
|
|
||||||
if (!strcmp(pronoun, "it") && humanoid(mon->data))
|
|
||||||
pronoun = genders[mon->female].him;
|
|
||||||
mnam = !strcmp(pronoun, "it") ? "something" : "someone";
|
mnam = !strcmp(pronoun, "it") ? "something" : "someone";
|
||||||
}
|
}
|
||||||
if (!glyph_is_monster(glyph) && !glyph_is_invisible(glyph))
|
if (!glyph_is_monster(glyph) && !glyph_is_invisible(glyph))
|
||||||
|
|||||||
@@ -47,9 +47,10 @@ mon_nam_too(outbuf, mon, other_mon)
|
|||||||
char *outbuf;
|
char *outbuf;
|
||||||
struct monst *mon, *other_mon;
|
struct monst *mon, *other_mon;
|
||||||
{
|
{
|
||||||
Strcpy(outbuf, mon_nam(mon));
|
if (mon != other_mon)
|
||||||
if (mon == other_mon)
|
Strcpy(outbuf, mon_nam(mon));
|
||||||
switch (pronoun_gender(mon)) {
|
else
|
||||||
|
switch (pronoun_gender(mon, FALSE)) {
|
||||||
case 0:
|
case 0:
|
||||||
Strcpy(outbuf, "himself");
|
Strcpy(outbuf, "himself");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -2613,7 +2613,7 @@ struct monst *mon;
|
|||||||
;
|
;
|
||||||
} else if (rn2(20) < ACURR(A_CHA)) {
|
} else if (rn2(20) < ACURR(A_CHA)) {
|
||||||
pline("%s demands that you pay %s, but you refuse...",
|
pline("%s demands that you pay %s, but you refuse...",
|
||||||
noit_Monnam(mon), Blind ? (fem ? "her" : "him") : mhim(mon));
|
noit_Monnam(mon), noit_mhim(mon));
|
||||||
} else if (u.umonnum == PM_LEPRECHAUN) {
|
} else if (u.umonnum == PM_LEPRECHAUN) {
|
||||||
pline("%s tries to take your money, but fails...", noit_Monnam(mon));
|
pline("%s tries to take your money, but fails...", noit_Monnam(mon));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -900,10 +900,13 @@ register struct monst *mtmp;
|
|||||||
/* Like gender(), but lower animals and such are still "it".
|
/* Like gender(), but lower animals and such are still "it".
|
||||||
This is the one we want to use when printing messages. */
|
This is the one we want to use when printing messages. */
|
||||||
int
|
int
|
||||||
pronoun_gender(mtmp)
|
pronoun_gender(mtmp, override_vis)
|
||||||
register struct monst *mtmp;
|
register struct monst *mtmp;
|
||||||
|
boolean override_vis; /* if True then 'no it' unless neuter */
|
||||||
{
|
{
|
||||||
if (is_neuter(mtmp->data) || !canspotmon(mtmp))
|
if (!override_vis && !canspotmon(mtmp))
|
||||||
|
return 2;
|
||||||
|
if (is_neuter(mtmp->data))
|
||||||
return 2;
|
return 2;
|
||||||
return (humanoid(mtmp->data) || (mtmp->data->geno & G_UNIQ)
|
return (humanoid(mtmp->data) || (mtmp->data->geno & G_UNIQ)
|
||||||
|| type_is_pname(mtmp->data)) ? (int) mtmp->female : 2;
|
|| type_is_pname(mtmp->data)) ? (int) mtmp->female : 2;
|
||||||
|
|||||||
130
src/shk.c
130
src/shk.c
@@ -435,9 +435,9 @@ boolean newlev;
|
|||||||
plname);
|
plname);
|
||||||
else
|
else
|
||||||
pline("%s %s that you need to pay before leaving%s",
|
pline("%s %s that you need to pay before leaving%s",
|
||||||
Shknam(shkp),
|
Shknam(shkp),
|
||||||
NOTANGRY(shkp) ? "points out" : "makes it clear",
|
NOTANGRY(shkp) ? "points out" : "makes it clear",
|
||||||
NOTANGRY(shkp) ? "." : "!");
|
NOTANGRY(shkp) ? "." : "!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -580,12 +580,12 @@ char *enterstring;
|
|||||||
return; /* no dialog */
|
return; /* no dialog */
|
||||||
|
|
||||||
if (Invis) {
|
if (Invis) {
|
||||||
pline("%s senses your presence.", shkname(shkp));
|
pline("%s senses your presence.", Shknam(shkp));
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
verbalize("Invisible customers are not welcome!");
|
verbalize("Invisible customers are not welcome!");
|
||||||
else
|
else
|
||||||
pline("%s stands firm as if %s knows you are there.",
|
pline("%s stands firm as if %s knows you are there.",
|
||||||
Shknam(shkp), mhe(shkp));
|
Shknam(shkp), noit_mhe(shkp));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,21 +594,18 @@ char *enterstring;
|
|||||||
if (ANGRY(shkp)) {
|
if (ANGRY(shkp)) {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
verbalize("So, %s, you dare return to %s %s?!", plname,
|
verbalize("So, %s, you dare return to %s %s?!", plname,
|
||||||
s_suffix(shkname(shkp)), shtypes[rt - SHOPBASE].name);
|
s_suffix(shkname(shkp)), shtypes[rt - SHOPBASE].name);
|
||||||
else
|
else
|
||||||
pline("%s seems %s over your return to %s %s!",
|
pline("%s seems %s over your return to %s %s!",
|
||||||
Shknam(shkp),
|
Shknam(shkp), angrytexts[rn2(SIZE(angrytexts))],
|
||||||
angrytexts[rn2(SIZE(angrytexts))],
|
noit_mhis(shkp), shtypes[rt - SHOPBASE].name);
|
||||||
mhis(shkp),
|
|
||||||
shtypes[rt - SHOPBASE].name);
|
|
||||||
} else if (eshkp->robbed) {
|
} else if (eshkp->robbed) {
|
||||||
if (!Deaf)
|
if (!Deaf)
|
||||||
pline("%s mutters imprecations against shoplifters.",
|
pline("%s mutters imprecations against shoplifters.",
|
||||||
shkname(shkp));
|
Shknam(shkp));
|
||||||
else
|
else
|
||||||
pline("%s is combing through %s inventory list.",
|
pline("%s is combing through %s inventory list.",
|
||||||
Shknam(shkp),
|
Shknam(shkp), noit_mhis(shkp));
|
||||||
mhis(shkp));
|
|
||||||
} else {
|
} else {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
verbalize("%s, %s! Welcome%s to %s %s!", Hello(shkp), plname,
|
verbalize("%s, %s! Welcome%s to %s %s!", Hello(shkp), plname,
|
||||||
@@ -655,20 +652,20 @@ char *enterstring;
|
|||||||
tool, plur(cnt));
|
tool, plur(cnt));
|
||||||
else
|
else
|
||||||
pline("%s %s to let you in with your %s%s.",
|
pline("%s %s to let you in with your %s%s.",
|
||||||
Shknam(shkp),
|
Shknam(shkp),
|
||||||
NOTANGRY(shkp) ? "is hesitant" : "refuses",
|
NOTANGRY(shkp) ? "is hesitant" : "refuses",
|
||||||
tool, plur(cnt));
|
tool, plur(cnt));
|
||||||
should_block = TRUE;
|
should_block = TRUE;
|
||||||
} else if (u.usteed) {
|
} else if (u.usteed) {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
verbalize(NOTANGRY(shkp) ? "Will you please leave %s outside?"
|
verbalize(NOTANGRY(shkp) ? "Will you please leave %s outside?"
|
||||||
: "Leave %s outside.",
|
: "Leave %s outside.",
|
||||||
y_monnam(u.usteed));
|
y_monnam(u.usteed));
|
||||||
else
|
else
|
||||||
pline("%s %s to let you in while you're riding %s.",
|
pline("%s %s to let you in while you're riding %s.",
|
||||||
Shknam(shkp),
|
Shknam(shkp),
|
||||||
NOTANGRY(shkp) ? "doesn't want" : "refuses",
|
NOTANGRY(shkp) ? "doesn't want" : "refuses",
|
||||||
y_monnam(u.usteed));
|
y_monnam(u.usteed));
|
||||||
should_block = TRUE;
|
should_block = TRUE;
|
||||||
} else {
|
} else {
|
||||||
should_block =
|
should_block =
|
||||||
@@ -1343,7 +1340,7 @@ proceed:
|
|||||||
} else {
|
} else {
|
||||||
if (umoney > ltmp) {
|
if (umoney > ltmp) {
|
||||||
You("give %s the %ld gold piece%s %s asked for.",
|
You("give %s the %ld gold piece%s %s asked for.",
|
||||||
shkname(shkp), ltmp, plur(ltmp), mhe(shkp));
|
shkname(shkp), ltmp, plur(ltmp), noit_mhe(shkp));
|
||||||
pay(ltmp, shkp);
|
pay(ltmp, shkp);
|
||||||
} else {
|
} else {
|
||||||
You("give %s all your%s gold.", shkname(shkp),
|
You("give %s all your%s gold.", shkname(shkp),
|
||||||
@@ -1353,7 +1350,8 @@ proceed:
|
|||||||
pline("But you have hidden gold!");
|
pline("But you have hidden gold!");
|
||||||
}
|
}
|
||||||
if ((umoney < ltmp / 2L) || (umoney < ltmp && stashed_gold))
|
if ((umoney < ltmp / 2L) || (umoney < ltmp && stashed_gold))
|
||||||
pline("Unfortunately, %s doesn't look satisfied.", mhe(shkp));
|
pline("Unfortunately, %s doesn't look satisfied.",
|
||||||
|
noit_mhe(shkp));
|
||||||
else
|
else
|
||||||
make_happy_shk(shkp, FALSE);
|
make_happy_shk(shkp, FALSE);
|
||||||
}
|
}
|
||||||
@@ -1373,13 +1371,14 @@ proceed:
|
|||||||
if (!umoney)
|
if (!umoney)
|
||||||
pline(no_money, stashed_gold ? " seem to" : "");
|
pline(no_money, stashed_gold ? " seem to" : "");
|
||||||
else
|
else
|
||||||
pline(not_enough_money, mhim(shkp));
|
pline(not_enough_money, noit_mhim(shkp));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
pline("But since %s shop has been robbed recently,", mhis(shkp));
|
pline("But since %s shop has been robbed recently,",
|
||||||
|
noit_mhis(shkp));
|
||||||
pline("you %scompensate %s for %s losses.",
|
pline("you %scompensate %s for %s losses.",
|
||||||
(umoney < ltmp) ? "partially " : "", shkname(shkp),
|
(umoney < ltmp) ? "partially " : "", shkname(shkp),
|
||||||
mhis(shkp));
|
noit_mhis(shkp));
|
||||||
pay(umoney < ltmp ? umoney : ltmp, shkp);
|
pay(umoney < ltmp ? umoney : ltmp, shkp);
|
||||||
make_happy_shk(shkp, FALSE);
|
make_happy_shk(shkp, FALSE);
|
||||||
} else {
|
} else {
|
||||||
@@ -1390,11 +1389,14 @@ proceed:
|
|||||||
if (!umoney)
|
if (!umoney)
|
||||||
pline(no_money, stashed_gold ? " seem to" : "");
|
pline(no_money, stashed_gold ? " seem to" : "");
|
||||||
else
|
else
|
||||||
pline(not_enough_money, mhim(shkp));
|
pline(not_enough_money, noit_mhim(shkp));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
You("try to appease %s by giving %s 1000 gold pieces.",
|
You("try to appease %s by giving %s 1000 gold pieces.",
|
||||||
x_monnam(shkp, ARTICLE_THE, "angry", 0, FALSE), mhim(shkp));
|
canspotmon(shkp)
|
||||||
|
? x_monnam(shkp, ARTICLE_THE, "angry", 0, FALSE)
|
||||||
|
: shkname(shkp),
|
||||||
|
noit_mhim(shkp));
|
||||||
pay(1000L, shkp);
|
pay(1000L, shkp);
|
||||||
if (strncmp(eshkp->customer, plname, PL_NSIZ) || rn2(3))
|
if (strncmp(eshkp->customer, plname, PL_NSIZ) || rn2(3))
|
||||||
make_happy_shk(shkp, FALSE);
|
make_happy_shk(shkp, FALSE);
|
||||||
@@ -1538,13 +1540,13 @@ proceed:
|
|||||||
}
|
}
|
||||||
if (!ANGRY(shkp) && paid) {
|
if (!ANGRY(shkp) && paid) {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
verbalize("Thank you for shopping in %s %s!", s_suffix(shkname(shkp)),
|
verbalize("Thank you for shopping in %s %s!",
|
||||||
shtypes[eshkp->shoptype - SHOPBASE].name);
|
s_suffix(shkname(shkp)),
|
||||||
|
shtypes[eshkp->shoptype - SHOPBASE].name);
|
||||||
else
|
else
|
||||||
pline("%s nods appreciatively at you for shopping in %s %s!",
|
pline("%s nods appreciatively at you for shopping in %s %s!",
|
||||||
Shknam(shkp),
|
Shknam(shkp), noit_mhis(shkp),
|
||||||
mhis(shkp),
|
shtypes[eshkp->shoptype - SHOPBASE].name);
|
||||||
shtypes[eshkp->shoptype - SHOPBASE].name);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -1778,7 +1780,7 @@ int croaked;
|
|||||||
if (cansee(shkp->mx, shkp->my) && croaked) {
|
if (cansee(shkp->mx, shkp->my) && croaked) {
|
||||||
takes[0] = '\0';
|
takes[0] = '\0';
|
||||||
if (has_head(shkp->data) && !rn2(2))
|
if (has_head(shkp->data) && !rn2(2))
|
||||||
Sprintf(takes, ", shakes %s %s,", mhis(shkp),
|
Sprintf(takes, ", shakes %s %s,", noit_mhis(shkp),
|
||||||
mbodypart(shkp, HEAD));
|
mbodypart(shkp, HEAD));
|
||||||
pline("%s %slooks at your corpse%s and %s.", Shknam(shkp),
|
pline("%s %slooks at your corpse%s and %s.", Shknam(shkp),
|
||||||
(!shkp->mcanmove || shkp->msleeping) ? "wakes up, " : "",
|
(!shkp->mcanmove || shkp->msleeping) ? "wakes up, " : "",
|
||||||
@@ -1797,7 +1799,7 @@ int croaked;
|
|||||||
taken = (invent != 0);
|
taken = (invent != 0);
|
||||||
if (taken)
|
if (taken)
|
||||||
pline("%s gratefully inherits all your possessions.",
|
pline("%s gratefully inherits all your possessions.",
|
||||||
shkname(shkp));
|
Shknam(shkp));
|
||||||
set_repo_loc(shkp);
|
set_repo_loc(shkp);
|
||||||
goto clear;
|
goto clear;
|
||||||
}
|
}
|
||||||
@@ -1828,7 +1830,7 @@ int croaked;
|
|||||||
if (umoney > 0)
|
if (umoney > 0)
|
||||||
money2mon(shkp, umoney);
|
money2mon(shkp, umoney);
|
||||||
context.botl = 1;
|
context.botl = 1;
|
||||||
pline("%s %s all your possessions.", shkname(shkp), takes);
|
pline("%s %s all your possessions.", Shknam(shkp), takes);
|
||||||
taken = TRUE;
|
taken = TRUE;
|
||||||
/* where to put player's invent (after disclosure) */
|
/* where to put player's invent (after disclosure) */
|
||||||
set_repo_loc(shkp);
|
set_repo_loc(shkp);
|
||||||
@@ -1838,7 +1840,7 @@ int croaked;
|
|||||||
pline("%s %s the %ld %s %sowed %s.", Shknam(shkp),
|
pline("%s %s the %ld %s %sowed %s.", Shknam(shkp),
|
||||||
takes, loss, currency(loss),
|
takes, loss, currency(loss),
|
||||||
strncmp(eshkp->customer, plname, PL_NSIZ) ? "" : "you ",
|
strncmp(eshkp->customer, plname, PL_NSIZ) ? "" : "you ",
|
||||||
mhim(shkp));
|
noit_mhim(shkp));
|
||||||
/* shopkeeper has now been paid in full */
|
/* shopkeeper has now been paid in full */
|
||||||
pacify_shk(shkp);
|
pacify_shk(shkp);
|
||||||
eshkp->following = 0;
|
eshkp->following = 0;
|
||||||
@@ -2218,9 +2220,8 @@ boolean quietly;
|
|||||||
verbalize("I won't stock that. Take it out of here!");
|
verbalize("I won't stock that. Take it out of here!");
|
||||||
else
|
else
|
||||||
pline("%s shakes %s %s in refusal.",
|
pline("%s shakes %s %s in refusal.",
|
||||||
Shknam(shkp),
|
Shknam(shkp), noit_mhis(shkp),
|
||||||
mhis(shkp),
|
mbodypart(shkp, HEAD));
|
||||||
mbodypart(shkp, HEAD));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -3010,7 +3011,7 @@ xchar x, y;
|
|||||||
if (sell_how == SELL_NORMAL || auto_credit) {
|
if (sell_how == SELL_NORMAL || auto_credit) {
|
||||||
c = sell_response = 'y';
|
c = sell_response = 'y';
|
||||||
} else if (sell_response != 'n') {
|
} else if (sell_response != 'n') {
|
||||||
pline("%s cannot pay you at present.", shkname(shkp));
|
pline("%s cannot pay you at present.", Shknam(shkp));
|
||||||
Sprintf(qbuf, "Will you accept %ld %s in credit for ", tmpcr,
|
Sprintf(qbuf, "Will you accept %ld %s in credit for ", tmpcr,
|
||||||
currency(tmpcr));
|
currency(tmpcr));
|
||||||
c = ynaq(safe_qbuf(qbuf, qbuf, "?", obj, doname, thesimpleoname,
|
c = ynaq(safe_qbuf(qbuf, qbuf, "?", obj, doname, thesimpleoname,
|
||||||
@@ -3079,7 +3080,7 @@ xchar x, y;
|
|||||||
"... your items in the <bag>. Sell them?"
|
"... your items in the <bag>. Sell them?"
|
||||||
*/
|
*/
|
||||||
Sprintf(qbuf, "%s offers%s %ld gold piece%s for %s%s ",
|
Sprintf(qbuf, "%s offers%s %ld gold piece%s for %s%s ",
|
||||||
shkname(shkp), short_funds ? " only" : "", offer,
|
Shknam(shkp), short_funds ? " only" : "", offer,
|
||||||
plur(offer),
|
plur(offer),
|
||||||
(cltmp && !ltmp)
|
(cltmp && !ltmp)
|
||||||
? ((yourc == 1L) ? "your item in " : "your items in ")
|
? ((yourc == 1L) ? "your item in " : "your items in ")
|
||||||
@@ -3650,8 +3651,7 @@ struct monst *shkp;
|
|||||||
Hello(shkp), plname);
|
Hello(shkp), plname);
|
||||||
else
|
else
|
||||||
pline("%s holds out %s upturned %s.",
|
pline("%s holds out %s upturned %s.",
|
||||||
Shknam(shkp),
|
Shknam(shkp), noit_mhis(shkp),
|
||||||
mhis(shkp),
|
|
||||||
mbodypart(shkp, HAND));
|
mbodypart(shkp, HAND));
|
||||||
followmsg = moves;
|
followmsg = moves;
|
||||||
if (!rn2(9)) {
|
if (!rn2(9)) {
|
||||||
@@ -3805,7 +3805,7 @@ register int fall;
|
|||||||
*/
|
*/
|
||||||
if (lang == 2)
|
if (lang == 2)
|
||||||
pline("%s curses %s inability to grab your backpack!",
|
pline("%s curses %s inability to grab your backpack!",
|
||||||
shkname(shkp), mhim(shkp));
|
Shknam(shkp), noit_mhim(shkp));
|
||||||
rile_shk(shkp);
|
rile_shk(shkp);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
@@ -3816,16 +3816,16 @@ register int fall;
|
|||||||
if (distu(shkp->mx, shkp->my) > 2) {
|
if (distu(shkp->mx, shkp->my) > 2) {
|
||||||
if (lang == 2)
|
if (lang == 2)
|
||||||
pline("%s curses you in anger and frustration!",
|
pline("%s curses you in anger and frustration!",
|
||||||
shkname(shkp));
|
Shknam(shkp));
|
||||||
else if (lang == 1)
|
else if (lang == 1)
|
||||||
growl(shkp);
|
growl(shkp);
|
||||||
rile_shk(shkp);
|
rile_shk(shkp);
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
pline("%s %s, and %s your backpack!", shkname(shkp),
|
pline("%s %s, and %s your backpack!", Shknam(shkp),
|
||||||
makeplural(locomotion(shkp->data, "leap")), grabs);
|
makeplural(locomotion(shkp->data, "leap")), grabs);
|
||||||
} else
|
} else
|
||||||
pline("%s %s your backpack!", shkname(shkp), grabs);
|
pline("%s %s your backpack!", Shknam(shkp), grabs);
|
||||||
|
|
||||||
for (obj = invent; obj; obj = obj2) {
|
for (obj = invent; obj; obj = obj2) {
|
||||||
obj2 = obj->nobj;
|
obj2 = obj->nobj;
|
||||||
@@ -3957,7 +3957,7 @@ boolean cant_mollify;
|
|||||||
if (uinshp) {
|
if (uinshp) {
|
||||||
if (um_dist(shkp->mx, shkp->my, 1)
|
if (um_dist(shkp->mx, shkp->my, 1)
|
||||||
&& !um_dist(shkp->mx, shkp->my, 3)) {
|
&& !um_dist(shkp->mx, shkp->my, 3)) {
|
||||||
pline("%s leaps towards you!", shkname(shkp));
|
pline("%s leaps towards you!", Shknam(shkp));
|
||||||
mnexto(shkp);
|
mnexto(shkp);
|
||||||
}
|
}
|
||||||
pursue = um_dist(shkp->mx, shkp->my, 1);
|
pursue = um_dist(shkp->mx, shkp->my, 1);
|
||||||
@@ -4004,16 +4004,16 @@ boolean cant_mollify;
|
|||||||
else
|
else
|
||||||
pline("%s is %s that you decided to %s %s %s!",
|
pline("%s is %s that you decided to %s %s %s!",
|
||||||
Shknam(shkp), angrytexts[rn2(SIZE(angrytexts))],
|
Shknam(shkp), angrytexts[rn2(SIZE(angrytexts))],
|
||||||
dmgstr, mhis(shkp), dugwall ? "shop" : "door");
|
dmgstr, noit_mhis(shkp), dugwall ? "shop" : "door");
|
||||||
} else {
|
} else {
|
||||||
if (!Deaf) {
|
if (!Deaf) {
|
||||||
pline("%s shouts:", shkname(shkp));
|
pline("%s shouts:", Shknam(shkp));
|
||||||
verbalize("Who dared %s my %s?", dmgstr,
|
verbalize("Who dared %s my %s?", dmgstr,
|
||||||
dugwall ? "shop" : "door");
|
dugwall ? "shop" : "door");
|
||||||
} else {
|
} else {
|
||||||
pline("%s is %s that someone decided to %s %s %s!",
|
pline("%s is %s that someone decided to %s %s %s!",
|
||||||
Shknam(shkp), angrytexts[rn2(SIZE(angrytexts))],
|
Shknam(shkp), angrytexts[rn2(SIZE(angrytexts))],
|
||||||
dmgstr, mhis(shkp), dugwall ? "shop" : "door");
|
dmgstr, noit_mhis(shkp), dugwall ? "shop" : "door");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hot_pursuit(shkp);
|
hot_pursuit(shkp);
|
||||||
@@ -4039,10 +4039,8 @@ boolean cant_mollify;
|
|||||||
verbalize("Oh, yes! You'll pay!");
|
verbalize("Oh, yes! You'll pay!");
|
||||||
else
|
else
|
||||||
pline("%s lunges %s %s toward your %s!",
|
pline("%s lunges %s %s toward your %s!",
|
||||||
Shknam(shkp),
|
Shknam(shkp), noit_mhis(shkp),
|
||||||
mhis(shkp),
|
mbodypart(shkp, HAND), body_part(NECK));
|
||||||
mbodypart(shkp, HAND),
|
|
||||||
body_part(NECK));
|
|
||||||
} else
|
} else
|
||||||
growl(shkp);
|
growl(shkp);
|
||||||
hot_pursuit(shkp);
|
hot_pursuit(shkp);
|
||||||
@@ -4221,9 +4219,9 @@ struct monst *shkp;
|
|||||||
eshk = ESHK(shkp);
|
eshk = ESHK(shkp);
|
||||||
if (ANGRY(shkp)) {
|
if (ANGRY(shkp)) {
|
||||||
pline("%s %s how much %s dislikes %s customers.",
|
pline("%s %s how much %s dislikes %s customers.",
|
||||||
shkname(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "mentions" : "indicates",
|
(!Deaf && !muteshk(shkp)) ? "mentions" : "indicates",
|
||||||
mhe(shkp), eshk->robbed ? "non-paying" : "rude");
|
noit_mhe(shkp), eshk->robbed ? "non-paying" : "rude");
|
||||||
} else if (eshk->following) {
|
} else if (eshk->following) {
|
||||||
if (strncmp(eshk->customer, plname, PL_NSIZ)) {
|
if (strncmp(eshk->customer, plname, PL_NSIZ)) {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
@@ -4242,35 +4240,35 @@ struct monst *shkp;
|
|||||||
register long total = addupbill(shkp) + eshk->debit;
|
register long total = addupbill(shkp) + eshk->debit;
|
||||||
|
|
||||||
pline("%s %s that your bill comes to %ld %s.",
|
pline("%s %s that your bill comes to %ld %s.",
|
||||||
shkname(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "says" : "indicates",
|
(!Deaf && !muteshk(shkp)) ? "says" : "indicates",
|
||||||
total, currency(total));
|
total, currency(total));
|
||||||
} else if (eshk->debit) {
|
} else if (eshk->debit) {
|
||||||
pline("%s %s that you owe %s %ld %s.",
|
pline("%s %s that you owe %s %ld %s.",
|
||||||
shkname(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "reminds you" : "indicates",
|
(!Deaf && !muteshk(shkp)) ? "reminds you" : "indicates",
|
||||||
mhim(shkp), eshk->debit, currency(eshk->debit));
|
noit_mhim(shkp), eshk->debit, currency(eshk->debit));
|
||||||
} else if (eshk->credit) {
|
} else if (eshk->credit) {
|
||||||
pline("%s encourages you to use your %ld %s of credit.",
|
pline("%s encourages you to use your %ld %s of credit.",
|
||||||
shkname(shkp), eshk->credit, currency(eshk->credit));
|
Shknam(shkp), eshk->credit, currency(eshk->credit));
|
||||||
} else if (eshk->robbed) {
|
} else if (eshk->robbed) {
|
||||||
pline("%s %s about a recent robbery.",
|
pline("%s %s about a recent robbery.",
|
||||||
Shknam(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "complains" : "indicates concern");
|
(!Deaf && !muteshk(shkp)) ? "complains" : "indicates concern");
|
||||||
} else if ((shkmoney = money_cnt(shkp->minvent)) < 50L) {
|
} else if ((shkmoney = money_cnt(shkp->minvent)) < 50L) {
|
||||||
pline("%s %s that business is bad.",
|
pline("%s %s that business is bad.",
|
||||||
shkname(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "complains" : "indicates");
|
(!Deaf && !muteshk(shkp)) ? "complains" : "indicates");
|
||||||
} else if (shkmoney > 4000) {
|
} else if (shkmoney > 4000) {
|
||||||
pline("%s %s that business is good.",
|
pline("%s %s that business is good.",
|
||||||
shkname(shkp),
|
Shknam(shkp),
|
||||||
(!Deaf && !muteshk(shkp)) ? "says" : "indicates");
|
(!Deaf && !muteshk(shkp)) ? "says" : "indicates");
|
||||||
} else if (is_izchak(shkp, FALSE)) {
|
} else if (is_izchak(shkp, FALSE)) {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
pline(Izchak_speaks[rn2(SIZE(Izchak_speaks))], shkname(shkp));
|
pline(Izchak_speaks[rn2(SIZE(Izchak_speaks))], shkname(shkp));
|
||||||
} else {
|
} else {
|
||||||
if (!Deaf && !muteshk(shkp))
|
if (!Deaf && !muteshk(shkp))
|
||||||
pline("%s talks about the problem of shoplifters.", shkname(shkp));
|
pline("%s talks about the problem of shoplifters.", Shknam(shkp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4472,7 +4470,7 @@ register xchar x, y;
|
|||||||
&& ESHK(shkp)->shd.y == y
|
&& ESHK(shkp)->shd.y == y
|
||||||
&& shkp->mcanmove && !shkp->msleeping
|
&& shkp->mcanmove && !shkp->msleeping
|
||||||
&& (ESHK(shkp)->debit || ESHK(shkp)->billct || ESHK(shkp)->robbed)) {
|
&& (ESHK(shkp)->debit || ESHK(shkp)->billct || ESHK(shkp)->robbed)) {
|
||||||
pline("%s%s blocks your way!", shkname(shkp),
|
pline("%s%s blocks your way!", Shknam(shkp),
|
||||||
Invis ? " senses your motion and" : "");
|
Invis ? " senses your motion and" : "");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -4509,7 +4507,7 @@ register xchar x, y;
|
|||||||
&& (x == sx - 1 || x == sx + 1 || y == sy - 1 || y == sy + 1)
|
&& (x == sx - 1 || x == sx + 1 || y == sy - 1 || y == sy + 1)
|
||||||
&& (Invis || carrying(PICK_AXE) || carrying(DWARVISH_MATTOCK)
|
&& (Invis || carrying(PICK_AXE) || carrying(DWARVISH_MATTOCK)
|
||||||
|| u.usteed)) {
|
|| u.usteed)) {
|
||||||
pline("%s%s blocks your way!", shkname(shkp),
|
pline("%s%s blocks your way!", Shknam(shkp),
|
||||||
Invis ? " senses your motion and" : "");
|
Invis ? " senses your motion and" : "");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -452,7 +452,8 @@ invault()
|
|||||||
if (!Blind)
|
if (!Blind)
|
||||||
pline(
|
pline(
|
||||||
"%s holds out %s palm and beckons with %s other hand.",
|
"%s holds out %s palm and beckons with %s other hand.",
|
||||||
noit_Monnam(guard), mhis(guard), mhis(guard));
|
noit_Monnam(guard), noit_mhis(guard),
|
||||||
|
noit_mhis(guard));
|
||||||
} else {
|
} else {
|
||||||
verbalize(
|
verbalize(
|
||||||
"Most likely all your gold was stolen from this vault.");
|
"Most likely all your gold was stolen from this vault.");
|
||||||
@@ -707,7 +708,7 @@ register struct monst *grd;
|
|||||||
if (Deaf) {
|
if (Deaf) {
|
||||||
if (!Blind)
|
if (!Blind)
|
||||||
pline("%s holds out %s palm demandingly!",
|
pline("%s holds out %s palm demandingly!",
|
||||||
noit_Monnam(grd), mhis(grd));
|
noit_Monnam(grd), noit_mhis(grd));
|
||||||
} else {
|
} else {
|
||||||
verbalize("Drop all your gold, scoundrel!");
|
verbalize("Drop all your gold, scoundrel!");
|
||||||
}
|
}
|
||||||
@@ -716,7 +717,7 @@ register struct monst *grd;
|
|||||||
if (Deaf) {
|
if (Deaf) {
|
||||||
if (!Blind)
|
if (!Blind)
|
||||||
pline("%s rubs %s hands with enraged delight!",
|
pline("%s rubs %s hands with enraged delight!",
|
||||||
noit_Monnam(grd), mhis(grd));
|
noit_Monnam(grd), noit_mhis(grd));
|
||||||
} else {
|
} else {
|
||||||
verbalize("So be it, rogue!");
|
verbalize("So be it, rogue!");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user