diff --git a/src/explode.c b/src/explode.c index cd8e92f1f..b755e1f9c 100644 --- a/src/explode.c +++ b/src/explode.c @@ -441,8 +441,7 @@ struct obj *obj; /* only scatter this obj */ && rn2(10)) { if (otmp->otyp == BOULDER) { pline("%s apart.", Tobjnam(otmp, "break")); - fracture_rock(otmp); /* this will place fragments on floor */ - obj_extract_self(otmp); + fracture_rock(otmp); place_object(otmp, sx, sy); if ((otmp = sobj_at(BOULDER, sx, sy)) != 0) { /* another boulder here, restack it to the top */ @@ -455,8 +454,7 @@ struct obj *obj; /* only scatter this obj */ if ((trap = t_at(sx,sy)) && trap->ttyp == STATUE_TRAP) deltrap(trap); pline("%s.", Tobjnam(otmp, "crumble")); - (void) break_statue(otmp); /*this will place fragments on floor */ - obj_extract_self(otmp); + (void) break_statue(otmp); place_object(otmp, sx, sy); /* put fragments on floor */ } used_up = TRUE; diff --git a/src/zap.c b/src/zap.c index 62ba27b0c..ca26d524c 100644 --- a/src/zap.c +++ b/src/zap.c @@ -3708,12 +3708,14 @@ register struct obj *obj; /* no texts here! */ obj->onamelth = 0; /* no names */ obj->oxlth = 0; /* no extra data */ obj->oattached = OATTACHED_NOTHING; - obj_extract_self(obj); /* move rocks back on top */ - place_object(obj, obj->ox, obj->oy); - if(!does_block(obj->ox,obj->oy,&levl[obj->ox][obj->oy])) - unblock_point(obj->ox,obj->oy); - if(cansee(obj->ox,obj->oy)) - newsym(obj->ox,obj->oy); + if (obj->where == OBJ_FLOOR) { + obj_extract_self(obj); /* move rocks back on top */ + place_object(obj, obj->ox, obj->oy); + if(!does_block(obj->ox,obj->oy,&levl[obj->ox][obj->oy])) + unblock_point(obj->ox,obj->oy); + if(cansee(obj->ox,obj->oy)) + newsym(obj->ox,obj->oy); + } } /* handle statue hit by striking/force bolt/pick-axe */