with stale coordinates, triggering warnings if 'sanity_check' is On
when hold_another_object() fails while hero is swallowed, drop the item into
swallower's inventory instead of onto the floor
+when digging a pit results in it being filled by adjacent pool or lava, any
+ objects at the spot weren't subjected to water or fire damage;
+ also, riding hero's steed wasn't subjected to immersion either
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
struct trap *ttmp;
const char *fillmsg;
{
+ struct obj *objchain;
+ struct monst *mon;
boolean u_spot = (x == u.ux && y == u.uy);
if (ttmp)
if (fillmsg)
pline(fillmsg, hliquid(typ == LAVAPOOL ? "lava" : "water"));
- if (u_spot && !(Levitation || Flying)) {
+ /* handle object damage before hero damage; affects potential bones */
+ if ((objchain = g.level.objects[x][y]) != 0) {
if (typ == LAVAPOOL)
- (void) lava_effects();
- else if (!Wwalking)
- (void) drown();
+ fire_damage_chain(objchain, TRUE, TRUE, x, y);
+ else
+ water_damage_chain(objchain, TRUE);
+ }
+ /* damage to the hero */
+ if (u_spot) {
+ (void) pooleffects(FALSE);
+ } else if ((mon = m_at(x, y)) != 0) {
+ (void) minliquid(mon);
}
}
struct trap *trap;
schar filltyp;
{
+ /*
+ * FIXME?
+ * liquid_flow() -> pooleffects() -> {drown(),lava_effects()}
+ * might kill the hero; the game will end and if that leaves bones,
+ * remaining conjoined pits will be left unprocessed.
+ */
if (trap && filltyp != ROOM && is_pit(trap->ttyp)) {
struct trap t;
int idx;