Skip to content

Commit

Permalink
hats vs helms
Browse files Browse the repository at this point in the history
     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.)
  • Loading branch information
nethack.rankin committed Nov 13, 2004
1 parent 88dad93 commit 7672a2c
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 27 deletions.
1 change: 1 addition & 0 deletions doc/fixes34.4
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion include/extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 ### */

Expand Down
15 changes: 10 additions & 5 deletions src/do_wear.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)) {
Expand Down
5 changes: 3 additions & 2 deletions src/hack.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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));
Expand Down
11 changes: 6 additions & 5 deletions src/mhitu.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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)!",
Expand Down Expand Up @@ -1053,7 +1053,8 @@ hitmu(mtmp, mattk)

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;
Expand Down Expand Up @@ -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");
Expand Down
22 changes: 21 additions & 1 deletion src/objnam.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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;
Expand Down
8 changes: 5 additions & 3 deletions src/polyself.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down
5 changes: 3 additions & 2 deletions src/steal.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand All @@ -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
Expand Down
11 changes: 7 additions & 4 deletions src/trap.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down
13 changes: 9 additions & 4 deletions src/uhitm.c
Original file line number Diff line number Diff line change
@@ -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. */

Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit 7672a2c

Please sign in to comment.