stone-to-flesh on any golem statue or golem figurine creates flesh golem
stone-to-flesh which activates shop-owned figurine entails shop charges
make giants be less likely to be randomly generated in Sokoban
+bear traps dish out some damage on initial entrapment
+bear traps and webs are harmless to water elementals
Platform- and/or Interface-Specific Fixes
-/* SCCS Id: @(#)dig.c 3.5 2006/07/08 */
+/* SCCS Id: @(#)dig.c 3.5 2007/04/02 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
boolean good;
if(amorphous(youmonst.data) || Passes_walls ||
- noncorporeal(youmonst.data) || unsolid(youmonst.data) ||
+ noncorporeal(youmonst.data) ||
+ (unsolid(youmonst.data) &&
+ youmonst.data != &mons[PM_WATER_ELEMENTAL]) ||
(tunnels(youmonst.data) && !needspick(youmonst.data))) {
You("%s up through the %s.",
!resists_sleep(mon))
&& (ttmp->ttyp != BEAR_TRAP ||
(mdat->msize > MZ_SMALL &&
- !amorphous(mdat) && !is_flyer(mdat)))
+ !amorphous(mdat) && !is_flyer(mdat) &&
+ !is_whirly(mdat) && !unsolid(mdat)))
&& (ttmp->ttyp != FIRE_TRAP ||
!resists_fire(mon))
&& (ttmp->ttyp != SQKY_BOARD || !is_flyer(mdat))
&& (ttmp->ttyp != WEB || (!amorphous(mdat) &&
!webmaker(mdat)))
+ && (ttmp->ttyp != ANTI_MAGIC ||
+ !resists_magm(mon))
) {
if (!(flag & ALLOW_TRAPS)) {
if (mon->mtrapseen & (1L << (ttmp->ttyp - 1)))
struct permonst *mptr;
{
return (boolean) (passes_walls(mptr) || amorphous(mptr) ||
- is_whirly(mptr) || verysmall(mptr) ||
+ unsolid(mptr) || is_whirly(mptr) || verysmall(mptr) ||
(slithy(mptr) && !bigmonst(mptr)));
}
-/* SCCS Id: @(#)monst.c 3.5 2006/02/13 */
+/* SCCS Id: @(#)monst.c 3.5 2007/04/02 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
A(ATTK(AT_CLAW, AD_PHYS, 5, 6),
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(2500, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0,
- M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_AMPHIBIOUS|M1_SWIM,
+ M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|
+ M1_AMPHIBIOUS|M1_SWIM,
M2_STRONG|M2_NEUTER, 0, CLR_BLUE),
/*
* Fungi
break;
case BEAR_TRAP:
+ {
+ int dmg = d(2, 4);
+
if ((Levitation || Flying) && !forcetrap) break;
feeltrap(trap);
if(amorphous(youmonst.data) || is_whirly(youmonst.data) ||
pline("%s bear trap closes on %s %s!",
A_Your[trap->madeby_u], s_suffix(mon_nam(u.usteed)),
mbodypart(u.usteed, FOOT));
+ if (thitm(0, u.usteed, (struct obj *)0, dmg, FALSE))
+ u.utrap = 0; /* steed died, hero not trapped */
} else
#endif
{
A_Your[trap->madeby_u], body_part(FOOT));
if(u.umonnum == PM_OWLBEAR || u.umonnum == PM_BUGBEAR)
You("howl in anger!");
+ losehp(Maybe_Half_Phys(dmg), "bear trap", KILLED_BY_AN);
}
exercise(A_DEX, FALSE);
break;
+ }
case SLP_GAS_TRAP:
seetrap(trap);
seetrap(trap);
}
}
+ if (mtmp->mtrapped)
+ trapkilled = thitm(0, mtmp, (struct obj *)0,
+ d(2, 4), FALSE);
break;
case SLP_GAS_TRAP:
case ANTI_MAGIC:
/* similar to hero's case, more or less */
if (!resists_magm(mtmp)) { /* lose spell energy */
- if (attacktype(mptr, AT_MAGC) ||
- attacktype(mptr, AT_BREA)) {
+ if (!mtmp->mcan &&
+ (attacktype(mptr, AT_MAGC) ||
+ attacktype(mptr, AT_BREA))) {
mtmp->mspec_used += d(2, 2);
if (in_sight) {
seetrap(trap);