]> granicus.if.org Git - nethack/commitdiff
hats vs helms
authornethack.rankin <nethack.rankin>
Sat, 13 Nov 2004 04:00:52 +0000 (04:00 +0000)
committernethack.rankin <nethack.rankin>
Sat, 13 Nov 2004 04:00:52 +0000 (04:00 +0000)
     Something from <Someone>'s list:  some messages have hardcoded references
to "helmet" which sound strange when the character is wearing a hat or cap.
helm_simple_name() is comparable to the existing cloak_simple_name().  It
returns "helm" or "hat" depending upon whether the helmet provides the
same protection that yields the assorted repetitions of "fortunately,
you are wearing a hard helmet".  This choice ends up categorizing elven
leather helm as a hat (which I think is ok given that its undiscovered
description is "leather hat"), contrary to <Someone>'s suggestion that the
distinction be made based on whether the helmet was made of cloth.

     I started on this a year and a half ago but didn't commit it.
Unfortunately I don't remember why and haven't done any significant
additional work now--just recovered from some intervening bit rot and
confirmed that the patch as is seems to be working ok (in the trunk; the
branch side has not been tested).  I suspect that I meant to look for
additional helmet messages which could benefit from conditional headgear
description.  (Those "hard helmet" ones don't need it, although they
should perhaps be moved into a common routine instead of being replicated.)

doc/fixes34.4
include/extern.h
src/do_wear.c
src/hack.c
src/mhitu.c
src/objnam.c
src/polyself.c
src/steal.c
src/trap.c
src/uhitm.c

index 6ce1297506e5012aeac174bfac2dac22e856a13e..1a0ee51c723d411fe585c4ece80517a19896602a 100644 (file)
@@ -62,6 +62,7 @@ incorrect screen display if engulfer gets turned to stone when trying to
 panic on subsequent move if engulfer gets turned to stone and poly'd hero
        also has attached ball&chain
 give more specific messages when dropping weapons due to slippery fingers
+various helmet messages changed to distinguish between "helm" and "hat"
 
 
 Platform- and/or Interface-Specific Fixes
index fd1d4c28d4ab5471ba0778c446719ba792710ddc..16015020d57d512f7e9f61ab94575c374fe19326 100644 (file)
@@ -1432,13 +1432,14 @@ E char *FDECL(yname, (struct obj *));
 E char *FDECL(Yname2, (struct obj *));
 E char *FDECL(ysimple_name, (struct obj *));
 E char *FDECL(Ysimple_name2, (struct obj *));
+E char *FDECL(bare_artifactname, (struct obj *));
 E char *FDECL(makeplural, (const char *));
 E char *FDECL(makesingular, (const char *));
 E struct obj *FDECL(readobjnam, (char *,struct obj *,BOOLEAN_P));
 E int FDECL(rnd_class, (int,int));
 E const char *FDECL(cloak_simple_name, (struct obj *));
+E const char *FDECL(helm_simple_name, (struct obj *));
 E const char *FDECL(mimic_obj_name, (struct monst *));
-E char *FDECL(bare_artifactname, (struct obj *));
 
 /* ### options.c ### */
 
index a9b8c3643ea7658398c36ae8d64ed86002856a2b..670856666ebce2aef9948e6abc2e1225e043842e 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)do_wear.c  3.4     2004/10/29      */
+/*     SCCS Id: @(#)do_wear.c  3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -1180,7 +1180,10 @@ register struct obj *otmp;
        if(delay) {
                nomul(delay);
                if (is_helmet(otmp)) {
-                       nomovemsg = "You finish taking off your helmet.";
+                       /* ick... */
+                       nomovemsg = !strcmp(helm_simple_name(otmp), "hat") ?
+                                       "You finish taking off your hat." :
+                                       "You finish taking off your helmet.";
                        afternmv = Helmet_off;
                     }
                else if (is_gloves(otmp)) {
@@ -1282,13 +1285,14 @@ boolean noisy;
 
     if (is_helmet(otmp)) {
        if (uarmh) {
-           if (noisy) already_wearing(an(c_helmet));
+           if (noisy) already_wearing(an(helm_simple_name(uarmh)));
            err++;
        } else if (Upolyd && has_horns(youmonst.data) && !is_flimsy(otmp)) {
            /* (flimsy exception matches polyself handling) */
            if (noisy)
                pline_The("%s won't fit over your horn%s.",
-                         c_helmet, plur(num_horns(youmonst.data)));
+                         helm_simple_name(otmp),
+                         plur(num_horns(youmonst.data)));
            err++;
        } else
            *mask = W_ARMH;
@@ -2146,7 +2150,8 @@ register struct obj *atmp;
 #endif
        } else if (DESTROY_ARM(uarmh)) {
                if (donning(otmp)) cancel_don();
-               Your("helmet turns to dust and is blown away!");
+               Your("%s turns to dust and is blown away!",
+                    helm_simple_name(uarmh));
                (void) Helmet_off();
                useup(otmp);
        } else if (DESTROY_ARM(uarmg)) {
index 4ce1db40e82870ef745a80641d6bc5a87adee7b4..b67ad37eb54be618d8a7a0122c4dd909dade3615 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)hack.c     3.4     2004/08/16      */
+/*     SCCS Id: @(#)hack.c     3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -1626,7 +1626,8 @@ stillinwater:;
                        if(mtmp->mtame) /* jumps to greet you, not attack */
                            ;
                        else if(uarmh && is_metallic(uarmh))
