From: nethack.rankin Date: Sat, 13 Nov 2004 04:00:52 +0000 (+0000) Subject: hats vs helms X-Git-Tag: MOVE2GIT~1405 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7672a2c60bb1e029d8c085f53be8f5bdcac45785;p=nethack hats vs helms Something from '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 '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.) --- diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 6ce129750..1a0ee51c7 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -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 diff --git a/include/extern.h b/include/extern.h index fd1d4c28d..16015020d 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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 ### */ diff --git a/src/do_wear.c b/src/do_wear.c index a9b8c3643..670856666 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -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)) { diff --git a/src/hack.c b/src/hack.c index 4ce1db40e..b67ad37eb 100644 --- a/src/hack.c +++ b/src/hack.c @@ -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)); diff --git a/src/mhitu.c b/src/mhitu.c index 69a97f68b..fe60be78b 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -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"); diff --git a/src/objnam.c b/src/objnam.c index a5394fad0..1f801cd82 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -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; diff --git a/src/polyself.c b/src/polyself.c index 7c76e4da9..6fb3b1824 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -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); } diff --git a/src/steal.c b/src/steal.c index e6b1bc1df..749215424 100644 --- a/src/steal.c +++ b/src/steal.c @@ -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 diff --git a/src/trap.c b/src/trap.c index 1ea19350b..94a9f70f9 100644 --- a/src/trap.c +++ b/src/trap.c @@ -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) diff --git a/src/uhitm.c b/src/uhitm.c index d1a7f4d31..40bafb65a 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -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 */