liquid_flow when digging pit
Part of github issue #338 that isn't about shops: objects at the spot where a dug pit fills with lava (or water) weren't being effected by that. While fixing it, I noticed that hero's steed wasn't affected either. Also, when conjoined pits are filled in, monsters other than the steed are at risk but weren't being handled. Presumably they fell in on their next move.
This commit is contained in:
23
src/dig.c
23
src/dig.c
@@ -739,6 +739,8 @@ schar typ;
|
||||
struct trap *ttmp;
|
||||
const char *fillmsg;
|
||||
{
|
||||
struct obj *objchain;
|
||||
struct monst *mon;
|
||||
boolean u_spot = (x == u.ux && y == u.uy);
|
||||
|
||||
if (ttmp)
|
||||
@@ -748,11 +750,18 @@ const char *fillmsg;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1685,6 +1694,12 @@ pit_flow(trap, filltyp)
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user