diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 7274e4aad..caf907b69 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -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 diff --git a/src/bones.c b/src/bones.c index 69ebf1da9..7573a7aab 100644 --- a/src/bones.c +++ b/src/bones.c @@ -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); diff --git a/src/end.c b/src/end.c index 842f80880..1c44e25ae 100644 --- a/src/end.c +++ b/src/end.c @@ -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; diff --git a/src/sit.c b/src/sit.c index 572b0c4dd..26f8a2cab 100644 --- a/src/sit.c +++ b/src/sit.c @@ -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 || diff --git a/src/trap.c b/src/trap.c index 2956da31b..ef727e061 100644 --- a/src/trap.c +++ b/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); } }