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();