Index: exec.c ================================================================== --- exec.c +++ exec.c @@ -494,10 +494,11 @@ } } if(!(o->oflags&OF_BIZARRO) && (i=classes[o->class]->collisionLayers) && (xx=collisions_at(x,y)&i)) { if((i=collide_with(xx,VOIDLINK,x,y,o->class))&0x01) return i&0x04?1:0; } + pfunlink(n); if(!(o->oflags&((classes[o->class]->cflags&CF_COMPATIBLE?OF_VISUALONLY:0)|OF_STEALTHY))) { for(i=25;i>=0;i--) { xx=o->x+Xbit(i); yy=o->y+Ybit(i); if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue; m=playfield[xx+yy*64-65]; @@ -506,15 +507,13 @@ if(p->departures&(1<departed|=1<up; } } } - pfunlink(n); o->distance+=abs(x-o->x)+abs(y-o->y); o->x=x; o->y=y; - pflink(n); if(!(o->oflags&((classes[o->class]->cflags&CF_COMPATIBLE?OF_VISUALONLY:0)|OF_STEALTHY))) { for(i=25;i>=0;i--) { xx=x+Xbit(i); yy=y+Ybit(i); if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue; m=playfield[xx+yy*64-65]; @@ -523,10 +522,11 @@ if(p->arrivals&(1<arrived|=1<up; } } } + pflink(n); if(!(o->oflags&OF_VISUALONLY)) { m=objects[n]->up; if(m!=VOIDLINK) { v=send_message(VOIDLINK,n,MSG_SUNK,NVALUE(0),NVALUE(0),NVALUE(0)); while(m!=VOIDLINK) {