Add liquid flow to land mine explosions
Land mine explosions did not call liquid_flow(dig.c), and as a result the pit created by an exploding land mine would never fill with adjacent water or lava, as pits created by other sources -- digging, breaking a wand, and earthquake -- can do. This commit adds the appropriate calls to liquid_flow and fillholetyp to blow_up_landmine so that land mine explosions may fill with water like other pits do. The call to losehp in dotrap had to be moved from after to before blow_up_landmine, since waiting to call losehp when the pit can fill with water could lead to silly messages (``That was a close one. You die...''). After this change, a land mine that killed a character would be retained unexploded in a bones file, because death would occur before the call to blow_up_landmine. To avoid this issue, the land mine is converted to a pit before calling losehp; blow_up_landmine does not check whether the target trap is in fact a landmine so works as usual even if the trap is converted to a pit, and will delete the pit in cases where it should not exist.
This commit is contained in:
committed by
Pasi Kallinen
parent
bc8dd92621
commit
2df4f08c0b
22
src/trap.c
22
src/trap.c
@@ -2147,11 +2147,15 @@ unsigned trflags;
|
|||||||
set_wounded_legs(RIGHT_SIDE, rn1(35, 41));
|
set_wounded_legs(RIGHT_SIDE, rn1(35, 41));
|
||||||
exercise(A_DEX, FALSE);
|
exercise(A_DEX, FALSE);
|
||||||
}
|
}
|
||||||
|
/* add a pit before calling losehp so bones won't keep the landmine;
|
||||||
|
* blow_up_landmine will remove the pit afterwards if inappropriate */
|
||||||
|
trap->ttyp = PIT;
|
||||||
|
trap->madeby_u = FALSE;
|
||||||
|
losehp(Maybe_Half_Phys(rnd(16)), "land mine", KILLED_BY_AN);
|
||||||
blow_up_landmine(trap);
|
blow_up_landmine(trap);
|
||||||
if (steed_mid && saddle && !u.usteed)
|
if (steed_mid && saddle && !u.usteed)
|
||||||
(void) keep_saddle_with_steedcorpse(steed_mid, fobj, saddle);
|
(void) keep_saddle_with_steedcorpse(steed_mid, fobj, saddle);
|
||||||
newsym(u.ux, u.uy); /* update trap symbol */
|
newsym(u.ux, u.uy); /* update trap symbol */
|
||||||
losehp(Maybe_Half_Phys(rnd(16)), "land mine", KILLED_BY_AN);
|
|
||||||
/* fall recursively into the pit... */
|
/* fall recursively into the pit... */
|
||||||
if ((trap = t_at(u.ux, u.uy)) != 0)
|
if ((trap = t_at(u.ux, u.uy)) != 0)
|
||||||
dotrap(trap, RECURSIVETRAP);
|
dotrap(trap, RECURSIVETRAP);
|
||||||
@@ -2552,6 +2556,7 @@ struct trap *trap;
|
|||||||
{
|
{
|
||||||
int x = trap->tx, y = trap->ty, dbx, dby;
|
int x = trap->tx, y = trap->ty, dbx, dby;
|
||||||
struct rm *lev = &levl[x][y];
|
struct rm *lev = &levl[x][y];
|
||||||
|
schar typ;
|
||||||
|
|
||||||
(void) scatter(x, y, 4,
|
(void) scatter(x, y, 4,
|
||||||
MAY_DESTROY | MAY_HIT | MAY_FRACTURE | VIS_EFFECTS,
|
MAY_DESTROY | MAY_HIT | MAY_FRACTURE | VIS_EFFECTS,
|
||||||
@@ -2574,9 +2579,18 @@ struct trap *trap;
|
|||||||
/* no pits here */
|
/* no pits here */
|
||||||
deltrap(trap);
|
deltrap(trap);
|
||||||
} else {
|
} else {
|
||||||
trap->ttyp = PIT; /* explosion creates a pit */
|
/* fill pit with water, if applicable */
|
||||||
trap->madeby_u = FALSE; /* resulting pit isn't yours */
|
typ = fillholetyp(x, y, FALSE);
|
||||||
seetrap(trap); /* and it isn't concealed */
|
if (typ != ROOM) {
|
||||||
|
lev->typ = typ;
|
||||||
|
liquid_flow(x, y, typ, trap,
|
||||||
|
cansee(x, y) ? "The hole fills with %s!"
|
||||||
|
: (char *) 0);
|
||||||
|
} else {
|
||||||
|
trap->ttyp = PIT; /* explosion creates a pit */
|
||||||
|
trap->madeby_u = FALSE; /* resulting pit isn't yours */
|
||||||
|
seetrap(trap); /* and it isn't concealed */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user