diff --git a/src/monmove.c b/src/monmove.c index a21716e06..15e7752c7 100644 --- a/src/monmove.c +++ b/src/monmove.c @@ -1511,6 +1511,8 @@ postmov( if (mtmp->mx) newsym(mtmp->mx, mtmp->my); return MMOVE_DIED; /* it died */ + } else if (mon_offmap(mtmp)) { + return MMOVE_DONE; } ptr = mtmp->data; /* in case mintrap() caused polymorph */ diff --git a/src/teleport.c b/src/teleport.c index fc1d3ce28..affa19007 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -2139,9 +2139,10 @@ rloco(struct obj *obj) svd.dndest.nhx, svd.dndest.nhy))); if (flooreffects(obj, tx, ty, "fall")) { - /* update old location since flooreffects() couldn't; + /* update old location (if any) since flooreffects() couldn't; unblock_point() for boulder handled by obj_extract_self() */ - newsym(otx, oty); + if (!(otx == 0 && oty == 0)) + newsym(otx, oty); return FALSE; } else if (otx == 0 && oty == 0) { ; /* fell through a trap door; no update of old loc needed */ diff --git a/src/trap.c b/src/trap.c index 8b40d3faf..5d81dec5d 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2698,9 +2698,6 @@ trapeffect_rolling_boulder_trap( trap->tseen = TRUE; if (DEADMONSTER(mtmp)) trapkilled = TRUE; - } else { - deltrap(trap); - newsym(mtmp->mx, mtmp->my); } return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped ? Trap_Caught_Mon : Trap_Effect_Finished;