-$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.102 $ $NHDT-Date: 1565574993 2019/08/12 01:56:33 $
+$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.103 $ $NHDT-Date: 1565833748 2019/08/15 01:49:08 $
This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however,
for NOSAVEONHANGUP+INSURANCE configuration
when a status condition becomes fatal, keep it listed as an active condition
during disclosure and/or dumplog rather than having it already reset
+when a shape-shifted sandestin was turned to stone, it died and reverted to
+ sandestin form with 0 HP; that confused known_hitum() because
+ sandestins are immune to stoning; net result was monster dying twice,
+ triggering "dmonsfree: N removed doesn't match N+1 pending" warning;
+ instead of dying, make it revert to sandestin form with full health
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
-/* NetHack 3.6 mon.c $NHDT-Date: 1560791350 2019/06/17 17:09:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.294 $ */
+/* NetHack 3.6 mon.c $NHDT-Date: 1565833749 2019/08/15 01:49:09 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.296 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
thrudoor = TRUE;
}
-nexttry: /* eels prefer the water, but if there is no water nearby,
- they will crawl over land */
+ nexttry: /* eels prefer the water, but if there is no water nearby,
+ they will crawl over land */
if (mon->mconf) {
flag |= ALLOW_ALL;
flag &= ~NOTONL;
xchar x = mdef->mx, y = mdef->my;
boolean wasinside = FALSE;
- if (!vamp_stone(mdef)) /* vampshifter reverts to vampire */
+ /* vampshifter reverts to vampire;
+ 3.6.3: also used to unshift shape-changed sandestin */
+ if (!vamp_stone(mdef))
return;
/* we have to make the statue before calling mondead, to be able to
/* monster is gone, corpse or other object might now be visible */
newsym(x, y);
-cleanup:
+ cleanup:
/* punish bad behaviour */
if (is_human(mdat)
&& (!always_hostile(mdat) && mtmp->malign <= 0)
newsym(mtmp->mx, mtmp->my);
return FALSE; /* didn't petrify */
}
+ } else if (mtmp->cham >= LOW_PM
+ && (mons[mtmp->cham].mresists & MR_STONE)) {
+ /* sandestins are stoning-immune so if hit by stoning damage
+ they revert to innate shape rather than become a statue */
+ mtmp->mcanmove = 1;
+ mtmp->mfrozen = 0;
+ if (mtmp->mhpmax <= 0)
+ mtmp->mhpmax = 10;
+ mtmp->mhp = mtmp->mhpmax;
+ (void) newcham(mtmp, &mons[mtmp->cham], FALSE, TRUE);
+ newsym(mtmp->mx, mtmp->my);
+ return FALSE; /* didn't petrify */
}
return TRUE;
}
mtmp->mstate |= MON_OBLITERATE;
mongone(mtmp);
/* places in the code might still reference mtmp->mx, mtmp->my */
- /* mtmp->mx = mtmp->my = 0; */
+ /* mtmp->mx = mtmp->my = 0; */
rloc_to(mon, mx, my); /* note: mon, not mtmp */
/* last resort - migrate mon to the next plane */