-#include "tile.h"
-#include "level.h"
-
-
-#if defined(TARGET_X11)
-
-static unsigned char remap_v6[256] = { /* filter crap for v6 */
- 0,0,2,2,4,4,118,118,8,9,10,11,12,13,14,15,16,16,18,18,20,21,22,23,24,25,26,27,28,
- 28,118,28,0,16,2,18,36,37,37,37,40,41,42,43,44,45,128,128,128,148,148,148,45,45,45,
- 148,0,57,58,59,60,61,62,63,64,65,66,67,68,69,69,69,69,73,74,75,118,75,75,75,75,75,
- 75,75,75,153,153,153,153,153,153,153,153,153,153,153,153,153,153,99,100,68,68,68,
- 68,68,68,68,68,118,118,118,118,118,114,115,131,118,118,119,120,121,122,118,118,118,
- 118,118,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,
- 147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,165,118,
- 168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,
- 189,68,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,
- 210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,
- 231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,153,153,153,153,153,153,
- 153,153,153,153
-};
-static unsigned char remap_v5[256] = { /* filter crap for v5 */
- 0,0,2,2,4,4,118,118,8,9,10,11,12,13,14,15,16,16,18,18,20,21,22,23,24,25,26,27,28,
- 28,118,28,0,16,2,18,36,37,37,37,147,41,42,43,44,45,128,128,128,148,148,148,45,45,
- 45,148,0,57,58,59,60,61,62,63,64,65,66,67,68,153,153,153,153,153,153,153,153,153,
- 153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
- 153,153,68,68,68,68,68,68,68,68,118,118,118,118,118,114,115,131,118,118,119,120,121,
- 122,118,118,118,118,118,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,
- 143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,153,153,153,
- 153,153,153,118,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,
- 185,186,187,188,189,68,153,153,153,153,153,153,153,153,153,200,201,202,203,204,205,
- 206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,
- 227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,153,153,153,153,153,153,
- 153,153,153,153,153,153,153,153
-};
-static unsigned char remap_v4[256] = { /* filter crap for v4 */
- 0,0,2,2,4,4,118,118,8,9,10,11,12,13,14,15,16,16,18,18,20,21,22,23,24,25,26,27,28,
- 28,118,28,0,16,2,18,36,37,37,37,147,41,42,43,44,45,128,128,128,148,148,148,45,45,
- 45,148,0,153,153,59,60,61,62,63,64,65,66,153,153,153,153,153,153,153,153,153,153,
- 153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
- 153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,118,114,115,131,118,118,
- 119,120,121,122,118,118,118,118,118,128,129,130,131,132,133,134,135,136,137,138,139,
- 140,141,142,143,144,145,146,147,148,149,150,151,152,68,154,155,156,157,158,160,160,
- 160,160,160,160,160,160,160,160,160,160,160,160,160,160,175,153,153,153,153,153,153,
- 153,153,153,153,153,153,153,153,68,153,153,153,153,153,153,153,153,153,200,201,202,
- 203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,153,153,153,
- 153,153,153,153,153,153,153,153,153,153,153
-};
-static unsigned char remap_v4eater[28] = { /* filter crap for v4 */
- 128,18,2,0,4,8,16,20,28,37,41,45,130,129,131,132,133,134,135,136,146,147,175,65,66,
- 64,2,18
-};
-
-int clean_emerald(unsigned char *src, unsigned long *length)
-{
- unsigned int i;
- if(*length >= 2172 && src[2106] == 255 && src[2107] == 54 && src[2108] == 48 && src[2109] == 48) {
- for(i = 0; i < 2048; i++) src[i] = remap_v6[src[i]];
- for(i = 2048; i < 2084; i++) src[i] = remap_v6[src[i]];
- for(i = 2112; i < 2148; i++) src[i] = remap_v6[src[i]];
- goto v6;
- }
- if(*length >= 2110 && src[2106] == 255 && src[2107] == 53 && src[2108] == 48 && src[2109] == 48) {
- for(i = 0; i < 2048; i++) src[i] = remap_v5[src[i]];
- for(i = 2048; i < 2084; i++) src[i] = remap_v5[src[i]];
- for(i = 2112; i < 2148; i++) src[i] = src[i - 64];
- goto v5;
- }
- if(*length >= 2106 && src[1983] == 116) {
- for(i = 0; i < 2048; i++) src[i] = remap_v4[src[i]];
- for(i = 2048; i < 2084; i++) src[i] = remap_v4eater[src[i] >= 28 ? 0 : src[i]];
- for(i = 2112; i < 2148; i++) src[i] = src[i - 64];
- goto v4;
- }
- if(*length >= 2106 && src[0] == 241 && src[1983] == 27) {
- unsigned char j = 94;
- for(i = 0; i < 2106; i++) src[i] = (src[i] ^ (j += 7)) - 0x11;
- src[1] = 131;
- for(i = 0; i < 2048; i++) src[i] = remap_v4[src[i]];
- for(i = 2048; i < 2084; i++) src[i] = remap_v4eater[src[i] >= 28 ? 0 : src[i]];
- for(i = 2112; i < 2148; i++) src[i] = src[i - 64];
- goto v3;
- }
- return(1); /* unrecognized cave */
-v3:
-v4:
-v5:
- src[2106] = 255; src[2107] = 54; src[2108] = 48; src[2109] = 48; /* id */
- i = src[2094] * 10; src[2110] = i >> 8; src[2111] = i; /* time */
- for(i = 2148; i < 2172; i++) src[i] = 0;
- src[2159] = 128; /* ball data */
-v6:
- for(i = 0; i < 2048; i++) if(src[i] == 40) break; /* fix wheel */
- for(i++; i < 2048; i++) if(src[i] == 40) src[i] = 147;
- for(i = 64; i < 2048; i++) if(src[i] == 63) src[i - 64] = 101; /* fix acid */
- for(i = 2051; i < 2057; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 1 */
- for(i = 2060; i < 2066; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 2 */
- for(i = 2069; i < 2075; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 3 */
- for(i = 2078; i < 2084; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 4 */
- for(i = 2115; i < 2121; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 5 */
- for(i = 2124; i < 2130; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 6 */
- for(i = 2133; i < 2139; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 7 */
- for(i = 2142; i < 2148; i++) if(src[i] == 63) src[i - 3] = 101; /* fix acid in eater 8 */
- src[2094] = 0; /* old style time */
- src[2096] &= 7; src[src[2096] << 8 | src[2097]] = 128; /* player 1 pos */
- src[2098] &= 7; src[src[2098] << 8 | src[2099]] = 128; /* player 2 pos */
- if((src[2100] << 8 | src[2101]) > 9999) { src[2100] = 39; src[2101] = 15; } /* ameuba speed */
- if((src[2102] << 8 | src[2103]) > 9999) { src[2102] = 39; src[2103] = 15; } /* time wonderwall */
- if((src[2110] << 8 | src[2111]) > 9999) { src[2110] = 39; src[2111] = 15; } /* time */
- i = src[2149]; i &= 15; i &= -i; src[2149] = i; /* wind direction */
- if((src[2154] << 8 | src[2155]) > 9999) { src[2154] = 39; src[2155] = 15; } /* time lenses */
- if((src[2156] << 8 | src[2157]) > 9999) { src[2156] = 39; src[2157] = 15; } /* time magnify */
- src[2158] = 0; src[2159] = remap_v6[src[2159]]; /* ball object */
- if((src[2160] << 8 | src[2161]) > 9999) { src[2160] = 39; src[2161] = 15; } /* ball pause */
- src[2162] &= 129; if(src[2162] & 1) src[2163] = 0; /* ball data */
- if((src[2164] << 8 | src[2165]) > 9999) { src[2164] = 39; src[2165] = 15; } /* android move pause */
- if((src[2166] << 8 | src[2167]) > 9999) { src[2166] = 39; src[2167] = 15; } /* android clone pause */
- src[2168] &= 31; /* android data */
-
- *length = 2172; /* size of v6 cave */
- return(0);
-}