From d7f107eaf953754b7ba98a76f81cadac90d1db18 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 19 Mar 2025 17:30:56 -0700 Subject: [PATCH] still more 'nethack --dumpweights' After updating the --dumpweights code in hack.c to insert "pair of" for gloves and boots and "set of" for dragon scales, I've switched it to use simple_typename() instead. Turns out that that routine also lacked handling for 'pair|set of'. And it was generating "coin of gold piece". Fix those. Roughly half of the gems are "" and the others " stone", so the --dumpweights output is different by more than just pair/set. --- src/hack.c | 16 +++------------- src/objnam.c | 15 +++++++++++---- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/hack.c b/src/hack.c index 878c93f1c..af9d392c5 100644 --- a/src/hack.c +++ b/src/hack.c @@ -4349,25 +4349,15 @@ dump_weights(void) for (i = 0; i < ocount; ++i) { const char *oc_name = (i == SLIME_MOLD) ? "slime mold" : obj_descr[i].oc_name; - int wt = (int) objects[i].oc_weight, - ocls = objects[i].oc_class; + int wt = (int) objects[i].oc_weight; if (wt && oc_name) { weightlist[cnt].idx = i; weightlist[cnt].wt = wt; weightlist[cnt].wtyp = 2; weightlist[cnt].unique = (objects[i].oc_unique != 0); - Snprintf(nmbufbase, sizeof nmbufbase, "%s%s", - (ocls == POTION_CLASS) ? "potion of " - : (ocls == WAND_CLASS) ? "wand of " - : (ocls == SCROLL_CLASS) ? "scroll of " - : (ocls == RING_CLASS) ? "ring of " - : (ocls == SPBOOK_CLASS - && objects[i].oc_name_idx != SPE_BOOK_OF_THE_DEAD - && objects[i].oc_name_idx != SPE_NOVEL) - ? "spellbook of " - : "", - oc_name); + objects[i].oc_name_known = 1; + Strcpy(nmbufbase, simple_typename(i)); Snprintf(nmbuf, sizeof nmbuf, "%07u%s", wt, (weightlist[cnt].unique) ? the(nmbufbase) : an(nmbufbase)); diff --git a/src/objnam.c b/src/objnam.c index d3ce48ffb..334e383dd 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -220,8 +220,7 @@ obj_typename(int otyp) buf[0] = '\0'; /* redundant */ switch (ocl->oc_class) { case COIN_CLASS: - Strcpy(buf, "coin"); - break; + return strcpy(buf, actualn); /* "gold piece" */ case POTION_CLASS: Strcpy(buf, "potion"); break; @@ -252,9 +251,17 @@ obj_typename(int otyp) if (dn) Sprintf(eos(buf), " (%s)", dn); return buf; + case ARMOR_CLASS: + if (objects[otyp].oc_armcat == ARM_GLOVES + || objects[otyp].oc_armcat == ARM_BOOTS) + Strcpy(buf, "pair of "); + else if (otyp >= GRAY_DRAGON_SCALES && otyp <= YELLOW_DRAGON_SCALES) + Strcpy(buf, "set of "); + FALLTHROUGH; + /*FALLTHRU*/ default: if (nn) { - Strcpy(buf, actualn); + Strcat(buf, actualn); if (GemStone(otyp)) Strcat(buf, " stone"); if (un) /* 3: length of " (" + ")" which will enclose 'dn' */ @@ -262,7 +269,7 @@ obj_typename(int otyp) if (dn) Sprintf(eos(buf), " (%s)", dn); } else { - Strcpy(buf, dn ? dn : actualn); + Strcat(buf, dn ? dn : actualn); if (ocl->oc_class == GEM_CLASS) Strcat(buf, (ocl->oc_material == MINERAL) ? " stone" : " gem");