}
(void) mkcorpstat(CORPSE, (struct monst *) 0, mtmp->data, xlocale,
ylocale, CORPSTAT_NONE);
+ mtmp->mx = mtmp->my = -1; /* for mongone, mon is not anywhere */
mongone(mtmp);
}
}
/* zip back to starting location */
go_back:
- (void) md_rush(md, start.x, start.y);
+ if (!md_rush(md, start.x, start.y))
+ md->mx = md->my = -1; /* for mongone, md is not on map */
mongone(md);
/* deliver some classes of messages even if no daemon ever shows up */
give_up:
struct monst *mtmp;
struct permonst *mptr; /* reflects mtmp->data _prior_ to mtmp's death */
{
+ boolean onmap = (mtmp->mx > -1);
+
if (mtmp == context.polearm.hitmon)
context.polearm.hitmon = 0;
if (mtmp->mleashed)
mtmp->mtrapped = 0;
mtmp->mhp = 0; /* simplify some tests: force mhp to 0 */
relobj(mtmp, 0, FALSE);
- remove_monster(mtmp->mx, mtmp->my);
+ if (onmap) {
+ if (mtmp->wormno)
+ remove_worm(mtmp);
+ else
+ remove_monster(mtmp->mx, mtmp->my);
+ }
if (emits_light(mptr))
del_light_source(LS_MONSTER, monst_to_any(mtmp));
if (mtmp->m_ap_type)
seemimic(mtmp);
- newsym(mtmp->mx, mtmp->my);
+ if (onmap)
+ newsym(mtmp->mx, mtmp->my);
unstuck(mtmp);
- fill_pit(mtmp->mx, mtmp->my);
+ if (onmap)
+ fill_pit(mtmp->mx, mtmp->my);
if (mtmp->isshk)
shkgone(mtmp);