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:
@@ -1458,7 +1458,7 @@ E int FDECL(monsndx, (struct permonst *));
|
||||
E int FDECL(name_to_mon, (const char *));
|
||||
E int FDECL(name_to_monclass, (const char *, int *));
|
||||
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 int FDECL(little_to_big, (int));
|
||||
E int FDECL(big_to_little, (int));
|
||||
|
||||
@@ -236,12 +236,18 @@ struct Gender {
|
||||
increment to 3 if you allow neuter roles */
|
||||
|
||||
extern const struct Gender genders[]; /* table of available genders */
|
||||
/* pronouns for the hero */
|
||||
#define uhe() (genders[flags.female ? 1 : 0].he)
|
||||
#define uhim() (genders[flags.female ? 1 : 0].him)
|
||||
#define uhis() (genders[flags.female ? 1 : 0].his)
|
||||
#define mhe(mtmp) (genders[pronoun_gender(mtmp)].he)
|
||||
#define mhim(mtmp) (genders[pronoun_gender(mtmp)].him)
|
||||
#define mhis(mtmp) (genders[pronoun_gender(mtmp)].his)
|
||||
/* corresponding pronouns for monsters; yields "it" when mtmp can't be seen */
|
||||
#define mhe(mtmp) (genders[pronoun_gender(mtmp, FALSE)].he)
|
||||
#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 ***/
|
||||
struct Align {
|
||||
|
||||
Reference in New Issue
Block a user