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