-                           pline("Its blow glances off your helmet.");
+                           pline("Its blow glances off your %s.",
+                                 helm_simple_name(uarmh));
                        else if (u.uac + 3 <= rnd(20))
                            You("are almost hit by %s!",
                                x_monnam(mtmp, ARTICLE_A, "falling", 0, TRUE));
index 69a97f68b76240a54dec17d637bbe9b6689d9517..fe60be78bc685f4b1c9788d0ca0610271e996acd 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)mhitu.c    3.4     2004/10/27      */
+/*     SCCS Id: @(#)mhitu.c    3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -371,8 +371,8 @@ mattacku(mtmp)
 
                    obj = which_armor(mtmp, WORN_HELMET);
                    if (obj && is_metallic(obj)) {
-                       Your("blow glances off %s helmet.",
-                                      s_suffix(mon_nam(mtmp)));
+                       Your("blow glances off %s %s.",
+                            s_suffix(mon_nam(mtmp)), helm_simple_name(obj));
                    } else {
                        if (3 + find_mac(mtmp) <= rnd(20)) {
                            pline("%s is hit by a falling piercer (you)!",
@@ -1053,7 +1053,8 @@ dopois:
 
                if (uarmh && rn2(8)) {
                    /* not body_part(HEAD) */
-                   Your("helmet blocks the attack to your head.");
+                   Your("%s blocks the attack to your head.",
+                        helm_simple_name(uarmh));
                    break;
                }
                if (Half_physical_damage) dmg = (dmg+1) / 2;
@@ -2260,7 +2261,7 @@ register struct monst *mon;
        if(!uwep || !welded(uwep))
                mayberem(uarmg, "gloves");
        mayberem(uarms, "shield");
-       mayberem(uarmh, "helmet");
+       mayberem(uarmh, helm_simple_name(uarmh));
 #ifdef TOURIST
        if(!uarmc && !uarm)
                mayberem(uarmu, "shirt");
index a5394fad0b5b13448f6797aa9f6b7f15d66ff7b9..1f801cd828fa3f3f5084f7ad21da5eb236c008c5 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)objnam.c   3.4     2004/08/02      */
+/*     SCCS Id: @(#)objnam.c   3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -2811,6 +2811,26 @@ struct obj *cloak;
     return "cloak";
 }
 
+/* helm vs hat for messages */
+const char *
+helm_simple_name(helmet)
+struct obj *helmet;
+{
+    /*
+     * There is some wiggle room here; the result has been chosen
+     * for consistency with the "protected by hard helmet" messages
+     * given for various bonks on the head:  headgear that provides
+     * such protection is a "helm", that which doesn't is a "hat".
+     *
+     *     elven leather helm / leather hat    -> hat
+     *     dwarvish iron helm / hard hat       -> helm
+     * The rest are completely straightforward:
+     *     fedora, cornuthaum, dunce cap       -> hat
+     *     all other types of helmets          -> helm
+     */
+    return (helmet && !is_metallic(helmet)) ? "hat" : "helm";
+}
+
 const char *
 mimic_obj_name(mtmp)
 struct monst *mtmp;
index 7c76e4da9c03be5c585bc0d10d56c476c543b8e0..6fb3b1824a7ee1902be9fc377964330cf9614f69 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)polyself.c 3.4     2003/01/08      */
+/*     SCCS Id: @(#)polyself.c 3.4     2004/11/11      */
 /*     Copyright (C) 1987, 1988, 1989 by Ken Arromdee */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -651,7 +651,8 @@ break_armor()
                     hornbuf, vtense(hornbuf, "pierce"), yname(otmp));
            } else {
                if (donning(otmp)) cancel_don();
-               Your("helmet falls to the %s!", surface(u.ux, u.uy));
+               Your("%s falls to the %s!",
+                    helm_simple_name(otmp), surface(u.ux, u.uy));
                (void) Helmet_off();
                dropx(otmp);
            }
