another monster gender name handling tweak
ensure that monster female name variation ends up as a female during ^G arbitrate when there is a conflict between gender term (male or female) and a gender-tied monster name (cavewoman) during ^G; gender term wins
This commit is contained in:
+4
-1
@@ -461,7 +461,10 @@ remove M2_MALE flag that was unintentionally left on dwarf lord/lady/leader
|
|||||||
entry and was preventing female incarnations
|
entry and was preventing female incarnations
|
||||||
tilemap.c wasn't building if STATUES_LOOK_LIKE_MONSTERS wasn't defined; also,
|
tilemap.c wasn't building if STATUES_LOOK_LIKE_MONSTERS wasn't defined; also,
|
||||||
to match the code that should be defined so change the preprocessor
|
to match the code that should be defined so change the preprocessor
|
||||||
test to 'ifndef STATUES_DONT_LOOK_LIKE_MONSTERS'
|
test to 'ifndef STATUES_DONT_LOOK_LIKE_MONSTERS'
|
||||||
|
ensure that monster female name variation ends up as a female during ^G
|
||||||
|
arbitrate when there is a conflict between gender term (male or female) and
|
||||||
|
a gender-tied monster name (cavewoman) during ^G; gender term wins
|
||||||
|
|
||||||
curses: 'msg_window' option wasn't functional for curses unless the binary
|
curses: 'msg_window' option wasn't functional for curses unless the binary
|
||||||
also included tty support
|
also included tty support
|
||||||
|
|||||||
+2
-1
@@ -628,7 +628,8 @@ struct role_filter {
|
|||||||
struct _create_particular_data {
|
struct _create_particular_data {
|
||||||
int quan;
|
int quan;
|
||||||
int which;
|
int which;
|
||||||
int fem;
|
int fem; /* -1, MALE, FEMALE, NEUTRAL */
|
||||||
|
int genderconf; /* conflicting gender */
|
||||||
char monclass;
|
char monclass;
|
||||||
boolean randmonst;
|
boolean randmonst;
|
||||||
boolean maketame, makepeaceful, makehostile;
|
boolean maketame, makepeaceful, makehostile;
|
||||||
|
|||||||
+41
-5
@@ -2454,7 +2454,8 @@ struct _create_particular_data *d;
|
|||||||
d->quan = 1 + ((g.multi > 0) ? g.multi : 0);
|
d->quan = 1 + ((g.multi > 0) ? g.multi : 0);
|
||||||
d->monclass = MAXMCLASSES;
|
d->monclass = MAXMCLASSES;
|
||||||
d->which = g.urole.malenum; /* an arbitrary index into mons[] */
|
d->which = g.urole.malenum; /* an arbitrary index into mons[] */
|
||||||
d->fem = -1; /* gender not specified */
|
d->fem = -1; /* gender not specified */
|
||||||
|
d->genderconf = -1; /* no confusion on which gender to assign */
|
||||||
d->randmonst = FALSE;
|
d->randmonst = FALSE;
|
||||||
d->maketame = d->makepeaceful = d->makehostile = FALSE;
|
d->maketame = d->makepeaceful = d->makehostile = FALSE;
|
||||||
d->sleeping = d->saddled = d->invisible = d->hidden = FALSE;
|
d->sleeping = d->saddled = d->invisible = d->hidden = FALSE;
|
||||||
@@ -2521,8 +2522,19 @@ struct _create_particular_data *d;
|
|||||||
/*
|
/*
|
||||||
* With the introduction of male and female monster names
|
* With the introduction of male and female monster names
|
||||||
* in 3.7, preserve that detail.
|
* in 3.7, preserve that detail.
|
||||||
|
*
|
||||||
|
* If d->fem is already set to MALE or FEMALE at this juncture, it means
|
||||||
|
* one of those terms was explicitly specified.
|
||||||
*/
|
*/
|
||||||
d->fem = gender_name_var;
|
if (d->fem == MALE || d->fem == FEMALE) { /* explicity expressed */
|
||||||
|
if ((gender_name_var != NEUTRAL) && (d->fem != gender_name_var)) {
|
||||||
|
/* apparent selection incompatibility */
|
||||||
|
d->genderconf = gender_name_var; /* resolve later */
|
||||||
|
}
|
||||||
|
/* otherwise keep the value of d->fem, as it's okay */
|
||||||
|
} else { /* no explicit gender term was specified */
|
||||||
|
d->fem = gender_name_var;
|
||||||
|
}
|
||||||
if (d->which >= LOW_PM)
|
if (d->which >= LOW_PM)
|
||||||
return TRUE; /* got one */
|
return TRUE; /* got one */
|
||||||
d->monclass = name_to_monclass(bufp, &d->which);
|
d->monclass = name_to_monclass(bufp, &d->which);
|
||||||
@@ -2576,9 +2588,33 @@ struct _create_particular_data *d;
|
|||||||
whichpm = mkclass(d->monclass, 0);
|
whichpm = mkclass(d->monclass, 0);
|
||||||
else if (d->randmonst)
|
else if (d->randmonst)
|
||||||
whichpm = rndmonst();
|
whichpm = rndmonst();
|
||||||
if (d->fem != -1 && !is_male(whichpm) && !is_female(whichpm))
|
if (d->genderconf == -1) {
|
||||||
mmflags |= (d->fem == FEMALE) ? MM_FEMALE
|
/* no confict exists between explicit gender term and
|
||||||
: (d->fem == MALE) ? MM_MALE : 0;
|
the specified monster name */
|
||||||
|
if (d->fem != -1 && !is_male(whichpm) && !is_female(whichpm))
|
||||||
|
mmflags |= (d->fem == FEMALE) ? MM_FEMALE
|
||||||
|
: (d->fem == MALE) ? MM_MALE : 0;
|
||||||
|
} else {
|
||||||
|
/* conundrum alert: an explicit gender term conflicts with an
|
||||||
|
explicit gender-tied naming term (i.e. male cavewoman) */
|
||||||
|
|
||||||
|
/* option not gone with: name overrides the explicit gender as
|
||||||
|
commented out here */
|
||||||
|
/* d->fem = d->genderconf; */
|
||||||
|
|
||||||
|
/* option chosen: let the explicit gender term (male or female)
|
||||||
|
override the gender-tied naming term, so leave d->fem as-is */
|
||||||
|
|
||||||
|
mmflags |= (d->fem == FEMALE) ? MM_FEMALE
|
||||||
|
: (d->fem == MALE) ? MM_MALE : 0;
|
||||||
|
|
||||||
|
/* another option would be to consider it a faulty specification
|
||||||
|
and reject the request completely and produce a random monster
|
||||||
|
with a gender matching that specified instead (i.e. there is
|
||||||
|
no such thing as a male cavewoman) */
|
||||||
|
/* whichpm = rndmonst(); */
|
||||||
|
/* mmflags |= (d->fem == FEMALE) ? MM_FEMALE : MM_MALE; */
|
||||||
|
}
|
||||||
mtmp = makemon(whichpm, u.ux, u.uy, mmflags);
|
mtmp = makemon(whichpm, u.ux, u.uy, mmflags);
|
||||||
if (!mtmp) {
|
if (!mtmp) {
|
||||||
/* quit trying if creation failed and is going to repeat */
|
/* quit trying if creation failed and is going to repeat */
|
||||||
|
|||||||
Reference in New Issue
Block a user