refine PR #946 - named armor

Move the new stuff from PR #946 out of xname() into new routine
armor_simple_name().

Noticed while testing:  tweak 'call object type' so that it doesn't
list instances of pre-discovered armor as likely candidates since
assigning a name to such wasn't showing up in the discoveries list.

Add "silver shield" as wishing synonym for "polished silver shield".
This commit is contained in:
PatR
2022-12-14 07:37:04 -08:00
parent 099e2f3d05
commit daeec9291c
4 changed files with 58 additions and 29 deletions
+2
View File
@@ -1906,6 +1906,7 @@ extern void savenames(NHFILE *);
extern void restnames(NHFILE *); extern void restnames(NHFILE *);
extern void discover_object(int, boolean, boolean); extern void discover_object(int, boolean, boolean);
extern void undiscover_object(int); extern void undiscover_object(int);
extern boolean interesting_to_discover(int);
extern int choose_disco_sort(int); extern int choose_disco_sort(int);
extern int dodiscovered(void); extern int dodiscovered(void);
extern int doclassdisco(void); extern int doclassdisco(void);
@@ -1968,6 +1969,7 @@ extern char *makeplural(const char *);
extern char *makesingular(const char *); extern char *makesingular(const char *);
extern struct obj *readobjnam(char *, struct obj *); extern struct obj *readobjnam(char *, struct obj *);
extern int rnd_class(int, int); extern int rnd_class(int, int);
extern const char *armor_simple_name(struct obj *);
extern const char *suit_simple_name(struct obj *); extern const char *suit_simple_name(struct obj *);
extern const char *cloak_simple_name(struct obj *); extern const char *cloak_simple_name(struct obj *);
extern const char *helm_simple_name(struct obj *); extern const char *helm_simple_name(struct obj *);
+3
View File
@@ -1489,6 +1489,9 @@ call_ok(struct obj *obj)
if (!obj || !objtyp_is_callable(obj->otyp)) if (!obj || !objtyp_is_callable(obj->otyp))
return GETOBJ_EXCLUDE; return GETOBJ_EXCLUDE;
if (!interesting_to_discover(obj->otyp))
return GETOBJ_DOWNPLAY;
return GETOBJ_SUGGEST; return GETOBJ_SUGGEST;
} }
+4 -4
View File
@@ -8,7 +8,6 @@
static void setgemprobs(d_level *); static void setgemprobs(d_level *);
static void shuffle(int, int, boolean); static void shuffle(int, int, boolean);
static void shuffle_all(void); static void shuffle_all(void);
static boolean interesting_to_discover(int);
static int QSORTCALLBACK discovered_cmp(const genericptr, const genericptr); static int QSORTCALLBACK discovered_cmp(const genericptr, const genericptr);
static char *oclass_to_name(char, char *); static char *oclass_to_name(char, char *);
@@ -447,8 +446,9 @@ undiscover_object(int oindx)
register boolean found = FALSE; register boolean found = FALSE;
/* find the object; shift those behind it forward one slot */ /* find the object; shift those behind it forward one slot */
for (dindx = gb.bases[acls]; dindx < NUM_OBJECTS && gd.disco[dindx] != 0 for (dindx = gb.bases[acls];
&& objects[dindx].oc_class == acls; dindx < NUM_OBJECTS && gd.disco[dindx] != 0
&& objects[dindx].oc_class == acls;
dindx++) dindx++)
if (found) if (found)
gd.disco[dindx - 1] = gd.disco[dindx]; gd.disco[dindx - 1] = gd.disco[dindx];
@@ -467,7 +467,7 @@ undiscover_object(int oindx)
} }
} }
static boolean boolean
interesting_to_discover(int i) interesting_to_discover(int i)
{ {
/* Pre-discovered objects are now printed with a '*' */ /* Pre-discovered objects are now printed with a '*' */
+49 -25
View File
@@ -621,34 +621,21 @@ xname_flags(
if (is_boots(obj) || is_gloves(obj)) if (is_boots(obj) || is_gloves(obj))
Strcpy(buf, "pair of "); Strcpy(buf, "pair of ");
if (obj->otyp >= ELVEN_SHIELD && obj->otyp <= ORCISH_SHIELD if (!dknown) {
&& !dknown) { if (obj->otyp >= ELVEN_SHIELD && obj->otyp <= ORCISH_SHIELD) {
Strcpy(buf, "shield"); Strcpy(buf, "shield");
break; break;
} } else if (obj->otyp == SHIELD_OF_REFLECTION) {
if (obj->otyp == SHIELD_OF_REFLECTION && !dknown) { Strcpy(buf, "smooth shield");
Strcpy(buf, "smooth shield"); break;
break; }
} }
if (nn) { if (nn)
Strcat(buf, actualn); Strcat(buf, actualn);
} else if (un) { else if (un)
if (is_boots(obj)) Sprintf(eos(buf), "%s called %s", armor_simple_name(obj), un);
Strcat(buf, boots_simple_name(obj)); else
else if (is_gloves(obj))
Strcat(buf, gloves_simple_name(obj));
else if (is_cloak(obj))
Strcpy(buf, cloak_simple_name(obj));
else if (is_helmet(obj))
Strcpy(buf, helm_simple_name(obj));
else if (is_shield(obj))
Strcpy(buf, shield_simple_name(obj));
else
Strcpy(buf, "armor");
Strcat(buf, " called ");
Strcat(buf, un);
} else
Strcat(buf, dn); Strcat(buf, dn);
break; break;
case FOOD_CLASS: case FOOD_CLASS:
@@ -3071,6 +3058,7 @@ static const struct alt_spellings {
{ "gauntlets of ogre power", GAUNTLETS_OF_POWER }, { "gauntlets of ogre power", GAUNTLETS_OF_POWER },
{ "gauntlets of giant strength", GAUNTLETS_OF_POWER }, { "gauntlets of giant strength", GAUNTLETS_OF_POWER },
{ "elven chain mail", ELVEN_MITHRIL_COAT }, { "elven chain mail", ELVEN_MITHRIL_COAT },
{ "silver shield", SHIELD_OF_REFLECTION },
{ "potion of sleep", POT_SLEEPING }, { "potion of sleep", POT_SLEEPING },
{ "scroll of recharging", SCR_CHARGING }, { "scroll of recharging", SCR_CHARGING },
{ "recharging", SCR_CHARGING }, { "recharging", SCR_CHARGING },
@@ -4981,6 +4969,42 @@ Japanese_item_name(int i)
return (const char *) 0; return (const char *) 0;
} }
const char *
armor_simple_name(struct obj *armor)
{
const char *result = 0;
unsigned armcat = objects[armor->otyp].oc_armcat;
switch (armcat) {
case ARM_SUIT:
result = suit_simple_name(armor);
break;
case ARM_CLOAK:
result = cloak_simple_name(armor);
break;
case ARM_HELM:
result = helm_simple_name(armor);
break;
case ARM_GLOVES:
result = gloves_simple_name(armor);
break;
case ARM_BOOTS:
result = boots_simple_name(armor);
break;
case ARM_SHIELD:
result = shield_simple_name(armor);
break;
case ARM_SHIRT:
result = shirt_simple_name(armor);
break;
default:
result = simpleonames(armor);
impossible("unknown armor category (%s => %u)", result, armcat);
break;
}
return result;
}
const char * const char *
suit_simple_name(struct obj *suit) suit_simple_name(struct obj *suit)
{ {