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