found_artifact() groundwork
Lay groundwork for generating a log event when finding an artifact on the floor or carried by a monster. This part should not produce any change in behavior. Move g.artidisco[] and g.artiexist[] out of the instance_globals struct back to local within artifact.c. They are both initialized at the start of a game (and only used in that file) so don't need to be part of any bulk reinitialization if restart-instead-of-exit ever gets implemented. Convert artiexist[] from an array of booleans to an array of structs containing a pair of bitfields. artiexist[].exists is a direct replacement for the boolean; artiexist[].found is new but not put to any significant use yet. If will be used to suppress the future found-an-artifact event for cases where a more specific event (like crowning or divine gift as #offer reward) is already produced. Remove g.via_naming altogether and add an extra argument to oname() calls to replace it. Add an extra argument to artifact_exists() calls.
This commit is contained in:
@@ -421,7 +421,6 @@ struct plinemsg_type {
|
|||||||
/* bitmask for callers of hide_unhide_msgtypes() */
|
/* bitmask for callers of hide_unhide_msgtypes() */
|
||||||
#define MSGTYP_MASK_REP_SHOW ((1 << MSGTYP_NOREP) | (1 << MSGTYP_NOSHOW))
|
#define MSGTYP_MASK_REP_SHOW ((1 << MSGTYP_NOREP) | (1 << MSGTYP_NOSHOW))
|
||||||
|
|
||||||
|
|
||||||
enum bcargs {override_restriction = -1};
|
enum bcargs {override_restriction = -1};
|
||||||
struct breadcrumbs {
|
struct breadcrumbs {
|
||||||
const char *funcnm;
|
const char *funcnm;
|
||||||
@@ -701,10 +700,6 @@ struct instance_globals {
|
|||||||
/* artifcat.c */
|
/* artifcat.c */
|
||||||
int spec_dbon_applies; /* coordinate effects from spec_dbon() with
|
int spec_dbon_applies; /* coordinate effects from spec_dbon() with
|
||||||
messages in artifact_hit() */
|
messages in artifact_hit() */
|
||||||
/* flags including which artifacts have already been created */
|
|
||||||
boolean artiexist[1 + NROFARTIFACTS + 1];
|
|
||||||
/* and a discovery list for them (no dummy first entry here) */
|
|
||||||
xchar artidisco[NROFARTIFACTS];
|
|
||||||
int mkot_trap_warn_count;
|
int mkot_trap_warn_count;
|
||||||
|
|
||||||
/* botl.c */
|
/* botl.c */
|
||||||
@@ -864,7 +859,6 @@ struct instance_globals {
|
|||||||
/* do_name.c */
|
/* do_name.c */
|
||||||
struct selectionvar *gloc_filter_map;
|
struct selectionvar *gloc_filter_map;
|
||||||
int gloc_filter_floodfill_match_glyph;
|
int gloc_filter_floodfill_match_glyph;
|
||||||
int via_naming;
|
|
||||||
|
|
||||||
/* do_wear.c */
|
/* do_wear.c */
|
||||||
/* starting equipment gets auto-worn at beginning of new game,
|
/* starting equipment gets auto-worn at beginning of new game,
|
||||||
|
|||||||
+4
-2
@@ -69,7 +69,9 @@ extern const char *artiname(int);
|
|||||||
extern struct obj *mk_artifact(struct obj *, aligntyp);
|
extern struct obj *mk_artifact(struct obj *, aligntyp);
|
||||||
extern const char *artifact_name(const char *, short *);
|
extern const char *artifact_name(const char *, short *);
|
||||||
extern boolean exist_artifact(int, const char *);
|
extern boolean exist_artifact(int, const char *);
|
||||||
extern void artifact_exists(struct obj *, const char *, boolean);
|
extern void artifact_exists(struct obj *, const char *, boolean, boolean);
|
||||||
|
extern void found_artifact(int);
|
||||||
|
extern void find_artifact(struct obj *);
|
||||||
extern int nartifact_exist(void);
|
extern int nartifact_exist(void);
|
||||||
extern boolean arti_immune(struct obj *, int);
|
extern boolean arti_immune(struct obj *, int);
|
||||||
extern boolean spec_ability(struct obj *, unsigned long);
|
extern boolean spec_ability(struct obj *, unsigned long);
|
||||||
@@ -470,7 +472,7 @@ extern void new_oname(struct obj *, int);
|
|||||||
extern void free_oname(struct obj *);
|
extern void free_oname(struct obj *);
|
||||||
extern const char *safe_oname(struct obj *);
|
extern const char *safe_oname(struct obj *);
|
||||||
extern struct monst *christen_monst(struct monst *, const char *);
|
extern struct monst *christen_monst(struct monst *, const char *);
|
||||||
extern struct obj *oname(struct obj *, const char *);
|
extern struct obj *oname(struct obj *, const char *, unsigned);
|
||||||
extern boolean objtyp_is_callable(int);
|
extern boolean objtyp_is_callable(int);
|
||||||
extern int docallcmd(void);
|
extern int docallcmd(void);
|
||||||
extern void docall(struct obj *);
|
extern void docall(struct obj *);
|
||||||
|
|||||||
@@ -371,6 +371,11 @@ typedef struct sortloot_item Loot;
|
|||||||
#define BUCX_TYPES (BUC_ALLBKNOWN | BUC_UNKNOWN)
|
#define BUCX_TYPES (BUC_ALLBKNOWN | BUC_UNKNOWN)
|
||||||
#define ALL_TYPES_SELECTED -2
|
#define ALL_TYPES_SELECTED -2
|
||||||
|
|
||||||
|
/* Flags for oname() */
|
||||||
|
#define ONAME_NO_FLAGS 0U /* none of the below */
|
||||||
|
#define ONAME_VIA_NAMING 1U /* oname() is being called by do_oname() */
|
||||||
|
#define ONAME_FOUND_ARTI 2U /* if an artifact, hero becomes aware of it */
|
||||||
|
|
||||||
/* Flags to control find_mid() */
|
/* Flags to control find_mid() */
|
||||||
#define FM_FMON 0x01 /* search the fmon chain */
|
#define FM_FMON 0x01 /* search the fmon chain */
|
||||||
#define FM_MIGRATE 0x02 /* search the migrating monster chain */
|
#define FM_MIGRATE 0x02 /* search the migrating monster chain */
|
||||||
|
|||||||
+71
-28
@@ -39,6 +39,23 @@ static int count_surround_traps(int, int);
|
|||||||
of hit points that will fit in a 15 bit integer. */
|
of hit points that will fit in a 15 bit integer. */
|
||||||
#define FATAL_DAMAGE_MODIFIER 200
|
#define FATAL_DAMAGE_MODIFIER 200
|
||||||
|
|
||||||
|
/* artifact tracking */
|
||||||
|
struct arti_info {
|
||||||
|
Bitfield(exists, 1); /* True if corresponding artifact has been created */
|
||||||
|
Bitfield(found, 1); /* True if artifact is known by hero to exist */
|
||||||
|
};
|
||||||
|
/* array of flags tracking which artifacts exist, indexed by ART_xx;
|
||||||
|
ART_xx values are 1..N, element [0] isn't used */
|
||||||
|
static struct arti_info artiexist[1 + NROFARTIFACTS];
|
||||||
|
/* discovery list; for N discovered artifacts, the first N entries are ART_xx
|
||||||
|
values in discovery order, the remaining (NROFARTIFACTS-N) slots are 0 */
|
||||||
|
static xchar artidisco[NROFARTIFACTS];
|
||||||
|
/* note: artiexist[] and artidisco[] don't need to be in struct g; they
|
||||||
|
* get explicitly initialized at game start so don't need to be part of
|
||||||
|
* bulk re-init if game restart ever gets implemented. They are saved
|
||||||
|
* and restored but that is done through this file so they can be local.
|
||||||
|
*/
|
||||||
|
|
||||||
static void hack_artifacts(void);
|
static void hack_artifacts(void);
|
||||||
static boolean attacks(int, struct obj *);
|
static boolean attacks(int, struct obj *);
|
||||||
|
|
||||||
@@ -70,8 +87,8 @@ hack_artifacts(void)
|
|||||||
void
|
void
|
||||||
init_artifacts(void)
|
init_artifacts(void)
|
||||||
{
|
{
|
||||||
(void) memset((genericptr_t) g.artiexist, 0, sizeof g.artiexist);
|
(void) memset((genericptr_t) artiexist, 0, sizeof artiexist);
|
||||||
(void) memset((genericptr_t) g.artidisco, 0, sizeof g.artidisco);
|
(void) memset((genericptr_t) artidisco, 0, sizeof artidisco);
|
||||||
hack_artifacts();
|
hack_artifacts();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,8 +96,8 @@ void
|
|||||||
save_artifacts(NHFILE *nhfp)
|
save_artifacts(NHFILE *nhfp)
|
||||||
{
|
{
|
||||||
if (nhfp->structlevel) {
|
if (nhfp->structlevel) {
|
||||||
bwrite(nhfp->fd, (genericptr_t) g.artiexist, sizeof g.artiexist);
|
bwrite(nhfp->fd, (genericptr_t) artiexist, sizeof artiexist);
|
||||||
bwrite(nhfp->fd, (genericptr_t) g.artidisco, sizeof g.artidisco);
|
bwrite(nhfp->fd, (genericptr_t) artidisco, sizeof artidisco);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,8 +105,8 @@ void
|
|||||||
restore_artifacts(NHFILE *nhfp)
|
restore_artifacts(NHFILE *nhfp)
|
||||||
{
|
{
|
||||||
if (nhfp->structlevel) {
|
if (nhfp->structlevel) {
|
||||||
mread(nhfp->fd, (genericptr_t) g.artiexist, sizeof g.artiexist);
|
mread(nhfp->fd, (genericptr_t) artiexist, sizeof artiexist);
|
||||||
mread(nhfp->fd, (genericptr_t) g.artidisco, sizeof g.artidisco);
|
mread(nhfp->fd, (genericptr_t) artidisco, sizeof artidisco);
|
||||||
}
|
}
|
||||||
hack_artifacts(); /* redo non-saved special cases */
|
hack_artifacts(); /* redo non-saved special cases */
|
||||||
}
|
}
|
||||||
@@ -114,8 +131,9 @@ artiname(int artinum)
|
|||||||
for the 1st, ``obj = mk_artifact((struct obj *)0, some_alignment);''.
|
for the 1st, ``obj = mk_artifact((struct obj *)0, some_alignment);''.
|
||||||
*/
|
*/
|
||||||
struct obj *
|
struct obj *
|
||||||
mk_artifact(struct obj *otmp, /* existing object; ignored if alignment specified */
|
mk_artifact(
|
||||||
aligntyp alignment) /* target alignment, or A_NONE */
|
struct obj *otmp, /* existing object; ignored if alignment specified */
|
||||||
|
aligntyp alignment) /* target alignment, or A_NONE */
|
||||||
{
|
{
|
||||||
const struct artifact *a;
|
const struct artifact *a;
|
||||||
int m, n, altn;
|
int m, n, altn;
|
||||||
@@ -128,7 +146,7 @@ mk_artifact(struct obj *otmp, /* existing object; ignored if alignment specifi
|
|||||||
eligible[0] = 0; /* lint suppression */
|
eligible[0] = 0; /* lint suppression */
|
||||||
/* gather eligible artifacts */
|
/* gather eligible artifacts */
|
||||||
for (m = 1, a = &artilist[m]; a->otyp; a++, m++) {
|
for (m = 1, a = &artilist[m]; a->otyp; a++, m++) {
|
||||||
if (g.artiexist[m])
|
if (artiexist[m].exists)
|
||||||
continue;
|
continue;
|
||||||
if ((a->spfx & SPFX_NOGEN) || unique)
|
if ((a->spfx & SPFX_NOGEN) || unique)
|
||||||
continue;
|
continue;
|
||||||
@@ -186,9 +204,10 @@ mk_artifact(struct obj *otmp, /* existing object; ignored if alignment specifi
|
|||||||
otmp = mksobj((int) a->otyp, TRUE, FALSE);
|
otmp = mksobj((int) a->otyp, TRUE, FALSE);
|
||||||
|
|
||||||
if (otmp) {
|
if (otmp) {
|
||||||
otmp = oname(otmp, a->name);
|
otmp = oname(otmp, a->name, ONAME_NO_FLAGS);
|
||||||
otmp->oartifact = m;
|
otmp->oartifact = m;
|
||||||
g.artiexist[m] = TRUE;
|
artiexist[m].exists = 1;
|
||||||
|
artiexist[m].found = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* nothing appropriate could be found; return original object */
|
/* nothing appropriate could be found; return original object */
|
||||||
@@ -232,43 +251,66 @@ boolean
|
|||||||
exist_artifact(int otyp, const char *name)
|
exist_artifact(int otyp, const char *name)
|
||||||
{
|
{
|
||||||
register const struct artifact *a;
|
register const struct artifact *a;
|
||||||
boolean *arex;
|
struct arti_info *arex;
|
||||||
|
|
||||||
if (otyp && *name)
|
if (otyp && *name)
|
||||||
for (a = artilist + 1, arex = g.artiexist + 1; a->otyp; a++, arex++)
|
for (a = artilist + 1, arex = artiexist + 1; a->otyp; a++, arex++)
|
||||||
if ((int) a->otyp == otyp && !strcmp(a->name, name))
|
if ((int) a->otyp == otyp && !strcmp(a->name, name))
|
||||||
return *arex;
|
return arex->exists ? TRUE : FALSE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
artifact_exists(struct obj *otmp, const char *name, boolean mod)
|
artifact_exists(
|
||||||
|
struct obj *otmp,
|
||||||
|
const char *name,
|
||||||
|
boolean mod, /* True: exists, False: being uncreated */
|
||||||
|
boolean knwn) /* True: hero knows it exists */
|
||||||
{
|
{
|
||||||
register const struct artifact *a;
|
register const struct artifact *a;
|
||||||
|
|
||||||
if (otmp && *name)
|
if (otmp && *name)
|
||||||
for (a = artilist + 1; a->otyp; a++)
|
for (a = artilist + 1; a->otyp; a++)
|
||||||
if (a->otyp == otmp->otyp && !strcmp(a->name, name)) {
|
if (a->otyp == otmp->otyp && !strcmp(a->name, name)) {
|
||||||
register int m = (int) (a - artilist);
|
int m = (int) (a - artilist);
|
||||||
|
|
||||||
otmp->oartifact = (char) (mod ? m : 0);
|
otmp->oartifact = (char) (mod ? m : 0);
|
||||||
otmp->age = 0;
|
otmp->age = 0;
|
||||||
if (otmp->otyp == RIN_INCREASE_DAMAGE)
|
if (otmp->otyp == RIN_INCREASE_DAMAGE)
|
||||||
otmp->spe = 0;
|
otmp->spe = 0;
|
||||||
g.artiexist[m] = mod;
|
artiexist[m].exists = mod ? 1 : 0;
|
||||||
|
artiexist[m].found = (mod && knwn) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* make an artifact as 'found' */
|
||||||
|
void
|
||||||
|
found_artifact(int a)
|
||||||
|
{
|
||||||
|
artiexist[a].found = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if an artifact hasn't already been designated 'found', do that now */
|
||||||
|
void
|
||||||
|
find_artifact(struct obj *otmp)
|
||||||
|
{
|
||||||
|
int a = otmp->oartifact;
|
||||||
|
|
||||||
|
if (a && !artiexist[a].found) {
|
||||||
|
found_artifact(a); /* artiexist[a].found = 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
nartifact_exist(void)
|
nartifact_exist(void)
|
||||||
{
|
{
|
||||||
int a = 0;
|
int i, a = 0;
|
||||||
int n = SIZE(g.artiexist);
|
|
||||||
|
|
||||||
while (n > 1)
|
for (i = 1; i <= NROFARTIFACTS; ++i)
|
||||||
if (g.artiexist[--n])
|
if (artiexist[i].exists)
|
||||||
a++;
|
++a;
|
||||||
|
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
@@ -861,8 +903,9 @@ discover_artifact(xchar m)
|
|||||||
/* look for this artifact in the discoveries list;
|
/* look for this artifact in the discoveries list;
|
||||||
if we hit an empty slot then it's not present, so add it */
|
if we hit an empty slot then it's not present, so add it */
|
||||||
for (i = 0; i < NROFARTIFACTS; i++)
|
for (i = 0; i < NROFARTIFACTS; i++)
|
||||||
if (g.artidisco[i] == 0 || g.artidisco[i] == m) {
|
if (artidisco[i] == 0 || artidisco[i] == m) {
|
||||||
g.artidisco[i] = m;
|
artidisco[i] = m;
|
||||||
|
artiexist[i].found = 1; /* (we expect this to already be set) */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* there is one slot per artifact, so we should never reach the
|
/* there is one slot per artifact, so we should never reach the
|
||||||
@@ -879,9 +922,9 @@ undiscovered_artifact(xchar m)
|
|||||||
/* look for this artifact in the discoveries list;
|
/* look for this artifact in the discoveries list;
|
||||||
if we hit an empty slot then it's undiscovered */
|
if we hit an empty slot then it's undiscovered */
|
||||||
for (i = 0; i < NROFARTIFACTS; i++)
|
for (i = 0; i < NROFARTIFACTS; i++)
|
||||||
if (g.artidisco[i] == m)
|
if (artidisco[i] == m)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else if (g.artidisco[i] == 0)
|
else if (artidisco[i] == 0)
|
||||||
break;
|
break;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -894,14 +937,14 @@ disp_artifact_discoveries(winid tmpwin) /* supplied by dodiscover() */
|
|||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
|
|
||||||
for (i = 0; i < NROFARTIFACTS; i++) {
|
for (i = 0; i < NROFARTIFACTS; i++) {
|
||||||
if (g.artidisco[i] == 0)
|
if (artidisco[i] == 0)
|
||||||
break; /* empty slot implies end of list */
|
break; /* empty slot implies end of list */
|
||||||
if (tmpwin == WIN_ERR)
|
if (tmpwin == WIN_ERR)
|
||||||
continue; /* for WIN_ERR, we just count */
|
continue; /* for WIN_ERR, we just count */
|
||||||
|
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
putstr(tmpwin, iflags.menu_headings, "Artifacts");
|
putstr(tmpwin, iflags.menu_headings, "Artifacts");
|
||||||
m = g.artidisco[i];
|
m = artidisco[i];
|
||||||
otyp = artilist[m].otyp;
|
otyp = artilist[m].otyp;
|
||||||
Sprintf(buf, " %s [%s %s]", artiname(m),
|
Sprintf(buf, " %s [%s %s]", artiname(m),
|
||||||
align_str(artilist[m].alignment), simple_typename(otyp));
|
align_str(artilist[m].alignment), simple_typename(otyp));
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ resetobjs(struct obj *ochain, boolean restore)
|
|||||||
if (has_oname(otmp))
|
if (has_oname(otmp))
|
||||||
free_oname(otmp);
|
free_oname(otmp);
|
||||||
} else {
|
} else {
|
||||||
artifact_exists(otmp, safe_oname(otmp), TRUE);
|
artifact_exists(otmp, safe_oname(otmp), TRUE, FALSE);
|
||||||
}
|
}
|
||||||
} else if (has_oname(otmp)) {
|
} else if (has_oname(otmp)) {
|
||||||
sanitize_name(ONAME(otmp));
|
sanitize_name(ONAME(otmp));
|
||||||
|
|||||||
@@ -202,8 +202,6 @@ const struct instance_globals g_init = {
|
|||||||
|
|
||||||
/* artifact.c */
|
/* artifact.c */
|
||||||
0, /* spec_dbon_applies */
|
0, /* spec_dbon_applies */
|
||||||
UNDEFINED_VALUES, /* artiexist */
|
|
||||||
UNDEFINED_VALUES, /* artdisco */
|
|
||||||
0, /* mkot_trap_warn_count */
|
0, /* mkot_trap_warn_count */
|
||||||
|
|
||||||
/* botl.c */
|
/* botl.c */
|
||||||
@@ -352,7 +350,6 @@ const struct instance_globals g_init = {
|
|||||||
/* do_name.c */
|
/* do_name.c */
|
||||||
NULL, /* gloc_filter_map */
|
NULL, /* gloc_filter_map */
|
||||||
UNDEFINED_VALUE, /* gloc_filter_floodfill_match_glyph */
|
UNDEFINED_VALUE, /* gloc_filter_floodfill_match_glyph */
|
||||||
0, /* via_naming */
|
|
||||||
|
|
||||||
/* do_wear.c */
|
/* do_wear.c */
|
||||||
FALSE, /* initial_don */
|
FALSE, /* initial_don */
|
||||||
|
|||||||
+9
-9
@@ -1300,16 +1300,16 @@ do_oname(register struct obj *obj)
|
|||||||
a valid artifact name */
|
a valid artifact name */
|
||||||
u.uconduct.literate++;
|
u.uconduct.literate++;
|
||||||
}
|
}
|
||||||
++g.via_naming; /* This ought to be an argument rather than a static... */
|
obj = oname(obj, buf, ONAME_VIA_NAMING);
|
||||||
obj = oname(obj, buf);
|
|
||||||
--g.via_naming; /* ...but oname() is used in a lot of places, so defer. */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct obj *
|
struct obj *
|
||||||
oname(struct obj *obj, const char *name)
|
oname(struct obj *obj, const char *name, unsigned oflgs)
|
||||||
{
|
{
|
||||||
int lth;
|
int lth;
|
||||||
char buf[PL_PSIZ];
|
char buf[PL_PSIZ];
|
||||||
|
boolean via_naming = (oflgs & ONAME_VIA_NAMING) != 0,
|
||||||
|
found_arti = (oflgs & ONAME_FOUND_ARTI) != 0;
|
||||||
|
|
||||||
lth = *name ? (int) (strlen(name) + 1) : 0;
|
lth = *name ? (int) (strlen(name) + 1) : 0;
|
||||||
if (lth > PL_PSIZ) {
|
if (lth > PL_PSIZ) {
|
||||||
@@ -1318,9 +1318,9 @@ oname(struct obj *obj, const char *name)
|
|||||||
buf[PL_PSIZ - 1] = '\0';
|
buf[PL_PSIZ - 1] = '\0';
|
||||||
}
|
}
|
||||||
/* If named artifact exists in the game, do not create another.
|
/* If named artifact exists in the game, do not create another.
|
||||||
* Also trying to create an artifact shouldn't de-artifact
|
Also trying to create an artifact shouldn't de-artifact
|
||||||
* it (e.g. Excalibur from prayer). In this case the object
|
it (e.g. Excalibur from prayer). In this case the object
|
||||||
* will retain its current name. */
|
will retain its current name. */
|
||||||
if (obj->oartifact || (lth && exist_artifact(obj->otyp, name)))
|
if (obj->oartifact || (lth && exist_artifact(obj->otyp, name)))
|
||||||
return obj;
|
return obj;
|
||||||
|
|
||||||
@@ -1329,7 +1329,7 @@ oname(struct obj *obj, const char *name)
|
|||||||
Strcpy(ONAME(obj), name);
|
Strcpy(ONAME(obj), name);
|
||||||
|
|
||||||
if (lth)
|
if (lth)
|
||||||
artifact_exists(obj, name, TRUE);
|
artifact_exists(obj, name, TRUE, via_naming || found_arti);
|
||||||
if (obj->oartifact) {
|
if (obj->oartifact) {
|
||||||
/* can't dual-wield with artifact as secondary weapon */
|
/* can't dual-wield with artifact as secondary weapon */
|
||||||
if (obj == uswapwep)
|
if (obj == uswapwep)
|
||||||
@@ -1340,7 +1340,7 @@ oname(struct obj *obj, const char *name)
|
|||||||
/* if obj is owned by a shop, increase your bill */
|
/* if obj is owned by a shop, increase your bill */
|
||||||
if (obj->unpaid)
|
if (obj->unpaid)
|
||||||
alter_cost(obj, 0L);
|
alter_cost(obj, 0L);
|
||||||
if (g.via_naming) {
|
if (via_naming) {
|
||||||
/* violate illiteracy conduct since successfully wrote arti-name */
|
/* violate illiteracy conduct since successfully wrote arti-name */
|
||||||
if (!u.uconduct.literate++)
|
if (!u.uconduct.literate++)
|
||||||
livelog_printf(LL_CONDUCT | LL_ARTIFACT,
|
livelog_printf(LL_CONDUCT | LL_ARTIFACT,
|
||||||
|
|||||||
+11
-7
@@ -377,11 +377,12 @@ dipfountain(register struct obj *obj)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't grant Excalibur when there's more than one object. */
|
if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6)
|
||||||
/* (quantity could be > 1 if merged daggers got polymorphed) */
|
/* once upon a time it was possible to poly N daggers into N swords */
|
||||||
if (obj->otyp == LONG_SWORD && obj->quan == 1L && u.ulevel >= 5 && !rn2(6)
|
&& obj->quan == 1L && !obj->oartifact
|
||||||
&& !obj->oartifact
|
|
||||||
&& !exist_artifact(LONG_SWORD, artiname(ART_EXCALIBUR))) {
|
&& !exist_artifact(LONG_SWORD, artiname(ART_EXCALIBUR))) {
|
||||||
|
static const char lady[] = "Lady of the Lake";
|
||||||
|
|
||||||
if (u.ualign.type != A_LAWFUL) {
|
if (u.ualign.type != A_LAWFUL) {
|
||||||
/* Ha! Trying to cheat her. */
|
/* Ha! Trying to cheat her. */
|
||||||
pline("A freezing mist rises from the %s and envelopes the sword.",
|
pline("A freezing mist rises from the %s and envelopes the sword.",
|
||||||
@@ -392,20 +393,23 @@ dipfountain(register struct obj *obj)
|
|||||||
obj->spe--;
|
obj->spe--;
|
||||||
obj->oerodeproof = FALSE;
|
obj->oerodeproof = FALSE;
|
||||||
exercise(A_WIS, FALSE);
|
exercise(A_WIS, FALSE);
|
||||||
livelog_printf(LL_ARTIFACT, "was denied Excalibur! The Lady of the Lake has deemed %s unworthy", uhim());
|
livelog_printf(LL_ARTIFACT,
|
||||||
|
"was denied %s! The %s has deemed %s unworthy",
|
||||||
|
artiname(ART_EXCALIBUR), lady, uhim());
|
||||||
} else {
|
} else {
|
||||||
/* The lady of the lake acts! - Eric Backus */
|
/* The lady of the lake acts! - Eric Backus */
|
||||||
/* Be *REAL* nice */
|
/* Be *REAL* nice */
|
||||||
pline(
|
pline(
|
||||||
"From the murky depths, a hand reaches up to bless the sword.");
|
"From the murky depths, a hand reaches up to bless the sword.");
|
||||||
pline("As the hand retreats, the fountain disappears!");
|
pline("As the hand retreats, the fountain disappears!");
|
||||||
obj = oname(obj, artiname(ART_EXCALIBUR));
|
obj = oname(obj, artiname(ART_EXCALIBUR), ONAME_FOUND_ARTI);
|
||||||
discover_artifact(ART_EXCALIBUR);
|
discover_artifact(ART_EXCALIBUR);
|
||||||
bless(obj);
|
bless(obj);
|
||||||
obj->oeroded = obj->oeroded2 = 0;
|
obj->oeroded = obj->oeroded2 = 0;
|
||||||
obj->oerodeproof = TRUE;
|
obj->oerodeproof = TRUE;
|
||||||
exercise(A_WIS, TRUE);
|
exercise(A_WIS, TRUE);
|
||||||
livelog_printf(LL_ARTIFACT, "was given Excalibur");
|
livelog_printf(LL_ARTIFACT, "was given %s by the %s",
|
||||||
|
artiname(ART_EXCALIBUR), lady);
|
||||||
}
|
}
|
||||||
update_inventory();
|
update_inventory();
|
||||||
levl[u.ux][u.uy].typ = ROOM, levl[u.ux][u.uy].flags = 0;
|
levl[u.ux][u.uy].typ = ROOM, levl[u.ux][u.uy].flags = 0;
|
||||||
|
|||||||
@@ -2311,6 +2311,9 @@ record_achievement(schar achidx)
|
|||||||
? g.context.achieveo.soko_prize_otyp
|
? g.context.achieveo.soko_prize_otyp
|
||||||
: g.context.achieveo.mines_prize_otyp);
|
: g.context.achieveo.mines_prize_otyp);
|
||||||
|
|
||||||
|
/* note: OBJ_NAME() works here because both "bag of holding" and
|
||||||
|
"amulet of reflection" are fully named in their objects[] entry
|
||||||
|
but that's not true in the general case */
|
||||||
livelog_printf(achieve_msg[achidx].llflag, "%s %s",
|
livelog_printf(achieve_msg[achidx].llflag, "%s %s",
|
||||||
achieve_msg[achidx].msg, OBJ_NAME(objects[otyp]));
|
achieve_msg[achidx].msg, OBJ_NAME(objects[otyp]));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+1
-1
@@ -715,7 +715,7 @@ merged(struct obj **potmp, struct obj **pobj)
|
|||||||
else if (!Is_pudding(otmp))
|
else if (!Is_pudding(otmp))
|
||||||
otmp->owt += obj->owt;
|
otmp->owt += obj->owt;
|
||||||
if (!has_oname(otmp) && has_oname(obj))
|
if (!has_oname(otmp) && has_oname(obj))
|
||||||
otmp = *potmp = oname(otmp, ONAME(obj));
|
otmp = *potmp = oname(otmp, ONAME(obj), ONAME_NO_FLAGS);
|
||||||
obj_extract_self(obj);
|
obj_extract_self(obj);
|
||||||
|
|
||||||
if (obj->pickup_prev && otmp->where == OBJ_INVENT)
|
if (obj->pickup_prev && otmp->where == OBJ_INVENT)
|
||||||
|
|||||||
+1
-1
@@ -409,7 +409,7 @@ newmail(struct mail_info *info)
|
|||||||
struct obj *obj = mksobj(SCR_MAIL, FALSE, FALSE);
|
struct obj *obj = mksobj(SCR_MAIL, FALSE, FALSE);
|
||||||
|
|
||||||
if (info->object_nam)
|
if (info->object_nam)
|
||||||
obj = oname(obj, info->object_nam);
|
obj = oname(obj, info->object_nam, ONAME_NO_FLAGS);
|
||||||
if (info->response_cmd)
|
if (info->response_cmd)
|
||||||
new_omailcmd(obj, info->response_cmd);
|
new_omailcmd(obj, info->response_cmd);
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -326,7 +326,8 @@ m_initweap(register struct monst *mtmp)
|
|||||||
/* maybe make it special */
|
/* maybe make it special */
|
||||||
if (!rn2(20) || is_lord(ptr))
|
if (!rn2(20) || is_lord(ptr))
|
||||||
otmp = oname(otmp,
|
otmp = oname(otmp,
|
||||||
artiname(rn2(2) ? ART_DEMONBANE : ART_SUNSWORD));
|
artiname(rn2(2) ? ART_DEMONBANE : ART_SUNSWORD),
|
||||||
|
ONAME_NO_FLAGS);
|
||||||
bless(otmp);
|
bless(otmp);
|
||||||
otmp->oerodeproof = TRUE;
|
otmp->oerodeproof = TRUE;
|
||||||
otmp->spe = rn2(4);
|
otmp->spe = rn2(4);
|
||||||
|
|||||||
+4
-4
@@ -352,7 +352,7 @@ copy_oextra(struct obj *obj2, struct obj *obj1)
|
|||||||
if (!obj2->oextra)
|
if (!obj2->oextra)
|
||||||
obj2->oextra = newoextra();
|
obj2->oextra = newoextra();
|
||||||
if (has_oname(obj1))
|
if (has_oname(obj1))
|
||||||
oname(obj2, ONAME(obj1));
|
oname(obj2, ONAME(obj1), ONAME_NO_FLAGS);
|
||||||
if (has_omonst(obj1)) {
|
if (has_omonst(obj1)) {
|
||||||
if (!OMONST(obj2))
|
if (!OMONST(obj2))
|
||||||
newomonst(obj2);
|
newomonst(obj2);
|
||||||
@@ -1127,7 +1127,7 @@ mksobj(int otyp, boolean init, boolean artif)
|
|||||||
break;
|
break;
|
||||||
case SPE_NOVEL:
|
case SPE_NOVEL:
|
||||||
otmp->novelidx = -1; /* "none of the above"; will be changed */
|
otmp->novelidx = -1; /* "none of the above"; will be changed */
|
||||||
otmp = oname(otmp, noveltitle(&otmp->novelidx));
|
otmp = oname(otmp, noveltitle(&otmp->novelidx), ONAME_NO_FLAGS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2044,7 +2044,7 @@ mk_named_object(
|
|||||||
|
|
||||||
otmp = mkcorpstat(objtype, (struct monst *) 0, ptr, x, y, corpstatflags);
|
otmp = mkcorpstat(objtype, (struct monst *) 0, ptr, x, y, corpstatflags);
|
||||||
if (nm)
|
if (nm)
|
||||||
otmp = oname(otmp, nm);
|
otmp = oname(otmp, nm, ONAME_NO_FLAGS);
|
||||||
return otmp;
|
return otmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2280,7 +2280,7 @@ discard_minvent(struct monst *mtmp, boolean uncreate_artifacts)
|
|||||||
/* this has now become very similar to m_useupall()... */
|
/* this has now become very similar to m_useupall()... */
|
||||||
extract_from_minvent(mtmp, otmp, TRUE, TRUE);
|
extract_from_minvent(mtmp, otmp, TRUE, TRUE);
|
||||||
if (uncreate_artifacts && otmp->oartifact)
|
if (uncreate_artifacts && otmp->oartifact)
|
||||||
artifact_exists(otmp, safe_oname(otmp), FALSE);
|
artifact_exists(otmp, safe_oname(otmp), FALSE, FALSE);
|
||||||
obfree(otmp, (struct obj *) 0); /* dealloc_obj() isn't sufficient */
|
obfree(otmp, (struct obj *) 0); /* dealloc_obj() isn't sufficient */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -678,7 +678,7 @@ make_corpse(struct monst *mtmp, unsigned int corpseflags)
|
|||||||
bypass_obj(obj);
|
bypass_obj(obj);
|
||||||
|
|
||||||
if (has_mgivenname(mtmp))
|
if (has_mgivenname(mtmp))
|
||||||
obj = oname(obj, MGIVENNAME(mtmp));
|
obj = oname(obj, MGIVENNAME(mtmp), ONAME_NO_FLAGS);
|
||||||
|
|
||||||
/* Avoid "It was hidden under a green mold corpse!"
|
/* Avoid "It was hidden under a green mold corpse!"
|
||||||
* during Blind combat. An unseen monster referred to as "it"
|
* during Blind combat. An unseen monster referred to as "it"
|
||||||
@@ -1514,7 +1514,7 @@ mpickgold(register struct monst* mtmp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
mpickstuff(register struct monst* mtmp, register const char* str)
|
mpickstuff(struct monst *mtmp, const char *str)
|
||||||
{
|
{
|
||||||
register struct obj *otmp, *otmp2, *otmp3;
|
register struct obj *otmp, *otmp2, *otmp3;
|
||||||
int carryamt = 0;
|
int carryamt = 0;
|
||||||
@@ -1552,11 +1552,14 @@ mpickstuff(register struct monst* mtmp, register const char* str)
|
|||||||
if (carryamt != otmp->quan) {
|
if (carryamt != otmp->quan) {
|
||||||
otmp3 = splitobj(otmp, carryamt);
|
otmp3 = splitobj(otmp, carryamt);
|
||||||
}
|
}
|
||||||
if (cansee(mtmp->mx, mtmp->my) && flags.verbose)
|
if (cansee(mtmp->mx, mtmp->my)) {
|
||||||
pline("%s picks up %s.", Monnam(mtmp),
|
if (flags.verbose)
|
||||||
(distu(mtmp->mx, mtmp->my) <= 5)
|
/* see 'otmp3' "up close" if within a knight's jump */
|
||||||
? doname(otmp3)
|
pline("%s picks up %s.", Monnam(mtmp),
|
||||||
: distant_name(otmp3, doname));
|
((distu(mtmp->mx, mtmp->my) <= 5)
|
||||||
|
? doname(otmp3)
|
||||||
|
: distant_name(otmp3, doname)));
|
||||||
|
}
|
||||||
obj_extract_self(otmp3); /* remove from floor */
|
obj_extract_self(otmp3); /* remove from floor */
|
||||||
(void) mpickobj(mtmp, otmp3); /* may merge and free otmp3 */
|
(void) mpickobj(mtmp, otmp3); /* may merge and free otmp3 */
|
||||||
m_dowear(mtmp, FALSE);
|
m_dowear(mtmp, FALSE);
|
||||||
@@ -2793,7 +2796,7 @@ monstone(struct monst* mdef)
|
|||||||
corpstatflags |= CORPSTAT_HISTORIC;
|
corpstatflags |= CORPSTAT_HISTORIC;
|
||||||
otmp = mkcorpstat(STATUE, mdef, mdef->data, x, y, corpstatflags);
|
otmp = mkcorpstat(STATUE, mdef, mdef->data, x, y, corpstatflags);
|
||||||
if (has_mgivenname(mdef))
|
if (has_mgivenname(mdef))
|
||||||
otmp = oname(otmp, MGIVENNAME(mdef));
|
otmp = oname(otmp, MGIVENNAME(mdef), ONAME_NO_FLAGS);
|
||||||
while ((obj = oldminvent) != 0) {
|
while ((obj = oldminvent) != 0) {
|
||||||
oldminvent = obj->nobj;
|
oldminvent = obj->nobj;
|
||||||
obj->nobj = 0; /* avoid merged-> obfree-> dealloc_obj-> panic */
|
obj->nobj = 0; /* avoid merged-> obfree-> dealloc_obj-> panic */
|
||||||
@@ -3038,7 +3041,7 @@ xkilled(
|
|||||||
/* oc_big is also oc_bimanual and oc_bulky */
|
/* oc_big is also oc_bimanual and oc_bulky */
|
||||||
&& (otmp->owt > 30 || objects[otyp].oc_big)) {
|
&& (otmp->owt > 30 || objects[otyp].oc_big)) {
|
||||||
if (otmp->oartifact)
|
if (otmp->oartifact)
|
||||||
artifact_exists(otmp, safe_oname(otmp), FALSE);
|
artifact_exists(otmp, safe_oname(otmp), FALSE, FALSE);
|
||||||
delobj(otmp);
|
delobj(otmp);
|
||||||
} else if (!flooreffects(otmp, x, y, nomsg ? "" : "fall")) {
|
} else if (!flooreffects(otmp, x, y, nomsg ? "" : "fall")) {
|
||||||
place_object(otmp, x, y);
|
place_object(otmp, x, y);
|
||||||
|
|||||||
+2
-2
@@ -4787,7 +4787,7 @@ readobjnam(char *bp, struct obj *no_wish)
|
|||||||
d.name = novelname;
|
d.name = novelname;
|
||||||
}
|
}
|
||||||
|
|
||||||
d.otmp = oname(d.otmp, d.name);
|
d.otmp = oname(d.otmp, d.name, ONAME_NO_FLAGS);
|
||||||
/* name==aname => wished for artifact (otmp->oartifact => got it) */
|
/* name==aname => wished for artifact (otmp->oartifact => got it) */
|
||||||
if (d.otmp->oartifact || d.name == aname) {
|
if (d.otmp->oartifact || d.name == aname) {
|
||||||
d.otmp->quan = 1L;
|
d.otmp->quan = 1L;
|
||||||
@@ -4799,7 +4799,7 @@ readobjnam(char *bp, struct obj *no_wish)
|
|||||||
/* and make them pay; charge them for the wish anyway! */
|
/* and make them pay; charge them for the wish anyway! */
|
||||||
if ((is_quest_artifact(d.otmp)
|
if ((is_quest_artifact(d.otmp)
|
||||||
|| (d.otmp->oartifact && rn2(nartifact_exist()) > 1)) && !wizard) {
|
|| (d.otmp->oartifact && rn2(nartifact_exist()) > 1)) && !wizard) {
|
||||||
artifact_exists(d.otmp, safe_oname(d.otmp), FALSE);
|
artifact_exists(d.otmp, safe_oname(d.otmp), FALSE, FALSE);
|
||||||
obfree(d.otmp, (struct obj *) 0);
|
obfree(d.otmp, (struct obj *) 0);
|
||||||
d.otmp = (struct obj *) &cg.zeroobj;
|
d.otmp = (struct obj *) &cg.zeroobj;
|
||||||
pline("For a moment, you feel %s in your %s, but it disappears!",
|
pline("For a moment, you feel %s in your %s, but it disappears!",
|
||||||
|
|||||||
+1
-1
@@ -2609,7 +2609,7 @@ observe_quantum_cat(struct obj *box, boolean makecat, boolean givemsg)
|
|||||||
now rather than from when this special corpse got created */
|
now rather than from when this special corpse got created */
|
||||||
deadcat->age = g.moves;
|
deadcat->age = g.moves;
|
||||||
set_corpsenm(deadcat, PM_HOUSECAT);
|
set_corpsenm(deadcat, PM_HOUSECAT);
|
||||||
deadcat = oname(deadcat, sc);
|
deadcat = oname(deadcat, sc, ONAME_NO_FLAGS);
|
||||||
}
|
}
|
||||||
if (givemsg)
|
if (givemsg)
|
||||||
pline_The("%s inside the box is dead!",
|
pline_The("%s inside the box is dead!",
|
||||||
|
|||||||
+5
-5
@@ -852,7 +852,7 @@ gcrownu(void)
|
|||||||
Strcpy(lbuf, simpleonames(obj)); /* before transformation */
|
Strcpy(lbuf, simpleonames(obj)); /* before transformation */
|
||||||
if (!Blind)
|
if (!Blind)
|
||||||
Your("sword shines brightly for a moment.");
|
Your("sword shines brightly for a moment.");
|
||||||
obj = oname(obj, artiname(ART_EXCALIBUR));
|
obj = oname(obj, artiname(ART_EXCALIBUR), ONAME_FOUND_ARTI);
|
||||||
if (obj && obj->oartifact == ART_EXCALIBUR) {
|
if (obj && obj->oartifact == ART_EXCALIBUR) {
|
||||||
u.ugifts++;
|
u.ugifts++;
|
||||||
livelog_printf(LL_DIVINEGIFT | LL_ARTIFACT,
|
livelog_printf(LL_DIVINEGIFT | LL_ARTIFACT,
|
||||||
@@ -870,10 +870,10 @@ gcrownu(void)
|
|||||||
; /* already got bonus above */
|
; /* already got bonus above */
|
||||||
} else if (obj && in_hand) {
|
} else if (obj && in_hand) {
|
||||||
Your("%s goes snicker-snack!", xname(obj));
|
Your("%s goes snicker-snack!", xname(obj));
|
||||||
obj->dknown = TRUE;
|
obj->dknown = 1;
|
||||||
} else if (!already_exists) {
|
} else if (!already_exists) {
|
||||||
obj = mksobj(LONG_SWORD, FALSE, FALSE);
|
obj = mksobj(LONG_SWORD, FALSE, FALSE);
|
||||||
obj = oname(obj, artiname(ART_VORPAL_BLADE));
|
obj = oname(obj, artiname(ART_VORPAL_BLADE), ONAME_FOUND_ARTI);
|
||||||
obj->spe = 1;
|
obj->spe = 1;
|
||||||
at_your_feet("A sword");
|
at_your_feet("A sword");
|
||||||
dropy(obj);
|
dropy(obj);
|
||||||
@@ -894,10 +894,10 @@ gcrownu(void)
|
|||||||
; /* already got bonus above */
|
; /* already got bonus above */
|
||||||
} else if (obj && in_hand) {
|
} else if (obj && in_hand) {
|
||||||
Your("%s hums ominously!", swordbuf);
|
Your("%s hums ominously!", swordbuf);
|
||||||
obj->dknown = TRUE;
|
obj->dknown = 1;
|
||||||
} else if (!already_exists) {
|
} else if (!already_exists) {
|
||||||
obj = mksobj(RUNESWORD, FALSE, FALSE);
|
obj = mksobj(RUNESWORD, FALSE, FALSE);
|
||||||
obj = oname(obj, artiname(ART_STORMBRINGER));
|
obj = oname(obj, artiname(ART_STORMBRINGER), ONAME_FOUND_ARTI);
|
||||||
obj->spe = 1;
|
obj->spe = 1;
|
||||||
at_your_feet(An(swordbuf));
|
at_your_feet(An(swordbuf));
|
||||||
dropy(obj);
|
dropy(obj);
|
||||||
|
|||||||
+2
-2
@@ -2152,7 +2152,7 @@ create_object(object* o, struct mkroom* croom)
|
|||||||
/* set_corpsenm() took care of egg hatch and corpse timers */
|
/* set_corpsenm() took care of egg hatch and corpse timers */
|
||||||
|
|
||||||
if (named) {
|
if (named) {
|
||||||
otmp = oname(otmp, o->name.str);
|
otmp = oname(otmp, o->name.str, ONAME_NO_FLAGS);
|
||||||
if (otmp->otyp == SPE_NOVEL) {
|
if (otmp->otyp == SPE_NOVEL) {
|
||||||
/* needs to be an existing title */
|
/* needs to be an existing title */
|
||||||
(void) lookup_novel(o->name.str, &otmp->novelidx);
|
(void) lookup_novel(o->name.str, &otmp->novelidx);
|
||||||
@@ -2215,7 +2215,7 @@ create_object(object* o, struct mkroom* croom)
|
|||||||
} else {
|
} else {
|
||||||
obj_extract_self(otmp);
|
obj_extract_self(otmp);
|
||||||
if (otmp->oartifact)
|
if (otmp->oartifact)
|
||||||
artifact_exists(otmp, safe_oname(otmp), FALSE);
|
artifact_exists(otmp, safe_oname(otmp), FALSE, FALSE);
|
||||||
obfree(otmp, NULL);
|
obfree(otmp, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -492,7 +492,7 @@ steal(struct monst* mtmp, char* objnambuf)
|
|||||||
|
|
||||||
/* Returns 1 if otmp is free'd, 0 otherwise. */
|
/* Returns 1 if otmp is free'd, 0 otherwise. */
|
||||||
int
|
int
|
||||||
mpickobj(register struct monst* mtmp, register struct obj* otmp)
|
mpickobj(struct monst *mtmp, struct obj *otmp)
|
||||||
{
|
{
|
||||||
int freed_otmp;
|
int freed_otmp;
|
||||||
boolean snuff_otmp = FALSE;
|
boolean snuff_otmp = FALSE;
|
||||||
@@ -706,7 +706,7 @@ mdrop_obj(
|
|||||||
even leaving the game entirely; when that happens, prevent them from
|
even leaving the game entirely; when that happens, prevent them from
|
||||||
taking the Amulet, invocation items, or quest artifact with them */
|
taking the Amulet, invocation items, or quest artifact with them */
|
||||||
void
|
void
|
||||||
mdrop_special_objs(struct monst* mon)
|
mdrop_special_objs(struct monst *mon)
|
||||||
{
|
{
|
||||||
struct obj *obj, *otmp;
|
struct obj *obj, *otmp;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1364,7 +1364,7 @@ tt_oname(struct obj* otmp)
|
|||||||
otmp->spe = CORPSTAT_FEMALE;
|
otmp->spe = CORPSTAT_FEMALE;
|
||||||
else if (tt->plgend[0] == 'M')
|
else if (tt->plgend[0] == 'M')
|
||||||
otmp->spe = CORPSTAT_MALE;
|
otmp->spe = CORPSTAT_MALE;
|
||||||
otmp = oname(otmp, tt->name);
|
otmp = oname(otmp, tt->name, ONAME_NO_FLAGS);
|
||||||
|
|
||||||
return otmp;
|
return otmp;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user