diff --git a/include/extern.h b/include/extern.h index eceb0ff3c..8ad793291 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1570,6 +1570,7 @@ E char *FDECL(makeplural, (const char *)); E char *FDECL(makesingular, (const char *)); E struct obj *FDECL(readobjnam, (char *,struct obj *)); E int FDECL(rnd_class, (int,int)); +E const char *FDECL(suit_simple_name, (struct obj *)); 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 *)); diff --git a/src/do_wear.c b/src/do_wear.c index 27050679e..f79aba25f 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -1118,7 +1118,20 @@ dotakeoff() || ((otmp == uarmu) && (uarmc || uarm)) #endif ) { - You_cant("take that off."); + char why[BUFSZ], what[BUFSZ]; + + why[0] = what[0] = '\0'; + if (otmp != uskin) { + if (uarmc) Strcat(what, cloak_simple_name(uarmc)); +#ifdef TOURIST + if ((otmp == uarmu) && uarm) { + if (uarmc) Strcat(what, " and "); + Strcat(what, suit_simple_name(uarm)); + } +#endif + Sprintf(why, " without taking off your %s first", what); + } + You_cant("take that off%s.", why); return 0; } @@ -1406,7 +1419,8 @@ boolean noisy; *mask = W_ARMC; } else if (is_suit(otmp)) { if (uarmc) { - if (noisy) You("cannot wear armor over a %s.", cloak_simple_name(uarmc)); + if (noisy) You("cannot wear armor over a %s.", + cloak_simple_name(uarmc)); err++; } else if (uarm) { if (noisy) already_wearing("some armor"); diff --git a/src/objnam.c b/src/objnam.c index 7d8d727e7..44e24608b 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)objnam.c 3.5 2007/04/30 */ +/* SCCS Id: @(#)objnam.c 3.5 2008/01/23 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3226,6 +3226,26 @@ int i; return (const char *)0; } +const char * +suit_simple_name(suit) +struct obj *suit; +{ + const char *suitnm, *esuitp; + + if (Is_dragon_mail(suit)) + return "dragon mail"; /* dragon scale mail */ + else if (Is_dragon_scales(suit)) + return "dragon scales"; + suitnm = OBJ_NAME(objects[suit->otyp]); + esuitp = eos((char *)suitnm); + if (strlen(suitnm) > 5 && !strcmp(esuitp - 5, " mail")) + return "mail"; /* most suits fall into this category */ + else if (strlen(suitnm) > 7 && !strcmp(esuitp - 7, " jacket")) + return "jacket"; /* leather jacket */ + /* suit is lame but armor is ambiguous and body armor is absurd */ + return "suit"; +} + const char * cloak_simple_name(cloak) struct obj *cloak;