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