Fix breaking wand of digging and boulders next to lava
If one or more boulders were next to lava and hero broke a wand of digging next to that location, the boulder(s) stayed over the lava causing a sanity checking error.
This commit is contained in:
15
src/apply.c
15
src/apply.c
@@ -42,6 +42,7 @@ staticfn void display_grapple_positions(boolean);
|
|||||||
staticfn int use_grapple(struct obj *);
|
staticfn int use_grapple(struct obj *);
|
||||||
staticfn void discard_broken_wand(void);
|
staticfn void discard_broken_wand(void);
|
||||||
staticfn void broken_wand_explode(struct obj *, int, int);
|
staticfn void broken_wand_explode(struct obj *, int, int);
|
||||||
|
staticfn void maybe_dunk_boulders(coordxy, coordxy);
|
||||||
staticfn int do_break_wand(struct obj *);
|
staticfn int do_break_wand(struct obj *);
|
||||||
staticfn int apply_ok(struct obj *);
|
staticfn int apply_ok(struct obj *);
|
||||||
staticfn int flip_through_book(struct obj *);
|
staticfn int flip_through_book(struct obj *);
|
||||||
@@ -3854,6 +3855,18 @@ broken_wand_explode(struct obj *obj, int dmg, int expltype)
|
|||||||
discard_broken_wand();
|
discard_broken_wand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if x,y has lava or water, dunk any boulders at that location into it */
|
||||||
|
staticfn void
|
||||||
|
maybe_dunk_boulders(coordxy x, coordxy y)
|
||||||
|
{
|
||||||
|
struct obj *otmp;
|
||||||
|
|
||||||
|
while (is_pool_or_lava(x, y) && (otmp = sobj_at(BOULDER, x, y)) != 0) {
|
||||||
|
obj_extract_self(otmp);
|
||||||
|
(void) boulder_hits_pool(otmp, x,y, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* return 1 if the wand is broken, hence some time elapsed */
|
/* return 1 if the wand is broken, hence some time elapsed */
|
||||||
staticfn int
|
staticfn int
|
||||||
do_break_wand(struct obj *obj)
|
do_break_wand(struct obj *obj)
|
||||||
@@ -4022,6 +4035,8 @@ do_break_wand(struct obj *obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fill_pit(x, y);
|
fill_pit(x, y);
|
||||||
|
maybe_dunk_boulders(x, y);
|
||||||
|
recalc_block_point(x, y);
|
||||||
continue;
|
continue;
|
||||||
} else if (obj->otyp == WAN_CREATE_MONSTER) {
|
} else if (obj->otyp == WAN_CREATE_MONSTER) {
|
||||||
/* u.ux,u.uy creates it near you--x,y might create it in rock */
|
/* u.ux,u.uy creates it near you--x,y might create it in rock */
|
||||||
|
|||||||
Reference in New Issue
Block a user