@@ -673,7 +674,8 @@ break_armor()
        }
        if ((otmp = uarmh) != 0) {
            if (donning(otmp)) cancel_don();
-           Your("helmet falls to the %s!", surface(u.ux, u.uy));
+           Your("%s falls to the %s!",
+                helm_simple_name(otmp), surface(u.ux, u.uy));
            (void) Helmet_off();
            dropx(otmp);
        }
index e6b1bc1df3141b111d8818a4ad0ce04ec89f96a0..74921542460b75bc67bc4f7faf09b51b4a725b78 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)steal.c    3.4     2003/12/04      */
+/*     SCCS Id: @(#)steal.c    3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -21,7 +21,8 @@ register struct obj *otmp;
                (otmp == uarms) ? "shield" :
                (otmp == uarmg) ? "gloves" :
                (otmp == uarmc) ? cloak_simple_name(otmp) :
-               (otmp == uarmh) ? "helmet" : "armor");
+               (otmp == uarmh) ? helm_simple_name(otmp) :
+                   "armor");
 }
 
 #ifndef GOLDOBJ
index 1ea19350b60d06c387f70f969ef7576c49541416..94a9f70f9293741a0797eeb9654b21dfbb42353c 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)trap.c     3.4     2004/09/10      */
+/*     SCCS Id: @(#)trap.c     3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -55,7 +55,8 @@ struct monst *victim;
            item = (victim == &youmonst) ? uarmh : which_armor(victim, W_ARMH);
            if (item) {
                mat_idx = objects[item->otyp].oc_material;
-               Sprintf(buf,"%s helmet", materialnm[mat_idx] );
+               Sprintf(buf,"%s %s",
+                       materialnm[mat_idx], helm_simple_name(item));
            }
            if (!burn_dmg(item, item ? buf : "helmet")) continue;
            break;
@@ -850,7 +851,8 @@ unsigned trflags;
                    case 0:
                        pline("%s you on the %s!", A_gush_of_water_hits,
                                    body_part(HEAD));
-                       (void) rust_dmg(uarmh, "helmet", 1, TRUE, &youmonst);
+                       (void) rust_dmg(uarmh, helm_simple_name(uarmh),
+                                       1, TRUE, &youmonst);
                        break;
                    case 1:
                        pline("%s your left %s!", A_gush_of_water_hits,
@@ -1903,7 +1905,8 @@ register struct monst *mtmp;
                                pline("%s %s on the %s!", A_gush_of_water_hits,
                                    mon_nam(mtmp), mbodypart(mtmp, HEAD));
                            target = which_armor(mtmp, W_ARMH);
-                           (void) rust_dmg(target, "helmet", 1, TRUE, mtmp);
+                           (void) rust_dmg(target, helm_simple_name(target),
+                                           1, TRUE, mtmp);
                            break;
                        case 1:
                            if (in_sight)
index d1a7f4d31f4788d4af5ff9201fe14ff4197c0fd5..40bafb65a5bb9f396b8a6505892ff92bca82a094 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)uhitm.c    3.4     2004/06/12      */
+/*     SCCS Id: @(#)uhitm.c    3.4     2004/11/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -1545,6 +1545,9 @@ register struct attack *mattk;
                }
                break;
            case AD_DRIN:
+             {
+               struct obj *helmet;
+
                if (notonhead || !has_head(mdef->data)) {
                    pline("%s doesn't seem harmed.", Monnam(mdef));
                    tmp = 0;
@@ -1558,9 +1561,10 @@ register struct attack *mattk;
                }
                if (m_slips_free(mdef, mattk)) break;
 
-               if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
-                   pline("%s helmet blocks your attack to %s head.",
-                         s_suffix(Monnam(mdef)), mhis(mdef));
+               if ((helmet = which_armor(mdef, W_ARMH)) != 0 && rn2(8)) {
+                   pline("%s %s blocks your attack to %s head.",
+                         s_suffix(Monnam(mdef)),
+                         helm_simple_name(helmet), mhis(mdef));
                    break;
                }
 
@@ -1588,6 +1592,7 @@ register struct attack *mattk;
                }
                exercise(A_WIS, TRUE);
                break;
+             }
            case AD_STCK:
                if (!negated && !sticks(mdef->data))
                    u.ustuck = mdef; /* it's now stuck to you */