petrified engulfer (display glitch & potential panic)
From the newsgroup: if you were polymorped into a cockatrice and a trapper attempted to swallow you, the 't' displayed at its location would be left behind after it turned to stoned. This fixes that and a much more serious issue as well: if you were punished at the time, the game would panic on your next attempt to move because the ball&chain were left in limbo. There would also have been strangeness (monster sharing your location, stale u.ustuck setting) if the swallower was life-saved, but I didn't try to make that happen so am not sure how bad things would have been.
This commit is contained in:
@@ -57,6 +57,10 @@ destroying a worn item via dipping in burning oil would not unwear/unwield
|
|||||||
avoid a panic splitbill when shopkeeper is trapped by the door
|
avoid a panic splitbill when shopkeeper is trapped by the door
|
||||||
grammar tidbit for message given when eating tainted meat is also cannibalism
|
grammar tidbit for message given when eating tainted meat is also cannibalism
|
||||||
gas spores shouldn't be described as "unable to attack" while hero is praying
|
gas spores shouldn't be described as "unable to attack" while hero is praying
|
||||||
|
incorrect screen display if engulfer gets turned to stone when trying to
|
||||||
|
swallow while hero is poly'd into cockatrice
|
||||||
|
panic on subsequent move if engulfer gets turned to stone and poly'd hero
|
||||||
|
also has attached ball&chain
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
+13
-4
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)mhitu.c 3.4 2004/06/12 */
|
/* SCCS Id: @(#)mhitu.c 3.4 2004/10/27 */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -1629,13 +1629,15 @@ gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
|
|||||||
boolean physical_damage = FALSE;
|
boolean physical_damage = FALSE;
|
||||||
|
|
||||||
if (!u.uswallow) { /* swallows you */
|
if (!u.uswallow) { /* swallows you */
|
||||||
|
int omx = mtmp->mx, omy = mtmp->my;
|
||||||
|
|
||||||
if (youmonst.data->msize >= MZ_HUGE) return(0);
|
if (youmonst.data->msize >= MZ_HUGE) return(0);
|
||||||
if ((t && ((t->ttyp == PIT) || (t->ttyp == SPIKED_PIT))) &&
|
if ((t && ((t->ttyp == PIT) || (t->ttyp == SPIKED_PIT))) &&
|
||||||
sobj_at(BOULDER, u.ux, u.uy))
|
sobj_at(BOULDER, u.ux, u.uy))
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
if (Punished) unplacebc(); /* ball&chain go away */
|
if (Punished) unplacebc(); /* ball&chain go away */
|
||||||
remove_monster(mtmp->mx, mtmp->my);
|
remove_monster(omx, omy);
|
||||||
mtmp->mtrapped = 0; /* no longer on old trap */
|
mtmp->mtrapped = 0; /* no longer on old trap */
|
||||||
place_monster(mtmp, u.ux, u.uy);
|
place_monster(mtmp, u.ux, u.uy);
|
||||||
u.ustuck = mtmp;
|
u.ustuck = mtmp;
|
||||||
@@ -1671,9 +1673,16 @@ gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (touch_petrifies(youmonst.data) && !resists_ston(mtmp)) {
|
if (touch_petrifies(youmonst.data) && !resists_ston(mtmp)) {
|
||||||
|
/* put the attacker back where it started;
|
||||||
|
the resulting statue will end up there */
|
||||||
|
remove_monster(mtmp->mx, mtmp->my); /* u.ux,u.uy */
|
||||||
|
place_monster(mtmp, omx, omy);
|
||||||
minstapetrify(mtmp, TRUE);
|
minstapetrify(mtmp, TRUE);
|
||||||
if (mtmp->mhp > 0) return 0;
|
/* normally unstuck() would do this, but we're not
|
||||||
else return 2;
|
fully swallowed yet so that won't work here */
|
||||||
|
if (Punished) placebc();
|
||||||
|
u.ustuck = 0;
|
||||||
|
return (mtmp->mhp > 0) ? 0 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
display_nhwindow(WIN_MESSAGE, FALSE);
|
display_nhwindow(WIN_MESSAGE, FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user