rnd-20031008-1-src
[rocksndiamonds.git] / src / main.c
1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back!               *
3 *----------------------------------------------------------*
4 * (c) 1995-2002 Artsoft Entertainment                      *
5 *               Holger Schemel                             *
6 *               Detmolder Strasse 189                      *
7 *               33604 Bielefeld                            *
8 *               Germany                                    *
9 *               e-mail: info@artsoft.org                   *
10 *----------------------------------------------------------*
11 * main.c                                                   *
12 ***********************************************************/
13
14 #include "libgame/libgame.h"
15
16 #include "main.h"
17 #include "init.h"
18 #include "game.h"
19 #include "events.h"
20 #include "config.h"
21
22 #if 0
23 GC                      tile_clip_gc;
24 Bitmap                 *pix[NUM_BITMAPS];
25 #endif
26 Bitmap                 *bitmap_db_field, *bitmap_db_door;
27 #if 0
28 Pixmap                  tile_clipmask[NUM_TILES];
29 #endif
30 DrawBuffer             *fieldbuffer;
31 DrawBuffer             *drawto_field;
32
33 int                     game_status = -1;
34 boolean                 level_editor_test_game = FALSE;
35 boolean                 network_playing = FALSE;
36
37 int                     key_joystick_mapping = 0;
38
39 boolean                 redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
40 int                     redraw_x1 = 0, redraw_y1 = 0;
41
42 short                   Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
43 short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
44 short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 short                   MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short                   ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short                   Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short                   Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
49 short                   StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
51 boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
52 boolean                 Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
53 unsigned long           Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
54 unsigned long           ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
55 short                   JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
56 short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
57 short                   AmoebaCnt[MAX_NUM_AMOEBA];
58 short                   AmoebaCnt2[MAX_NUM_AMOEBA];
59 short                   ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
60 short                   ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
61
62 unsigned long           Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS];
63
64 int                     GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
65 int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
66 int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
67 int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
68
69 int                     lev_fieldx, lev_fieldy;
70 int                     scroll_x, scroll_y;
71
72 int                     FX = SX, FY = SY;
73 int                     ScrollStepSize;
74 int                     ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
75 int                     ScreenGfxPos = 0;
76 int                     BorderElement = EL_STEELWALL;
77 int                     GameFrameDelay = GAME_FRAME_DELAY;
78 int                     FfwdFrameDelay = FFWD_FRAME_DELAY;
79 int                     BX1 = 0, BY1 = 0;
80 int                     BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1;
81 int                     SBX_Left, SBX_Right;
82 int                     SBY_Upper, SBY_Lower;
83 int                     ZX, ZY;
84 int                     ExitX, ExitY;
85 int                     AllPlayersGone;
86
87 int                     TimeFrames, TimePlayed, TimeLeft;
88
89 boolean                 network_player_action_received = FALSE;
90
91 struct LevelInfo        level, level_template;
92 struct PlayerInfo       stored_player[MAX_PLAYERS], *local_player = NULL;
93 struct HiScore          highscore[MAX_SCORE_ENTRIES];
94 struct TapeInfo         tape;
95 struct SetupInfo        setup;
96 struct GameInfo         game;
97 struct GlobalInfo       global;
98 struct MenuInfo         menu;
99 struct DoorInfo         door_1, door_2;
100 struct GraphicInfo     *graphic_info = NULL;
101 struct SoundInfo       *sound_info = NULL;
102
103
104 /* ------------------------------------------------------------------------- */
105 /* element definitions                                                       */
106 /* ------------------------------------------------------------------------- */
107
108 struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
109 {
110   /* keyword to start parser: "ELEMENT_INFO_START" <-- do not change! */
111
112   /* ----------------------------------------------------------------------- */
113   /* "real" level file elements                                              */
114   /* ----------------------------------------------------------------------- */
115
116   {
117     "empty_space",
118     "empty_space",
119     "empty space"
120   },
121   {
122     "sand",
123     "sand",
124     "sand"
125   },
126   {
127     "wall",
128     "wall",
129     "normal wall"
130   },
131   {
132     "wall_slippery",
133     "wall",
134     "slippery wall"
135   },
136   {
137     "rock",
138     "rock",
139     "rock"
140   },
141   {
142     "key_obsolete",
143     "obsolete",
144     "key (OBSOLETE)"
145   },
146   {
147     "emerald",
148     "emerald",
149     "emerald"
150   },
151   {
152     "exit_closed",
153     "exit",
154     "closed exit"
155   },
156   {
157     "player_obsolete",
158     "obsolete",
159     "player (OBSOLETE)"
160   },
161   {
162     "bug",
163     "bug",
164     "bug (random start direction)"
165   },
166   {
167     "spaceship",
168     "spaceship",
169     "spaceship (random start direction)"
170   },
171   {
172     "yamyam",
173     "yamyam",
174     "yam yam"
175   },
176   {
177     "robot",
178     "robot",
179     "robot"
180   },
181   {
182     "steelwall",
183     "wall",
184     "steel wall"
185   },
186   {
187     "diamond",
188     "diamond",
189     "diamond"
190   },
191   {
192     "amoeba_dead",
193     "amoeba",
194     "dead amoeba"
195   },
196   {
197     "quicksand_empty",
198     "quicksand",
199     "empty quicksand"
200   },
201   {
202     "quicksand_full",
203     "quicksand",
204     "quicksand with rock"
205   },
206   {
207     "amoeba_drop",
208     "amoeba",
209     "amoeba drop"
210   },
211   {
212     "bomb",
213     "bomb",
214     "bomb"
215   },
216   {
217     "magic_wall",
218     "magic_wall",
219     "magic wall"
220   },
221   {
222     "speed_pill",
223     "speed_pill",
224     "speed pill"
225   },
226   {
227     "acid",
228     "acid",
229     "acid"
230   },
231   {
232     "amoeba_wet",
233     "amoeba",
234     "dropping amoeba"
235   },
236   {
237     "amoeba_dry",
238     "amoeba",
239     "normal amoeba"
240   },
241   {
242     "nut",
243     "nut",
244     "nut with emerald"
245   },
246   {
247     "game_of_life",
248     "game_of_life",
249     "Conway's wall of life"
250   },
251   {
252     "biomaze",
253     "biomaze",
254     "biomaze"
255   },
256   {
257     "dynamite.active",
258     "dynamite",
259     "burning dynamite"
260   },
261   {
262     "stoneblock",
263     "wall",
264     "wall"
265   },
266   {
267     "robot_wheel",
268     "robot_wheel",
269     "magic wheel"
270   },
271   {
272     "robot_wheel.active",
273     "robot_wheel",
274     "magic wheel (running)"
275   },
276   {
277     "key_1",
278     "key",
279     "red key"
280   },
281   {
282     "key_2",
283     "key",
284     "yellow key"
285   },
286   {
287     "key_3",
288     "key",
289     "green key"
290   },
291   {
292     "key_4",
293     "key",
294     "blue key"
295   },
296   {
297     "gate_1",
298     "gate",
299     "red door"
300   },
301   {
302     "gate_2",
303     "gate",
304     "yellow door"
305   },
306   {
307     "gate_3",
308     "gate",
309     "green door"
310   },
311   {
312     "gate_4",
313     "gate",
314     "blue door"
315   },
316   {
317     "gate_1_gray",
318     "gate",
319     "gray door (opened by red key)"
320   },
321   {
322     "gate_2_gray",
323     "gate",
324     "gray door (opened by yellow key)"},
325   {
326     "gate_3_gray",
327     "gate",
328     "gray door (opened by green key)"},
329   {
330     "gate_4_gray",
331     "gate",
332     "gray door (opened by blue key)"},
333   {
334     "dynamite",
335     "dynamite",
336     "dynamite"
337   },
338   {
339     "pacman",
340     "pacman",
341     "pac man (random start direction)"
342   },
343   {
344     "invisible_wall",
345     "wall",
346     "invisible normal wall"
347   },
348   {
349     "lamp",
350     "lamp",
351     "lamp (off)"
352   },
353   {
354     "lamp.active",
355     "lamp",
356     "lamp (on)"
357   },
358   {
359     "wall_emerald",
360     "wall",
361     "wall with emerald"
362   },
363   {
364     "wall_diamond",
365     "wall",
366     "wall with diamond"
367   },
368   {
369     "amoeba_full",
370     "amoeba",
371     "amoeba with content"
372   },
373   {
374     "bd_amoeba",
375     "bd_amoeba",
376     "amoeba (BD style)"
377   },
378   {
379     "time_orb_full",
380     "time_orb_full",
381     "time orb (full)"
382   },
383   {
384     "time_orb_empty",
385     "time_orb_empty",
386     "time orb (empty)"
387   },
388   {
389     "expandable_wall",
390     "wall",
391     "growing wall"
392   },
393   {
394     "bd_diamond",
395     "bd_diamond",
396     "diamond (BD style)"
397   },
398   {
399     "emerald_yellow",
400     "emerald",
401     "yellow emerald"
402   },
403   {
404     "wall_bd_diamond",
405     "wall",
406     "wall with BD style diamond"
407   },
408   {
409     "wall_emerald_yellow",
410     "wall",
411     "wall with yellow emerald"
412   },
413   {
414     "dark_yamyam",
415     "dark_yamyam",
416     "dark yam yam"
417   },
418   {
419     "bd_magic_wall",
420     "bd_magic_wall",
421     "magic wall (BD style)"
422   },
423   {
424     "invisible_steelwall",
425     "wall",
426     "invisible steel wall"
427   },
428   {
429     "unused_63",
430     "unused",
431     "(not used)"
432   },
433   {
434     "dynabomb_increase_number",
435     "dynabomb",
436     "increases number of bombs"
437   },
438   {
439     "dynabomb_increase_size",
440     "dynabomb",
441     "increases explosion size"
442   },
443   {
444     "dynabomb_increase_power",
445     "dynabomb",
446     "increases power of explosion"
447   },
448   {
449     "sokoban_object",
450     "sokoban",
451     "sokoban object"
452   },
453   {
454     "sokoban_field_empty",
455     "sokoban",
456     "sokoban empty field"
457   },
458   {
459     "sokoban_field_full",
460     "sokoban",
461     "sokoban field with object"
462   },
463   {
464     "bd_butterfly.right",
465     "bd_butterfly",
466     "butterfly (starts moving right)"},
467   {
468     "bd_butterfly.up",
469     "bd_butterfly",
470     "butterfly (starts moving up)"
471   },
472   {
473     "bd_butterfly.left",
474     "bd_butterfly",
475     "butterfly (starts moving left)"},
476   {
477     "bd_butterfly.down",
478     "bd_butterfly",
479     "butterfly (starts moving down)"},
480   {
481     "bd_firefly.right",
482     "bd_firefly",
483     "firefly (starts moving right)"
484   },
485   {
486     "bd_firefly.up",
487     "bd_firefly",
488     "firefly (starts moving up)"
489   },
490   {
491     "bd_firefly.left",
492     "bd_firefly",
493     "firefly (starts moving left)"
494   },
495   {
496     "bd_firefly.down",
497     "bd_firefly",
498     "firefly (starts moving down)"
499   },
500   {
501     "bd_butterfly",
502     "bd_butterfly",
503     "butterfly (random start direction)"
504   },
505   {
506     "bd_firefly",
507     "bd_firefly",
508     "firefly (random start direction)"
509   },
510   {
511     "player_1",
512     "player",
513     "yellow player"
514   },
515   {
516     "player_2",
517     "player",
518     "red player"
519   },
520   {
521     "player_3",
522     "player",
523     "green player"
524   },
525   {
526     "player_4",
527     "player",
528     "blue player"
529   },
530   {
531     "bug.right",
532     "bug",
533     "bug (starts moving right)"
534   },
535   {
536     "bug.up",
537     "bug",
538     "bug (starts moving up)"
539   },
540   {
541     "bug.left",
542     "bug",
543     "bug (starts moving left)"
544   },
545   {
546     "bug.down",
547     "bug",
548     "bug (starts moving down)"
549   },
550   {
551     "spaceship.right",
552     "spaceship",
553     "spaceship (starts moving right)"},
554   {
555     "spaceship.up",
556     "spaceship",
557     "spaceship (starts moving up)"
558   },
559   {
560     "spaceship.left",
561     "spaceship",
562     "spaceship (starts moving left)"},
563   {
564     "spaceship.down",
565     "spaceship",
566     "spaceship (starts moving down)"},
567   {
568     "pacman.right",
569     "pacman",
570     "pac man (starts moving right)"
571   },
572   {
573     "pacman.up",
574     "pacman",
575     "pac man (starts moving up)"
576   },
577   {
578     "pacman.left",
579     "pacman",
580     "pac man (starts moving left)"
581   },
582   {
583     "pacman.down",
584     "pacman",
585     "pac man (starts moving down)"
586   },
587   {
588     "emerald_red",
589     "emerald",
590     "red emerald"
591   },
592   {
593     "emerald_purple",
594     "emerald",
595     "purple emerald"
596   },
597   {
598     "wall_emerald_red",
599     "wall",
600     "wall with red emerald"
601   },
602   {
603     "wall_emerald_purple",
604     "wall",
605     "wall with purple emerald"
606   },
607   {
608     "acid_pool_topleft",
609     "wall",
610     "acid pool (top left)"
611   },
612   {
613     "acid_pool_topright",
614     "wall",
615     "acid pool (top right)"
616   },
617   {
618     "acid_pool_bottomleft",
619     "wall",
620     "acid pool (bottom left)"
621   },
622   {
623     "acid_pool_bottom",
624     "wall",
625     "acid pool (bottom)"
626   },
627   {
628     "acid_pool_bottomright",
629     "wall",
630     "acid pool (bottom right)"
631   },
632   {
633     "bd_wall",
634     "wall",
635     "normal wall (BD style)"
636   },
637   {
638     "bd_rock",
639     "bd_rock",
640     "rock (BD style)"
641   },
642   {
643     "exit_open",
644     "exit",
645     "open exit"
646   },
647   {
648     "black_orb",
649     "black_orb",
650     "bomb"
651   },
652   {
653     "amoeba_to_diamond",
654     "amoeba",
655     "amoeba"
656   },
657   {
658     "mole",
659     "mole",
660     "mole (random start direction)"
661   },
662   {
663     "penguin",
664     "penguin",
665     "penguin"
666   },
667   {
668     "satellite",
669     "satellite",
670     "satellite"
671   },
672   {
673     "arrow_left",
674     "arrow",
675     "arrow left"
676   },
677   {
678     "arrow_right",
679     "arrow",
680     "arrow right"
681   },
682   {
683     "arrow_up",
684     "arrow",
685     "arrow up"
686   },
687   {
688     "arrow_down",
689     "arrow",
690     "arrow down"
691   },
692   {
693     "pig",
694     "pig",
695     "pig"
696   },
697   {
698     "dragon",
699     "dragon",
700     "fire breathing dragon"
701   },
702   {
703     "em_key_1_file_obsolete",
704     "obsolete",
705     "key (OBSOLETE)"
706   },
707   {
708     "char_space",
709     "char",
710     "letter ' '"
711   },
712   {
713     "char_exclam",
714     "char",
715     "letter '!'"
716   },
717   {
718     "char_quotedbl",
719     "char",
720     "letter '\"'"
721   },
722   {
723     "char_numbersign",
724     "char",
725     "letter '#'"
726   },
727   {
728     "char_dollar",
729     "char",
730     "letter '$'"
731   },
732   {
733     "char_procent",
734     "char",
735     "letter '%'"
736   },
737   {
738     "char_ampersand",
739     "char",
740     "letter '&'"
741   },
742   {
743     "char_apostrophe",
744     "char",
745     "letter '''"
746   },
747   {
748     "char_parenleft",
749     "char",
750     "letter '('"
751   },
752   {
753     "char_parenright",
754     "char",
755     "letter ')'"
756   },
757   {
758     "char_asterisk",
759     "char",
760     "letter '*'"
761   },
762   {
763     "char_plus",
764     "char",
765     "letter '+'"
766   },
767   {
768     "char_comma",
769     "char",
770     "letter ','"
771   },
772   {
773     "char_minus",
774     "char",
775     "letter '-'"
776   },
777   {
778     "char_period",
779     "char",
780     "letter '.'"
781   },
782   {
783     "char_slash",
784     "char",
785     "letter '/'"
786   },
787   {
788     "char_0",
789     "char",
790     "letter '0'"
791   },
792   {
793     "char_1",
794     "char",
795     "letter '1'"
796   },
797   {
798     "char_2",
799     "char",
800     "letter '2'"
801   },
802   {
803     "char_3",
804     "char",
805     "letter '3'"
806   },
807   {
808     "char_4",
809     "char",
810     "letter '4'"
811   },
812   {
813     "char_5",
814     "char",
815     "letter '5'"
816   },
817   {
818     "char_6",
819     "char",
820     "letter '6'"
821   },
822   {
823     "char_7",
824     "char",
825     "letter '7'"
826   },
827   {
828     "char_8",
829     "char",
830     "letter '8'"
831   },
832   {
833     "char_9",
834     "char",
835     "letter '9'"
836   },
837   {
838     "char_colon",
839     "char",
840     "letter ':'"
841   },
842   {
843     "char_semicolon",
844     "char",
845     "letter ';'"
846   },
847   {
848     "char_less",
849     "char",
850     "letter '<'"
851   },
852   {
853     "char_equal",
854     "char",
855     "letter '='"
856   },
857   {
858     "char_greater",
859     "char",
860     "letter '>'"
861   },
862   {
863     "char_question",
864     "char",
865     "letter '?'"
866   },
867   {
868     "char_at",
869     "char",
870     "letter '@'"
871   },
872   {
873     "char_a",
874     "char",
875     "letter 'A'"
876   },
877   {
878     "char_b",
879     "char",
880     "letter 'B'"
881   },
882   {
883     "char_c",
884     "char",
885     "letter 'C'"
886   },
887   {
888     "char_d",
889     "char",
890     "letter 'D'"
891   },
892   {
893     "char_e",
894     "char",
895     "letter 'E'"
896   },
897   {
898     "char_f",
899     "char",
900     "letter 'F'"
901   },
902   {
903     "char_g",
904     "char",
905     "letter 'G'"
906   },
907   {
908     "char_h",
909     "char",
910     "letter 'H'"
911   },
912   {
913     "char_i",
914     "char",
915     "letter 'I'"
916   },
917   {
918     "char_j",
919     "char",
920     "letter 'J'"
921   },
922   {
923     "char_k",
924     "char",
925     "letter 'K'"
926   },
927   {
928     "char_l",
929     "char",
930     "letter 'L'"
931   },
932   {
933     "char_m",
934     "char",
935     "letter 'M'"
936   },
937   {
938     "char_n",
939     "char",
940     "letter 'N'"
941   },
942   {
943     "char_o",
944     "char",
945     "letter 'O'"
946   },
947   {
948     "char_p",
949     "char",
950     "letter 'P'"
951   },
952   {
953     "char_q",
954     "char",
955     "letter 'Q'"
956   },
957   {
958     "char_r",
959     "char",
960     "letter 'R'"
961   },
962   {
963     "char_s",
964     "char",
965     "letter 'S'"
966   },
967   {
968     "char_t",
969     "char",
970     "letter 'T'"
971   },
972   {
973     "char_u",
974     "char",
975     "letter 'U'"
976   },
977   {
978     "char_v",
979     "char",
980     "letter 'V'"
981   },
982   {
983     "char_w",
984     "char",
985     "letter 'W'"
986   },
987   {
988     "char_x",
989     "char",
990     "letter 'X'"
991   },
992   {
993     "char_y",
994     "char",
995     "letter 'Y'"
996   },
997   {
998     "char_z",
999     "char",
1000     "letter 'Z'"
1001   },
1002   {
1003     "char_bracketleft",
1004     "char",
1005     "letter '['"
1006   },
1007   {
1008     "char_backslash",
1009     "char",
1010     "letter '\\'"
1011   },
1012   {
1013     "char_bracketright",
1014     "char",
1015     "letter ']'"
1016   },
1017   {
1018     "char_asciicircum",
1019     "char",
1020     "letter '^'"
1021   },
1022   {
1023     "char_underscore",
1024     "char",
1025     "letter '_'"
1026   },
1027   {
1028     "char_copyright",
1029     "char",
1030     "letter '©'"
1031   },
1032   {
1033     "char_aumlaut",
1034     "char",
1035     "letter 'Ä'"
1036   },
1037   {
1038     "char_oumlaut",
1039     "char",
1040     "letter 'Ö'"
1041   },
1042   {
1043     "char_uumlaut",
1044     "char",
1045     "letter 'Ãœ'"
1046   },
1047   {
1048     "char_degree",
1049     "char",
1050     "letter '°'"
1051   },
1052   {
1053     "char_trademark",
1054     "char",
1055     "letter '®'"
1056   },
1057   {
1058     "char_cursor",
1059     "char",
1060     "letter ' '"
1061   },
1062   {
1063     "char_unused",
1064     "char",
1065     "letter ''"
1066   },
1067   {
1068     "char_unused",
1069     "char",
1070     "letter ''"
1071   },
1072   {
1073     "char_unused",
1074     "char",
1075     "letter ''"
1076   },
1077   {
1078     "char_unused",
1079     "char",
1080     "letter ''"
1081   },
1082   {
1083     "char_unused",
1084     "char",
1085     "letter ''"
1086   },
1087   {
1088     "char_unused",
1089     "char",
1090     "letter ''"
1091   },
1092   {
1093     "char_unused",
1094     "char",
1095     "letter ''"
1096   },
1097   {
1098     "char_unused",
1099     "char",
1100     "letter ''"
1101   },
1102   {
1103     "char_unused",
1104     "char",
1105     "letter ''"
1106   },
1107   {
1108     "expandable_wall_horizontal",
1109     "wall",
1110     "growing wall (horizontal)"
1111   },
1112   {
1113     "expandable_wall_vertical",
1114     "wall",
1115     "growing wall (vertical)"
1116   },
1117   {
1118     "expandable_wall_any",
1119     "wall",
1120     "growing wall (any direction)"
1121   },
1122   {
1123     "em_gate_1",
1124     "gate",
1125     "red door (EM style)"
1126   },
1127   {
1128     "em_gate_2",
1129     "gate",
1130     "yellow door (EM style)"
1131   },
1132   {
1133     "em_gate_3",
1134     "gate",
1135     "green door (EM style)"
1136   },
1137   {
1138     "em_gate_4",
1139     "gate",
1140     "blue door (EM style)"
1141   },
1142   {
1143     "em_key_2_file_obsolete",
1144     "obsolete",
1145     "key (OBSOLETE)"
1146   },
1147   {
1148     "em_key_3_file_obsolete",
1149     "obsolete",
1150     "key (OBSOLETE)"
1151   },
1152   {
1153     "em_key_4_file_obsolete",
1154     "obsolete",
1155     "key (OBSOLETE)"
1156   },
1157   {
1158     "sp_empty_space",
1159     "empty_space",
1160     "empty space"
1161   },
1162   {
1163     "sp_zonk",
1164     "sp_zonk",
1165     "zonk"
1166   },
1167   {
1168     "sp_base",
1169     "sp_base",
1170     "base"
1171   },
1172   {
1173     "sp_murphy",
1174     "player",
1175     "murphy"
1176   },
1177   {
1178     "sp_infotron",
1179     "sp_infotron",
1180     "infotron"
1181   },
1182   {
1183     "sp_chip_single",
1184     "wall",
1185     "chip (single)"
1186   },
1187   {
1188     "sp_hardware_gray",
1189     "wall",
1190     "hardware"
1191   },
1192   {
1193     "sp_exit_closed",
1194     "sp_exit",
1195     "exit"
1196   },
1197   {
1198     "sp_disk_orange",
1199     "sp_disk_orange",
1200     "orange disk"
1201   },
1202   {
1203     "sp_port_right",
1204     "sp_port",
1205     "port (leading right)"
1206   },
1207   {
1208     "sp_port_down",
1209     "sp_port",
1210     "port (leading down)"
1211   },
1212   {
1213     "sp_port_left",
1214     "sp_port",
1215     "port (leading left)"
1216   },
1217   {
1218     "sp_port_up",
1219     "sp_port",
1220     "port (leading up)"
1221   },
1222   {
1223     "sp_gravity_port_right",
1224     "sp_port",
1225     "gravity port (leading right)"
1226   },
1227   {
1228     "sp_gravity_port_down",
1229     "sp_port",
1230     "gravity port (leading down)"
1231   },
1232   {
1233     "sp_gravity_port_left",
1234     "sp_port",
1235     "gravity port (leading left)"
1236   },
1237   {
1238     "sp_gravity_port_up",
1239     "sp_port",
1240     "gravity port (leading up)"
1241   },
1242   {
1243     "sp_sniksnak",
1244     "sp_sniksnak",
1245     "snik snak"
1246   },
1247   {
1248     "sp_disk_yellow",
1249     "sp_disk_yellow",
1250     "yellow disk"
1251   },
1252   {
1253     "sp_terminal",
1254     "sp_terminal",
1255     "terminal"
1256   },
1257   {
1258     "sp_disk_red",
1259     "dynamite",
1260     "red disk"
1261   },
1262   {
1263     "sp_port_vertical",
1264     "sp_port",
1265     "port (vertical)"
1266   },
1267   {
1268     "sp_port_horizontal",
1269     "sp_port",
1270     "port (horizontal)"
1271   },
1272   {
1273     "sp_port_any",
1274     "sp_port",
1275     "port (any direction)"
1276   },
1277   {
1278     "sp_electron",
1279     "sp_electron",
1280     "electron"
1281   },
1282   {
1283     "sp_buggy_base",
1284     "sp_buggy_base",
1285     "buggy base"
1286   },
1287   {
1288     "sp_chip_left",
1289     "wall",
1290     "chip (left half)"
1291   },
1292   {
1293     "sp_chip_right",
1294     "wall",
1295     "chip (right half)"
1296   },
1297   {
1298     "sp_hardware_base_1",
1299     "wall",
1300     "hardware"
1301   },
1302   {
1303     "sp_hardware_green",
1304     "wall",
1305     "hardware"
1306   },
1307   {
1308     "sp_hardware_blue",
1309     "wall",
1310     "hardware"
1311   },
1312   {
1313     "sp_hardware_red",
1314     "wall",
1315     "hardware"
1316   },
1317   {
1318     "sp_hardware_yellow",
1319     "wall",
1320     "hardware"
1321   },
1322   {
1323     "sp_hardware_base_2",
1324     "wall",
1325     "hardware"
1326   },
1327   {
1328     "sp_hardware_base_3",
1329     "wall",
1330     "hardware"
1331   },
1332   {
1333     "sp_hardware_base_4",
1334     "wall",
1335     "hardware"
1336   },
1337   {
1338     "sp_hardware_base_5",
1339     "wall",
1340     "hardware"
1341   },
1342   {
1343     "sp_hardware_base_6",
1344     "wall",
1345     "hardware"
1346   },
1347   {
1348     "sp_chip_top",
1349     "wall",
1350     "chip (upper half)"
1351   },
1352   {
1353     "sp_chip_bottom",
1354     "wall",
1355     "chip (lower half)"
1356   },
1357   {
1358     "em_gate_1_gray",
1359     "gate",
1360     "gray door (EM style, red key)"
1361   },
1362   {
1363     "em_gate_2_gray",
1364     "gate",
1365     "gray door (EM style, yellow key)"
1366   },
1367   {
1368     "em_gate_3_gray",
1369     "gate",
1370     "gray door (EM style, green key)"
1371   },
1372   {
1373     "em_gate_4_gray",
1374     "gate",
1375     "gray door (EM style, blue key)"
1376   },
1377   {
1378     "unused_254",
1379     "unused",
1380     "(not used)"
1381   },
1382   {
1383     "unused_255",
1384     "unused",
1385     "(not used)"
1386   },
1387   {
1388     "pearl",
1389     "pearl",
1390     "pearl"
1391   },
1392   {
1393     "crystal",
1394     "crystal",
1395     "crystal"
1396   },
1397   {
1398     "wall_pearl",
1399     "wall",
1400     "wall with pearl"
1401   },
1402   {
1403     "wall_crystal",
1404     "wall",
1405     "wall with crystal"
1406   },
1407   {
1408     "door_white",
1409     "gate",
1410     "white door"
1411   },
1412   {
1413     "door_white_gray",
1414     "gate",
1415     "gray door (opened by white key)"
1416   },
1417   {
1418     "key_white",
1419     "key",
1420     "white key"
1421   },
1422   {
1423     "shield_normal",
1424     "shield_normal",
1425     "shield (normal)"
1426   },
1427   {
1428     "extra_time",
1429     "extra_time",
1430     "extra time"
1431   },
1432   {
1433     "switchgate_open",
1434     "switchgate",
1435     "switch gate (open)"
1436   },
1437   {
1438     "switchgate_closed",
1439     "switchgate",
1440     "switch gate (closed)"
1441   },
1442   {
1443     "switchgate_switch_up",
1444     "switchgate_switch",
1445     "switch for switch gate"
1446   },
1447   {
1448     "switchgate_switch_down",
1449     "switchgate_switch",
1450     "switch for switch gate"
1451   },
1452   {
1453     "unused_269",
1454     "unused",
1455     "-"
1456   },
1457   {
1458     "unused_270",
1459     "unused",
1460     "-"
1461   },
1462   {
1463     "conveyor_belt_1_left",
1464     "conveyor_belt",
1465     "red conveyor belt (left)"
1466   },
1467   {
1468     "conveyor_belt_1_middle",
1469     "conveyor_belt",
1470     "red conveyor belt (middle)"
1471   },
1472   {
1473     "conveyor_belt_1_right",
1474     "conveyor_belt",
1475     "red conveyor belt (right)"
1476   },
1477   {
1478     "conveyor_belt_1_switch_left",
1479     "conveyor_belt_switch",
1480     "switch for red conveyor belt (left)"
1481   },
1482   {
1483     "conveyor_belt_1_switch_middle",
1484     "conveyor_belt_switch",
1485     "switch for red conveyor belt (middle)"
1486   },
1487   {
1488     "conveyor_belt_1_switch_right",
1489     "conveyor_belt_switch",
1490     "switch for red conveyor belt (right)"
1491   },
1492   {
1493     "conveyor_belt_2_left",
1494     "conveyor_belt",
1495     "yellow conveyor belt (left)"
1496   },
1497   {
1498     "conveyor_belt_2_middle",
1499     "conveyor_belt",
1500     "yellow conveyor belt (middle)"
1501   },
1502   {
1503     "conveyor_belt_2_right",
1504     "conveyor_belt",
1505     "yellow conveyor belt (right)"
1506   },
1507   {
1508     "conveyor_belt_2_switch_left",
1509     "conveyor_belt_switch",
1510     "switch for yellow conveyor belt (left)"
1511   },
1512   {
1513     "conveyor_belt_2_switch_middle",
1514     "conveyor_belt_switch",
1515     "switch for yellow conveyor belt (middle)"
1516   },
1517   {
1518     "conveyor_belt_2_switch_right",
1519     "conveyor_belt_switch",
1520     "switch for yellow conveyor belt (right)"
1521   },
1522   {
1523     "conveyor_belt_3_left",
1524     "conveyor_belt",
1525     "green conveyor belt (left)"
1526   },
1527   {
1528     "conveyor_belt_3_middle",
1529     "conveyor_belt",
1530     "green conveyor belt (middle)"
1531   },
1532   {
1533     "conveyor_belt_3_right",
1534     "conveyor_belt",
1535     "green conveyor belt (right)"
1536   },
1537   {
1538     "conveyor_belt_3_switch_left",
1539     "conveyor_belt_switch",
1540     "switch for green conveyor belt (left)"
1541   },
1542   {
1543     "conveyor_belt_3_switch_middle",
1544     "conveyor_belt_switch",
1545     "switch for green conveyor belt (middle)"
1546   },
1547   {
1548     "conveyor_belt_3_switch_right",
1549     "conveyor_belt_switch",
1550     "switch for green conveyor belt (right)"
1551   },
1552   {
1553     "conveyor_belt_4_left",
1554     "conveyor_belt",
1555     "blue conveyor belt (left)"
1556   },
1557   {
1558     "conveyor_belt_4_middle",
1559     "conveyor_belt",
1560     "blue conveyor belt (middle)"
1561   },
1562   {
1563     "conveyor_belt_4_right",
1564     "conveyor_belt",
1565     "blue conveyor belt (right)"
1566   },
1567   {
1568     "conveyor_belt_4_switch_left",
1569     "conveyor_belt_switch",
1570     "switch for blue conveyor belt (left)"
1571   },
1572   {
1573     "conveyor_belt_4_switch_middle",
1574     "conveyor_belt_switch",
1575     "switch for blue conveyor belt (middle)"
1576   },
1577   {
1578     "conveyor_belt_4_switch_right",
1579     "conveyor_belt_switch",
1580     "switch for blue conveyor belt (right)"
1581   },
1582   {
1583     "landmine",
1584     "sand",
1585     "land mine"
1586   },
1587   {
1588     "envelope_obsolete",
1589     "obsolete",
1590     "envelope (OBSOLETE)"
1591   },
1592   {
1593     "light_switch",
1594     "light_switch",
1595     "light switch (off)"
1596   },
1597   {
1598     "light_switch.active",
1599     "light_switch",
1600     "light switch (on)"
1601   },
1602   {
1603     "sign_exclamation",
1604     "wall",
1605     "sign (exclamation)"
1606   },
1607   {
1608     "sign_radioactivity",
1609     "wall",
1610     "sign (radio activity)"
1611   },
1612   {
1613     "sign_stop",
1614     "wall",
1615     "sign (stop)"
1616   },
1617   {
1618     "sign_wheelchair",
1619     "wall",
1620     "sign (wheel chair)"
1621   },
1622   {
1623     "sign_parking",
1624     "wall",
1625     "sign (parking)"
1626   },
1627   {
1628     "sign_oneway",
1629     "wall",
1630     "sign (one way)"
1631   },
1632   {
1633     "sign_heart",
1634     "wall",
1635     "sign (heart)"
1636   },
1637   {
1638     "sign_triangle",
1639     "wall",
1640     "sign (triangle)"
1641   },
1642   {
1643     "sign_round",
1644     "wall",
1645     "sign (round)"
1646   },
1647   {
1648     "sign_exit",
1649     "wall",
1650     "sign (exit)"
1651   },
1652   {
1653     "sign_yinyang",
1654     "wall",
1655     "sign (yin yang)"
1656   },
1657   {
1658     "sign_other",
1659     "wall",
1660     "sign (other)"
1661   },
1662   {
1663     "mole.left",
1664     "mole",
1665     "mole (starts moving left)"
1666   },
1667   {
1668     "mole.right",
1669     "mole",
1670     "mole (starts moving right)"
1671   },
1672   {
1673     "mole.up",
1674     "mole",
1675     "mole (starts moving up)"
1676   },
1677   {
1678     "mole.down",
1679     "mole",
1680     "mole (starts moving down)"
1681   },
1682   {
1683     "steelwall_slippery",
1684     "wall",
1685     "slippery steel wall"
1686   },
1687   {
1688     "invisible_sand",
1689     "sand",
1690     "invisible sand"
1691   },
1692   {
1693     "dx_unknown_15",
1694     "unknown",
1695     "dx unknown element 15"
1696   },
1697   {
1698     "dx_unknown_42",
1699     "unknown",
1700     "dx unknown element 42"
1701   },
1702   {
1703     "unused_319",
1704     "unused",
1705     "(not used)"
1706   },
1707   {
1708     "unused_320",
1709     "unused",
1710     "(not used)"
1711   },
1712   {
1713     "shield_deadly",
1714     "shield_deadly",
1715     "shield (deadly, kills enemies)"
1716   },
1717   {
1718     "timegate_open",
1719     "timegate",
1720     "time gate (open)"
1721   },
1722   {
1723     "timegate_closed",
1724     "timegate",
1725     "time gate (closed)"
1726   },
1727   {
1728     "timegate_switch.active",
1729     "timegate_switch",
1730     "switch for time gate"
1731   },
1732   {
1733     "timegate_switch",
1734     "timegate_switch",
1735     "switch for time gate"
1736   },
1737   {
1738     "balloon",
1739     "balloon",
1740     "balloon"
1741   },
1742   {
1743     "balloon_switch_left",
1744     "balloon_switch",
1745     "send balloon to the left"
1746   },
1747   {
1748     "balloon_switch_right",
1749     "balloon_switch",
1750     "send balloon to the right"
1751   },
1752   {
1753     "balloon_switch_up",
1754     "balloon_switch",
1755     "send balloon up"
1756   },
1757   {
1758     "balloon_switch_down",
1759     "balloon_switch",
1760     "send balloon down"
1761   },
1762   {
1763     "balloon_switch_any",
1764     "balloon_switch",
1765     "send balloon in any direction"
1766   },
1767   {
1768     "emc_steelwall_1",
1769     "wall",
1770     "steel wall"
1771   },
1772   {
1773     "emc_steelwall_2",
1774     "wall",
1775     "steel wall"
1776   },
1777   {
1778     "emc_steelwall_3",
1779     "wall",
1780     "steel wall"
1781   },
1782   {
1783     "emc_steelwall_4",
1784     "wall",
1785     "steel wall"
1786   },
1787   {
1788     "emc_wall_1",
1789     "wall",
1790     "normal wall"
1791   },
1792   {
1793     "emc_wall_2",
1794     "wall",
1795     "normal wall"
1796   },
1797   {
1798     "emc_wall_3",
1799     "wall",
1800     "normal wall"
1801   },
1802   {
1803     "emc_wall_4",
1804     "wall",
1805     "normal wall"
1806   },
1807   {
1808     "emc_wall_5",
1809     "wall",
1810     "normal wall"
1811   },
1812   {
1813     "emc_wall_6",
1814     "wall",
1815     "normal wall"
1816   },
1817   {
1818     "emc_wall_7",
1819     "wall",
1820     "normal wall"
1821   },
1822   {
1823     "emc_wall_8",
1824     "wall",
1825     "normal wall"
1826   },
1827   {
1828     "tube_any",
1829     "tube",
1830     "tube (any direction)"
1831   },
1832   {
1833     "tube_vertical",
1834     "tube",
1835     "tube (vertical)"
1836   },
1837   {
1838     "tube_horizontal",
1839     "tube",
1840     "tube (horizontal)"
1841   },
1842   {
1843     "tube_vertical_left",
1844     "tube",
1845     "tube (vertical & left)"
1846   },
1847   {
1848     "tube_vertical_right",
1849     "tube",
1850     "tube (vertical & right)"
1851   },
1852   {
1853     "tube_horizontal_up",
1854     "tube",
1855     "tube (horizontal & up)"
1856   },
1857   {
1858     "tube_horizontal_down",
1859     "tube",
1860     "tube (horizontal & down)"
1861   },
1862   {
1863     "tube_left_up",
1864     "tube",
1865     "tube (left & up)"
1866   },
1867   {
1868     "tube_left_down",
1869     "tube",
1870     "tube (left & down)"
1871   },
1872   {
1873     "tube_right_up",
1874     "tube",
1875     "tube (right & up)"
1876   },
1877   {
1878     "tube_right_down",
1879     "tube",
1880     "tube (right & down)"
1881   },
1882   {
1883     "spring",
1884     "spring",
1885     "spring"
1886   },
1887   {
1888     "trap",
1889     "trap",
1890     "trap"
1891   },
1892   {
1893     "dx_supabomb",
1894     "bomb",
1895     "stable bomb (DX style)"
1896   },
1897   {
1898     "unused_358",
1899     "unused",
1900     "-"
1901   },
1902   {
1903     "unused_359",
1904     "unused",
1905     "-"
1906   },
1907   {
1908     "custom_1",
1909     "custom",
1910     "custom element 1"
1911   },
1912   {
1913     "custom_2",
1914     "custom",
1915     "custom element 2"
1916   },
1917   {
1918     "custom_3",
1919     "custom",
1920     "custom element 3"
1921   },
1922   {
1923     "custom_4",
1924     "custom",
1925     "custom element 4"
1926   },
1927   {
1928     "custom_5",
1929     "custom",
1930     "custom element 5"
1931   },
1932   {
1933     "custom_6",
1934     "custom",
1935     "custom element 6"
1936   },
1937   {
1938     "custom_7",
1939     "custom",
1940     "custom element 7"
1941   },
1942   {
1943     "custom_8",
1944     "custom",
1945     "custom element 8"
1946   },
1947   {
1948     "custom_9",
1949     "custom",
1950     "custom element 9"
1951   },
1952   {
1953     "custom_10",
1954     "custom",
1955     "custom element 10"
1956   },
1957   {
1958     "custom_11",
1959     "custom",
1960     "custom element 11"
1961   },
1962   {
1963     "custom_12",
1964     "custom",
1965     "custom element 12"
1966   },
1967   {
1968     "custom_13",
1969     "custom",
1970     "custom element 13"
1971   },
1972   {
1973     "custom_14",
1974     "custom",
1975     "custom element 14"
1976   },
1977   {
1978     "custom_15",
1979     "custom",
1980     "custom element 15"
1981   },
1982   {
1983     "custom_16",
1984     "custom",
1985     "custom element 16"
1986   },
1987   {
1988     "custom_17",
1989     "custom",
1990     "custom element 17"
1991   },
1992   {
1993     "custom_18",
1994     "custom",
1995     "custom element 18"
1996   },
1997   {
1998     "custom_19",
1999     "custom",
2000     "custom element 19"
2001   },
2002   {
2003     "custom_20",
2004     "custom",
2005     "custom element 20"
2006   },
2007   {
2008     "custom_21",
2009     "custom",
2010     "custom element 21"
2011   },
2012   {
2013     "custom_22",
2014     "custom",
2015     "custom element 22"
2016   },
2017   {
2018     "custom_23",
2019     "custom",
2020     "custom element 23"
2021   },
2022   {
2023     "custom_24",
2024     "custom",
2025     "custom element 24"
2026   },
2027   {
2028     "custom_25",
2029     "custom",
2030     "custom element 25"
2031   },
2032   {
2033     "custom_26",
2034     "custom",
2035     "custom element 26"
2036   },
2037   {
2038     "custom_27",
2039     "custom",
2040     "custom element 27"
2041   },
2042   {
2043     "custom_28",
2044     "custom",
2045     "custom element 28"
2046   },
2047   {
2048     "custom_29",
2049     "custom",
2050     "custom element 29"
2051   },
2052   {
2053     "custom_30",
2054     "custom",
2055     "custom element 30"
2056   },
2057   {
2058     "custom_31",
2059     "custom",
2060     "custom element 31"
2061   },
2062   {
2063     "custom_32",
2064     "custom",
2065     "custom element 32"
2066   },
2067   {
2068     "custom_33",
2069     "custom",
2070     "custom element 33"
2071   },
2072   {
2073     "custom_34",
2074     "custom",
2075     "custom element 34"
2076   },
2077   {
2078     "custom_35",
2079     "custom",
2080     "custom element 35"
2081   },
2082   {
2083     "custom_36",
2084     "custom",
2085     "custom element 36"
2086   },
2087   {
2088     "custom_37",
2089     "custom",
2090     "custom element 37"
2091   },
2092   {
2093     "custom_38",
2094     "custom",
2095     "custom element 38"
2096   },
2097   {
2098     "custom_39",
2099     "custom",
2100     "custom element 39"
2101   },
2102   {
2103     "custom_40",
2104     "custom",
2105     "custom element 40"
2106   },
2107   {
2108     "custom_41",
2109     "custom",
2110     "custom element 41"
2111   },
2112   {
2113     "custom_42",
2114     "custom",
2115     "custom element 42"
2116   },
2117   {
2118     "custom_43",
2119     "custom",
2120     "custom element 43"
2121   },
2122   {
2123     "custom_44",
2124     "custom",
2125     "custom element 44"
2126   },
2127   {
2128     "custom_45",
2129     "custom",
2130     "custom element 45"
2131   },
2132   {
2133     "custom_46",
2134     "custom",
2135     "custom element 46"
2136   },
2137   {
2138     "custom_47",
2139     "custom",
2140     "custom element 47"
2141   },
2142   {
2143     "custom_48",
2144     "custom",
2145     "custom element 48"
2146   },
2147   {
2148     "custom_49",
2149     "custom",
2150     "custom element 49"
2151   },
2152   {
2153     "custom_50",
2154     "custom",
2155     "custom element 50"
2156   },
2157   {
2158     "custom_51",
2159     "custom",
2160     "custom element 51"
2161   },
2162   {
2163     "custom_52",
2164     "custom",
2165     "custom element 52"
2166   },
2167   {
2168     "custom_53",
2169     "custom",
2170     "custom element 53"
2171   },
2172   {
2173     "custom_54",
2174     "custom",
2175     "custom element 54"
2176   },
2177   {
2178     "custom_55",
2179     "custom",
2180     "custom element 55"
2181   },
2182   {
2183     "custom_56",
2184     "custom",
2185     "custom element 56"
2186   },
2187   {
2188     "custom_57",
2189     "custom",
2190     "custom element 57"
2191   },
2192   {
2193     "custom_58",
2194     "custom",
2195     "custom element 58"
2196   },
2197   {
2198     "custom_59",
2199     "custom",
2200     "custom element 59"
2201   },
2202   {
2203     "custom_60",
2204     "custom",
2205     "custom element 60"
2206   },
2207   {
2208     "custom_61",
2209     "custom",
2210     "custom element 61"
2211   },
2212   {
2213     "custom_62",
2214     "custom",
2215     "custom element 62"
2216   },
2217   {
2218     "custom_63",
2219     "custom",
2220     "custom element 63"
2221   },
2222   {
2223     "custom_64",
2224     "custom",
2225     "custom element 64"
2226   },
2227   {
2228     "custom_65",
2229     "custom",
2230     "custom element 65"
2231   },
2232   {
2233     "custom_66",
2234     "custom",
2235     "custom element 66"
2236   },
2237   {
2238     "custom_67",
2239     "custom",
2240     "custom element 67"
2241   },
2242   {
2243     "custom_68",
2244     "custom",
2245     "custom element 68"
2246   },
2247   {
2248     "custom_69",
2249     "custom",
2250     "custom element 69"
2251   },
2252   {
2253     "custom_70",
2254     "custom",
2255     "custom element 70"
2256   },
2257   {
2258     "custom_71",
2259     "custom",
2260     "custom element 71"
2261   },
2262   {
2263     "custom_72",
2264     "custom",
2265     "custom element 72"
2266   },
2267   {
2268     "custom_73",
2269     "custom",
2270     "custom element 73"
2271   },
2272   {
2273     "custom_74",
2274     "custom",
2275     "custom element 74"
2276   },
2277   {
2278     "custom_75",
2279     "custom",
2280     "custom element 75"
2281   },
2282   {
2283     "custom_76",
2284     "custom",
2285     "custom element 76"
2286   },
2287   {
2288     "custom_77",
2289     "custom",
2290     "custom element 77"
2291   },
2292   {
2293     "custom_78",
2294     "custom",
2295     "custom element 78"
2296   },
2297   {
2298     "custom_79",
2299     "custom",
2300     "custom element 79"
2301   },
2302   {
2303     "custom_80",
2304     "custom",
2305     "custom element 80"
2306   },
2307   {
2308     "custom_81",
2309     "custom",
2310     "custom element 81"
2311   },
2312   {
2313     "custom_82",
2314     "custom",
2315     "custom element 82"
2316   },
2317   {
2318     "custom_83",
2319     "custom",
2320     "custom element 83"
2321   },
2322   {
2323     "custom_84",
2324     "custom",
2325     "custom element 84"
2326   },
2327   {
2328     "custom_85",
2329     "custom",
2330     "custom element 85"
2331   },
2332   {
2333     "custom_86",
2334     "custom",
2335     "custom element 86"
2336   },
2337   {
2338     "custom_87",
2339     "custom",
2340     "custom element 87"
2341   },
2342   {
2343     "custom_88",
2344     "custom",
2345     "custom element 88"
2346   },
2347   {
2348     "custom_89",
2349     "custom",
2350     "custom element 89"
2351   },
2352   {
2353     "custom_90",
2354     "custom",
2355     "custom element 90"
2356   },
2357   {
2358     "custom_91",
2359     "custom",
2360     "custom element 91"
2361   },
2362   {
2363     "custom_92",
2364     "custom",
2365     "custom element 92"
2366   },
2367   {
2368     "custom_93",
2369     "custom",
2370     "custom element 93"
2371   },
2372   {
2373     "custom_94",
2374     "custom",
2375     "custom element 94"
2376   },
2377   {
2378     "custom_95",
2379     "custom",
2380     "custom element 95"
2381   },
2382   {
2383     "custom_96",
2384     "custom",
2385     "custom element 96"
2386   },
2387   {
2388     "custom_97",
2389     "custom",
2390     "custom element 97"
2391   },
2392   {
2393     "custom_98",
2394     "custom",
2395     "custom element 98"
2396   },
2397   {
2398     "custom_99",
2399     "custom",
2400     "custom element 99"
2401   },
2402   {
2403     "custom_100",
2404     "custom",
2405     "custom element 100"
2406   },
2407   {
2408     "custom_101",
2409     "custom",
2410     "custom element 101"
2411   },
2412   {
2413     "custom_102",
2414     "custom",
2415     "custom element 102"
2416   },
2417   {
2418     "custom_103",
2419     "custom",
2420     "custom element 103"
2421   },
2422   {
2423     "custom_104",
2424     "custom",
2425     "custom element 104"
2426   },
2427   {
2428     "custom_105",
2429     "custom",
2430     "custom element 105"
2431   },
2432   {
2433     "custom_106",
2434     "custom",
2435     "custom element 106"
2436   },
2437   {
2438     "custom_107",
2439     "custom",
2440     "custom element 107"
2441   },
2442   {
2443     "custom_108",
2444     "custom",
2445     "custom element 108"
2446   },
2447   {
2448     "custom_109",
2449     "custom",
2450     "custom element 109"
2451   },
2452   {
2453     "custom_110",
2454     "custom",
2455     "custom element 110"
2456   },
2457   {
2458     "custom_111",
2459     "custom",
2460     "custom element 111"
2461   },
2462   {
2463     "custom_112",
2464     "custom",
2465     "custom element 112"
2466   },
2467   {
2468     "custom_113",
2469     "custom",
2470     "custom element 113"
2471   },
2472   {
2473     "custom_114",
2474     "custom",
2475     "custom element 114"
2476   },
2477   {
2478     "custom_115",
2479     "custom",
2480     "custom element 115"
2481   },
2482   {
2483     "custom_116",
2484     "custom",
2485     "custom element 116"
2486   },
2487   {
2488     "custom_117",
2489     "custom",
2490     "custom element 117"
2491   },
2492   {
2493     "custom_118",
2494     "custom",
2495     "custom element 118"
2496   },
2497   {
2498     "custom_119",
2499     "custom",
2500     "custom element 119"
2501   },
2502   {
2503     "custom_120",
2504     "custom",
2505     "custom element 120"
2506   },
2507   {
2508     "custom_121",
2509     "custom",
2510     "custom element 121"
2511   },
2512   {
2513     "custom_122",
2514     "custom",
2515     "custom element 122"
2516   },
2517   {
2518     "custom_123",
2519     "custom",
2520     "custom element 123"
2521   },
2522   {
2523     "custom_124",
2524     "custom",
2525     "custom element 124"
2526   },
2527   {
2528     "custom_125",
2529     "custom",
2530     "custom element 125"
2531   },
2532   {
2533     "custom_126",
2534     "custom",
2535     "custom element 126"
2536   },
2537   {
2538     "custom_127",
2539     "custom",
2540     "custom element 127"
2541   },
2542   {
2543     "custom_128",
2544     "custom",
2545     "custom element 128"
2546   },
2547   {
2548     "custom_129",
2549     "custom",
2550     "custom element 129"
2551   },
2552   {
2553     "custom_130",
2554     "custom",
2555     "custom element 130"
2556   },
2557   {
2558     "custom_131",
2559     "custom",
2560     "custom element 131"
2561   },
2562   {
2563     "custom_132",
2564     "custom",
2565     "custom element 132"
2566   },
2567   {
2568     "custom_133",
2569     "custom",
2570     "custom element 133"
2571   },
2572   {
2573     "custom_134",
2574     "custom",
2575     "custom element 134"
2576   },
2577   {
2578     "custom_135",
2579     "custom",
2580     "custom element 135"
2581   },
2582   {
2583     "custom_136",
2584     "custom",
2585     "custom element 136"
2586   },
2587   {
2588     "custom_137",
2589     "custom",
2590     "custom element 137"
2591   },
2592   {
2593     "custom_138",
2594     "custom",
2595     "custom element 138"
2596   },
2597   {
2598     "custom_139",
2599     "custom",
2600     "custom element 139"
2601   },
2602   {
2603     "custom_140",
2604     "custom",
2605     "custom element 140"
2606   },
2607   {
2608     "custom_141",
2609     "custom",
2610     "custom element 141"
2611   },
2612   {
2613     "custom_142",
2614     "custom",
2615     "custom element 142"
2616   },
2617   {
2618     "custom_143",
2619     "custom",
2620     "custom element 143"
2621   },
2622   {
2623     "custom_144",
2624     "custom",
2625     "custom element 144"
2626   },
2627   {
2628     "custom_145",
2629     "custom",
2630     "custom element 145"
2631   },
2632   {
2633     "custom_146",
2634     "custom",
2635     "custom element 146"
2636   },
2637   {
2638     "custom_147",
2639     "custom",
2640     "custom element 147"
2641   },
2642   {
2643     "custom_148",
2644     "custom",
2645     "custom element 148"
2646   },
2647   {
2648     "custom_149",
2649     "custom",
2650     "custom element 149"
2651   },
2652   {
2653     "custom_150",
2654     "custom",
2655     "custom element 150"
2656   },
2657   {
2658     "custom_151",
2659     "custom",
2660     "custom element 151"
2661   },
2662   {
2663     "custom_152",
2664     "custom",
2665     "custom element 152"
2666   },
2667   {
2668     "custom_153",
2669     "custom",
2670     "custom element 153"
2671   },
2672   {
2673     "custom_154",
2674     "custom",
2675     "custom element 154"
2676   },
2677   {
2678     "custom_155",
2679     "custom",
2680     "custom element 155"
2681   },
2682   {
2683     "custom_156",
2684     "custom",
2685     "custom element 156"
2686   },
2687   {
2688     "custom_157",
2689     "custom",
2690     "custom element 157"
2691   },
2692   {
2693     "custom_158",
2694     "custom",
2695     "custom element 158"
2696   },
2697   {
2698     "custom_159",
2699     "custom",
2700     "custom element 159"
2701   },
2702   {
2703     "custom_160",
2704     "custom",
2705     "custom element 160"
2706   },
2707   {
2708     "custom_161",
2709     "custom",
2710     "custom element 161"
2711   },
2712   {
2713     "custom_162",
2714     "custom",
2715     "custom element 162"
2716   },
2717   {
2718     "custom_163",
2719     "custom",
2720     "custom element 163"
2721   },
2722   {
2723     "custom_164",
2724     "custom",
2725     "custom element 164"
2726   },
2727   {
2728     "custom_165",
2729     "custom",
2730     "custom element 165"
2731   },
2732   {
2733     "custom_166",
2734     "custom",
2735     "custom element 166"
2736   },
2737   {
2738     "custom_167",
2739     "custom",
2740     "custom element 167"
2741   },
2742   {
2743     "custom_168",
2744     "custom",
2745     "custom element 168"
2746   },
2747   {
2748     "custom_169",
2749     "custom",
2750     "custom element 169"
2751   },
2752   {
2753     "custom_170",
2754     "custom",
2755     "custom element 170"
2756   },
2757   {
2758     "custom_171",
2759     "custom",
2760     "custom element 171"
2761   },
2762   {
2763     "custom_172",
2764     "custom",
2765     "custom element 172"
2766   },
2767   {
2768     "custom_173",
2769     "custom",
2770     "custom element 173"
2771   },
2772   {
2773     "custom_174",
2774     "custom",
2775     "custom element 174"
2776   },
2777   {
2778     "custom_175",
2779     "custom",
2780     "custom element 175"
2781   },
2782   {
2783     "custom_176",
2784     "custom",
2785     "custom element 176"
2786   },
2787   {
2788     "custom_177",
2789     "custom",
2790     "custom element 177"
2791   },
2792   {
2793     "custom_178",
2794     "custom",
2795     "custom element 178"
2796   },
2797   {
2798     "custom_179",
2799     "custom",
2800     "custom element 179"
2801   },
2802   {
2803     "custom_180",
2804     "custom",
2805     "custom element 180"
2806   },
2807   {
2808     "custom_181",
2809     "custom",
2810     "custom element 181"
2811   },
2812   {
2813     "custom_182",
2814     "custom",
2815     "custom element 182"
2816   },
2817   {
2818     "custom_183",
2819     "custom",
2820     "custom element 183"
2821   },
2822   {
2823     "custom_184",
2824     "custom",
2825     "custom element 184"
2826   },
2827   {
2828     "custom_185",
2829     "custom",
2830     "custom element 185"
2831   },
2832   {
2833     "custom_186",
2834     "custom",
2835     "custom element 186"
2836   },
2837   {
2838     "custom_187",
2839     "custom",
2840     "custom element 187"
2841   },
2842   {
2843     "custom_188",
2844     "custom",
2845     "custom element 188"
2846   },
2847   {
2848     "custom_189",
2849     "custom",
2850     "custom element 189"
2851   },
2852   {
2853     "custom_190",
2854     "custom",
2855     "custom element 190"
2856   },
2857   {
2858     "custom_191",
2859     "custom",
2860     "custom element 191"
2861   },
2862   {
2863     "custom_192",
2864     "custom",
2865     "custom element 192"
2866   },
2867   {
2868     "custom_193",
2869     "custom",
2870     "custom element 193"
2871   },
2872   {
2873     "custom_194",
2874     "custom",
2875     "custom element 194"
2876   },
2877   {
2878     "custom_195",
2879     "custom",
2880     "custom element 195"
2881   },
2882   {
2883     "custom_196",
2884     "custom",
2885     "custom element 196"
2886   },
2887   {
2888     "custom_197",
2889     "custom",
2890     "custom element 197"
2891   },
2892   {
2893     "custom_198",
2894     "custom",
2895     "custom element 198"
2896   },
2897   {
2898     "custom_199",
2899     "custom",
2900     "custom element 199"
2901   },
2902   {
2903     "custom_200",
2904     "custom",
2905     "custom element 200"
2906   },
2907   {
2908     "custom_201",
2909     "custom",
2910     "custom element 201"
2911   },
2912   {
2913     "custom_202",
2914     "custom",
2915     "custom element 202"
2916   },
2917   {
2918     "custom_203",
2919     "custom",
2920     "custom element 203"
2921   },
2922   {
2923     "custom_204",
2924     "custom",
2925     "custom element 204"
2926   },
2927   {
2928     "custom_205",
2929     "custom",
2930     "custom element 205"
2931   },
2932   {
2933     "custom_206",
2934     "custom",
2935     "custom element 206"
2936   },
2937   {
2938     "custom_207",
2939     "custom",
2940     "custom element 207"
2941   },
2942   {
2943     "custom_208",
2944     "custom",
2945     "custom element 208"
2946   },
2947   {
2948     "custom_209",
2949     "custom",
2950     "custom element 209"
2951   },
2952   {
2953     "custom_210",
2954     "custom",
2955     "custom element 210"
2956   },
2957   {
2958     "custom_211",
2959     "custom",
2960     "custom element 211"
2961   },
2962   {
2963     "custom_212",
2964     "custom",
2965     "custom element 212"
2966   },
2967   {
2968     "custom_213",
2969     "custom",
2970     "custom element 213"
2971   },
2972   {
2973     "custom_214",
2974     "custom",
2975     "custom element 214"
2976   },
2977   {
2978     "custom_215",
2979     "custom",
2980     "custom element 215"
2981   },
2982   {
2983     "custom_216",
2984     "custom",
2985     "custom element 216"
2986   },
2987   {
2988     "custom_217",
2989     "custom",
2990     "custom element 217"
2991   },
2992   {
2993     "custom_218",
2994     "custom",
2995     "custom element 218"
2996   },
2997   {
2998     "custom_219",
2999     "custom",
3000     "custom element 219"
3001   },
3002   {
3003     "custom_220",
3004     "custom",
3005     "custom element 220"
3006   },
3007   {
3008     "custom_221",
3009     "custom",
3010     "custom element 221"
3011   },
3012   {
3013     "custom_222",
3014     "custom",
3015     "custom element 222"
3016   },
3017   {
3018     "custom_223",
3019     "custom",
3020     "custom element 223"
3021   },
3022   {
3023     "custom_224",
3024     "custom",
3025     "custom element 224"
3026   },
3027   {
3028     "custom_225",
3029     "custom",
3030     "custom element 225"
3031   },
3032   {
3033     "custom_226",
3034     "custom",
3035     "custom element 226"
3036   },
3037   {
3038     "custom_227",
3039     "custom",
3040     "custom element 227"
3041   },
3042   {
3043     "custom_228",
3044     "custom",
3045     "custom element 228"
3046   },
3047   {
3048     "custom_229",
3049     "custom",
3050     "custom element 229"
3051   },
3052   {
3053     "custom_230",
3054     "custom",
3055     "custom element 230"
3056   },
3057   {
3058     "custom_231",
3059     "custom",
3060     "custom element 231"
3061   },
3062   {
3063     "custom_232",
3064     "custom",
3065     "custom element 232"
3066   },
3067   {
3068     "custom_233",
3069     "custom",
3070     "custom element 233"
3071   },
3072   {
3073     "custom_234",
3074     "custom",
3075     "custom element 234"
3076   },
3077   {
3078     "custom_235",
3079     "custom",
3080     "custom element 235"
3081   },
3082   {
3083     "custom_236",
3084     "custom",
3085     "custom element 236"
3086   },
3087   {
3088     "custom_237",
3089     "custom",
3090     "custom element 237"
3091   },
3092   {
3093     "custom_238",
3094     "custom",
3095     "custom element 238"
3096   },
3097   {
3098     "custom_239",
3099     "custom",
3100     "custom element 239"
3101   },
3102   {
3103     "custom_240",
3104     "custom",
3105     "custom element 240"
3106   },
3107   {
3108     "custom_241",
3109     "custom",
3110     "custom element 241"
3111   },
3112   {
3113     "custom_242",
3114     "custom",
3115     "custom element 242"
3116   },
3117   {
3118     "custom_243",
3119     "custom",
3120     "custom element 243"
3121   },
3122   {
3123     "custom_244",
3124     "custom",
3125     "custom element 244"
3126   },
3127   {
3128     "custom_245",
3129     "custom",
3130     "custom element 245"
3131   },
3132   {
3133     "custom_246",
3134     "custom",
3135     "custom element 246"
3136   },
3137   {
3138     "custom_247",
3139     "custom",
3140     "custom element 247"
3141   },
3142   {
3143     "custom_248",
3144     "custom",
3145     "custom element 248"
3146   },
3147   {
3148     "custom_249",
3149     "custom",
3150     "custom element 249"
3151   },
3152   {
3153     "custom_250",
3154     "custom",
3155     "custom element 250"
3156   },
3157   {
3158     "custom_251",
3159     "custom",
3160     "custom element 251"
3161   },
3162   {
3163     "custom_252",
3164     "custom",
3165     "custom element 252"
3166   },
3167   {
3168     "custom_253",
3169     "custom",
3170     "custom element 253"
3171   },
3172   {
3173     "custom_254",
3174     "custom",
3175     "custom element 254"
3176   },
3177   {
3178     "custom_255",
3179     "custom",
3180     "custom element 255"
3181   },
3182   {
3183     "custom_256",
3184     "custom",
3185     "custom element 256"
3186   },
3187   {
3188     "em_key_1",
3189     "key",
3190     "red key (EM style)"
3191     },
3192   {
3193     "em_key_2",
3194     "key",
3195     "yellow key (EM style)"
3196     },
3197   {
3198     "em_key_3",
3199     "key",
3200     "green key (EM style)"
3201   },
3202   {
3203     "em_key_4",
3204     "key",
3205     "blue key (EM style)"
3206   },
3207   {
3208     "envelope_1",
3209     "envelope",
3210     "mail envelope 1"
3211   },
3212   {
3213     "envelope_2",
3214     "envelope",
3215     "mail envelope 2"
3216   },
3217   {
3218     "envelope_3",
3219     "envelope",
3220     "mail envelope 3"
3221   },
3222   {
3223     "envelope_4",
3224     "envelope",
3225     "mail envelope 4"
3226   },
3227
3228   /* ----------------------------------------------------------------------- */
3229   /* "real" (and therefore drawable) runtime elements                        */
3230   /* ----------------------------------------------------------------------- */
3231
3232   {
3233     "dynabomb_player_1.active",
3234     "dynabomb",
3235     "-"
3236   },
3237   {
3238     "dynabomb_player_2.active",
3239     "dynabomb",
3240     "-"
3241   },
3242   {
3243     "dynabomb_player_3.active",
3244     "dynabomb",
3245     "-"
3246   },
3247   {
3248     "dynabomb_player_4.active",
3249     "dynabomb",
3250     "-"
3251   },
3252   {
3253     "sp_disk_red.active",
3254     "dynamite",
3255     "-"
3256   },
3257   {
3258     "switchgate.opening",
3259     "switchgate",
3260     "-"
3261   },
3262   {
3263     "switchgate.closing",
3264     "switchgate",
3265     "-"
3266   },
3267   {
3268     "timegate.opening",
3269     "timegate",
3270     "-"
3271   },
3272   {
3273     "timegate.closing",
3274     "timegate",
3275     "-"
3276   },
3277   {
3278     "pearl.breaking",
3279     "pearl",
3280     "-"
3281   },
3282   {
3283     "trap.active",
3284     "trap",
3285     "-"
3286   },
3287   {
3288     "invisible_steelwall.active",
3289     "wall",
3290     "-"
3291   },
3292   {
3293     "invisible_wall.active",
3294     "wall",
3295     "-"
3296   },
3297   {
3298     "invisible_sand.active",
3299     "sand",
3300     "-"
3301   },
3302   {
3303     "conveyor_belt_1_left.active",
3304     "conveyor_belt",
3305     "-"
3306   },
3307   {
3308     "conveyor_belt_1_middle.active",
3309     "conveyor_belt",
3310     "-"
3311   },
3312   {
3313     "conveyor_belt_1_right.active",
3314     "conveyor_belt",
3315     "-"
3316   },
3317   {
3318     "conveyor_belt_2_left.active",
3319     "conveyor_belt",
3320     "-"
3321   },
3322   {
3323     "conveyor_belt_2_middle.active",
3324     "conveyor_belt",
3325     "-"
3326   },
3327   {
3328     "conveyor_belt_2_right.active",
3329     "conveyor_belt",
3330     "-"
3331   },
3332   {
3333     "conveyor_belt_3_left.active",
3334     "conveyor_belt",
3335     "-"
3336   },
3337   {
3338     "conveyor_belt_3_middle.active",
3339     "conveyor_belt",
3340     "-"
3341   },
3342   {
3343     "conveyor_belt_3_right.active",
3344     "conveyor_belt",
3345     "-"
3346   },
3347   {
3348     "conveyor_belt_4_left.active",
3349     "conveyor_belt",
3350     "-"
3351   },
3352   {
3353     "conveyor_belt_4_middle.active",
3354     "conveyor_belt",
3355     "-"
3356   },
3357   {
3358     "conveyor_belt_4_right.active",
3359     "conveyor_belt",
3360     "-"
3361   },
3362   {
3363     "exit.opening",
3364     "exit",
3365     "-"
3366   },
3367   {
3368     "exit.closing",
3369     "exit",
3370     "-"
3371   },
3372   {
3373     "sp_exit.opening",
3374     "sp_exit",
3375     "-"
3376   },
3377   {
3378     "sp_exit.closing",
3379     "sp_exit",
3380     "-"
3381   },
3382   {
3383     "sp_exit_open",
3384     "sp_exit",
3385     "-"
3386   },
3387   {
3388     "sp_terminal.active",
3389     "sp_terminal",
3390     "-"
3391   },
3392   {
3393     "sp_buggy_base.activating",
3394     "sp_buggy_base",
3395     "-"
3396   },
3397   {
3398     "sp_buggy_base.active",
3399     "sp_buggy_base",
3400     "-"
3401   },
3402   {
3403     "sp_murphy_clone",
3404     "murphy_clone",
3405     "-"
3406   },
3407   {
3408     "amoeba.dropping",
3409     "amoeba",
3410     "-"
3411   },
3412   {
3413     "quicksand.emptying",
3414     "quicksand",
3415     "-"
3416   },
3417   {
3418     "magic_wall.active",
3419     "magic_wall",
3420     "-"
3421   },
3422   {
3423     "bd_magic_wall.active",
3424     "magic_wall",
3425     "-"
3426   },
3427   {
3428     "magic_wall_full",
3429     "magic_wall",
3430     "-"
3431   },
3432   {
3433     "bd_magic_wall_full",
3434     "magic_wall",
3435     "-"
3436   },
3437   {
3438     "magic_wall.emptying",
3439     "magic_wall",
3440     "-"
3441   },
3442   {
3443     "bd_magic_wall.emptying",
3444     "magic_wall",
3445     "-"
3446   },
3447   {
3448     "magic_wall_dead",
3449     "magic_wall",
3450     "-"
3451   },
3452   {
3453     "bd_magic_wall_dead",
3454     "magic_wall",
3455     "-"
3456   },
3457
3458   /* ----------------------------------------------------------------------- */
3459   /* "unreal" (and therefore not drawable) runtime elements                  */
3460   /* ----------------------------------------------------------------------- */
3461
3462   {
3463     "blocked",
3464     "-",
3465     "-"
3466   },
3467   {
3468     "explosion",
3469     "-",
3470     "-"
3471   },
3472   {
3473     "nut_breaking",
3474     "-",
3475     "-"
3476   },
3477   {
3478     "diamond_breaking",
3479     "-",
3480     "-"
3481   },
3482   {
3483     "acid_splash_left",
3484     "-",
3485     "-"
3486   },
3487   {
3488     "acid_splash_right",
3489     "-",
3490     "-"
3491   },
3492   {
3493     "amoeba_growing",
3494     "-",
3495     "-"
3496   },
3497   {
3498     "amoeba_shrinking",
3499     "-",
3500     "-"
3501   },
3502   {
3503     "expandable_wall.growing",
3504     "-",
3505     "-"
3506   },
3507   {
3508     "flames",
3509     "-",
3510     "-"
3511   },
3512   {
3513     "player_is_leaving",
3514     "-",
3515     "-"
3516   },
3517   {
3518     "quicksand.filling",
3519     "quicksand",
3520     "-"
3521   },
3522   {
3523     "magic_wall.filling",
3524     "-",
3525     "-"
3526   },
3527   {
3528     "bd_magic_wall.filling",
3529     "-",
3530     "-"
3531   },
3532
3533   /* ----------------------------------------------------------------------- */
3534   /* dummy elements (never used as game elements, only used as graphics)     */
3535   /* ----------------------------------------------------------------------- */
3536
3537   {
3538     "steelwall_topleft",
3539     "-",
3540     "-"
3541   },
3542   {
3543     "steelwall_topright",
3544     "-",
3545     "-"
3546   },
3547   {
3548     "steelwall_bottomleft",
3549     "-",
3550     "-"
3551   },
3552   {
3553     "steelwall_bottomright",
3554     "-",
3555     "-"
3556   },
3557   {
3558     "steelwall_horizontal",
3559     "-",
3560     "-"
3561   },
3562   {
3563     "steelwall_vertical",
3564     "-",
3565     "-"
3566   },
3567   {
3568     "invisible_steelwall_topleft",
3569     "-",
3570     "-"
3571   },
3572   {
3573     "invisible_steelwall_topright",
3574     "-",
3575     "-"
3576   },
3577   {
3578     "invisible_steelwall_bottomleft",
3579     "-",
3580     "-"
3581   },
3582   {
3583     "invisible_steelwall_bottomright",
3584     "-",
3585     "-"
3586   },
3587   {
3588     "invisible_steelwall_horizontal",
3589     "-",
3590     "-"
3591   },
3592   {
3593     "invisible_steelwall_vertical",
3594     "-",
3595     "-"
3596   },
3597   {
3598     "dynabomb",
3599     "-",
3600     "-"
3601   },
3602   {
3603     "dynabomb.active",
3604     "-",
3605     "-"
3606   },
3607   {
3608     "dynabomb_player_1",
3609     "-",
3610     "-"
3611   },
3612   {
3613     "dynabomb_player_2",
3614     "-",
3615     "-"
3616   },
3617   {
3618     "dynabomb_player_3",
3619     "-",
3620     "-"
3621   },
3622   {
3623     "dynabomb_player_4",
3624     "-",
3625     "-"
3626   },
3627   {
3628     "shield_normal.active",
3629     "-",
3630     "-"
3631   },
3632   {
3633     "shield_deadly.active",
3634     "-",
3635     "-"
3636   },
3637   {
3638     "[default]",
3639     "default",
3640     "-"
3641   },
3642   {
3643     "[bd_default]",
3644     "bd_default",
3645     "-"
3646   },
3647   {
3648     "[sp_default]",
3649     "sp_default",
3650     "-"
3651   },
3652   {
3653     "[sb_default]",
3654     "sb_default",
3655     "-"
3656   },
3657
3658   /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */
3659
3660   {
3661     NULL,
3662     NULL,
3663     NULL
3664   }
3665 };
3666
3667
3668 /* ------------------------------------------------------------------------- */
3669 /* element action and direction definitions                                  */
3670 /* ------------------------------------------------------------------------- */
3671
3672 struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] =
3673 {
3674   { ".[DEFAULT]",       ACTION_DEFAULT,         TRUE    },
3675   { ".waiting",         ACTION_WAITING,         TRUE    },
3676   { ".falling",         ACTION_FALLING,         TRUE    },
3677   { ".moving",          ACTION_MOVING,          TRUE    },
3678   { ".digging",         ACTION_DIGGING,         FALSE   },
3679   { ".snapping",        ACTION_SNAPPING,        FALSE   },
3680   { ".collecting",      ACTION_COLLECTING,      FALSE   },
3681   { ".dropping",        ACTION_DROPPING,        FALSE   },
3682   { ".pushing",         ACTION_PUSHING,         FALSE   },
3683   { ".walking",         ACTION_WALKING,         FALSE   },
3684   { ".passing",         ACTION_PASSING,         FALSE   },
3685   { ".impact",          ACTION_IMPACT,          FALSE   },
3686   { ".breaking",        ACTION_BREAKING,        FALSE   },
3687   { ".activating",      ACTION_ACTIVATING,      FALSE   },
3688   { ".deactivating",    ACTION_DEACTIVATING,    FALSE   },
3689   { ".opening",         ACTION_OPENING,         FALSE   },
3690   { ".closing",         ACTION_CLOSING,         FALSE   },
3691   { ".attacking",       ACTION_ATTACKING,       TRUE    },
3692   { ".growing",         ACTION_GROWING,         TRUE    },
3693   { ".shrinking",       ACTION_SHRINKING,       FALSE   },
3694   { ".active",          ACTION_ACTIVE,          TRUE    },
3695   { ".filling",         ACTION_FILLING,         FALSE   },
3696   { ".emptying",        ACTION_EMPTYING,        FALSE   },
3697   { ".changing",        ACTION_CHANGING,        FALSE   },
3698   { ".exploding",       ACTION_EXPLODING,       FALSE   },
3699   { ".dying",           ACTION_DYING,           FALSE   },
3700   { ".other",           ACTION_OTHER,           FALSE   },
3701
3702   /* empty suffix always matches -- check as last entry in InitSoundInfo() */
3703   { "",                 ACTION_DEFAULT,         TRUE    },
3704
3705   { NULL,               0,                      0       }
3706 };
3707
3708 struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS + 1] =
3709 {
3710   { ".left",            MV_BIT_LEFT                     },
3711   { ".right",           MV_BIT_RIGHT                    },
3712   { ".up",              MV_BIT_UP                       },
3713   { ".down",            MV_BIT_DOWN                     },
3714
3715   { NULL,               0                               }
3716 };
3717
3718 struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1] =
3719 {
3720   { ".MAIN",            GAME_MODE_MAIN,                 },
3721   { ".LEVELS",          GAME_MODE_LEVELS                },
3722   { ".SCORES",          GAME_MODE_SCORES,               },
3723   { ".EDITOR",          GAME_MODE_EDITOR,               },
3724   { ".INFO",            GAME_MODE_INFO,                 },
3725   { ".SETUP",           GAME_MODE_SETUP,                },
3726   { ".PLAYING",         GAME_MODE_PLAYING,              },
3727   { ".DOOR",            GAME_MODE_PSEUDO_DOOR,          },
3728   { ".PREVIEW",         GAME_MODE_PSEUDO_PREVIEW,       },
3729   { ".CRUMBLED",        GAME_MODE_PSEUDO_CRUMBLED,      },
3730
3731   { NULL,               0,                              }
3732 };
3733
3734 struct TokenIntPtrInfo image_config_vars[] =
3735 {
3736   { "global.num_toons",         &global.num_toons                          },
3737
3738   { "menu.draw_xoffset",        &menu.draw_xoffset_default                 },
3739   { "menu.draw_yoffset",        &menu.draw_yoffset_default                 },
3740   { "menu.draw_xoffset.MAIN",   &menu.draw_xoffset[GFX_SPECIAL_ARG_MAIN]   },
3741   { "menu.draw_yoffset.MAIN",   &menu.draw_yoffset[GFX_SPECIAL_ARG_MAIN]   },
3742   { "menu.draw_xoffset.LEVELS", &menu.draw_xoffset[GFX_SPECIAL_ARG_LEVELS] },
3743   { "menu.draw_yoffset.LEVELS", &menu.draw_yoffset[GFX_SPECIAL_ARG_LEVELS] },
3744   { "menu.draw_xoffset.SCORES", &menu.draw_xoffset[GFX_SPECIAL_ARG_SCORES] },
3745   { "menu.draw_yoffset.SCORES", &menu.draw_yoffset[GFX_SPECIAL_ARG_SCORES] },
3746   { "menu.draw_xoffset.EDITOR", &menu.draw_xoffset[GFX_SPECIAL_ARG_EDITOR] },
3747   { "menu.draw_yoffset.EDITOR", &menu.draw_yoffset[GFX_SPECIAL_ARG_EDITOR] },
3748   { "menu.draw_xoffset.INFO",   &menu.draw_xoffset[GFX_SPECIAL_ARG_INFO]   },
3749   { "menu.draw_yoffset.INFO",   &menu.draw_yoffset[GFX_SPECIAL_ARG_INFO]   },
3750   { "menu.draw_xoffset.SETUP",  &menu.draw_xoffset[GFX_SPECIAL_ARG_SETUP]  },
3751   { "menu.draw_yoffset.SETUP",  &menu.draw_yoffset[GFX_SPECIAL_ARG_SETUP]  },
3752
3753   { "menu.scrollbar_xoffset",   &menu.scrollbar_xoffset                    },
3754
3755   { "menu.list_size",           &menu.list_size_default                    },
3756   { "menu.list_size.LEVELS",    &menu.list_size[GFX_SPECIAL_ARG_LEVELS]    },
3757   { "menu.list_size.SCORES",    &menu.list_size[GFX_SPECIAL_ARG_SCORES]    },
3758   { "menu.list_size.INFO",      &menu.list_size[GFX_SPECIAL_ARG_INFO]      },
3759
3760   { "door_1.step_offset",       &door_1.step_offset                        },
3761   { "door_1.step_delay",        &door_1.step_delay                         },
3762   { "door_1.anim_mode",         &door_1.anim_mode                          },
3763   { "door_2.step_offset",       &door_2.step_offset                        },
3764   { "door_2.step_delay",        &door_2.step_delay                         },
3765   { "door_2.anim_mode",         &door_2.anim_mode                          },
3766
3767   { NULL,                       NULL,                                      }
3768 };
3769
3770
3771 /* ------------------------------------------------------------------------- */
3772 /* font definitions                                                          */
3773 /* ------------------------------------------------------------------------- */
3774
3775 /* Important: When one entry is a prefix of another entry, the longer entry
3776    must come first, because the dynamic configuration does prefix matching! */
3777
3778 struct FontInfo font_info[NUM_FONTS + 1] =
3779 {
3780   { "font.initial_1"            },
3781   { "font.initial_2"            },
3782   { "font.initial_3"            },
3783   { "font.initial_4"            },
3784   { "font.title_1"              },
3785   { "font.title_2"              },
3786   { "font.menu_1"               },
3787   { "font.menu_2"               },
3788   { "font.text_1.active"        },
3789   { "font.text_2.active"        },
3790   { "font.text_3.active"        },
3791   { "font.text_4.active"        },
3792   { "font.text_1"               },
3793   { "font.text_2"               },
3794   { "font.text_3"               },
3795   { "font.text_4"               },
3796   { "font.envelope_1"           },
3797   { "font.envelope_2"           },
3798   { "font.envelope_3"           },
3799   { "font.envelope_4"           },
3800   { "font.input_1.active"       },
3801   { "font.input_2.active"       },
3802   { "font.input_1"              },
3803   { "font.input_2"              },
3804   { "font.option_off"           },
3805   { "font.option_on"            },
3806   { "font.value_1"              },
3807   { "font.value_2"              },
3808   { "font.value_old"            },
3809   { "font.level_number"         },
3810   { "font.tape_recorder"        },
3811   { "font.game_info"            },
3812 };
3813
3814
3815 /* ========================================================================= */
3816 /* main()                                                                    */
3817 /* ========================================================================= */
3818
3819 int main(int argc, char *argv[])
3820 {
3821   InitProgramInfo(argv[0], USERDATA_DIRECTORY,
3822                   PROGRAM_TITLE_STRING, getWindowTitleString(),
3823                   ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME,
3824                   MSDOS_POINTER_FILENAME,
3825                   COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
3826
3827   InitExitFunction(CloseAllAndExit);
3828   InitPlatformDependentStuff();
3829
3830   GetOptions(argv);
3831   OpenAll();
3832
3833   EventLoop();
3834   CloseAllAndExit(0);
3835
3836   return 0;     /* to keep compilers happy */
3837 }