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