Index: exec.c ================================================================== --- exec.c +++ exec.c @@ -1666,12 +1666,12 @@ o=objects[n]; m=o->up; if(o->oflags&OF_DESTROYED) { objtrash(n); } else if(classes[o->class]->cflags&CF_COMPATIBLE) { - if(o->oflags&OF_MOVED) { - o->oflags&=~OF_MOVED; + if((o->oflags&(OF_MOVED|OF_MOVED2))==OF_MOVED) { + o->oflags=(o->oflags|OF_MOVED2)&~OF_MOVED; send_message(VOIDLINK,n,MSG_MOVED,NVALUE(0),NVALUE(0),NVALUE(turn)); busy=1; } if(o->departed) { send_message(VOIDLINK,n,MSG_DEPARTED,NVALUE(0),NVALUE(0),NVALUE(turn)); @@ -1700,15 +1700,15 @@ o=objects[n]; if(!(classes[o->class]->cflags&CF_COMPATIBLE)) { if(o->oflags&OF_MOVED2) send_message(VOIDLINK,n,MSG_MOVED,NVALUE(0),NVALUE(0),NVALUE(turn)),busy=1; if(o->departed2) send_message(VOIDLINK,n,MSG_DEPARTED,NVALUE(o->departed2),NVALUE(0),NVALUE(turn)),busy=1; if(o->arrived2) send_message(VOIDLINK,n,MSG_ARRIVED,NVALUE(o->arrived2),NVALUE(0),NVALUE(turn)),busy=1; - o->oflags&=~OF_MOVED2; o->arrived2=o->departed2=0; if(o->anim && (o->anim->status&ANISTAT_LOGICAL)) execute_animation(n); if(o->oflags&(OF_BUSY|OF_USERSIGNAL)) busy=1; } + o->oflags&=~OF_MOVED2; n=o->prev; } // Ending phase if(!busy && !all_flushed) { n=lastobj;