changed some numbers from hexadecimal to decimal
[rocksndiamonds.git] / src / game_em / reademc.c
1 /* 2008-08-27 04:17:36
2  *
3  * handle binary emc cave file format
4  */
5
6 #include "main_em.h"
7
8
9 /* convert emc caves to intermediate cave format.
10  *
11  * the intermediate format supports most emc caves, but some internal
12  * objects are not supported.
13  *
14  * different:
15  * - active objects - use global flags instead of individual on/off
16  * - falling or paused objects - become still objects
17  * - sand states - become either sand with/without stone
18  * - collected objects - become a common pause object
19  * - drip states - become a normal drip
20  *
21  * unsupported:
22  * - exploding objects (not in emc player either)
23  *
24  * pushed objects are supported in the cave, eaters and magic ball.
25  * they behave almost the same as in the emc player, pushing over
26  * steel wall, androids, players etc. a compile time option chooses
27  * if pushed objects go into the acid.
28  *
29  * acid is handled completely different in my player. acid top is a
30  * separate object, which can be put anywhere and the beasts will
31  * be gobbled, even if they go in from below. in the emc player, an
32  * acid top without a bottom becomes plant.
33  *
34  * borderless caves are supported, almost the same as in the emc
35  * player. going off the left edge of the screen resulted in the
36  * beast/player moving up 1 square (and the player disappeared).
37  * going off the right edge of the screen, the beast/player would
38  * go down 1 square. in my player, everything stays on the same y
39  * coord, which is sensible, but breaks caves which expect the old
40  * behaviour.
41  */
42
43 static const short map_emc[256] =
44 {
45   Xstone,               Xstone,         Xdiamond,       Xdiamond,
46   Xalien,               Xalien,         Xblank,         Xblank,
47   Xtank_1_n,            Xtank_1_e,      Xtank_1_s,      Xtank_1_w,
48   Xtank_2_n,            Xtank_2_e,      Xtank_2_s,      Xtank_2_w,
49
50   Xbomb,                Xbomb,          Xemerald,       Xemerald,
51   Xbug_1_n,             Xbug_1_e,       Xbug_1_s,       Xbug_1_w,
52   Xbug_2_n,             Xbug_2_e,       Xbug_2_s,       Xbug_2_w,
53   Xdrip,                Xdrip,          Xdrip,          Xdrip,
54
55   Xstone,               Xbomb,          Xdiamond,       Xemerald,
56   Xwonderwall,          Xnut,           Xnut,           Xnut,
57   Xwheel,               Xeater_n,       Xeater_s,       Xeater_w,
58   Xeater_e,             Xsand_stone,    Xblank,         Xblank,
59
60   Xblank,               Xsand,          Xsand,          Xsand,
61   Xsand_stone,          Xsand_stone,    Xsand_stone,    Xsand,
62   Xstone,               Xslide_ew,      Xslide_ns,      Xdynamite_1,
63   Xdynamite_2,          Xdynamite_3,    Xdynamite_4,    Xacid_s,
64
65   Xexit_1,              Xexit_2,        Xexit_3,        Xballoon,
66   Xplant,               Xspring,        Xspring_fall,   Xspring_w,
67   Xspring_e,            Xball_1,        Xball_2,        Xandroid,
68   Xblank,               Xandroid,       Xandroid,       Xandroid,
69
70   Xandroid,             Xandroid,       Xandroid,       Xandroid,
71   Xandroid,             Xblank,         Xblank,         Xblank,
72   Xblank,               Xblank,         Xblank,         Xblank,
73   Xblank,               Xblank,         Xblank,         Xblank,
74
75   Xblank,               Xblank,         Xblank,         Xpush_spring_w,
76   Xpush_spring_e,       Xacid_1,        Xacid_2,        Xacid_3,
77   Xacid_4,              Xacid_5,        Xacid_6,        Xacid_7,
78   Xacid_8,              Xblank,         Xblank,         Xblank,
79
80   Xblank,               Xblank,         Xpush_nut_w,    Xpush_nut_e,
81   Xsteel_1,             Xblank,         Xblank,         Xpush_bomb_w,
82   Xpush_bomb_e,         Xpush_stone_w,  Xpush_stone_e,  Xblank,
83   Xblank,               Xblank,         Xblank,         Xblank,
84
85   Xblank,               Xroundwall_1,   Xgrass,         Xsteel_1,
86   Xwall_1,              Xkey_1,         Xkey_2,         Xkey_3,
87   Xkey_4,               Xdoor_1,        Xdoor_2,        Xdoor_3,
88   Xdoor_4,              Xfake_amoeba,   Xfake_door_1,   Xfake_door_2,
89
90   Xfake_door_3,         Xfake_door_4,   Xwonderwall,    Xwheel,
91   Xsand,                Xacid_nw,       Xacid_ne,       Xacid_sw,
92   Xacid_se,             Xfake_blank,    Xamoeba_1,      Xamoeba_2,
93   Xamoeba_3,            Xamoeba_4,      Xexit,          Xalpha_arrow_w,
94
95   Xfake_grass,          Xlenses,        Xmagnify,       Xfake_blank,
96   Xfake_grass,          Xswitch,        Xswitch,        Xblank,
97   Xdecor_8,             Xdecor_9,       Xdecor_10,      Xdecor_5,
98   Xalpha_comma,         Xalpha_quote,   Xalpha_minus,   Xdynamite,
99
100   Xsteel_3,             Xdecor_6,       Xdecor_7,       Xsteel_2,
101   Xroundwall_2,         Xdecor_2,       Xdecor_4,       Xdecor_3,
102   Xwind_any,            Xwind_e,        Xwind_s,        Xwind_w,
103   Xwind_n,              Xdirt,          Xplant,         Xkey_5,
104
105   Xkey_6,               Xkey_7,         Xkey_8,         Xdoor_5,
106   Xdoor_6,              Xdoor_7,        Xdoor_8,        Xbumper,
107   Xalpha_a,             Xalpha_b,       Xalpha_c,       Xalpha_d,
108   Xalpha_e,             Xalpha_f,       Xalpha_g,       Xalpha_h,
109
110   Xalpha_i,             Xalpha_j,       Xalpha_k,       Xalpha_l,
111   Xalpha_m,             Xalpha_n,       Xalpha_o,       Xalpha_p,
112   Xalpha_q,             Xalpha_r,       Xalpha_s,       Xalpha_t,
113   Xalpha_u,             Xalpha_v,       Xalpha_w,       Xalpha_x,
114
115   Xalpha_y,             Xalpha_z,       Xalpha_0,       Xalpha_1,
116   Xalpha_2,             Xalpha_3,       Xalpha_4,       Xalpha_5,
117   Xalpha_6,             Xalpha_7,       Xalpha_8,       Xalpha_9,
118   Xalpha_perio,         Xalpha_excla,   Xalpha_colon,   Xalpha_quest,
119
120   Xalpha_arrow_e,       Xdecor_1,       Xfake_door_5,   Xfake_door_6,
121   Xfake_door_7,         Xfake_door_8,   Xblank,         Xblank,
122   Xblank,               Xblank,         Xblank,         Xblank,
123   Xblank,               Xblank,         Xalpha_copyr,   Xfake_acid_1
124 };
125
126 static int get_em_element(unsigned short em_element_raw, int file_version)
127 {
128   int em_element = map_emc[em_element_raw];
129
130   if (file_version < FILE_VERSION_EM_V5)
131   {
132     /* versions below V5 had no grass, but only sand/dirt */
133     if (em_element == Xgrass)
134       em_element = Xdirt;
135   }
136
137   return em_element;
138 }
139
140 void convert_em_level(unsigned char *src, int file_version)
141 {
142   static int eater_offset[8] =
143   {
144     2048, 2057, 2066, 2075,
145     2112, 2121, 2130, 2139
146   };
147   int i, x, y, temp;
148
149   lev.time_seconds = src[2110] << 8 | src[2111];
150   if (lev.time_seconds > 9999)
151     lev.time_seconds = 9999;
152
153   lev.required_initial = src[2095];
154
155   for (i = 0; i < 2; i++)
156   {
157     temp = src[2096 + i * 2] << 8 | src[2097 + i * 2];
158     ply[i].x_initial = (temp & 63);
159     ply[i].y_initial = (temp >> 6 & 31);
160   }
161
162   temp = (src[2100] << 8 | src[2101]) * 28;
163   if (temp > 9999)
164     temp = 9999;
165   lev.amoeba_time = temp;
166
167   lev.android_move_time  = src[2164] << 8 | src[2165];
168   lev.android_clone_time = src[2166] << 8 | src[2167];
169
170   lev.ball_random        = src[2162] & 1 ? 1 : 0;
171   lev.ball_state_initial = src[2162] & 128 ? 1 : 0;
172   lev.ball_time          = src[2160] << 8 | src[2161];
173
174   lev.emerald_score     = src[2084];
175   lev.diamond_score     = src[2085];
176   lev.alien_score       = src[2086];
177   lev.tank_score        = src[2087];
178   lev.bug_score         = src[2088];
179   lev.eater_score       = src[2089];
180   lev.nut_score         = src[2090];
181   lev.dynamite_score    = src[2091];
182   lev.key_score         = src[2092];
183   lev.exit_score        = src[2093] * 8 / 5;
184
185   lev.lenses_score      = src[2151];
186   lev.magnify_score     = src[2152];
187   lev.slurp_score       = src[2153];
188
189   lev.lenses_time       = src[2154] << 8 | src[2155];
190   lev.magnify_time      = src[2156] << 8 | src[2157];
191   lev.wheel_time        = src[2104] << 8 | src[2105];
192
193   lev.wind_cnt_initial = src[2149] & 15 ? lev.wind_time : 0;
194   temp = src[2149];
195   lev.wind_direction_initial = (temp & 8 ? 0 :
196                                 temp & 1 ? 1 :
197                                 temp & 2 ? 2 :
198                                 temp & 4 ? 3 : 0);
199
200   lev.wonderwall_time_initial = src[2102] << 8 | src[2103];
201
202   for (i = 0; i < 8; i++)
203     for (x = 0; x < 9; x++)
204       lev.eater_array[i][x] =
205         get_em_element(src[eater_offset[i] + x], file_version);
206
207   temp = get_em_element(src[2159], file_version);
208   for (y = 0; y < 8; y++)
209   {
210     if (src[2162] & 1)
211     {
212       for (x = 0; x < 8; x++)
213         lev.ball_array[y][x] = temp;
214     }
215     else
216     {
217       lev.ball_array[y][1] = (src[2163] & 1)  ? temp : Xblank; /* north */
218       lev.ball_array[y][6] = (src[2163] & 2)  ? temp : Xblank; /* south */
219       lev.ball_array[y][3] = (src[2163] & 4)  ? temp : Xblank; /* west */
220       lev.ball_array[y][4] = (src[2163] & 8)  ? temp : Xblank; /* east */
221       lev.ball_array[y][7] = (src[2163] & 16) ? temp : Xblank; /* southeast */
222       lev.ball_array[y][5] = (src[2163] & 32) ? temp : Xblank; /* southwest */
223       lev.ball_array[y][2] = (src[2163] & 64) ? temp : Xblank; /* northeast */
224       lev.ball_array[y][0] = (src[2163] & 128)? temp : Xblank; /* northwest */
225     }
226   }
227
228   temp = src[2168] << 8 | src[2169];
229
230   lev.android_emerald   = (temp & 1)    != 0;
231   lev.android_diamond   = (temp & 2)    != 0;
232   lev.android_stone     = (temp & 4)    != 0;
233   lev.android_bomb      = (temp & 8)    != 0;
234   lev.android_nut       = (temp & 16)   != 0;
235   lev.android_tank      = (temp & 32)   != 0;
236   lev.android_eater     = (temp & 64)   != 0;
237   lev.android_bug       = (temp & 128)  != 0;
238   lev.android_alien     = (temp & 256)  != 0;
239   lev.android_spring    = (temp & 512)  != 0;
240   lev.android_balloon   = (temp & 1024) != 0;
241   lev.android_amoeba    = (temp & 2048) != 0;
242   lev.android_dynamite  = (temp & 4096) != 0;
243
244   for (temp = 1; temp < 2047; temp++)
245   {
246     switch (src[temp])
247     {
248       case 36:                                  /* wonderwall */
249         lev.wonderwall_state_initial = 1;
250         lev.wonderwall_time_initial = 9999;
251         break;
252
253       case 40:                                  /* wheel */
254         lev.wheel_x_initial = temp & 63;
255         lev.wheel_y_initial = temp >> 6;
256         lev.wheel_cnt_initial = lev.wheel_time;
257         break;
258
259       case 163:                                 /* fake blank */
260         lev.lenses_cnt_initial = 9999;
261         break;
262
263       case 164:                                 /* fake grass */
264         lev.magnify_cnt_initial = 9999;
265         break;
266     }
267   }
268
269   /* first fill the complete playfield with the default border element */
270   for (y = 0; y < CAVE_HEIGHT; y++)
271     for (x = 0; x < CAVE_WIDTH; x++)
272       native_em_level.cave[x][y] = Zborder;
273
274   /* then copy the real level contents from level file into the playfield */
275   temp = 0;
276   for (y = 0; y < lev.height; y++)
277     for (x = 0; x < lev.width; x++)
278       native_em_level.cave[x][y] =
279         get_em_element(src[temp++], file_version);
280
281   /* at last, set the two players at their positions in the playfield */
282   /* (native EM[C] levels always have exactly two players in a level) */
283   for (i = 0; i < 2; i++)
284     native_em_level.cave[ply[i].x_initial][ply[i].y_initial] = Zplayer;
285
286   native_em_level.file_version = file_version;
287 }
288
289
290 /* convert all emerald mine caves to emc version 6 cave format.
291  *
292  * caves are filtered to get rid of invalid or unsupported tiles.
293  *
294  * although the result is a somewhat clean cave, it is meant only
295  * to give a common structure for the binary cave format. it is not
296  * for archiving purposes (it is better to keep the raw cave as-is)
297  * and it is not meant for serializing (the intermediate structure
298  * is better defined).
299  *
300  * acid top is added to acid bottom in both the cave and the eaters.
301  * fake acid (only in v4) does not exist because it adds nothing to
302  * the game, and is different even in different versions of the emc
303  * player.
304  *
305  * v4/v5 time is converted to 10x old time (as it should be).
306  * the reason the kingsoft player used 5x time was copy protection.
307  *
308  * note: emc v6 converter has an error in converting v4 eaters to the
309  * wrong bug(24 instead of 20) and tank(12 instead of 8).
310  */
311
312 static const unsigned char map_v6[256] =
313 {
314   /* filter for v6 */
315
316   0,0,2,2,         4,4,118,118,     8,9,10,11,       12,13,14,15,
317   16,16,18,18,     20,21,22,23,     24,25,26,27,     28,28,118,28,
318   0,16,2,18,       36,37,37,37,     40,41,42,43,     44,45,128,128,
319   128,148,148,     148,45,45,45,    148,0,57,58,     59,60,61,62,63,
320
321   64,65,66,67,     68,69,69,71,     72,73,74,75,     118,75,75,75,
322   75,75,75,75,     75,153,153,153,  153,153,153,153, 153,153,153,153,
323   153,153,153,99,  100,68,68,68,    68,68,68,68,     68,118,118,118,
324   118,118,114,115, 131,118,118,119, 120,121,122,118, 118,118,118,118,
325
326   128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
327   144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
328   160,161,162,163, 164,165,165,118, 168,169,170,171, 172,173,174,175,
329   176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,68,191,
330
331   192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
332   208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
333   224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
334   240,241,242,243, 244,245,153,153, 153,153,153,153, 153,153,153,153
335 };
336
337 static const unsigned char map_v5[256] =
338 {
339   /* filter for v5 */
340
341   0,0,2,2,         4,4,118,118,     8,9,10,11,       12,13,14,15,
342   16,16,18,18,     20,21,22,23,     24,25,26,27,     28,28,118,28,
343   0,16,2,18,       36,37,37,37,     147,41,42,43,    44,45,128,128,
344   128,148,148,148, 45,45,45,148,    0,57,58,59,      60,61,62,63,
345
346   64,65,66,67,     68,153,153,153,  153,153,153,153, 153,153,153,153,
347   153,153,153,153, 153,153,153,153, 153,153,153,153, 153,153,153,153,
348   153,153,153,153, 153,68,68,68,    68,68,68,68,     68,118,118,118,
349   118,118,114,115, 131,118,118,119, 120,121,122,118, 118,118,118,118,
350
351   128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
352   144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
353   160,153,153,153, 153,153,153,118, 168,169,170,171, 172,173,174,175,
354   176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,68,153,
355
356   153,153,153,153, 153,153,153,153, 200,201,202,203, 204,205,206,207,
357   208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
358   224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
359   240,241,153,153, 153,153,153,153, 153,153,153,153, 153,153,153,153
360 };
361
362 static const unsigned char map_v4[256] =
363 {
364   /* filter for v4 */
365
366   0,0,2,2,         4,4,118,118,     8,9,10,11,       12,13,14,15,
367   16,16,18,18,     20,21,22,23,     24,25,26,27,     28,28,118,28,
368   0,16,2,18,       36,37,37,37,     147,41,42,43,    44,45,128,128,
369   128,148,148,148, 45,45,45,148,    0,153,153,59,    60,61,62,63,
370
371   64,65,66,153,    153,153,153,153, 153,153,153,153, 153,153,153,153,
372   153,153,153,153, 153,153,153,153, 153,153,153,153, 153,153,153,153,
373   153,153,153,153, 153,153,153,153, 153,153,153,153, 153,153,153,153,
374   153,118,114,115, 131,118,118,119, 120,121,122,118, 118,118,118,118,
375
376   128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
377   144,145,146,147, 148,149,150,151, 152,68,154,155,  156,157,158,160,
378   160,160,160,160, 160,160,160,160, 160,160,160,160, 160,160,160,175,
379   153,153,153,153, 153,153,153,153, 153,153,153,153, 153,153,68,153,
380
381   153,153,153,153, 153,153,153,153, 200,201,202,203, 204,205,206,207,
382   208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
383   224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
384   240,241,153,153, 153,153,153,153, 153,153,153,153, 153,153,153,153
385 };
386
387 static const unsigned char map_v4_eater[32] =
388 {
389   /* filter for v4 eater */
390
391   128,18,2,0,      4,8,16,20,       28,37,41,45,     130,129,131,132,
392   133,134,135,136, 146,147,175,65,  66,64,2,18,      128,128,128,128
393 };
394
395 static boolean filename_has_v1_format(char *filename)
396 {
397   char *basename = getBaseNamePtr(filename);
398
399   return (strlen(basename) == 3 &&
400           basename[0] == 'a' &&
401           basename[1] >= 'a' && basename[1] <= 'k' &&
402           basename[2] >= '0' && basename[2] <= '9');
403 }
404
405 int cleanup_em_level(unsigned char *src, int length, char *filename)
406 {
407   int file_version = FILE_VERSION_EM_UNKNOWN;
408   int i;
409
410   if (length >= 2172 &&
411       src[2106] == 255 &&               /* version id: */
412       src[2107] == 54 &&                /* '6' */
413       src[2108] == 48 &&                /* '0' */
414       src[2109] == 48)                  /* '0' */
415   {
416     /* ---------- this cave has V6 file format ---------- */
417     file_version = FILE_VERSION_EM_V6;
418
419     /* remap elements to internal EMC level format */
420     for (i = 0; i < 2048; i++)
421       src[i] = map_v6[src[i]];
422     for (i = 2048; i < 2084; i++)
423       src[i] = map_v6[src[i]];
424     for (i = 2112; i < 2148; i++)
425       src[i] = map_v6[src[i]];
426   }
427   else if (length >= 2110 &&
428            src[2106] == 255 &&          /* version id: */
429            src[2107] == 53 &&           /* '5' */
430            src[2108] == 48 &&           /* '0' */
431            src[2109] == 48)             /* '0' */
432   {
433     /* ---------- this cave has V5 file format ---------- */
434     file_version = FILE_VERSION_EM_V5;
435
436     /* remap elements to internal EMC level format */
437     for (i = 0; i < 2048; i++)
438       src[i] = map_v5[src[i]];
439     for (i = 2048; i < 2084; i++)
440       src[i] = map_v5[src[i]];
441     for (i = 2112; i < 2148; i++)
442       src[i] = src[i - 64];
443   }
444   else if (length >= 2106 &&
445            (src[1983] == 27 ||          /* encrypted (only EM I/II/III) */
446             src[1983] == 116 ||         /* unencrypted (usual case) */
447             src[1983] == 131))          /* unencrypted (rare case) */
448   {
449     /* ---------- this cave has V1, V2 or V3 file format ---------- */
450
451     boolean fix_copyright = FALSE;
452
453     /*
454       byte at position 1983 (0x07bf) is used as "magic byte":
455       - 27  (0x1b)      => encrypted level (V3 only / Kingsoft original games)
456       - 116 (0x74)      => unencrypted level (byte is corrected to 131 (0x83))
457       - 131 (0x83)      => unencrypted level (happens only in very rare cases)
458     */
459
460     if (src[1983] == 27)        /* (0x1b) -- after decryption: 116 (0x74) */
461     {
462       /* this is original (encrypted) Emerald Mine I, II or III level file */
463
464       int first_byte = src[0];
465       unsigned char code0 = 0x65;
466       unsigned char code1 = 0x11;
467
468       /* decode encrypted level data */
469       for (i = 0; i < 2106; i++)
470       {
471         src[i] ^= code0;
472         src[i] -= code1;
473
474         code0 = (code0 + 7) & 0xff;
475       }
476
477       src[1] = 131;             /* needed for all Emerald Mine levels */
478
479       /* first byte is either 0xf1 (EM I and III) or 0xf5 (EM II) */
480       if (first_byte == 0xf5)
481       {
482         src[0] = 131;           /* only needed for Emerald Mine II levels */
483
484         fix_copyright = TRUE;
485       }
486
487       /* ---------- this cave has V3 file format ---------- */
488       file_version = FILE_VERSION_EM_V3;
489     }
490     else if (filename_has_v1_format(filename))
491     {
492       /* ---------- this cave has V1 file format ---------- */
493       file_version = FILE_VERSION_EM_V1;
494     }
495     else
496     {
497       /* ---------- this cave has V2 file format ---------- */
498       file_version = FILE_VERSION_EM_V2;
499     }
500
501     /* remap elements to internal EMC level format */
502     for (i = 0; i < 2048; i++)
503       src[i] = map_v4[src[i]];
504     for (i = 2048; i < 2084; i++)
505       src[i] = map_v4_eater[src[i] >= 28 ? 0 : src[i]];
506     for (i = 2112; i < 2148; i++)
507       src[i] = src[i - 64];
508
509     if (fix_copyright)          /* fix "(c)" sign in Emerald Mine II levels */
510     {
511       for (i = 0; i < 2048; i++)
512         if (src[i] == 241)
513           src[i] = 254;         /* replace 'Xdecor_1' with 'Xalpha_copyr' */
514     }
515   }
516   else
517   {
518     /* ---------- this cave has unknown file format ---------- */
519
520     /* if file has length of old-style level file, print (wrong) magic byte */
521     if (length < 2110)
522       Error(ERR_WARN, "unknown magic byte 0x%02x at position 0x%04x",
523             src[1983], 1983);
524
525     return FILE_VERSION_EM_UNKNOWN;
526   }
527
528   if (file_version < FILE_VERSION_EM_V6)
529   {
530     /* id */
531     src[2106] = 255;            /* version id: */
532     src[2107] = 54;             /* '6' */
533     src[2108] = 48;             /* '0' */
534     src[2109] = 48;             /* '0' */
535
536     /* time */
537     i = src[2094] * 10;
538     /* stored level time of levels for the V2 player was changed to 50% of the
539        time for the V1 player (original V3 levels already considered this) */
540     if (file_version != FILE_VERSION_EM_V1 &&
541         file_version != FILE_VERSION_EM_V3)
542       i /= 2;
543     src[2110] = i >> 8;
544     src[2111] = i;
545
546     for (i = 2148; i < 2172; i++)
547       src[i] = 0;
548
549     /* ball data */
550     src[2159] = 128;
551   }
552
553   /* ---------- at this stage, the cave data always has V6 format ---------- */
554
555   /* fix wheel */
556   for (i = 0; i < 2048; i++)
557     if (src[i] == 40)
558       break;
559   for (i++; i < 2048; i++)
560     if (src[i] == 40)
561       src[i] = 147;
562
563   /* fix acid */
564   for (i = 64; i < 2048; i++)
565     if (src[i] == 63)           /* replace element above 'Xacid_s' ... */
566       src[i - 64] = 101;        /* ... with 'Xacid_1' */
567
568   /* fix acid with no base beneath it (see below for details (*)) */
569   for (i = 64; i < 2048 - 1; i++)
570   {
571     if (file_version <= FILE_VERSION_EM_V2 &&
572         src[i - 64] == 101 && src[i] != 63)     /* acid without base */
573     {
574       if (src[i - 1] == 101 ||                  /* remove acid over acid row */
575           src[i + 1] == 101)
576         src[i - 64] = 6;        /* replace element above with 'Xblank' */
577       else
578         src[i - 64] = 255;      /* replace element above with 'Xfake_acid_1' */
579     }
580   }
581
582   /* fix acid in eater 1 */
583   for (i = 2051; i < 2057; i++)
584     if (src[i] == 63)
585       src[i - 3] = 101;
586
587   /* fix acid in eater 2 */
588   for (i = 2060; i < 2066; i++)
589     if (src[i] == 63)
590       src[i - 3] = 101;
591
592   /* fix acid in eater 3 */
593   for (i = 2069; i < 2075; i++)
594     if (src[i] == 63)
595       src[i - 3] = 101;
596
597   /* fix acid in eater 4 */
598   for (i = 2078; i < 2084; i++)
599     if (src[i] == 63)
600       src[i - 3] = 101;
601
602   /* fix acid in eater 5 */
603   for (i = 2115; i < 2121; i++)
604     if (src[i] == 63)
605       src[i - 3] = 101;
606
607   /* fix acid in eater 6 */
608   for (i = 2124; i < 2130; i++)
609     if (src[i] == 63)
610       src[i - 3] = 101;
611
612   /* fix acid in eater 7 */
613   for (i = 2133; i < 2139; i++)
614     if (src[i] == 63)
615       src[i - 3] = 101;
616
617   /* fix acid in eater 8 */
618   for (i = 2142; i < 2148; i++)
619     if (src[i] == 63)
620       src[i - 3] = 101;
621
622   /* old style time */
623   src[2094] = 0;
624
625   /* player 1 pos */
626   src[2096] &= 7;
627   src[src[2096] << 8 | src[2097]] = 128;
628
629   /* player 2 pos */
630   src[2098] &= 7;
631   src[src[2098] << 8 | src[2099]] = 128;
632
633   /* amoeba speed */
634   if ((src[2100] << 8 | src[2101]) > 9999)
635   {
636     src[2100] = 39;
637     src[2101] = 15;
638   }
639
640   /* time wonderwall */
641   if ((src[2102] << 8 | src[2103]) > 9999)
642   {
643     src[2102] = 39;
644     src[2103] = 15;
645   }
646
647   /* time */
648   if ((src[2110] << 8 | src[2111]) > 9999)
649   {
650     src[2110] = 39;
651     src[2111] = 15;
652   }
653
654   /* wind direction */
655   i = src[2149];
656   i &= 15;
657   i &= -i;
658   src[2149] = i;
659
660   /* time lenses */
661   if ((src[2154] << 8 | src[2155]) > 9999)
662   {
663     src[2154] = 39;
664     src[2155] = 15;
665   }
666
667   /* time magnify */
668   if ((src[2156] << 8 | src[2157]) > 9999)
669   {
670     src[2156] = 39;
671     src[2157] = 15;
672   }
673
674   /* ball object */
675   src[2158] = 0;
676   src[2159] = map_v6[src[2159]];
677
678   /* ball pause */
679   if ((src[2160] << 8 | src[2161]) > 9999)
680   {
681     src[2160] = 39;
682     src[2161] = 15;
683   }
684
685   /* ball data */
686   src[2162] &= 129;
687   if (src[2162] & 1)
688     src[2163] = 0;
689
690   /* android move pause */
691   if ((src[2164] << 8 | src[2165]) > 9999)
692   {
693     src[2164] = 39;
694     src[2165] = 15;
695   }
696
697   /* android clone pause */
698   if ((src[2166] << 8 | src[2167]) > 9999)
699   {
700     src[2166] = 39;
701     src[2167] = 15;
702   }
703
704   /* android data */
705   src[2168] &= 31;
706
707   /* size of v6 cave */
708   length = 2172;
709
710   if (options.debug)
711     Error(ERR_DEBUG, "EM level file version: %d", file_version);
712
713   return file_version;
714 }
715
716 /*
717 2000-08-20 09:41:18
718 David Tritscher
719
720 structure of emerald mine level disk files
721 ----------------------------------------------------------------------
722
723 if(len >= 2172 && (buf[2106] == 255 && buf[2107] == 54 && buf[2108] == 48 && buf[2109] == 48)) // v6
724 if(len >= 2110 && (buf[2106] == 255 && buf[2107] == 53 && buf[2108] == 48 && buf[2109] == 48)) // v5
725 if(len >= 2106 && (buf[1983] == 116 || buf[2047] == 116)) // v4
726 if(len >= 2106 && (buf[1983] == 27 || buf[2047] == 219)) // v3
727
728 buf[0]=241;buf[1]=248;for(i=0,j=101;i<2106;i++,j+=7)buf[i]=(buf[i]^j)-17; // decrypt
729
730 number of movements (calls to logic) = time * 50 / 8
731
732 {} reserved (but some broken levels use them)
733
734 ----------------------------------------------------------------------
735
736 version 6
737
738 0: level
739 2048: eater exp 1
740 2057: eater exp 2
741 2066: eater exp 3
742 2075: eater exp 4
743 2084: emerald value
744 2085: diamond value
745 2086: alien value
746 2087: tank value
747 2088: bug value
748 2089: eater value
749 2090: nut value
750 2091: dynamite value
751 2092: key value
752 2093: bonus
753 2094
754 2095: emeralds needed
755 2096: player 1 pos
756 2098: player 2 pos
757 2100: ameuba speed
758 2102: wonderwall time
759 2104: wheel time
760 2106: ID (0xff363030)
761 2110: time
762 2112: eater exp 5
763 2121: eater exp 6
764 2130: eater exp 7
765 2139: eater exp 8
766 2148: flags bit#7=NOI #6=RIS
767 2149: wind direction bit#0=right #1=down #2=left #3=up
768 2150: cave number bit#7=teamwork
769 2151: lenses value
770 2152: magnify value
771 2153: spring value
772 2154: lenses time
773 2156: magnify time
774 2158
775 2159: ball object
776 2160: ball speed
777 2162: ball info bit#15=switch state #8=random
778 ; bit#0=N #1=S #2=W #3=E #4=SE #5=SW #6=NE #7=NW
779 2164: android move speed
780 2166: android clone speed
781 2168: android data
782 ; bit#0=emerald #1=diamond #2=stone #3=bomb #4=nut #5=tank #6=eater
783 ; #7=bug #8=alien #9=spring #10=balloon #11=ameuba #12=dynamite
784 2170
785 2172: SIZE
786
787 0: stone
788 1: stone {stone_fall}
789 2: diamond
790 3: diamond {diamond_fall}
791 4: alien
792 5: alien {alien_pause}
793 6: pause {boom_1}
794 7: pause {boom_2}
795 8: tank_n_1
796 9: tank_e_1
797 10: tank_s_1
798 11: tank_w_1
799 12: tank_n_2
800 13: tank_e_2
801 14: tank_s_2
802 15: tank_w_2
803 16: bomb
804 17: bomb {bomb_fall}
805 18: emerald
806 19: emerald {emerald_fall}
807 20: bug_n_1
808 21: bug_e_1
809 22: bug_s_1
810 23: bug_w_1
811 24: bug_n_2
812 25: bug_e_2
813 26: bug_s_2
814 27: bug_w_2
815 28: drip
816 29: drip {drip_fall}
817 30: blank {drip_stretchB}
818 31: drip {drip_stretch}
819 32: stone {stone_pause}
820 33: bomb {bomb_pause}
821 34: diamond {diamond_pause}
822 35: emerald {emerald_pause}
823 36: wonderwall {wonderwallB}
824 37: nut
825 38: nut {nut_fall}
826 39: nut {nut_pause}
827 40: wheel {wheelB}
828 41: eater_n
829 42: eater_s
830 43: eater_w
831 44: eater_e
832 45: sand_stone
833 46: blank {sand_stonein_2}
834 47: blank {sand_stonein_3}
835 48: blank {sand_stonein_4}
836 49: sand {sand_stonesand_2}
837 50: sand {sand_stonesand_3}
838 51: sand {sand_stonesand_4}
839 52: sand_stone {sand_sandstone_2}
840 53: sand_stone {sand_sandstone_3}
841 54: sand_stone {sand_sandstone_4}
842 55: sand {sand_stonesand_4}
843 56: stone {sand_stoneout_2}
844 57: slide_ew
845 58: slide_ns
846 59: dynamite_1
847 60: dynamite_2
848 61: dynamite_3
849 62: dynamite_4
850 63: acid_s
851 64: exit_1
852 65: exit_2
853 66: exit_3
854 67: balloon
855 68: plant
856 69: spring
857 70: spring {spring_fall}
858 71: spring {spring_w}
859 72: spring {spring_e}
860 73: ball_1
861 74: ball_2
862 75: android
863 76: pause {}
864 77: android {android_n_1}
865 78: android {android_n_2}
866 79: android {android_s_1}
867 80: android {android_s_2}
868 81: android {android_e_1}
869 82: android {android_e_2}
870 83: android {android_w_1}
871 84: android {android_w_2}
872 85: fake_blank {}
873 86: fake_blank {}
874 87: fake_blank {}
875 88: fake_blank {}
876 89: fake_blank {}
877 90: fake_blank {}
878 91: fake_blank {}
879 92: fake_blank {}
880 93: fake_blank {}
881 94: fake_blank {}
882 95: fake_blank {}
883 96: fake_blank {}
884 97: fake_blank {}
885 98: fake_blank {}
886 99: spring {push_spring_w}
887 100: spring {push_spring_e}
888 101: plant {acid_1}
889 102: plant {acid_2}
890 103: plant {acid_3}
891 104: plant {acid_4}
892 105: plant {acid_5}
893 106: plant {acid_6}
894 107: plant {acid_7}
895 108: plant {acid_8}
896 109: pause {grass_wB}
897 110: pause {grass_eB}
898 111: pause {grass_nB}
899 112: pause {grass_sB}
900 113: pause {dynamite_blank}
901 114: nut {push_nut_w}
902 115: nut {push_nut_e}
903 116: steel_2 {end of level}
904 117: pause {}
905 118: pause {emerald_blank}
906 119: bomb {push_bomb_w}
907 120: bomb {push_bomb_e}
908 121: stone {push_stone_w}
909 122: stone {push_stone_e}
910 123: pause {diamond_blank}
911 124: pause {dirt_wB}
912 125: pause {dirt_eB}
913 126: pause {dirt_nB}
914 127: pause {dirt_sB}
915
916 128: blank
917 129: roundwall_2
918 130: grass
919 131: steel_2
920 132: wall_2
921 133: key_1
922 134: key_2
923 135: key_3
924 136: key_4
925 137: door_1
926 138: door_2
927 139: door_3
928 140: door_4
929 141: dripper
930 142: fake_door_1
931 143: fake_door_2
932 144: fake_door_3
933 145: fake_door_4
934 146: wonderwall
935 147: wheel
936 148: sand
937 149: acid_nw
938 150: acid_ne
939 151: acid_sw
940 152: acid_se
941 153: fake_blank
942 154: ameuba_1
943 155: ameuba_2
944 156: ameuba_3
945 157: ameuba_4
946 158: exit
947 159: alpha_arrow_w
948 160: fake_grass
949 161: lenses
950 162: magnify
951 163: fake_blank {fake_blankB}
952 164: fake_grass {fake_grassB}
953 165: switch
954 166: switch {switchB}
955 167: blank {}
956 168: decor_8
957 169: decor_9
958 170: decor_10
959 171: decor_5
960 172: alpha_comma
961 173: alpha_apost
962 174: alpha_minus
963 175: dynamite
964 176: steel_3
965 177: decor_6
966 178: decor_7
967 179: steel_1
968 180: roundwall_1
969 181: decor_2
970 182: decor_4
971 183: decor_3
972 184: wind_any
973 185: wind_e
974 186: wind_s
975 187: wind_w
976 188: wind_n
977 189: dirt
978 190: plant {}
979 191: key_5
980 192: key_6
981 193: key_7
982 194: key_8
983 195: door_5
984 196: door_6
985 197: door_7
986 198: door_8
987 199: bumper
988 200: alpha_a
989 201: alpha_b
990 202: alpha_c
991 203: alpha_d
992 204: alpha_e
993 205: alpha_f
994 206: alpha_g
995 207: alpha_h
996 208: alpha_i
997 209: alpha_j
998 210: alpha_k
999 211: alpha_l
1000 212: alpha_m
1001 213: alpha_n
1002 214: alpha_o
1003 215: alpha_p
1004 216: alpha_q
1005 217: alpha_r
1006 218: alpha_s
1007 219: alpha_t
1008 220: alpha_u
1009 221: alpha_v
1010 222: alpha_w
1011 223: alpha_x
1012 224: alpha_y
1013 225: alpha_z
1014 226: alpha_0
1015 227: alpha_1
1016 228: alpha_2
1017 229: alpha_3
1018 230: alpha_4
1019 231: alpha_5
1020 232: alpha_6
1021 233: alpha_7
1022 234: alpha_8
1023 235: alpha_9
1024 236: alpha_perio
1025 237: alpha_excla
1026 238: alpha_colon
1027 239: alpha_quest
1028 240: alpha_arrow_e
1029 241: decor_1
1030 242: fake_door_5
1031 243: fake_door_6
1032 244: fake_door_7
1033 245: fake_door_8
1034 246: fake_blank {}
1035 247: fake_blank {}
1036 248: fake_blank {}
1037 249: fake_blank {}
1038 250: fake_blank {}
1039 251: fake_blank {}
1040 252: fake_blank {}
1041 253: fake_blank {}
1042 254: fake_blank {}
1043 255: fake_blank {}
1044
1045 ----------------------------------------------------------------------
1046
1047 version 5
1048
1049 0: level
1050 2048: eater exp 1
1051 2057: eater exp 2
1052 2066: eater exp 3
1053 2075: eater exp 4
1054 2084: emerald value
1055 2085: diamond value
1056 2086: alien value
1057 2087: tank value
1058 2088: bug value
1059 2089: eater value
1060 2090: nut value
1061 2091: dynamite value
1062 2092: key value
1063 2093: bonus
1064 2094: time
1065 2095: emeralds needed
1066 2096: player 1 pos
1067 2098: player 2 pos
1068 2100: ameuba speed
1069 2102: wonderwall time
1070 2104: wheel time
1071 2106: ID (0xff353030)
1072 2110: SIZE
1073
1074 0: stone
1075 1: stone {stone_fall}
1076 2: diamond
1077 3: diamond {diamond_fall}
1078 4: alien
1079 5: alien {alien_pause}
1080 6: pause {boom_1}
1081 7: pause {boom_2}
1082 8: tank_n_1
1083 9: tank_e_1
1084 10: tank_s_1
1085 11: tank_w_1
1086 12: tank_n_2
1087 13: tank_e_2
1088 14: tank_s_2
1089 15: tank_w_2
1090 16: bomb
1091 17: bomb {bomb_fall}
1092 18: emerald
1093 19: emerald {emerald_fall}
1094 20: bug_n_1
1095 21: bug_e_1
1096 22: bug_s_1
1097 23: bug_w_1
1098 24: bug_n_2
1099 25: bug_e_2
1100 26: bug_s_2
1101 27: bug_w_2
1102 28: drip
1103 29: drip {drip_fall}
1104 30: blank {drip_stretchB}
1105 31: drip {drip_stretch}
1106 32: stone {stone_pause}
1107 33: bomb {bomb_pause}
1108 34: diamond {diamond_pause}
1109 35: emerald {emerald_pause}
1110 36: wonderwall {wonderwallB}
1111 37: nut
1112 38: nut {nut_fall}
1113 39: nut {nut_pause}
1114 40: wheel {wheelB}
1115 41: eater_n
1116 42: eater_s
1117 43: eater_w
1118 44: eater_e
1119 45: sand_stone
1120 46: blank {sand_stonein_2}
1121 47: blank {sand_stonein_3}
1122 48: blank {sand_stonein_4}
1123 49: sand {sand_stonesand_2}
1124 50: sand {sand_stonesand_3}
1125 51: sand {sand_stonesand_4}
1126 52: sand_stone {sand_sandstone_2}
1127 53: sand_stone {sand_sandstone_3}
1128 54: sand_stone {sand_sandstone_4}
1129 55: sand {sand_stonesand_4}
1130 56: stone {sand_stoneout_2}
1131 57: slide_ew
1132 58: slide_ns
1133 59: dynamite_1
1134 60: dynamite_2
1135 61: dynamite_3
1136 62: dynamite_4
1137 63: acid_s
1138 64: exit_1
1139 65: exit_2
1140 66: exit_3
1141 67: balloon
1142 68: plant
1143 69: fake_blank {}
1144 70: fake_blank {}
1145 71: fake_blank {}
1146 72: fake_blank {}
1147 73: fake_blank {}
1148 74: fake_blank {}
1149 75: fake_blank {}
1150 76: fake_blank {}
1151 77: fake_blank {}
1152 78: fake_blank {}
1153 79: fake_blank {}
1154 80: fake_blank {}
1155 81: fake_blank {}
1156 82: fake_blank {}
1157 83: fake_blank {}
1158 84: fake_blank {}
1159 85: fake_blank {}
1160 86: fake_blank {}
1161 87: fake_blank {}
1162 88: fake_blank {}
1163 89: fake_blank {}
1164 90: fake_blank {}
1165 91: fake_blank {}
1166 92: fake_blank {}
1167 93: fake_blank {}
1168 94: fake_blank {}
1169 95: fake_blank {}
1170 96: fake_blank {}
1171 97: fake_blank {}
1172 98: fake_blank {}
1173 99: fake_blank {}
1174 100: fake_blank {}
1175 101: plant {acid_1}
1176 102: plant {acid_2}
1177 103: plant {acid_3}
1178 104: plant {acid_4}
1179 105: plant {acid_5}
1180 106: plant {acid_6}
1181 107: plant {acid_7}
1182 108: plant {acid_8}
1183 109: pause {grass_wB}
1184 110: pause {grass_eB}
1185 111: pause {grass_nB}
1186 112: pause {grass_sB}
1187 113: pause {dynamite_blank}
1188 114: nut {push_nut_w}
1189 115: nut {push_nut_e}
1190 116: steel_2 {end of level}
1191 117: dynamite_4 {boom_2}
1192 118: pause {emerald_blank}
1193 119: bomb {push_bomb_w}
1194 120: bomb {push_bomb_e}
1195 121: stone {push_stone_w}
1196 122: stone {push_stone_e}
1197 123: pause {diamond_blank}
1198 124: pause {dirt_wB}
1199 125: pause {dirt_eB}
1200 126: pause {dirt_nB}
1201 127: pause {dirt_sB}
1202
1203 128: blank
1204 129: roundwall_2
1205 130: grass
1206 131: steel_2
1207 132: wall_2
1208 133: key_1
1209 134: key_2
1210 135: key_3
1211 136: key_4
1212 137: door_1
1213 138: door_2
1214 139: door_3
1215 140: door_4
1216 141: dripper
1217 142: fake_door_1
1218 143: fake_door_2
1219 144: fake_door_3
1220 145: fake_door_4
1221 146: wonderwall
1222 147: wheel
1223 148: sand
1224 149: acid_nw
1225 150: acid_ne
1226 151: acid_sw
1227 152: acid_se
1228 153: fake_blank
1229 154: ameuba_1
1230 155: ameuba_2
1231 156: ameuba_3
1232 157: ameuba_4
1233 158: exit
1234 159: alpha_arrow_w
1235 160: fake_grass
1236 161: fake_blank {}
1237 162: fake_blank {}
1238 163: fake_blank {}
1239 164: fake_blank {}
1240 165: fake_blank {}
1241 166: fake_blank {}
1242 167: blank {}
1243 168: decor_8
1244 169: decor_9
1245 170: decor_10
1246 171: decor_5
1247 172: alpha_comma
1248 173: alpha_apost
1249 174: alpha_minus
1250 175: dynamite
1251 176: steel_3
1252 177: decor_6
1253 178: decor_7
1254 179: steel_1
1255 180: roundwall_1
1256 181: decor_2
1257 182: decor_4
1258 183: decor_3
1259 184: wind_any
1260 185: wind_e
1261 186: wind_s
1262 187: wind_w
1263 188: wind_n
1264 189: dirt
1265 190: plant {}
1266 191: fake_blank {}
1267 192: fake_blank {}
1268 193: fake_blank {}
1269 194: fake_blank {}
1270 195: fake_blank {}
1271 196: fake_blank {}
1272 197: fake_blank {}
1273 198: fake_blank {}
1274 199: fake_blank {}
1275 200: alpha_a
1276 201: alpha_b
1277 202: alpha_c
1278 203: alpha_d
1279 204: alpha_e
1280 205: alpha_f
1281 206: alpha_g
1282 207: alpha_h
1283 208: alpha_i
1284 209: alpha_j
1285 210: alpha_k
1286 211: alpha_l
1287 212: alpha_m
1288 213: alpha_n
1289 214: alpha_o
1290 215: alpha_p
1291 216: alpha_q
1292 217: alpha_r
1293 218: alpha_s
1294 219: alpha_t
1295 220: alpha_u
1296 221: alpha_v
1297 222: alpha_w
1298 223: alpha_x
1299 224: alpha_y
1300 225: alpha_z
1301 226: alpha_0
1302 227: alpha_1
1303 228: alpha_2
1304 229: alpha_3
1305 230: alpha_4
1306 231: alpha_5
1307 232: alpha_6
1308 233: alpha_7
1309 234: alpha_8
1310 235: alpha_9
1311 236: alpha_perio
1312 237: alpha_excla
1313 238: alpha_colon
1314 239: alpha_quest
1315 240: alpha_arrow_e
1316 241: decor_1
1317 242: fake_blank {}
1318 243: fake_blank {}
1319 244: fake_blank {}
1320 245: fake_blank {}
1321 246: fake_blank {}
1322 247: fake_blank {}
1323 248: fake_blank {}
1324 249: fake_blank {}
1325 250: fake_blank {}
1326 251: fake_blank {}
1327 252: fake_blank {}
1328 253: fake_blank {}
1329 254: fake_blank {}
1330 255: fake_blank {}
1331
1332 ----------------------------------------------------------------------
1333
1334 version 4
1335
1336 0: level
1337 2048: eater exp 1
1338 2057: eater exp 2
1339 2066: eater exp 3
1340 2075: eater exp 4
1341 2084: emerald value
1342 2085: diamond value
1343 2086: alien value
1344 2087: tank value
1345 2088: bug value
1346 2089: eater value
1347 2090: nut value
1348 2091: dynamite value
1349 2092: key value
1350 2093: bonus
1351 2094: time
1352 2095: emeralds needed
1353 2096: player 1 pos
1354 2098: player 2 pos
1355 2100: ameuba speed
1356 2102: wonderwall time
1357 2104: wheel time
1358 2106: SIZE
1359
1360 0: blank
1361 1: emerald
1362 2: diamond
1363 3: stone
1364 4: alien
1365 5: tank_n_1
1366 6: bomb
1367 7: bug_n_1
1368 8: drip
1369 9: nut
1370 10: eater_n
1371 11: sand_stone
1372 12: grass
1373 13: roundwall_1
1374 14: steel_1
1375 15: wall_1
1376 16: key_1
1377 17: key_2
1378 18: key_3
1379 19: key_4
1380 20: wonderwall
1381 21: wheel
1382 22: dynamite
1383 23: exit_2 {}
1384 24: exit_3 {}
1385 25: exit_1 {}
1386 26: diamond {diamond_shine}
1387 27: emerald {emerald_shine}
1388
1389 0: stone
1390 1: stone {stone_fall}
1391 2: diamond
1392 3: diamond {diamond_fall}
1393 4: alien
1394 5: alien {alien_pause}
1395 6: pause {boom_1}
1396 7: pause {boom_2}
1397 8: tank_n_1
1398 9: tank_e_1
1399 10: tank_s_1
1400 11: tank_w_1
1401 12: tank_n_2
1402 13: tank_e_2
1403 14: tank_s_2
1404 15: tank_w_2
1405 16: bomb
1406 17: bomb {bomb_fall}
1407 18: emerald
1408 19: emerald {emerald_fall}
1409 20: bug_n_1
1410 21: bug_e_1
1411 22: bug_s_1
1412 23: bug_w_1
1413 24: bug_n_2
1414 25: bug_e_2
1415 26: bug_s_2
1416 27: bug_w_2
1417 28: drip
1418 29: drip {drip_fall}
1419 30: blank {drip_stretchB}
1420 31: drip {drip_stretch}
1421 32: stone {stone_pause}
1422 33: bomb {bomb_pause}
1423 34: diamond {diamond_pause}
1424 35: emerald {emerald_pause}
1425 36: wonderwall {wonderwallB}
1426 37: nut
1427 38: nut {nut_fall}
1428 39: nut {nut_pause}
1429 40: wheel {wheelB}
1430 41: eater_n
1431 42: eater_s
1432 43: eater_w
1433 44: eater_e
1434 45: sand_stone
1435 46: blank {sand_stonein_2}
1436 47: blank {sand_stonein_3}
1437 48: blank {sand_stonein_4}
1438 49: sand {sand_stonesand_2}
1439 50: sand {sand_stonesand_3}
1440 51: sand {sand_stonesand_4}
1441 52: sand_stone {sand_sandstone_2}
1442 53: sand_stone {sand_sandstone_3}
1443 54: sand_stone {sand_sandstone_4}
1444 55: sand {sand_stonesand_4}
1445 56: stone {sand_stoneout_2}
1446 57: fake_blank {}
1447 58: fake_blank {}
1448 59: dynamite_1
1449 60: dynamite_2
1450 61: dynamite_3
1451 62: dynamite_4
1452 63: acid_s
1453 64: exit_1
1454 65: exit_2
1455 66: exit_3
1456 67: fake_blank {}
1457 68: fake_blank {}
1458 69: fake_blank {}
1459 70: fake_blank {}
1460 71: fake_blank {}
1461 72: fake_blank {}
1462 73: fake_blank {}
1463 74: fake_blank {}
1464 75: fake_blank {}
1465 76: fake_blank {}
1466 77: fake_blank {}
1467 78: fake_blank
1468 79: fake_blank {}
1469 80: fake_blank {}
1470 81: fake_blank {}
1471 82: fake_blank {}
1472 83: fake_blank {}
1473 84: fake_blank {}
1474 85: fake_blank {}
1475 86: fake_blank {}
1476 87: fake_blank {}
1477 88: fake_blank {}
1478 89: fake_blank {}
1479 90: fake_blank {}
1480 91: fake_blank {}
1481 92: fake_blank {}
1482 93: fake_blank {}
1483 94: fake_blank {}
1484 95: fake_blank {}
1485 96: fake_blank {}
1486 97: fake_blank {}
1487 98: fake_blank {}
1488 99: fake_blank {}
1489 100: fake_blank {}
1490 101: fake_blank {}
1491 102: fake_blank {}
1492 103: fake_blank {}
1493 104: fake_blank {}
1494 105: fake_blank {}
1495 106: fake_blank {}
1496 107: fake_blank {}
1497 108: fake_blank {}
1498 109: fake_blank {}
1499 110: fake_blank {}
1500 111: fake_blank {}
1501 112: fake_blank {}
1502 113: pause {dynamite_blank}
1503 114: nut {push_nut_w}
1504 115: nut {push_nut_e}
1505 116: steel_1 {end of level}
1506 117: dynamite_4 {boom_2}
1507 118: pause {emerald_blank}
1508 119: bomb {push_bomb_w}
1509 120: bomb {push_bomb_e}
1510 121: stone {push_stone_w}
1511 122: stone {push_stone_e}
1512 123: pause {diamond_blank}
1513 124: pause {dirt_wB}
1514 125: pause {dirt_eB}
1515 126: pause {dirt_nB}
1516 127: pause {dirt_sB}
1517
1518 128: blank
1519 129: roundwall_1
1520 130: grass
1521 131: steel_1
1522 132: wall_1
1523 133: key_1
1524 134: key_2
1525 135: key_3
1526 136: key_4
1527 137: door_1
1528 138: door_2
1529 139: door_3
1530 140: door_4
1531 141: dripper {}
1532 142: fake_door_1
1533 143: fake_door_2
1534 144: fake_door_3
1535 145: fake_door_4
1536 146: wonderwall
1537 147: wheel
1538 148: sand
1539 149: acid_nw
1540 150: acid_ne
1541 151: acid_sw
1542 152: acid_se
1543 153: plant {acid_1}
1544 154: ameuba_5
1545 155: ameuba_6
1546 156: ameuba_7
1547 157: ameuba_8
1548 158: exit
1549 159: fake_grass {dirt}
1550 160: fake_grass {dirt}
1551 161: fake_grass {dirt}
1552 162: fake_grass {dirt}
1553 163: fake_grass {dirt}
1554 164: fake_grass {dirt}
1555 165: fake_grass {dirt}
1556 166: fake_grass {dirt}
1557 167: fake_grass {dirt}
1558 168: fake_grass {dirt}
1559 169: fake_grass {dirt}
1560 170: fake_grass {dirt}
1561 171: fake_grass {dirt}
1562 172: fake_grass {dirt}
1563 173: fake_grass {dirt}
1564 174: fake_grass {dirt}
1565 175: dynamite
1566 176: fake_blank {}
1567 177: fake_blank {}
1568 178: fake_blank {}
1569 179: fake_blank {}
1570 180: fake_blank {}
1571 181: fake_blank {}
1572 182: fake_blank {}
1573 183: fake_blank {}
1574 184: fake_blank {}
1575 185: fake_blank {}
1576 186: fake_blank {}
1577 187: fake_blank {}
1578 188: fake_blank {}
1579 189: fake_blank {}
1580 190: plant {}
1581 191: fake_blank {}
1582 192: fake_blank {}
1583 193: fake_blank {}
1584 194: fake_blank {}
1585 195: fake_blank {}
1586 196: fake_blank {}
1587 197: fake_blank {}
1588 198: fake_blank {}
1589 199: fake_blank {}
1590 200: alpha_a
1591 201: alpha_b
1592 202: alpha_c
1593 203: alpha_d
1594 204: alpha_e
1595 205: alpha_f
1596 206: alpha_g
1597 207: alpha_h
1598 208: alpha_i
1599 209: alpha_j
1600 210: alpha_k
1601 211: alpha_l
1602 212: alpha_m
1603 213: alpha_n
1604 214: alpha_o
1605 215: alpha_p
1606 216: alpha_q
1607 217: alpha_r
1608 218: alpha_s
1609 219: alpha_t
1610 220: alpha_u
1611 221: alpha_v
1612 222: alpha_w
1613 223: alpha_x
1614 224: alpha_y
1615 225: alpha_z
1616 226: alpha_0
1617 227: alpha_1
1618 228: alpha_2
1619 229: alpha_3
1620 230: alpha_4
1621 231: alpha_5
1622 232: alpha_6
1623 233: alpha_7
1624 234: alpha_8
1625 235: alpha_9
1626 236: alpha_perio
1627 237: alpha_excla
1628 238: alpha_colon
1629 239: alpha_quest
1630 240: alpha_arrow_e {}
1631 241: decor_1 {alpha_copyr}
1632 242: fake_blank {}
1633 243: fake_blank {}
1634 244: fake_blank {}
1635 245: fake_blank {}
1636 246: fake_blank {}
1637 247: fake_blank {}
1638 248: fake_blank {}
1639 249: fake_blank {}
1640 250: fake_blank {}
1641 251: fake_blank {}
1642 252: fake_blank {}
1643 253: fake_blank {}
1644 254: fake_blank {}
1645 255: fake_blank {}
1646
1647 ----------------------------------------------------------------------
1648 */