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