From 183e450b1bccd1ea733637b2d9f0b2dc1859806d Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Sun, 22 Sep 2002 15:59:46 +0000 Subject: [PATCH] B12004 polymorphing into minotaur Polymorphing into creature with horns such as a minotaur, will cause your helmet to fall off if it is made of a hard material. Only minotaurs pass the has_horns() test in include/mondata.h because the complaint specifically referred to them, but that should perhaps be reviewed at some point by someone who is certain which creatures have horns growing from their head (some demons?) --- doc/fixes34.1 | 1 + include/mondata.h | 1 + src/polyself.c | 15 +++++++++++++++ 3 files changed, 17 insertions(+) diff --git a/doc/fixes34.1 b/doc/fixes34.1 index 6bf933db0..314757db0 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -253,6 +253,7 @@ stop running or travelling if the vibrating square message is triggered show correct gender in ^X display when polymorphed into non-humanoid form for wizard and explore modes, skip second screen of ^X output when first screen is cancelled by ESC +polyself into minotaur causes hard headgear to fall off Platform- and/or Interface-Specific Fixes diff --git a/include/mondata.h b/include/mondata.h index 457ccf5df..61bfbba98 100644 --- a/include/mondata.h +++ b/include/mondata.h @@ -40,6 +40,7 @@ #define nolimbs(ptr) (((ptr)->mflags1 & M1_NOLIMBS) == M1_NOLIMBS) #define notake(ptr) (((ptr)->mflags1 & M1_NOTAKE) != 0L) #define has_head(ptr) (((ptr)->mflags1 & M1_NOHEAD) == 0L) +#define has_horns(ptr) ((ptr) == &mons[PM_MINOTAUR]) #define is_whirly(ptr) ((ptr)->mlet == S_VORTEX || \ (ptr) == &mons[PM_AIR_ELEMENTAL]) #define is_silent(ptr) ((ptr)->msound == MS_SILENT) diff --git a/src/polyself.c b/src/polyself.c index ac5028954..12cdf0533 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -613,6 +613,21 @@ break_armor() } #endif } + if (has_horns(youmonst.data)) { + if ((otmp = uarmh) != 0) { + if (is_flimsy(otmp) && !donning(otmp)) { + char yourbuf[BUFSZ]; + /* Future possiblities: This could damage/destroy helmet*/ + Your("horns pierce through %s %s.", shk_your(yourbuf, otmp), + xname(otmp)); + } else { + if (donning(otmp)) cancel_don(); + Your("helmet falls to the %s!", surface(u.ux, u.uy)); + (void) Helmet_off(); + dropx(otmp); + } + } + } if (nohands(youmonst.data) || verysmall(youmonst.data)) { if ((otmp = uarmg) != 0) { if (donning(otmp)) cancel_don();