lava, slime, bones
From a bug report: entering lava cures sliming,
but if you got [re-]afflicted by green slime after becoming stuck in lava,
#sit failed to cure it. Fix that, and have sinking farther into lava cure
it too (although not necessarily right away).
Also, suppress leaving the corpse in a bones file for death caused by
being dissolved in lava. Lastly, suppress the "you rise from the dead as
a <monster>" message during bones creation when the game ends due to being
turned into green slime since you transformed rather than died (and sliming
timeout gives "you have become green slime" just prior to that).
This commit is contained in:
@@ -280,6 +280,9 @@ wielding a potion of blindness or carrying one in alternate weapon or quiver
|
||||
zapping closing or breaking magic up or down from beneath an open drawbridge's
|
||||
portcullis failed if bridge orientation was north-to-south (Valk quest)
|
||||
sinking into lava didn't track passage of time properly
|
||||
sinking into lava eventually burns away slime; sitting in it always does
|
||||
suppress corpse from bones data if death is due to being dissolved in lava
|
||||
suppress "you rise from the dead" if game ends due to be turned into slime
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
@@ -326,8 +326,11 @@ struct obj *corpse;
|
||||
}
|
||||
mtmp = christen_monst(mtmp, plname);
|
||||
newsym(u.ux, u.uy);
|
||||
Your("body rises from the dead as %s...",
|
||||
an(mons[u.ugrave_arise].mname));
|
||||
/* turning into slime isn't rising from the dead
|
||||
and has already given its own message */
|
||||
if (u.ugrave_arise != PM_GREEN_SLIME)
|
||||
Your("body rises from the dead as %s...",
|
||||
an(mons[u.ugrave_arise].mname));
|
||||
display_nhwindow(WIN_MESSAGE, FALSE);
|
||||
drop_upon_death(mtmp, (struct obj *)0);
|
||||
m_dowear(mtmp, TRUE);
|
||||
|
||||
@@ -668,17 +668,16 @@ die:
|
||||
|
||||
bones_ok = (how < GENOCIDED) && can_make_bones();
|
||||
|
||||
if (how == TURNED_SLIME)
|
||||
u.ugrave_arise = PM_GREEN_SLIME;
|
||||
|
||||
if (bones_ok && launch_in_progress()) force_launch_placement();
|
||||
|
||||
if (bones_ok && u.ugrave_arise < LOW_PM) {
|
||||
/* corpse gets burnt up too */
|
||||
if (how == BURNING)
|
||||
if (how == BURNING || how == DISSOLVED)
|
||||
u.ugrave_arise = (NON_PM - 2); /* leave no corpse */
|
||||
else if (how == STONING)
|
||||
u.ugrave_arise = (NON_PM - 1); /* statue instead of corpse */
|
||||
else if (how == TURNED_SLIME)
|
||||
u.ugrave_arise = PM_GREEN_SLIME;
|
||||
else if (u.ugrave_arise == NON_PM &&
|
||||
!(mvitals[u.umonnum].mvflags & G_NOCORPSE)) {
|
||||
int mnum = u.umonnum;
|
||||
|
||||
@@ -95,6 +95,7 @@ dosit()
|
||||
} else if (u.utraptype == TT_LAVA) {
|
||||
/* Must have fire resistance or they'd be dead already */
|
||||
You("sit in the lava!");
|
||||
if (Slimed) burn_away_slime();
|
||||
u.utrap += rnd(4);
|
||||
losehp(d(2,10), "sitting in lava", KILLED_BY); /* lava damage */
|
||||
} else if (u.utraptype == TT_INFLOOR ||
|
||||
|
||||
12
src/trap.c
12
src/trap.c
@@ -4660,6 +4660,8 @@ burn_stuff:
|
||||
void
|
||||
sink_into_lava()
|
||||
{
|
||||
static const char sink_deeper[] = "You sink deeper into the lava.";
|
||||
|
||||
if (!u.utrap || u.utraptype != TT_LAVA) {
|
||||
; /* do nothing; this shouldn't happen */
|
||||
} else if (!is_lava(u.ux, u.uy)) {
|
||||
@@ -4670,9 +4672,17 @@ sink_into_lava()
|
||||
killer.format = KILLED_BY;
|
||||
Strcpy(killer.name, "molten lava");
|
||||
You("sink below the surface and die.");
|
||||
burn_away_slime(); /* add insult to injury? */
|
||||
done(DISSOLVED);
|
||||
} else if (!u.umoved) {
|
||||
Norep("You sink deeper into the lava.");
|
||||
/* can't fully turn into slime while in lava, but might not
|
||||
have it be burned away until you've come awfully close */
|
||||
if (Slimed && rnd(10 - 1) >= (int)(Slimed & TIMEOUT)) {
|
||||
pline(sink_deeper);
|
||||
burn_away_slime();
|
||||
} else {
|
||||
Norep(sink_deeper);
|
||||
}
|
||||
u.utrap += rnd(4);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user