Index: main.c ================================================================== --- main.c +++ main.c @@ -250,13 +250,13 @@ if(z==0xFF) break; if(z&0x20) x=*p++; if(z&0x10) y=*p++; if(z&0x40) x++; if(!x || !y || x>pfwidth || y>pfheight) goto bad2; + n=z&0x70?0:1; if(z&0x80) { // MRU - n=playfield[x+y*64-65]==VOIDLINK?0:1; if(mru[n]==VOIDLINK) goto bad1; o=objalloc(objects[mru[n]]->class); if(o==VOIDLINK) goto bad3; objects[o]->image=objects[mru[n]]->image; objects[o]->misc1=objects[mru[n]]->misc1; @@ -267,12 +267,10 @@ objects[o]->y=y; pflink(o); n=z&15; } else { // Not MRU - n=playfield[x+y*64-65]; - n=n==VOIDLINK?0:objects[n]->down==VOIDLINK?1:2; i=*p++; i|=*p++<<8; o=objalloc(i&0x3FFF); if(o==VOIDLINK) goto bad3; if(n!=2) mru[n]=o; Index: mbtofhm.c ================================================================== --- mbtofhm.c +++ mbtofhm.c @@ -944,10 +944,18 @@ mru[0x04]=mru[0x14]=255; n=fgetc(stdin); n|=fgetc(stdin)<<8; x=q=r=0; y=1; + // Hero Mesh level format for objects: + // 0-1 Class + // 2-3 CurImage + // 4 LastDir + // 5 Misc Types + // 6-7 X + // 8-9 Y + // 10-15 Misc1,Misc2,Misc3 // Free Hero Mesh level format for objects: // * bit flags (or 0xFF for end): // bit7 = MRU (omit everything but position) // bit6 = Next position // bit5 = New X position @@ -971,11 +979,11 @@ mru[0x06]=mru[0x16]=buf[6]; mru[0x08]=mru[0x18]=buf[8]; i=0; if(buf[6]==x+1) i|=0x40; else if(buf[6]!=x) i|=0x20; if(buf[8]!=y) i|=0x10; - if(x==buf[6] && y==buf[8]) q+=16; else q=0; + q=i&0x70?0:16; if(q<32 && !memcmp(mru+q,buf,16)) { i|=0x80; } else { i|=buf[4]&7; if(buf[5] || memcmp(buf+10,"\0\0\0\0\0\0",6)) i|=0x08;