rnd-20070209-1-src
[rocksndiamonds.git] / src / main.c
1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back!               *
3 *----------------------------------------------------------*
4 * (c) 1995-2006 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 "tape.h"
20 #include "events.h"
21 #include "config.h"
22
23 Bitmap                 *bitmap_db_cross;
24 Bitmap                 *bitmap_db_field;
25 Bitmap                 *bitmap_db_panel;
26 Bitmap                 *bitmap_db_door;
27 DrawBuffer             *fieldbuffer;
28 DrawBuffer             *drawto_field;
29
30 int                     game_status = -1;
31 boolean                 level_editor_test_game = FALSE;
32 boolean                 network_playing = FALSE;
33
34 #if defined(TARGET_SDL)
35 boolean                 network_server = FALSE;
36 SDL_Thread             *server_thread;
37 #endif
38
39 int                     key_joystick_mapping = 0;
40
41 boolean                 redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
42 int                     redraw_x1 = 0, redraw_y1 = 0;
43
44 short                   Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short                   MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short                   ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
49 short                   ChangePage[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 short                   CustomValue[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
51 short                   Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
52 short                   Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
53 short                   StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
54 short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
55 boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
56 boolean                 Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
57 short                   ChangeCount[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
58 short                   ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
59 short                   WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
60 short                   WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
61 short                   CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
62 short                   CheckImpact[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
63 short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
64 short                   AmoebaCnt[MAX_NUM_AMOEBA];
65 short                   AmoebaCnt2[MAX_NUM_AMOEBA];
66 short                   ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
67 short                   ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
68 short                   ExplodeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
69 int                     RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
70 int                     PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
71
72 int                     GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
73 int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
74 int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
75 int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
76 int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
77
78 int                     lev_fieldx, lev_fieldy;
79 int                     scroll_x, scroll_y;
80
81 int                     FX = SX, FY = SY;
82 int                     ScrollStepSize;
83 int                     ScreenMovDir = MV_NONE, ScreenMovPos = 0;
84 int                     ScreenGfxPos = 0;
85 int                     BorderElement = EL_STEELWALL;
86 int                     GameFrameDelay = GAME_FRAME_DELAY;
87 int                     FfwdFrameDelay = FFWD_FRAME_DELAY;
88 int                     BX1 = 0, BY1 = 0;
89 int                     BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1;
90 int                     SBX_Left, SBX_Right;
91 int                     SBY_Upper, SBY_Lower;
92 int                     ZX, ZY;
93 int                     ExitX, ExitY;
94 int                     AllPlayersGone;
95
96 int                     TimeFrames, TimePlayed, TimeLeft, TapeTime;
97
98 boolean                 network_player_action_received = FALSE;
99
100 struct LevelSetInfo     levelset;
101 struct LevelInfo        level, level_template;
102 struct PlayerInfo       stored_player[MAX_PLAYERS], *local_player = NULL;
103 struct HiScore          highscore[MAX_SCORE_ENTRIES];
104 struct TapeInfo         tape;
105 struct SetupInfo        setup;
106 struct GameInfo         game;
107 struct GlobalInfo       global;
108 struct BorderInfo       border;
109 struct TitleInfo        title;
110 struct TitleMessageInfo titlemessage[MAX_NUM_TITLE_MESSAGES];
111 struct TitleMessageInfo titlemessage_initial[MAX_NUM_TITLE_MESSAGES];
112 struct MenuInfo         menu;
113 struct DoorInfo         door_1, door_2;
114 struct PreviewInfo      preview;
115 struct GraphicInfo     *graphic_info = NULL;
116 struct SoundInfo       *sound_info = NULL;
117 struct MusicInfo       *music_info = NULL;
118 struct MusicFileInfo   *music_file_info = NULL;
119 struct HelpAnimInfo    *helpanim_info = NULL;
120 SetupFileHash          *helptext_info = NULL;
121
122
123 /* ------------------------------------------------------------------------- */
124 /* element definitions                                                       */
125 /* ------------------------------------------------------------------------- */
126
127 struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1];
128
129 /* this contains predefined structure elements to initialize "element_info" */
130 struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] =
131 {
132   /* keyword to start parser: "ELEMENT_INFO_START" <-- do not change! */
133
134   /* ----------------------------------------------------------------------- */
135   /* "real" level file elements                                              */
136   /* ----------------------------------------------------------------------- */
137
138   {
139     "empty_space",
140     "empty_space",
141     "empty space"
142   },
143   {
144     "sand",
145     "sand",
146     "sand"
147   },
148   {
149     "wall",
150     "wall",
151     "normal wall"
152   },
153   {
154     "wall_slippery",
155     "wall",
156     "slippery wall"
157   },
158   {
159     "rock",
160     "rock",
161     "rock"
162   },
163   {
164     "key_obsolete",
165     "obsolete",
166     "key (OBSOLETE)"
167   },
168   {
169     "emerald",
170     "emerald",
171     "emerald"
172   },
173   {
174     "exit_closed",
175     "exit",
176     "closed exit"
177   },
178   {
179     "player_obsolete",
180     "obsolete",
181     "player (OBSOLETE)"
182   },
183   {
184     "bug",
185     "bug",
186     "bug (random start direction)"
187   },
188   {
189     "spaceship",
190     "spaceship",
191     "spaceship (random start direction)"
192   },
193   {
194     "yamyam",
195     "yamyam",
196     "yam yam (random start direction)"
197   },
198   {
199     "robot",
200     "robot",
201     "robot"
202   },
203   {
204     "steelwall",
205     "steelwall",
206     "steel wall"
207   },
208   {
209     "diamond",
210     "diamond",
211     "diamond"
212   },
213   {
214     "amoeba_dead",
215     "amoeba",
216     "dead amoeba"
217   },
218   {
219     "quicksand_empty",
220     "quicksand",
221     "quicksand (empty)"
222   },
223   {
224     "quicksand_full",
225     "quicksand",
226     "quicksand (with rock)"
227   },
228   {
229     "amoeba_drop",
230     "amoeba",
231     "amoeba drop"
232   },
233   {
234     "bomb",
235     "bomb",
236     "bomb"
237   },
238   {
239     "magic_wall",
240     "magic_wall",
241     "magic wall"
242   },
243   {
244     "speed_pill",
245     "speed_pill",
246     "speed pill"
247   },
248   {
249     "acid",
250     "acid",
251     "acid"
252   },
253   {
254     "amoeba_wet",
255     "amoeba",
256     "dropping amoeba (EM style)"
257   },
258   {
259     "amoeba_dry",
260     "amoeba",
261     "normal amoeba"
262   },
263   {
264     "nut",
265     "nut",
266     "nut with emerald"
267   },
268   {
269     "game_of_life",
270     "game_of_life",
271     "Conway's wall of life"
272   },
273   {
274     "biomaze",
275     "biomaze",
276     "biomaze"
277   },
278   {
279     "dynamite.active",
280     "dynamite",
281     "burning dynamite"
282   },
283   {
284     "stoneblock",
285     "wall",
286     "wall"
287   },
288   {
289     "robot_wheel",
290     "robot_wheel",
291     "magic wheel"
292   },
293   {
294     "robot_wheel.active",
295     "robot_wheel",
296     "magic wheel (running)"
297   },
298   {
299     "key_1",
300     "key",
301     "key 1"
302   },
303   {
304     "key_2",
305     "key",
306     "key 2"
307   },
308   {
309     "key_3",
310     "key",
311     "key 3"
312   },
313   {
314     "key_4",
315     "key",
316     "key 4"
317   },
318   {
319     "gate_1",
320     "gate",
321     "door 1"
322   },
323   {
324     "gate_2",
325     "gate",
326     "door 2"
327   },
328   {
329     "gate_3",
330     "gate",
331     "door 3"
332   },
333   {
334     "gate_4",
335     "gate",
336     "door 4"
337   },
338   {
339     "gate_1_gray",
340     "gate",
341     "gray door (opened by key 1)"
342   },
343   {
344     "gate_2_gray",
345     "gate",
346     "gray door (opened by key 2)"
347   },
348   {
349     "gate_3_gray",
350     "gate",
351     "gray door (opened by key 3)"
352   },
353   {
354     "gate_4_gray",
355     "gate",
356     "gray door (opened by key 4)"
357   },
358   {
359     "dynamite",
360     "dynamite",
361     "dynamite"
362   },
363   {
364     "pacman",
365     "pacman",
366     "pac man (random start direction)"
367   },
368   {
369     "invisible_wall",
370     "wall",
371     "invisible normal wall"
372   },
373   {
374     "lamp",
375     "lamp",
376     "lamp (off)"
377   },
378   {
379     "lamp.active",
380     "lamp",
381     "lamp (on)"
382   },
383   {
384     "wall_emerald",
385     "wall",
386     "wall with emerald"
387   },
388   {
389     "wall_diamond",
390     "wall",
391     "wall with diamond"
392   },
393   {
394     "amoeba_full",
395     "amoeba",
396     "amoeba with content"
397   },
398   {
399     "bd_amoeba",
400     "bd_amoeba",
401     "amoeba (BD style)"
402   },
403   {
404     "time_orb_full",
405     "time_orb_full",
406     "time orb (full)"
407   },
408   {
409     "time_orb_empty",
410     "time_orb_empty",
411     "time orb (empty)"
412   },
413   {
414     "expandable_wall",
415     "wall",
416     "growing wall (horizontal, visible)"
417   },
418   {
419     "bd_diamond",
420     "bd_diamond",
421     "diamond (BD style)"
422   },
423   {
424     "emerald_yellow",
425     "emerald",
426     "yellow emerald"
427   },
428   {
429     "wall_bd_diamond",
430     "wall",
431     "wall with BD style diamond"
432   },
433   {
434     "wall_emerald_yellow",
435     "wall",
436     "wall with yellow emerald"
437   },
438   {
439     "dark_yamyam",
440     "dark_yamyam",
441     "dark yam yam"
442   },
443   {
444     "bd_magic_wall",
445     "bd_magic_wall",
446     "magic wall (BD style)"
447   },
448   {
449     "invisible_steelwall",
450     "steelwall",
451     "invisible steel wall"
452   },
453   {
454     "sokoban_field_player",
455     "sokoban",
456     "sokoban field with player"
457   },
458   {
459     "dynabomb_increase_number",
460     "dynabomb",
461     "increases number of bombs"
462   },
463   {
464     "dynabomb_increase_size",
465     "dynabomb",
466     "increases explosion size"
467   },
468   {
469     "dynabomb_increase_power",
470     "dynabomb",
471     "increases power of explosion"
472   },
473   {
474     "sokoban_object",
475     "sokoban",
476     "sokoban object"
477   },
478   {
479     "sokoban_field_empty",
480     "sokoban",
481     "sokoban empty field"
482   },
483   {
484     "sokoban_field_full",
485     "sokoban",
486     "sokoban field with object"
487   },
488   {
489     "bd_butterfly.right",
490     "bd_butterfly",
491     "butterfly (starts moving right)"},
492   {
493     "bd_butterfly.up",
494     "bd_butterfly",
495     "butterfly (starts moving up)"
496   },
497   {
498     "bd_butterfly.left",
499     "bd_butterfly",
500     "butterfly (starts moving left)"},
501   {
502     "bd_butterfly.down",
503     "bd_butterfly",
504     "butterfly (starts moving down)"},
505   {
506     "bd_firefly.right",
507     "bd_firefly",
508     "firefly (starts moving right)"
509   },
510   {
511     "bd_firefly.up",
512     "bd_firefly",
513     "firefly (starts moving up)"
514   },
515   {
516     "bd_firefly.left",
517     "bd_firefly",
518     "firefly (starts moving left)"
519   },
520   {
521     "bd_firefly.down",
522     "bd_firefly",
523     "firefly (starts moving down)"
524   },
525   {
526     "bd_butterfly",
527     "bd_butterfly",
528     "butterfly (random start direction)"
529   },
530   {
531     "bd_firefly",
532     "bd_firefly",
533     "firefly (random start direction)"
534   },
535   {
536     "player_1",
537     "player",
538     "player 1"
539   },
540   {
541     "player_2",
542     "player",
543     "player 2"
544   },
545   {
546     "player_3",
547     "player",
548     "player 3"
549   },
550   {
551     "player_4",
552     "player",
553     "player 4"
554   },
555   {
556     "bug.right",
557     "bug",
558     "bug (starts moving right)"
559   },
560   {
561     "bug.up",
562     "bug",
563     "bug (starts moving up)"
564   },
565   {
566     "bug.left",
567     "bug",
568     "bug (starts moving left)"
569   },
570   {
571     "bug.down",
572     "bug",
573     "bug (starts moving down)"
574   },
575   {
576     "spaceship.right",
577     "spaceship",
578     "spaceship (starts moving right)"},
579   {
580     "spaceship.up",
581     "spaceship",
582     "spaceship (starts moving up)"
583   },
584   {
585     "spaceship.left",
586     "spaceship",
587     "spaceship (starts moving left)"},
588   {
589     "spaceship.down",
590     "spaceship",
591     "spaceship (starts moving down)"},
592   {
593     "pacman.right",
594     "pacman",
595     "pac man (starts moving right)"
596   },
597   {
598     "pacman.up",
599     "pacman",
600     "pac man (starts moving up)"
601   },
602   {
603     "pacman.left",
604     "pacman",
605     "pac man (starts moving left)"
606   },
607   {
608     "pacman.down",
609     "pacman",
610     "pac man (starts moving down)"
611   },
612   {
613     "emerald_red",
614     "emerald",
615     "red emerald"
616   },
617   {
618     "emerald_purple",
619     "emerald",
620     "purple emerald"
621   },
622   {
623     "wall_emerald_red",
624     "wall",
625     "wall with red emerald"
626   },
627   {
628     "wall_emerald_purple",
629     "wall",
630     "wall with purple emerald"
631   },
632   {
633     "acid_pool_topleft",
634     "wall",
635     "acid pool (top left)"
636   },
637   {
638     "acid_pool_topright",
639     "wall",
640     "acid pool (top right)"
641   },
642   {
643     "acid_pool_bottomleft",
644     "wall",
645     "acid pool (bottom left)"
646   },
647   {
648     "acid_pool_bottom",
649     "wall",
650     "acid pool (bottom)"
651   },
652   {
653     "acid_pool_bottomright",
654     "wall",
655     "acid pool (bottom right)"
656   },
657   {
658     "bd_wall",
659     "wall",
660     "normal wall (BD style)"
661   },
662   {
663     "bd_rock",
664     "bd_rock",
665     "rock (BD style)"
666   },
667   {
668     "exit_open",
669     "exit",
670     "open exit"
671   },
672   {
673     "black_orb",
674     "black_orb",
675     "black orb bomb"
676   },
677   {
678     "amoeba_to_diamond",
679     "amoeba",
680     "amoeba"
681   },
682   {
683     "mole",
684     "mole",
685     "mole (random start direction)"
686   },
687   {
688     "penguin",
689     "penguin",
690     "penguin"
691   },
692   {
693     "satellite",
694     "satellite",
695     "satellite"
696   },
697   {
698     "arrow_left",
699     "arrow",
700     "arrow left"
701   },
702   {
703     "arrow_right",
704     "arrow",
705     "arrow right"
706   },
707   {
708     "arrow_up",
709     "arrow",
710     "arrow up"
711   },
712   {
713     "arrow_down",
714     "arrow",
715     "arrow down"
716   },
717   {
718     "pig",
719     "pig",
720     "pig"
721   },
722   {
723     "dragon",
724     "dragon",
725     "fire breathing dragon"
726   },
727   {
728     "em_key_1_file_obsolete",
729     "obsolete",
730     "key (OBSOLETE)"
731   },
732   {
733     "char_space",
734     "char",
735     "letter ' '"
736   },
737   {
738     "char_exclam",
739     "char",
740     "letter '!'"
741   },
742   {
743     "char_quotedbl",
744     "char",
745     "letter '\"'"
746   },
747   {
748     "char_numbersign",
749     "char",
750     "letter '#'"
751   },
752   {
753     "char_dollar",
754     "char",
755     "letter '$'"
756   },
757   {
758     "char_percent",
759     "char",
760     "letter '%'"
761   },
762   {
763     "char_ampersand",
764     "char",
765     "letter '&'"
766   },
767   {
768     "char_apostrophe",
769     "char",
770     "letter '''"
771   },
772   {
773     "char_parenleft",
774     "char",
775     "letter '('"
776   },
777   {
778     "char_parenright",
779     "char",
780     "letter ')'"
781   },
782   {
783     "char_asterisk",
784     "char",
785     "letter '*'"
786   },
787   {
788     "char_plus",
789     "char",
790     "letter '+'"
791   },
792   {
793     "char_comma",
794     "char",
795     "letter ','"
796   },
797   {
798     "char_minus",
799     "char",
800     "letter '-'"
801   },
802   {
803     "char_period",
804     "char",
805     "letter '.'"
806   },
807   {
808     "char_slash",
809     "char",
810     "letter '/'"
811   },
812   {
813     "char_0",
814     "char",
815     "letter '0'"
816   },
817   {
818     "char_1",
819     "char",
820     "letter '1'"
821   },
822   {
823     "char_2",
824     "char",
825     "letter '2'"
826   },
827   {
828     "char_3",
829     "char",
830     "letter '3'"
831   },
832   {
833     "char_4",
834     "char",
835     "letter '4'"
836   },
837   {
838     "char_5",
839     "char",
840     "letter '5'"
841   },
842   {
843     "char_6",
844     "char",
845     "letter '6'"
846   },
847   {
848     "char_7",
849     "char",
850     "letter '7'"
851   },
852   {
853     "char_8",
854     "char",
855     "letter '8'"
856   },
857   {
858     "char_9",
859     "char",
860     "letter '9'"
861   },
862   {
863     "char_colon",
864     "char",
865     "letter ':'"
866   },
867   {
868     "char_semicolon",
869     "char",
870     "letter ';'"
871   },
872   {
873     "char_less",
874     "char",
875     "letter '<'"
876   },
877   {
878     "char_equal",
879     "char",
880     "letter '='"
881   },
882   {
883     "char_greater",
884     "char",
885     "letter '>'"
886   },
887   {
888     "char_question",
889     "char",
890     "letter '?'"
891   },
892   {
893     "char_at",
894     "char",
895     "letter '@'"
896   },
897   {
898     "char_a",
899     "char",
900     "letter 'A'"
901   },
902   {
903     "char_b",
904     "char",
905     "letter 'B'"
906   },
907   {
908     "char_c",
909     "char",
910     "letter 'C'"
911   },
912   {
913     "char_d",
914     "char",
915     "letter 'D'"
916   },
917   {
918     "char_e",
919     "char",
920     "letter 'E'"
921   },
922   {
923     "char_f",
924     "char",
925     "letter 'F'"
926   },
927   {
928     "char_g",
929     "char",
930     "letter 'G'"
931   },
932   {
933     "char_h",
934     "char",
935     "letter 'H'"
936   },
937   {
938     "char_i",
939     "char",
940     "letter 'I'"
941   },
942   {
943     "char_j",
944     "char",
945     "letter 'J'"
946   },
947   {
948     "char_k",
949     "char",
950     "letter 'K'"
951   },
952   {
953     "char_l",
954     "char",
955     "letter 'L'"
956   },
957   {
958     "char_m",
959     "char",
960     "letter 'M'"
961   },
962   {
963     "char_n",
964     "char",
965     "letter 'N'"
966   },
967   {
968     "char_o",
969     "char",
970     "letter 'O'"
971   },
972   {
973     "char_p",
974     "char",
975     "letter 'P'"
976   },
977   {
978     "char_q",
979     "char",
980     "letter 'Q'"
981   },
982   {
983     "char_r",
984     "char",
985     "letter 'R'"
986   },
987   {
988     "char_s",
989     "char",
990     "letter 'S'"
991   },
992   {
993     "char_t",
994     "char",
995     "letter 'T'"
996   },
997   {
998     "char_u",
999     "char",
1000     "letter 'U'"
1001   },
1002   {
1003     "char_v",
1004     "char",
1005     "letter 'V'"
1006   },
1007   {
1008     "char_w",
1009     "char",
1010     "letter 'W'"
1011   },
1012   {
1013     "char_x",
1014     "char",
1015     "letter 'X'"
1016   },
1017   {
1018     "char_y",
1019     "char",
1020     "letter 'Y'"
1021   },
1022   {
1023     "char_z",
1024     "char",
1025     "letter 'Z'"
1026   },
1027   {
1028     "char_bracketleft",
1029     "char",
1030     "letter '['"
1031   },
1032   {
1033     "char_backslash",
1034     "char",
1035     "letter '\\'"
1036   },
1037   {
1038     "char_bracketright",
1039     "char",
1040     "letter ']'"
1041   },
1042   {
1043     "char_asciicircum",
1044     "char",
1045     "letter '^'"
1046   },
1047   {
1048     "char_underscore",
1049     "char",
1050     "letter '_'"
1051   },
1052   {
1053     "char_copyright",
1054     "char",
1055     "letter '©'"
1056   },
1057   {
1058     "char_aumlaut",
1059     "char",
1060     "letter 'Ä'"
1061   },
1062   {
1063     "char_oumlaut",
1064     "char",
1065     "letter 'Ö'"
1066   },
1067   {
1068     "char_uumlaut",
1069     "char",
1070     "letter 'Ãœ'"
1071   },
1072   {
1073     "char_degree",
1074     "char",
1075     "letter '°'"
1076   },
1077   {
1078     "char_trademark",
1079     "char",
1080     "letter '®'"
1081   },
1082   {
1083     "char_cursor",
1084     "char",
1085     "letter ' '"
1086   },
1087   {
1088     "char_unused",
1089     "char",
1090     "letter ''"
1091   },
1092   {
1093     "char_unused",
1094     "char",
1095     "letter ''"
1096   },
1097   {
1098     "char_unused",
1099     "char",
1100     "letter ''"
1101   },
1102   {
1103     "char_unused",
1104     "char",
1105     "letter ''"
1106   },
1107   {
1108     "char_unused",
1109     "char",
1110     "letter ''"
1111   },
1112   {
1113     "char_unused",
1114     "char",
1115     "letter ''"
1116   },
1117   {
1118     "char_unused",
1119     "char",
1120     "letter 'button'"
1121   },
1122   {
1123     "char_unused",
1124     "char",
1125     "letter 'up'"
1126   },
1127   {
1128     "char_unused",
1129     "char",
1130     "letter 'down'"
1131   },
1132   {
1133     "expandable_wall_horizontal",
1134     "wall",
1135     "growing wall (horizontal)"
1136   },
1137   {
1138     "expandable_wall_vertical",
1139     "wall",
1140     "growing wall (vertical)"
1141   },
1142   {
1143     "expandable_wall_any",
1144     "wall",
1145     "growing wall (any direction)"
1146   },
1147   {
1148     "em_gate_1",
1149     "gate",
1150     "door 1 (EM style)"
1151   },
1152   {
1153     "em_gate_2",
1154     "gate",
1155     "door 2 (EM style)"
1156   },
1157   {
1158     "em_gate_3",
1159     "gate",
1160     "door 3 (EM style)"
1161   },
1162   {
1163     "em_gate_4",
1164     "gate",
1165     "door 4 (EM style)"
1166   },
1167   {
1168     "em_key_2_file_obsolete",
1169     "obsolete",
1170     "key (OBSOLETE)"
1171   },
1172   {
1173     "em_key_3_file_obsolete",
1174     "obsolete",
1175     "key (OBSOLETE)"
1176   },
1177   {
1178     "em_key_4_file_obsolete",
1179     "obsolete",
1180     "key (OBSOLETE)"
1181   },
1182   {
1183     "sp_empty_space",
1184     "empty_space",
1185     "empty space"
1186   },
1187   {
1188     "sp_zonk",
1189     "sp_zonk",
1190     "zonk"
1191   },
1192   {
1193     "sp_base",
1194     "sp_base",
1195     "base"
1196   },
1197   {
1198     "sp_murphy",
1199     "player",
1200     "murphy"
1201   },
1202   {
1203     "sp_infotron",
1204     "sp_infotron",
1205     "infotron"
1206   },
1207   {
1208     "sp_chip_single",
1209     "wall",
1210     "chip (single)"
1211   },
1212   {
1213     "sp_hardware_gray",
1214     "wall",
1215     "hardware"
1216   },
1217   {
1218     "sp_exit_closed",
1219     "sp_exit",
1220     "exit"
1221   },
1222   {
1223     "sp_disk_orange",
1224     "sp_disk_orange",
1225     "orange disk"
1226   },
1227   {
1228     "sp_port_right",
1229     "sp_port",
1230     "port (leading right)"
1231   },
1232   {
1233     "sp_port_down",
1234     "sp_port",
1235     "port (leading down)"
1236   },
1237   {
1238     "sp_port_left",
1239     "sp_port",
1240     "port (leading left)"
1241   },
1242   {
1243     "sp_port_up",
1244     "sp_port",
1245     "port (leading up)"
1246   },
1247   {
1248     "sp_gravity_port_right",
1249     "sp_port",
1250     "gravity port (leading right)"
1251   },
1252   {
1253     "sp_gravity_port_down",
1254     "sp_port",
1255     "gravity port (leading down)"
1256   },
1257   {
1258     "sp_gravity_port_left",
1259     "sp_port",
1260     "gravity port (leading left)"
1261   },
1262   {
1263     "sp_gravity_port_up",
1264     "sp_port",
1265     "gravity port (leading up)"
1266   },
1267   {
1268     "sp_sniksnak",
1269     "sp_sniksnak",
1270     "snik snak"
1271   },
1272   {
1273     "sp_disk_yellow",
1274     "sp_disk_yellow",
1275     "yellow disk"
1276   },
1277   {
1278     "sp_terminal",
1279     "sp_terminal",
1280     "terminal"
1281   },
1282   {
1283     "sp_disk_red",
1284     "dynamite",
1285     "red disk"
1286   },
1287   {
1288     "sp_port_vertical",
1289     "sp_port",
1290     "port (vertical)"
1291   },
1292   {
1293     "sp_port_horizontal",
1294     "sp_port",
1295     "port (horizontal)"
1296   },
1297   {
1298     "sp_port_any",
1299     "sp_port",
1300     "port (any direction)"
1301   },
1302   {
1303     "sp_electron",
1304     "sp_electron",
1305     "electron"
1306   },
1307   {
1308     "sp_buggy_base",
1309     "sp_buggy_base",
1310     "buggy base"
1311   },
1312   {
1313     "sp_chip_left",
1314     "wall",
1315     "chip (left half)"
1316   },
1317   {
1318     "sp_chip_right",
1319     "wall",
1320     "chip (right half)"
1321   },
1322   {
1323     "sp_hardware_base_1",
1324     "wall",
1325     "hardware"
1326   },
1327   {
1328     "sp_hardware_green",
1329     "wall",
1330     "hardware"
1331   },
1332   {
1333     "sp_hardware_blue",
1334     "wall",
1335     "hardware"
1336   },
1337   {
1338     "sp_hardware_red",
1339     "wall",
1340     "hardware"
1341   },
1342   {
1343     "sp_hardware_yellow",
1344     "wall",
1345     "hardware"
1346   },
1347   {
1348     "sp_hardware_base_2",
1349     "wall",
1350     "hardware"
1351   },
1352   {
1353     "sp_hardware_base_3",
1354     "wall",
1355     "hardware"
1356   },
1357   {
1358     "sp_hardware_base_4",
1359     "wall",
1360     "hardware"
1361   },
1362   {
1363     "sp_hardware_base_5",
1364     "wall",
1365     "hardware"
1366   },
1367   {
1368     "sp_hardware_base_6",
1369     "wall",
1370     "hardware"
1371   },
1372   {
1373     "sp_chip_top",
1374     "wall",
1375     "chip (upper half)"
1376   },
1377   {
1378     "sp_chip_bottom",
1379     "wall",
1380     "chip (lower half)"
1381   },
1382   {
1383     "em_gate_1_gray",
1384     "gate",
1385     "gray door (EM style, key 1)"
1386   },
1387   {
1388     "em_gate_2_gray",
1389     "gate",
1390     "gray door (EM style, key 2)"
1391   },
1392   {
1393     "em_gate_3_gray",
1394     "gate",
1395     "gray door (EM style, key 3)"
1396   },
1397   {
1398     "em_gate_4_gray",
1399     "gate",
1400     "gray door (EM style, key 4)"
1401   },
1402   {
1403     "em_dynamite",
1404     "dynamite",
1405     "dynamite (EM style)"
1406   },
1407   {
1408     "em_dynamite.active",
1409     "dynamite",
1410     "burning dynamite (EM style)"
1411   },
1412   {
1413     "pearl",
1414     "pearl",
1415     "pearl"
1416   },
1417   {
1418     "crystal",
1419     "crystal",
1420     "crystal"
1421   },
1422   {
1423     "wall_pearl",
1424     "wall",
1425     "wall with pearl"
1426   },
1427   {
1428     "wall_crystal",
1429     "wall",
1430     "wall with crystal"
1431   },
1432   {
1433     "dc_gate_white",
1434     "gate",
1435     "white gate"
1436   },
1437   {
1438     "dc_gate_white_gray",
1439     "gate",
1440     "gray door (opened by white key)"
1441   },
1442   {
1443     "dc_key_white",
1444     "key",
1445     "white key"
1446   },
1447   {
1448     "shield_normal",
1449     "shield_normal",
1450     "shield (normal)"
1451   },
1452   {
1453     "extra_time",
1454     "extra_time",
1455     "extra time"
1456   },
1457   {
1458     "switchgate_open",
1459     "switchgate",
1460     "switch gate (open)"
1461   },
1462   {
1463     "switchgate_closed",
1464     "switchgate",
1465     "switch gate (closed)"
1466   },
1467   {
1468     "switchgate_switch_up",
1469     "switchgate_switch",
1470     "switch for switch gate"
1471   },
1472   {
1473     "switchgate_switch_down",
1474     "switchgate_switch",
1475     "switch for switch gate"
1476   },
1477   {
1478     "unused_269",
1479     "unused",
1480     "-"
1481   },
1482   {
1483     "unused_270",
1484     "unused",
1485     "-"
1486   },
1487   {
1488     "conveyor_belt_1_left",
1489     "conveyor_belt",
1490     "conveyor belt 1 (left)"
1491   },
1492   {
1493     "conveyor_belt_1_middle",
1494     "conveyor_belt",
1495     "conveyor belt 1 (middle)"
1496   },
1497   {
1498     "conveyor_belt_1_right",
1499     "conveyor_belt",
1500     "conveyor belt 1 (right)"
1501   },
1502   {
1503     "conveyor_belt_1_switch_left",
1504     "conveyor_belt_switch",
1505     "switch for conveyor belt 1 (left)"
1506   },
1507   {
1508     "conveyor_belt_1_switch_middle",
1509     "conveyor_belt_switch",
1510     "switch for conveyor belt 1 (middle)"
1511   },
1512   {
1513     "conveyor_belt_1_switch_right",
1514     "conveyor_belt_switch",
1515     "switch for conveyor belt 1 (right)"
1516   },
1517   {
1518     "conveyor_belt_2_left",
1519     "conveyor_belt",
1520     "conveyor belt 2 (left)"
1521   },
1522   {
1523     "conveyor_belt_2_middle",
1524     "conveyor_belt",
1525     "conveyor belt 2 (middle)"
1526   },
1527   {
1528     "conveyor_belt_2_right",
1529     "conveyor_belt",
1530     "conveyor belt 2 (right)"
1531   },
1532   {
1533     "conveyor_belt_2_switch_left",
1534     "conveyor_belt_switch",
1535     "switch for conveyor belt 2 (left)"
1536   },
1537   {
1538     "conveyor_belt_2_switch_middle",
1539     "conveyor_belt_switch",
1540     "switch for conveyor belt 2 (middle)"
1541   },
1542   {
1543     "conveyor_belt_2_switch_right",
1544     "conveyor_belt_switch",
1545     "switch for conveyor belt 2 (right)"
1546   },
1547   {
1548     "conveyor_belt_3_left",
1549     "conveyor_belt",
1550     "conveyor belt 3 (left)"
1551   },
1552   {
1553     "conveyor_belt_3_middle",
1554     "conveyor_belt",
1555     "conveyor belt 3 (middle)"
1556   },
1557   {
1558     "conveyor_belt_3_right",
1559     "conveyor_belt",
1560     "conveyor belt 3 (right)"
1561   },
1562   {
1563     "conveyor_belt_3_switch_left",
1564     "conveyor_belt_switch",
1565     "switch for conveyor belt 3 (left)"
1566   },
1567   {
1568     "conveyor_belt_3_switch_middle",
1569     "conveyor_belt_switch",
1570     "switch for conveyor belt 3 (middle)"
1571   },
1572   {
1573     "conveyor_belt_3_switch_right",
1574     "conveyor_belt_switch",
1575     "switch for conveyor belt 3 (right)"
1576   },
1577   {
1578     "conveyor_belt_4_left",
1579     "conveyor_belt",
1580     "conveyor belt 4 (left)"
1581   },
1582   {
1583     "conveyor_belt_4_middle",
1584     "conveyor_belt",
1585     "conveyor belt 4 (middle)"
1586   },
1587   {
1588     "conveyor_belt_4_right",
1589     "conveyor_belt",
1590     "conveyor belt 4 (right)"
1591   },
1592   {
1593     "conveyor_belt_4_switch_left",
1594     "conveyor_belt_switch",
1595     "switch for conveyor belt 4 (left)"
1596   },
1597   {
1598     "conveyor_belt_4_switch_middle",
1599     "conveyor_belt_switch",
1600     "switch for conveyor belt 4 (middle)"
1601   },
1602   {
1603     "conveyor_belt_4_switch_right",
1604     "conveyor_belt_switch",
1605     "switch for conveyor belt 4 (right)"
1606   },
1607   {
1608     "landmine",
1609     "landmine",
1610     "land mine (not removable)"
1611   },
1612   {
1613     "envelope_obsolete",
1614     "obsolete",
1615     "envelope (OBSOLETE)"
1616   },
1617   {
1618     "light_switch",
1619     "light_switch",
1620     "light switch (off)"
1621   },
1622   {
1623     "light_switch.active",
1624     "light_switch",
1625     "light switch (on)"
1626   },
1627   {
1628     "sign_exclamation",
1629     "sign",
1630     "sign (exclamation)"
1631   },
1632   {
1633     "sign_radioactivity",
1634     "sign",
1635     "sign (radio activity)"
1636   },
1637   {
1638     "sign_stop",
1639     "sign",
1640     "sign (stop)"
1641   },
1642   {
1643     "sign_wheelchair",
1644     "sign",
1645     "sign (wheel chair)"
1646   },
1647   {
1648     "sign_parking",
1649     "sign",
1650     "sign (parking)"
1651   },
1652   {
1653     "sign_no_entry",
1654     "sign",
1655     "sign (no entry)"
1656   },
1657   {
1658     "sign_unused_1",
1659     "sign",
1660     "sign (unused)"
1661   },
1662   {
1663     "sign_give_way",
1664     "sign",
1665     "sign (give way)"
1666   },
1667   {
1668     "sign_entry_forbidden",
1669     "sign",
1670     "sign (entry forbidden)"
1671   },
1672   {
1673     "sign_emergency_exit",
1674     "sign",
1675     "sign (emergency exit)"
1676   },
1677   {
1678     "sign_yin_yang",
1679     "sign",
1680     "sign (yin yang)"
1681   },
1682   {
1683     "sign_unused_2",
1684     "sign",
1685     "sign (unused)"
1686   },
1687   {
1688     "mole.left",
1689     "mole",
1690     "mole (starts moving left)"
1691   },
1692   {
1693     "mole.right",
1694     "mole",
1695     "mole (starts moving right)"
1696   },
1697   {
1698     "mole.up",
1699     "mole",
1700     "mole (starts moving up)"
1701   },
1702   {
1703     "mole.down",
1704     "mole",
1705     "mole (starts moving down)"
1706   },
1707   {
1708     "steelwall_slippery",
1709     "steelwall",
1710     "slippery steel wall"
1711   },
1712   {
1713     "invisible_sand",
1714     "sand",
1715     "invisible sand"
1716   },
1717   {
1718     "dx_unknown_15",
1719     "unknown",
1720     "dx unknown element 15"
1721   },
1722   {
1723     "dx_unknown_42",
1724     "unknown",
1725     "dx unknown element 42"
1726   },
1727   {
1728     "unused_319",
1729     "unused",
1730     "(not used)"
1731   },
1732   {
1733     "unused_320",
1734     "unused",
1735     "(not used)"
1736   },
1737   {
1738     "shield_deadly",
1739     "shield_deadly",
1740     "shield (deadly, kills enemies)"
1741   },
1742   {
1743     "timegate_open",
1744     "timegate",
1745     "time gate (open)"
1746   },
1747   {
1748     "timegate_closed",
1749     "timegate",
1750     "time gate (closed)"
1751   },
1752   {
1753     "timegate_switch.active",
1754     "timegate_switch",
1755     "switch for time gate"
1756   },
1757   {
1758     "timegate_switch",
1759     "timegate_switch",
1760     "switch for time gate"
1761   },
1762   {
1763     "balloon",
1764     "balloon",
1765     "balloon"
1766   },
1767   {
1768     "balloon_switch_left",
1769     "balloon_switch",
1770     "wind switch (left)"
1771   },
1772   {
1773     "balloon_switch_right",
1774     "balloon_switch",
1775     "wind switch (right)"
1776   },
1777   {
1778     "balloon_switch_up",
1779     "balloon_switch",
1780     "wind switch (up)"
1781   },
1782   {
1783     "balloon_switch_down",
1784     "balloon_switch",
1785     "wind switch (down)"
1786   },
1787   {
1788     "balloon_switch_any",
1789     "balloon_switch",
1790     "wind switch (any direction)"
1791   },
1792   {
1793     "emc_steelwall_1",
1794     "steelwall",
1795     "steel wall"
1796   },
1797   {
1798     "emc_steelwall_2",
1799     "steelwall",
1800     "steel wall"
1801   },
1802   {
1803     "emc_steelwall_3",
1804     "steelwall",
1805     "steel wall"
1806   },
1807   {
1808     "emc_steelwall_4",
1809     "steelwall",
1810     "steel wall"
1811   },
1812   {
1813     "emc_wall_1",
1814     "wall",
1815     "normal wall"
1816   },
1817   {
1818     "emc_wall_2",
1819     "wall",
1820     "normal wall"
1821   },
1822   {
1823     "emc_wall_3",
1824     "wall",
1825     "normal wall"
1826   },
1827   {
1828     "emc_wall_4",
1829     "wall",
1830     "normal wall"
1831   },
1832   {
1833     "emc_wall_5",
1834     "wall",
1835     "normal wall"
1836   },
1837   {
1838     "emc_wall_6",
1839     "wall",
1840     "normal wall"
1841   },
1842   {
1843     "emc_wall_7",
1844     "wall",
1845     "normal wall"
1846   },
1847   {
1848     "emc_wall_8",
1849     "wall",
1850     "normal wall"
1851   },
1852   {
1853     "tube_any",
1854     "tube",
1855     "tube (any direction)"
1856   },
1857   {
1858     "tube_vertical",
1859     "tube",
1860     "tube (vertical)"
1861   },
1862   {
1863     "tube_horizontal",
1864     "tube",
1865     "tube (horizontal)"
1866   },
1867   {
1868     "tube_vertical_left",
1869     "tube",
1870     "tube (vertical & left)"
1871   },
1872   {
1873     "tube_vertical_right",
1874     "tube",
1875     "tube (vertical & right)"
1876   },
1877   {
1878     "tube_horizontal_up",
1879     "tube",
1880     "tube (horizontal & up)"
1881   },
1882   {
1883     "tube_horizontal_down",
1884     "tube",
1885     "tube (horizontal & down)"
1886   },
1887   {
1888     "tube_left_up",
1889     "tube",
1890     "tube (left & up)"
1891   },
1892   {
1893     "tube_left_down",
1894     "tube",
1895     "tube (left & down)"
1896   },
1897   {
1898     "tube_right_up",
1899     "tube",
1900     "tube (right & up)"
1901   },
1902   {
1903     "tube_right_down",
1904     "tube",
1905     "tube (right & down)"
1906   },
1907   {
1908     "spring",
1909     "spring",
1910     "spring"
1911   },
1912   {
1913     "trap",
1914     "trap",
1915     "trap"
1916   },
1917   {
1918     "dx_supabomb",
1919     "bomb",
1920     "stable bomb (DX style)"
1921   },
1922   {
1923     "unused_358",
1924     "unused",
1925     "-"
1926   },
1927   {
1928     "unused_359",
1929     "unused",
1930     "-"
1931   },
1932   {
1933     "custom_1",
1934     "custom",
1935     "custom element 1"
1936   },
1937   {
1938     "custom_2",
1939     "custom",
1940     "custom element 2"
1941   },
1942   {
1943     "custom_3",
1944     "custom",
1945     "custom element 3"
1946   },
1947   {
1948     "custom_4",
1949     "custom",
1950     "custom element 4"
1951   },
1952   {
1953     "custom_5",
1954     "custom",
1955     "custom element 5"
1956   },
1957   {
1958     "custom_6",
1959     "custom",
1960     "custom element 6"
1961   },
1962   {
1963     "custom_7",
1964     "custom",
1965     "custom element 7"
1966   },
1967   {
1968     "custom_8",
1969     "custom",
1970     "custom element 8"
1971   },
1972   {
1973     "custom_9",
1974     "custom",
1975     "custom element 9"
1976   },
1977   {
1978     "custom_10",
1979     "custom",
1980     "custom element 10"
1981   },
1982   {
1983     "custom_11",
1984     "custom",
1985     "custom element 11"
1986   },
1987   {
1988     "custom_12",
1989     "custom",
1990     "custom element 12"
1991   },
1992   {
1993     "custom_13",
1994     "custom",
1995     "custom element 13"
1996   },
1997   {
1998     "custom_14",
1999     "custom",
2000     "custom element 14"
2001   },
2002   {
2003     "custom_15",
2004     "custom",
2005     "custom element 15"
2006   },
2007   {
2008     "custom_16",
2009     "custom",
2010     "custom element 16"
2011   },
2012   {
2013     "custom_17",
2014     "custom",
2015     "custom element 17"
2016   },
2017   {
2018     "custom_18",
2019     "custom",
2020     "custom element 18"
2021   },
2022   {
2023     "custom_19",
2024     "custom",
2025     "custom element 19"
2026   },
2027   {
2028     "custom_20",
2029     "custom",
2030     "custom element 20"
2031   },
2032   {
2033     "custom_21",
2034     "custom",
2035     "custom element 21"
2036   },
2037   {
2038     "custom_22",
2039     "custom",
2040     "custom element 22"
2041   },
2042   {
2043     "custom_23",
2044     "custom",
2045     "custom element 23"
2046   },
2047   {
2048     "custom_24",
2049     "custom",
2050     "custom element 24"
2051   },
2052   {
2053     "custom_25",
2054     "custom",
2055     "custom element 25"
2056   },
2057   {
2058     "custom_26",
2059     "custom",
2060     "custom element 26"
2061   },
2062   {
2063     "custom_27",
2064     "custom",
2065     "custom element 27"
2066   },
2067   {
2068     "custom_28",
2069     "custom",
2070     "custom element 28"
2071   },
2072   {
2073     "custom_29",
2074     "custom",
2075     "custom element 29"
2076   },
2077   {
2078     "custom_30",
2079     "custom",
2080     "custom element 30"
2081   },
2082   {
2083     "custom_31",
2084     "custom",
2085     "custom element 31"
2086   },
2087   {
2088     "custom_32",
2089     "custom",
2090     "custom element 32"
2091   },
2092   {
2093     "custom_33",
2094     "custom",
2095     "custom element 33"
2096   },
2097   {
2098     "custom_34",
2099     "custom",
2100     "custom element 34"
2101   },
2102   {
2103     "custom_35",
2104     "custom",
2105     "custom element 35"
2106   },
2107   {
2108     "custom_36",
2109     "custom",
2110     "custom element 36"
2111   },
2112   {
2113     "custom_37",
2114     "custom",
2115     "custom element 37"
2116   },
2117   {
2118     "custom_38",
2119     "custom",
2120     "custom element 38"
2121   },
2122   {
2123     "custom_39",
2124     "custom",
2125     "custom element 39"
2126   },
2127   {
2128     "custom_40",
2129     "custom",
2130     "custom element 40"
2131   },
2132   {
2133     "custom_41",
2134     "custom",
2135     "custom element 41"
2136   },
2137   {
2138     "custom_42",
2139     "custom",
2140     "custom element 42"
2141   },
2142   {
2143     "custom_43",
2144     "custom",
2145     "custom element 43"
2146   },
2147   {
2148     "custom_44",
2149     "custom",
2150     "custom element 44"
2151   },
2152   {
2153     "custom_45",
2154     "custom",
2155     "custom element 45"
2156   },
2157   {
2158     "custom_46",
2159     "custom",
2160     "custom element 46"
2161   },
2162   {
2163     "custom_47",
2164     "custom",
2165     "custom element 47"
2166   },
2167   {
2168     "custom_48",
2169     "custom",
2170     "custom element 48"
2171   },
2172   {
2173     "custom_49",
2174     "custom",
2175     "custom element 49"
2176   },
2177   {
2178     "custom_50",
2179     "custom",
2180     "custom element 50"
2181   },
2182   {
2183     "custom_51",
2184     "custom",
2185     "custom element 51"
2186   },
2187   {
2188     "custom_52",
2189     "custom",
2190     "custom element 52"
2191   },
2192   {
2193     "custom_53",
2194     "custom",
2195     "custom element 53"
2196   },
2197   {
2198     "custom_54",
2199     "custom",
2200     "custom element 54"
2201   },
2202   {
2203     "custom_55",
2204     "custom",
2205     "custom element 55"
2206   },
2207   {
2208     "custom_56",
2209     "custom",
2210     "custom element 56"
2211   },
2212   {
2213     "custom_57",
2214     "custom",
2215     "custom element 57"
2216   },
2217   {
2218     "custom_58",
2219     "custom",
2220     "custom element 58"
2221   },
2222   {
2223     "custom_59",
2224     "custom",
2225     "custom element 59"
2226   },
2227   {
2228     "custom_60",
2229     "custom",
2230     "custom element 60"
2231   },
2232   {
2233     "custom_61",
2234     "custom",
2235     "custom element 61"
2236   },
2237   {
2238     "custom_62",
2239     "custom",
2240     "custom element 62"
2241   },
2242   {
2243     "custom_63",
2244     "custom",
2245     "custom element 63"
2246   },
2247   {
2248     "custom_64",
2249     "custom",
2250     "custom element 64"
2251   },
2252   {
2253     "custom_65",
2254     "custom",
2255     "custom element 65"
2256   },
2257   {
2258     "custom_66",
2259     "custom",
2260     "custom element 66"
2261   },
2262   {
2263     "custom_67",
2264     "custom",
2265     "custom element 67"
2266   },
2267   {
2268     "custom_68",
2269     "custom",
2270     "custom element 68"
2271   },
2272   {
2273     "custom_69",
2274     "custom",
2275     "custom element 69"
2276   },
2277   {
2278     "custom_70",
2279     "custom",
2280     "custom element 70"
2281   },
2282   {
2283     "custom_71",
2284     "custom",
2285     "custom element 71"
2286   },
2287   {
2288     "custom_72",
2289     "custom",
2290     "custom element 72"
2291   },
2292   {
2293     "custom_73",
2294     "custom",
2295     "custom element 73"
2296   },
2297   {
2298     "custom_74",
2299     "custom",
2300     "custom element 74"
2301   },
2302   {
2303     "custom_75",
2304     "custom",
2305     "custom element 75"
2306   },
2307   {
2308     "custom_76",
2309     "custom",
2310     "custom element 76"
2311   },
2312   {
2313     "custom_77",
2314     "custom",
2315     "custom element 77"
2316   },
2317   {
2318     "custom_78",
2319     "custom",
2320     "custom element 78"
2321   },
2322   {
2323     "custom_79",
2324     "custom",
2325     "custom element 79"
2326   },
2327   {
2328     "custom_80",
2329     "custom",
2330     "custom element 80"
2331   },
2332   {
2333     "custom_81",
2334     "custom",
2335     "custom element 81"
2336   },
2337   {
2338     "custom_82",
2339     "custom",
2340     "custom element 82"
2341   },
2342   {
2343     "custom_83",
2344     "custom",
2345     "custom element 83"
2346   },
2347   {
2348     "custom_84",
2349     "custom",
2350     "custom element 84"
2351   },
2352   {
2353     "custom_85",
2354     "custom",
2355     "custom element 85"
2356   },
2357   {
2358     "custom_86",
2359     "custom",
2360     "custom element 86"
2361   },
2362   {
2363     "custom_87",
2364     "custom",
2365     "custom element 87"
2366   },
2367   {
2368     "custom_88",
2369     "custom",
2370     "custom element 88"
2371   },
2372   {
2373     "custom_89",
2374     "custom",
2375     "custom element 89"
2376   },
2377   {
2378     "custom_90",
2379     "custom",
2380     "custom element 90"
2381   },
2382   {
2383     "custom_91",
2384     "custom",
2385     "custom element 91"
2386   },
2387   {
2388     "custom_92",
2389     "custom",
2390     "custom element 92"
2391   },
2392   {
2393     "custom_93",
2394     "custom",
2395     "custom element 93"
2396   },
2397   {
2398     "custom_94",
2399     "custom",
2400     "custom element 94"
2401   },
2402   {
2403     "custom_95",
2404     "custom",
2405     "custom element 95"
2406   },
2407   {
2408     "custom_96",
2409     "custom",
2410     "custom element 96"
2411   },
2412   {
2413     "custom_97",
2414     "custom",
2415     "custom element 97"
2416   },
2417   {
2418     "custom_98",
2419     "custom",
2420     "custom element 98"
2421   },
2422   {
2423     "custom_99",
2424     "custom",
2425     "custom element 99"
2426   },
2427   {
2428     "custom_100",
2429     "custom",
2430     "custom element 100"
2431   },
2432   {
2433     "custom_101",
2434     "custom",
2435     "custom element 101"
2436   },
2437   {
2438     "custom_102",
2439     "custom",
2440     "custom element 102"
2441   },
2442   {
2443     "custom_103",
2444     "custom",
2445     "custom element 103"
2446   },
2447   {
2448     "custom_104",
2449     "custom",
2450     "custom element 104"
2451   },
2452   {
2453     "custom_105",
2454     "custom",
2455     "custom element 105"
2456   },
2457   {
2458     "custom_106",
2459     "custom",
2460     "custom element 106"
2461   },
2462   {
2463     "custom_107",
2464     "custom",
2465     "custom element 107"
2466   },
2467   {
2468     "custom_108",
2469     "custom",
2470     "custom element 108"
2471   },
2472   {
2473     "custom_109",
2474     "custom",
2475     "custom element 109"
2476   },
2477   {
2478     "custom_110",
2479     "custom",
2480     "custom element 110"
2481   },
2482   {
2483     "custom_111",
2484     "custom",
2485     "custom element 111"
2486   },
2487   {
2488     "custom_112",
2489     "custom",
2490     "custom element 112"
2491   },
2492   {
2493     "custom_113",
2494     "custom",
2495     "custom element 113"
2496   },
2497   {
2498     "custom_114",
2499     "custom",
2500     "custom element 114"
2501   },
2502   {
2503     "custom_115",
2504     "custom",
2505     "custom element 115"
2506   },
2507   {
2508     "custom_116",
2509     "custom",
2510     "custom element 116"
2511   },
2512   {
2513     "custom_117",
2514     "custom",
2515     "custom element 117"
2516   },
2517   {
2518     "custom_118",
2519     "custom",
2520     "custom element 118"
2521   },
2522   {
2523     "custom_119",
2524     "custom",
2525     "custom element 119"
2526   },
2527   {
2528     "custom_120",
2529     "custom",
2530     "custom element 120"
2531   },
2532   {
2533     "custom_121",
2534     "custom",
2535     "custom element 121"
2536   },
2537   {
2538     "custom_122",
2539     "custom",
2540     "custom element 122"
2541   },
2542   {
2543     "custom_123",
2544     "custom",
2545     "custom element 123"
2546   },
2547   {
2548     "custom_124",
2549     "custom",
2550     "custom element 124"
2551   },
2552   {
2553     "custom_125",
2554     "custom",
2555     "custom element 125"
2556   },
2557   {
2558     "custom_126",
2559     "custom",
2560     "custom element 126"
2561   },
2562   {
2563     "custom_127",
2564     "custom",
2565     "custom element 127"
2566   },
2567   {
2568     "custom_128",
2569     "custom",
2570     "custom element 128"
2571   },
2572   {
2573     "custom_129",
2574     "custom",
2575     "custom element 129"
2576   },
2577   {
2578     "custom_130",
2579     "custom",
2580     "custom element 130"
2581   },
2582   {
2583     "custom_131",
2584     "custom",
2585     "custom element 131"
2586   },
2587   {
2588     "custom_132",
2589     "custom",
2590     "custom element 132"
2591   },
2592   {
2593     "custom_133",
2594     "custom",
2595     "custom element 133"
2596   },
2597   {
2598     "custom_134",
2599     "custom",
2600     "custom element 134"
2601   },
2602   {
2603     "custom_135",
2604     "custom",
2605     "custom element 135"
2606   },
2607   {
2608     "custom_136",
2609     "custom",
2610     "custom element 136"
2611   },
2612   {
2613     "custom_137",
2614     "custom",
2615     "custom element 137"
2616   },
2617   {
2618     "custom_138",
2619     "custom",
2620     "custom element 138"
2621   },
2622   {
2623     "custom_139",
2624     "custom",
2625     "custom element 139"
2626   },
2627   {
2628     "custom_140",
2629     "custom",
2630     "custom element 140"
2631   },
2632   {
2633     "custom_141",
2634     "custom",
2635     "custom element 141"
2636   },
2637   {
2638     "custom_142",
2639     "custom",
2640     "custom element 142"
2641   },
2642   {
2643     "custom_143",
2644     "custom",
2645     "custom element 143"
2646   },
2647   {
2648     "custom_144",
2649     "custom",
2650     "custom element 144"
2651   },
2652   {
2653     "custom_145",
2654     "custom",
2655     "custom element 145"
2656   },
2657   {
2658     "custom_146",
2659     "custom",
2660     "custom element 146"
2661   },
2662   {
2663     "custom_147",
2664     "custom",
2665     "custom element 147"
2666   },
2667   {
2668     "custom_148",
2669     "custom",
2670     "custom element 148"
2671   },
2672   {
2673     "custom_149",
2674     "custom",
2675     "custom element 149"
2676   },
2677   {
2678     "custom_150",
2679     "custom",
2680     "custom element 150"
2681   },
2682   {
2683     "custom_151",
2684     "custom",
2685     "custom element 151"
2686   },
2687   {
2688     "custom_152",
2689     "custom",
2690     "custom element 152"
2691   },
2692   {
2693     "custom_153",
2694     "custom",
2695     "custom element 153"
2696   },
2697   {
2698     "custom_154",
2699     "custom",
2700     "custom element 154"
2701   },
2702   {
2703     "custom_155",
2704     "custom",
2705     "custom element 155"
2706   },
2707   {
2708     "custom_156",
2709     "custom",
2710     "custom element 156"
2711   },
2712   {
2713     "custom_157",
2714     "custom",
2715     "custom element 157"
2716   },
2717   {
2718     "custom_158",
2719     "custom",
2720     "custom element 158"
2721   },
2722   {
2723     "custom_159",
2724     "custom",
2725     "custom element 159"
2726   },
2727   {
2728     "custom_160",
2729     "custom",
2730     "custom element 160"
2731   },
2732   {
2733     "custom_161",
2734     "custom",
2735     "custom element 161"
2736   },
2737   {
2738     "custom_162",
2739     "custom",
2740     "custom element 162"
2741   },
2742   {
2743     "custom_163",
2744     "custom",
2745     "custom element 163"
2746   },
2747   {
2748     "custom_164",
2749     "custom",
2750     "custom element 164"
2751   },
2752   {
2753     "custom_165",
2754     "custom",
2755     "custom element 165"
2756   },
2757   {
2758     "custom_166",
2759     "custom",
2760     "custom element 166"
2761   },
2762   {
2763     "custom_167",
2764     "custom",
2765     "custom element 167"
2766   },
2767   {
2768     "custom_168",
2769     "custom",
2770     "custom element 168"
2771   },
2772   {
2773     "custom_169",
2774     "custom",
2775     "custom element 169"
2776   },
2777   {
2778     "custom_170",
2779     "custom",
2780     "custom element 170"
2781   },
2782   {
2783     "custom_171",
2784     "custom",
2785     "custom element 171"
2786   },
2787   {
2788     "custom_172",
2789     "custom",
2790     "custom element 172"
2791   },
2792   {
2793     "custom_173",
2794     "custom",
2795     "custom element 173"
2796   },
2797   {
2798     "custom_174",
2799     "custom",
2800     "custom element 174"
2801   },
2802   {
2803     "custom_175",
2804     "custom",
2805     "custom element 175"
2806   },
2807   {
2808     "custom_176",
2809     "custom",
2810     "custom element 176"
2811   },
2812   {
2813     "custom_177",
2814     "custom",
2815     "custom element 177"
2816   },
2817   {
2818     "custom_178",
2819     "custom",
2820     "custom element 178"
2821   },
2822   {
2823     "custom_179",
2824     "custom",
2825     "custom element 179"
2826   },
2827   {
2828     "custom_180",
2829     "custom",
2830     "custom element 180"
2831   },
2832   {
2833     "custom_181",
2834     "custom",
2835     "custom element 181"
2836   },
2837   {
2838     "custom_182",
2839     "custom",
2840     "custom element 182"
2841   },
2842   {
2843     "custom_183",
2844     "custom",
2845     "custom element 183"
2846   },
2847   {
2848     "custom_184",
2849     "custom",
2850     "custom element 184"
2851   },
2852   {
2853     "custom_185",
2854     "custom",
2855     "custom element 185"
2856   },
2857   {
2858     "custom_186",
2859     "custom",
2860     "custom element 186"
2861   },
2862   {
2863     "custom_187",
2864     "custom",
2865     "custom element 187"
2866   },
2867   {
2868     "custom_188",
2869     "custom",
2870     "custom element 188"
2871   },
2872   {
2873     "custom_189",
2874     "custom",
2875     "custom element 189"
2876   },
2877   {
2878     "custom_190",
2879     "custom",
2880     "custom element 190"
2881   },
2882   {
2883     "custom_191",
2884     "custom",
2885     "custom element 191"
2886   },
2887   {
2888     "custom_192",
2889     "custom",
2890     "custom element 192"
2891   },
2892   {
2893     "custom_193",
2894     "custom",
2895     "custom element 193"
2896   },
2897   {
2898     "custom_194",
2899     "custom",
2900     "custom element 194"
2901   },
2902   {
2903     "custom_195",
2904     "custom",
2905     "custom element 195"
2906   },
2907   {
2908     "custom_196",
2909     "custom",
2910     "custom element 196"
2911   },
2912   {
2913     "custom_197",
2914     "custom",
2915     "custom element 197"
2916   },
2917   {
2918     "custom_198",
2919     "custom",
2920     "custom element 198"
2921   },
2922   {
2923     "custom_199",
2924     "custom",
2925     "custom element 199"
2926   },
2927   {
2928     "custom_200",
2929     "custom",
2930     "custom element 200"
2931   },
2932   {
2933     "custom_201",
2934     "custom",
2935     "custom element 201"
2936   },
2937   {
2938     "custom_202",
2939     "custom",
2940     "custom element 202"
2941   },
2942   {
2943     "custom_203",
2944     "custom",
2945     "custom element 203"
2946   },
2947   {
2948     "custom_204",
2949     "custom",
2950     "custom element 204"
2951   },
2952   {
2953     "custom_205",
2954     "custom",
2955     "custom element 205"
2956   },
2957   {
2958     "custom_206",
2959     "custom",
2960     "custom element 206"
2961   },
2962   {
2963     "custom_207",
2964     "custom",
2965     "custom element 207"
2966   },
2967   {
2968     "custom_208",
2969     "custom",
2970     "custom element 208"
2971   },
2972   {
2973     "custom_209",
2974     "custom",
2975     "custom element 209"
2976   },
2977   {
2978     "custom_210",
2979     "custom",
2980     "custom element 210"
2981   },
2982   {
2983     "custom_211",
2984     "custom",
2985     "custom element 211"
2986   },
2987   {
2988     "custom_212",
2989     "custom",
2990     "custom element 212"
2991   },
2992   {
2993     "custom_213",
2994     "custom",
2995     "custom element 213"
2996   },
2997   {
2998     "custom_214",
2999     "custom",
3000     "custom element 214"
3001   },
3002   {
3003     "custom_215",
3004     "custom",
3005     "custom element 215"
3006   },
3007   {
3008     "custom_216",
3009     "custom",
3010     "custom element 216"
3011   },
3012   {
3013     "custom_217",
3014     "custom",
3015     "custom element 217"
3016   },
3017   {
3018     "custom_218",
3019     "custom",
3020     "custom element 218"
3021   },
3022   {
3023     "custom_219",
3024     "custom",
3025     "custom element 219"
3026   },
3027   {
3028     "custom_220",
3029     "custom",
3030     "custom element 220"
3031   },
3032   {
3033     "custom_221",
3034     "custom",
3035     "custom element 221"
3036   },
3037   {
3038     "custom_222",
3039     "custom",
3040     "custom element 222"
3041   },
3042   {
3043     "custom_223",
3044     "custom",
3045     "custom element 223"
3046   },
3047   {
3048     "custom_224",
3049     "custom",
3050     "custom element 224"
3051   },
3052   {
3053     "custom_225",
3054     "custom",
3055     "custom element 225"
3056   },
3057   {
3058     "custom_226",
3059     "custom",
3060     "custom element 226"
3061   },
3062   {
3063     "custom_227",
3064     "custom",
3065     "custom element 227"
3066   },
3067   {
3068     "custom_228",
3069     "custom",
3070     "custom element 228"
3071   },
3072   {
3073     "custom_229",
3074     "custom",
3075     "custom element 229"
3076   },
3077   {
3078     "custom_230",
3079     "custom",
3080     "custom element 230"
3081   },
3082   {
3083     "custom_231",
3084     "custom",
3085     "custom element 231"
3086   },
3087   {
3088     "custom_232",
3089     "custom",
3090     "custom element 232"
3091   },
3092   {
3093     "custom_233",
3094     "custom",
3095     "custom element 233"
3096   },
3097   {
3098     "custom_234",
3099     "custom",
3100     "custom element 234"
3101   },
3102   {
3103     "custom_235",
3104     "custom",
3105     "custom element 235"
3106   },
3107   {
3108     "custom_236",
3109     "custom",
3110     "custom element 236"
3111   },
3112   {
3113     "custom_237",
3114     "custom",
3115     "custom element 237"
3116   },
3117   {
3118     "custom_238",
3119     "custom",
3120     "custom element 238"
3121   },
3122   {
3123     "custom_239",
3124     "custom",
3125     "custom element 239"
3126   },
3127   {
3128     "custom_240",
3129     "custom",
3130     "custom element 240"
3131   },
3132   {
3133     "custom_241",
3134     "custom",
3135     "custom element 241"
3136   },
3137   {
3138     "custom_242",
3139     "custom",
3140     "custom element 242"
3141   },
3142   {
3143     "custom_243",
3144     "custom",
3145     "custom element 243"
3146   },
3147   {
3148     "custom_244",
3149     "custom",
3150     "custom element 244"
3151   },
3152   {
3153     "custom_245",
3154     "custom",
3155     "custom element 245"
3156   },
3157   {
3158     "custom_246",
3159     "custom",
3160     "custom element 246"
3161   },
3162   {
3163     "custom_247",
3164     "custom",
3165     "custom element 247"
3166   },
3167   {
3168     "custom_248",
3169     "custom",
3170     "custom element 248"
3171   },
3172   {
3173     "custom_249",
3174     "custom",
3175     "custom element 249"
3176   },
3177   {
3178     "custom_250",
3179     "custom",
3180     "custom element 250"
3181   },
3182   {
3183     "custom_251",
3184     "custom",
3185     "custom element 251"
3186   },
3187   {
3188     "custom_252",
3189     "custom",
3190     "custom element 252"
3191   },
3192   {
3193     "custom_253",
3194     "custom",
3195     "custom element 253"
3196   },
3197   {
3198     "custom_254",
3199     "custom",
3200     "custom element 254"
3201   },
3202   {
3203     "custom_255",
3204     "custom",
3205     "custom element 255"
3206   },
3207   {
3208     "custom_256",
3209     "custom",
3210     "custom element 256"
3211   },
3212   {
3213     "em_key_1",
3214     "key",
3215     "key 1 (EM style)"
3216     },
3217   {
3218     "em_key_2",
3219     "key",
3220     "key 2 (EM style)"
3221     },
3222   {
3223     "em_key_3",
3224     "key",
3225     "key 3 (EM style)"
3226   },
3227   {
3228     "em_key_4",
3229     "key",
3230     "key 4 (EM style)"
3231   },
3232   {
3233     "envelope_1",
3234     "envelope",
3235     "mail envelope 1"
3236   },
3237   {
3238     "envelope_2",
3239     "envelope",
3240     "mail envelope 2"
3241   },
3242   {
3243     "envelope_3",
3244     "envelope",
3245     "mail envelope 3"
3246   },
3247   {
3248     "envelope_4",
3249     "envelope",
3250     "mail envelope 4"
3251   },
3252   {
3253     "group_1",
3254     "group",
3255     "group element 1"
3256   },
3257   {
3258     "group_2",
3259     "group",
3260     "group element 2"
3261   },
3262   {
3263     "group_3",
3264     "group",
3265     "group element 3"
3266   },
3267   {
3268     "group_4",
3269     "group",
3270     "group element 4"
3271   },
3272   {
3273     "group_5",
3274     "group",
3275     "group element 5"
3276   },
3277   {
3278     "group_6",
3279     "group",
3280     "group element 6"
3281   },
3282   {
3283     "group_7",
3284     "group",
3285     "group element 7"
3286   },
3287   {
3288     "group_8",
3289     "group",
3290     "group element 8"
3291   },
3292   {
3293     "group_9",
3294     "group",
3295     "group element 9"
3296   },
3297   {
3298     "group_10",
3299     "group",
3300     "group element 10"
3301   },
3302   {
3303     "group_11",
3304     "group",
3305     "group element 11"
3306   },
3307   {
3308     "group_12",
3309     "group",
3310     "group element 12"
3311   },
3312   {
3313     "group_13",
3314     "group",
3315     "group element 13"
3316   },
3317   {
3318     "group_14",
3319     "group",
3320     "group element 14"
3321   },
3322   {
3323     "group_15",
3324     "group",
3325     "group element 15"
3326   },
3327   {
3328     "group_16",
3329     "group",
3330     "group element 16"
3331   },
3332   {
3333     "group_17",
3334     "group",
3335     "group element 17"
3336   },
3337   {
3338     "group_18",
3339     "group",
3340     "group element 18"
3341   },
3342   {
3343     "group_19",
3344     "group",
3345     "group element 19"
3346   },
3347   {
3348     "group_20",
3349     "group",
3350     "group element 20"
3351   },
3352   {
3353     "group_21",
3354     "group",
3355     "group element 21"
3356   },
3357   {
3358     "group_22",
3359     "group",
3360     "group element 22"
3361   },
3362   {
3363     "group_23",
3364     "group",
3365     "group element 23"
3366   },
3367   {
3368     "group_24",
3369     "group",
3370     "group element 24"
3371   },
3372   {
3373     "group_25",
3374     "group",
3375     "group element 25"
3376   },
3377   {
3378     "group_26",
3379     "group",
3380     "group element 26"
3381   },
3382   {
3383     "group_27",
3384     "group",
3385     "group element 27"
3386   },
3387   {
3388     "group_28",
3389     "group",
3390     "group element 28"
3391   },
3392   {
3393     "group_29",
3394     "group",
3395     "group element 29"
3396   },
3397   {
3398     "group_30",
3399     "group",
3400     "group element 30"
3401   },
3402   {
3403     "group_31",
3404     "group",
3405     "group element 31"
3406   },
3407   {
3408     "group_32",
3409     "group",
3410     "group element 32"
3411   },
3412   {
3413     "unknown",
3414     "unknown",
3415     "unknown element"
3416   },
3417   {
3418     "trigger_element",
3419     "trigger",
3420     "element triggering change"
3421   },
3422   {
3423     "trigger_player",
3424     "trigger",
3425     "player triggering change"
3426   },
3427   {
3428     "sp_gravity_on_port_right",
3429     "sp_port",
3430     "gravity on port (leading right)"
3431   },
3432   {
3433     "sp_gravity_on_port_down",
3434     "sp_port",
3435     "gravity on port (leading down)"
3436   },
3437   {
3438     "sp_gravity_on_port_left",
3439     "sp_port",
3440     "gravity on port (leading left)"
3441   },
3442   {
3443     "sp_gravity_on_port_up",
3444     "sp_port",
3445     "gravity on port (leading up)"
3446   },
3447   {
3448     "sp_gravity_off_port_right",
3449     "sp_port",
3450     "gravity off port (leading right)"
3451   },
3452   {
3453     "sp_gravity_off_port_down",
3454     "sp_port",
3455     "gravity off port (leading down)"
3456   },
3457   {
3458     "sp_gravity_off_port_left",
3459     "sp_port",
3460     "gravity off port (leading left)"
3461   },
3462   {
3463     "sp_gravity_off_port_up",
3464     "sp_port",
3465     "gravity off port (leading up)"
3466   },
3467   {
3468     "balloon_switch_none",
3469     "balloon_switch",
3470     "wind switch (off)"
3471   },
3472   {
3473     "emc_gate_5",
3474     "gate",
3475     "door 5 (EMC style)",
3476   },
3477   {
3478     "emc_gate_6",
3479     "gate",
3480     "door 6 (EMC style)",
3481   },
3482   {
3483     "emc_gate_7",
3484     "gate",
3485     "door 7 (EMC style)",
3486   },
3487   {
3488     "emc_gate_8",
3489     "gate",
3490     "door 8 (EMC style)",
3491   },
3492   {
3493     "emc_gate_5_gray",
3494     "gate",
3495     "gray door (EMC style, key 5)",
3496   },
3497   {
3498     "emc_gate_6_gray",
3499     "gate",
3500     "gray door (EMC style, key 6)",
3501   },
3502   {
3503     "emc_gate_7_gray",
3504     "gate",
3505     "gray door (EMC style, key 7)",
3506   },
3507   {
3508     "emc_gate_8_gray",
3509     "gate",
3510     "gray door (EMC style, key 8)",
3511   },
3512   {
3513     "emc_key_5",
3514     "key",
3515     "key 5 (EMC style)",
3516   },
3517   {
3518     "emc_key_6",
3519     "key",
3520     "key 6 (EMC style)",
3521   },
3522   {
3523     "emc_key_7",
3524     "key",
3525     "key 7 (EMC style)",
3526   },
3527   {
3528     "emc_key_8",
3529     "key",
3530     "key 8 (EMC style)",
3531   },
3532   {
3533     "emc_android",
3534     "emc_android",
3535     "android",
3536   },
3537   {
3538     "emc_grass",
3539     "emc_grass",
3540     "grass",
3541   },
3542   {
3543     "emc_magic_ball",
3544     "emc_magic_ball",
3545     "magic ball",
3546   },
3547   {
3548     "emc_magic_ball.active",
3549     "emc_magic_ball",
3550     "magic ball (activated)",
3551   },
3552   {
3553     "emc_magic_ball_switch",
3554     "emc_magic_ball_switch",
3555     "magic ball switch (off)",
3556   },
3557   {
3558     "emc_magic_ball_switch.active",
3559     "emc_magic_ball_switch",
3560     "magic ball switch (on)",
3561   },
3562   {
3563     "emc_spring_bumper",
3564     "emc_spring_bumper",
3565     "spring bumper",
3566   },
3567   {
3568     "emc_plant",
3569     "emc_plant",
3570     "plant",
3571   },
3572   {
3573     "emc_lenses",
3574     "emc_lenses",
3575     "lenses",
3576   },
3577   {
3578     "emc_magnifier",
3579     "emc_magnifier",
3580     "magnifier",
3581   },
3582   {
3583     "emc_wall_9",
3584     "wall",
3585     "normal wall"
3586   },
3587   {
3588     "emc_wall_10",
3589     "wall",
3590     "normal wall"
3591   },
3592   {
3593     "emc_wall_11",
3594     "wall",
3595     "normal wall"
3596   },
3597   {
3598     "emc_wall_12",
3599     "wall",
3600     "normal wall"
3601   },
3602   {
3603     "emc_wall_13",
3604     "wall",
3605     "normal wall"
3606   },
3607   {
3608     "emc_wall_14",
3609     "wall",
3610     "normal wall"
3611   },
3612   {
3613     "emc_wall_15",
3614     "wall",
3615     "normal wall"
3616   },
3617   {
3618     "emc_wall_16",
3619     "wall",
3620     "normal wall"
3621   },
3622   {
3623     "emc_wall_slippery_1",
3624     "wall",
3625     "slippery wall"
3626   },
3627   {
3628     "emc_wall_slippery_2",
3629     "wall",
3630     "slippery wall"
3631   },
3632   {
3633     "emc_wall_slippery_3",
3634     "wall",
3635     "slippery wall"
3636   },
3637   {
3638     "emc_wall_slippery_4",
3639     "wall",
3640     "slippery wall"
3641   },
3642   {
3643     "emc_fake_grass",
3644     "fake_grass",
3645     "fake grass"
3646   },
3647   {
3648     "emc_fake_acid",
3649     "fake_acid",
3650     "fake acid"
3651   },
3652   {
3653     "emc_dripper",
3654     "dripper",
3655     "dripper"
3656   },
3657   {
3658     "trigger_ce_value",
3659     "trigger",
3660     "CE value of element triggering change"
3661   },
3662   {
3663     "trigger_ce_score",
3664     "trigger",
3665     "CE score of element triggering change"
3666   },
3667   {
3668     "current_ce_value",
3669     "current",
3670     "CE value of current element"
3671   },
3672   {
3673     "current_ce_score",
3674     "current",
3675     "CE score of current element"
3676   },
3677   {
3678     "yamyam.left",
3679     "yamyam",
3680     "yam yam (starts moving left)"
3681   },
3682   {
3683     "yamyam.right",
3684     "yamyam",
3685     "yam yam (starts moving right)"
3686   },
3687   {
3688     "yamyam.up",
3689     "yamyam",
3690     "yam yam (starts moving up)"
3691   },
3692   {
3693     "yamyam.down",
3694     "yamyam",
3695     "yam yam (starts moving down)"
3696   },
3697   {
3698     "bd_expandable_wall",
3699     "wall",
3700     "growing wall (horizontal, BD style)"
3701   },
3702   {
3703     "prev_ce_8",
3704     "prev_ce",
3705     "CE 8 positions earlier in list"
3706   },
3707   {
3708     "prev_ce_7",
3709     "prev_ce",
3710     "CE 7 positions earlier in list"
3711   },
3712   {
3713     "prev_ce_6",
3714     "prev_ce",
3715     "CE 6 positions earlier in list"
3716   },
3717   {
3718     "prev_ce_5",
3719     "prev_ce",
3720     "CE 5 positions earlier in list"
3721   },
3722   {
3723     "prev_ce_4",
3724     "prev_ce",
3725     "CE 4 positions earlier in list"
3726   },
3727   {
3728     "prev_ce_3",
3729     "prev_ce",
3730     "CE 3 positions earlier in list"
3731   },
3732   {
3733     "prev_ce_2",
3734     "prev_ce",
3735     "CE 2 positions earlier in list"
3736   },
3737   {
3738     "prev_ce_1",
3739     "prev_ce",
3740     "CE 1 position earlier in list"
3741   },
3742   {
3743     "self",
3744     "self",
3745     "the current custom element"
3746   },
3747   {
3748     "next_ce_1",
3749     "next_ce",
3750     "CE 1 position later in list"
3751   },
3752   {
3753     "next_ce_2",
3754     "next_ce",
3755     "CE 2 positions later in list"
3756   },
3757   {
3758     "next_ce_3",
3759     "next_ce",
3760     "CE 3 positions later in list"
3761   },
3762   {
3763     "next_ce_4",
3764     "next_ce",
3765     "CE 4 positions later in list"
3766   },
3767   {
3768     "next_ce_5",
3769     "next_ce",
3770     "CE 5 positions later in list"
3771   },
3772   {
3773     "next_ce_6",
3774     "next_ce",
3775     "CE 6 positions later in list"
3776   },
3777   {
3778     "next_ce_7",
3779     "next_ce",
3780     "CE 7 positions later in list"
3781   },
3782   {
3783     "next_ce_8",
3784     "next_ce",
3785     "CE 8 positions later in list"
3786   },
3787   {
3788     "any_element",
3789     "any_element",
3790     "this element matches any element"
3791   },
3792   {
3793     "steel_char_space",
3794     "steel_char",
3795     "steel letter ' '"
3796   },
3797   {
3798     "steel_char_exclam",
3799     "steel_char",
3800     "steel letter '!'"
3801   },
3802   {
3803     "steel_char_quotedbl",
3804     "steel_char",
3805     "steel letter '\"'"
3806   },
3807   {
3808     "steel_char_numbersign",
3809     "steel_char",
3810     "steel letter '#'"
3811   },
3812   {
3813     "steel_char_dollar",
3814     "steel_char",
3815     "steel letter '$'"
3816   },
3817   {
3818     "steel_char_percent",
3819     "steel_char",
3820     "steel letter '%'"
3821   },
3822   {
3823     "steel_char_ampersand",
3824     "steel_char",
3825     "steel letter '&'"
3826   },
3827   {
3828     "steel_char_apostrophe",
3829     "steel_char",
3830     "steel letter '''"
3831   },
3832   {
3833     "steel_char_parenleft",
3834     "steel_char",
3835     "steel letter '('"
3836   },
3837   {
3838     "steel_char_parenright",
3839     "steel_char",
3840     "steel letter ')'"
3841   },
3842   {
3843     "steel_char_asterisk",
3844     "steel_char",
3845     "steel letter '*'"
3846   },
3847   {
3848     "steel_char_plus",
3849     "steel_char",
3850     "steel letter '+'"
3851   },
3852   {
3853     "steel_char_comma",
3854     "steel_char",
3855     "steel letter ','"
3856   },
3857   {
3858     "steel_char_minus",
3859     "steel_char",
3860     "steel letter '-'"
3861   },
3862   {
3863     "steel_char_period",
3864     "steel_char",
3865     "steel letter '.'"
3866   },
3867   {
3868     "steel_char_slash",
3869     "steel_char",
3870     "steel letter '/'"
3871   },
3872   {
3873     "steel_char_0",
3874     "steel_char",
3875     "steel letter '0'"
3876   },
3877   {
3878     "steel_char_1",
3879     "steel_char",
3880     "steel letter '1'"
3881   },
3882   {
3883     "steel_char_2",
3884     "steel_char",
3885     "steel letter '2'"
3886   },
3887   {
3888     "steel_char_3",
3889     "steel_char",
3890     "steel letter '3'"
3891   },
3892   {
3893     "steel_char_4",
3894     "steel_char",
3895     "steel letter '4'"
3896   },
3897   {
3898     "steel_char_5",
3899     "steel_char",
3900     "steel letter '5'"
3901   },
3902   {
3903     "steel_char_6",
3904     "steel_char",
3905     "steel letter '6'"
3906   },
3907   {
3908     "steel_char_7",
3909     "steel_char",
3910     "steel letter '7'"
3911   },
3912   {
3913     "steel_char_8",
3914     "steel_char",
3915     "steel letter '8'"
3916   },
3917   {
3918     "steel_char_9",
3919     "steel_char",
3920     "steel letter '9'"
3921   },
3922   {
3923     "steel_char_colon",
3924     "steel_char",
3925     "steel letter ':'"
3926   },
3927   {
3928     "steel_char_semicolon",
3929     "steel_char",
3930     "steel letter ';'"
3931   },
3932   {
3933     "steel_char_less",
3934     "steel_char",
3935     "steel letter '<'"
3936   },
3937   {
3938     "steel_char_equal",
3939     "steel_char",
3940     "steel letter '='"
3941   },
3942   {
3943     "steel_char_greater",
3944     "steel_char",
3945     "steel letter '>'"
3946   },
3947   {
3948     "steel_char_question",
3949     "steel_char",
3950     "steel letter '?'"
3951   },
3952   {
3953     "steel_char_at",
3954     "steel_char",
3955     "steel letter '@'"
3956   },
3957   {
3958     "steel_char_a",
3959     "steel_char",
3960     "steel letter 'A'"
3961   },
3962   {
3963     "steel_char_b",
3964     "steel_char",
3965     "steel letter 'B'"
3966   },
3967   {
3968     "steel_char_c",
3969     "steel_char",
3970     "steel letter 'C'"
3971   },
3972   {
3973     "steel_char_d",
3974     "steel_char",
3975     "steel letter 'D'"
3976   },
3977   {
3978     "steel_char_e",
3979     "steel_char",
3980     "steel letter 'E'"
3981   },
3982   {
3983     "steel_char_f",
3984     "steel_char",
3985     "steel letter 'F'"
3986   },
3987   {
3988     "steel_char_g",
3989     "steel_char",
3990     "steel letter 'G'"
3991   },
3992   {
3993     "steel_char_h",
3994     "steel_char",
3995     "steel letter 'H'"
3996   },
3997   {
3998     "steel_char_i",
3999     "steel_char",
4000     "steel letter 'I'"
4001   },
4002   {
4003     "steel_char_j",
4004     "steel_char",
4005     "steel letter 'J'"
4006   },
4007   {
4008     "steel_char_k",
4009     "steel_char",
4010     "steel letter 'K'"
4011   },
4012   {
4013     "steel_char_l",
4014     "steel_char",
4015     "steel letter 'L'"
4016   },
4017   {
4018     "steel_char_m",
4019     "steel_char",
4020     "steel letter 'M'"
4021   },
4022   {
4023     "steel_char_n",
4024     "steel_char",
4025     "steel letter 'N'"
4026   },
4027   {
4028     "steel_char_o",
4029     "steel_char",
4030     "steel letter 'O'"
4031   },
4032   {
4033     "steel_char_p",
4034     "steel_char",
4035     "steel letter 'P'"
4036   },
4037   {
4038     "steel_char_q",
4039     "steel_char",
4040     "steel letter 'Q'"
4041   },
4042   {
4043     "steel_char_r",
4044     "steel_char",
4045     "steel letter 'R'"
4046   },
4047   {
4048     "steel_char_s",
4049     "steel_char",
4050     "steel letter 'S'"
4051   },
4052   {
4053     "steel_char_t",
4054     "steel_char",
4055     "steel letter 'T'"
4056   },
4057   {
4058     "steel_char_u",
4059     "steel_char",
4060     "steel letter 'U'"
4061   },
4062   {
4063     "steel_char_v",
4064     "steel_char",
4065     "steel letter 'V'"
4066   },
4067   {
4068     "steel_char_w",
4069     "steel_char",
4070     "steel letter 'W'"
4071   },
4072   {
4073     "steel_char_x",
4074     "steel_char",
4075     "steel letter 'X'"
4076   },
4077   {
4078     "steel_char_y",
4079     "steel_char",
4080     "steel letter 'Y'"
4081   },
4082   {
4083     "steel_char_z",
4084     "steel_char",
4085     "steel letter 'Z'"
4086   },
4087   {
4088     "steel_char_bracketleft",
4089     "steel_char",
4090     "steel letter '['"
4091   },
4092   {
4093     "steel_char_backslash",
4094     "steel_char",
4095     "steel letter '\\'"
4096   },
4097   {
4098     "steel_char_bracketright",
4099     "steel_char",
4100     "steel letter ']'"
4101   },
4102   {
4103     "steel_char_asciicircum",
4104     "steel_char",
4105     "steel letter '^'"
4106   },
4107   {
4108     "steel_char_underscore",
4109     "steel_char",
4110     "steel letter '_'"
4111   },
4112   {
4113     "steel_char_copyright",
4114     "steel_char",
4115     "steel letter '©'"
4116   },
4117   {
4118     "steel_char_aumlaut",
4119     "steel_char",
4120     "steel letter 'Ä'"
4121   },
4122   {
4123     "steel_char_oumlaut",
4124     "steel_char",
4125     "steel letter 'Ö'"
4126   },
4127   {
4128     "steel_char_uumlaut",
4129     "steel_char",
4130     "steel letter 'Ãœ'"
4131   },
4132   {
4133     "steel_char_degree",
4134     "steel_char",
4135     "steel letter '°'"
4136   },
4137   {
4138     "steel_char_trademark",
4139     "steel_char",
4140     "steel letter '®'"
4141   },
4142   {
4143     "steel_char_cursor",
4144     "steel_char",
4145     "steel letter ' '"
4146   },
4147   {
4148     "steel_char_unused",
4149     "steel_char",
4150     "steel letter ''"
4151   },
4152   {
4153     "steel_char_unused",
4154     "steel_char",
4155     "steel letter ''"
4156   },
4157   {
4158     "steel_char_unused",
4159     "steel_char",
4160     "steel letter ''"
4161   },
4162   {
4163     "steel_char_unused",
4164     "steel_char",
4165     "steel letter ''"
4166   },
4167   {
4168     "steel_char_unused",
4169     "steel_char",
4170     "steel letter ''"
4171   },
4172   {
4173     "steel_char_unused",
4174     "steel_char",
4175     "steel letter ''"
4176   },
4177   {
4178     "steel_char_unused",
4179     "steel_char",
4180     "steel letter 'button'"
4181   },
4182   {
4183     "steel_char_unused",
4184     "steel_char",
4185     "steel letter 'up'"
4186   },
4187   {
4188     "steel_char_unused",
4189     "steel_char",
4190     "steel letter 'down'"
4191   },
4192   {
4193     "sperms",
4194     "frankie",
4195     "sperms"
4196   },
4197   {
4198     "bullet",
4199     "frankie",
4200     "bullet"
4201   },
4202   {
4203     "heart",
4204     "frankie",
4205     "heart"
4206   },
4207   {
4208     "cross",
4209     "frankie",
4210     "cross"
4211   },
4212   {
4213     "frankie",
4214     "frankie",
4215     "frankie"
4216   },
4217   {
4218     "sign_sperms",
4219     "sign",
4220     "sign (sperms)"
4221   },
4222   {
4223     "sign_bullet",
4224     "sign",
4225     "sign (bullet)"
4226   },
4227   {
4228     "sign_heart",
4229     "sign",
4230     "sign (heart)"
4231   },
4232   {
4233     "sign_cross",
4234     "sign",
4235     "sign (cross)"
4236   },
4237   {
4238     "sign_frankie",
4239     "sign",
4240     "sign (frankie)"
4241   },
4242   {
4243     "steel_exit_closed",
4244     "steel_exit",
4245     "closed steel exit"
4246   },
4247   {
4248     "steel_exit_open",
4249     "steel_exit",
4250     "open steel exit"
4251   },
4252   {
4253     "dc_steelwall_1_left",
4254     "steelwall",
4255     "steel wall (left)"
4256   },
4257   {
4258     "dc_steelwall_1_right",
4259     "steelwall",
4260     "steel wall (right)"
4261   },
4262   {
4263     "dc_steelwall_1_top",
4264     "steelwall",
4265     "steel wall (top)"
4266   },
4267   {
4268     "dc_steelwall_1_bottom",
4269     "steelwall",
4270     "steel wall (bottom)"
4271   },
4272   {
4273     "dc_steelwall_1_horizontal",
4274     "steelwall",
4275     "steel wall (top/bottom)"
4276   },
4277   {
4278     "dc_steelwall_1_vertical",
4279     "steelwall",
4280     "steel wall (left/right)"
4281   },
4282   {
4283     "dc_steelwall_1_topleft",
4284     "steelwall",
4285     "steel wall (top/left)"
4286   },
4287   {
4288     "dc_steelwall_1_topright",
4289     "steelwall",
4290     "steel wall (top/right)"
4291   },
4292   {
4293     "dc_steelwall_1_bottomleft",
4294     "steelwall",
4295     "steel wall (bottom/left)"
4296   },
4297   {
4298     "dc_steelwall_1_bottomright",
4299     "steelwall",
4300     "steel wall (bottom/right)"
4301   },
4302   {
4303     "dc_steelwall_1_topleft_2",
4304     "steelwall",
4305     "steel wall (top/left corner)"
4306   },
4307   {
4308     "dc_steelwall_1_topright_2",
4309     "steelwall",
4310     "steel wall (top/right corner)"
4311   },
4312   {
4313     "dc_steelwall_1_bottomleft_2",
4314     "steelwall",
4315     "steel wall (bottom/left corner)"
4316   },
4317   {
4318     "dc_steelwall_1_bottomright_2",
4319     "steelwall",
4320     "steel wall (bottom/right corner)"
4321   },
4322   {
4323     "dc_steelwall_2_left",
4324     "steelwall",
4325     "steel wall (left)"
4326   },
4327   {
4328     "dc_steelwall_2_right",
4329     "steelwall",
4330     "steel wall (right)"
4331   },
4332   {
4333     "dc_steelwall_2_top",
4334     "steelwall",
4335     "steel wall (top)"
4336   },
4337   {
4338     "dc_steelwall_2_bottom",
4339     "steelwall",
4340     "steel wall (bottom)"
4341   },
4342   {
4343     "dc_steelwall_2_horizontal",
4344     "steelwall",
4345     "steel wall (horizontal)"
4346   },
4347   {
4348     "dc_steelwall_2_vertical",
4349     "steelwall",
4350     "steel wall (vertical)"
4351   },
4352   {
4353     "dc_steelwall_2_middle",
4354     "steelwall",
4355     "steel wall (middle)"
4356   },
4357   {
4358     "dc_steelwall_2_single",
4359     "steelwall",
4360     "steel wall (single)"
4361   },
4362   {
4363     "dc_switchgate_switch_up",
4364     "switchgate_switch",
4365     "switch for switch gate (steel)"
4366   },
4367   {
4368     "dc_switchgate_switch_down",
4369     "switchgate_switch",
4370     "switch for switch gate (steel)"
4371   },
4372   {
4373     "dc_timegate_switch",
4374     "timegate_switch",
4375     "switch for time gate (steel)"
4376   },
4377   {
4378     "dc_timegate_switch.active",
4379     "timegate_switch",
4380     "switch for time gate (steel)"
4381   },
4382   {
4383     "dc_landmine",
4384     "dc_landmine",
4385     "land mine (DC style, removable)"
4386   },
4387   {
4388     "expandable_steelwall",
4389     "steelwall",
4390     "growing steel wall"
4391   },
4392   {
4393     "expandable_steelwall_horizontal",
4394     "steelwall",
4395     "growing steel wall (horizontal)"
4396   },
4397   {
4398     "expandable_steelwall_vertical",
4399     "steelwall",
4400     "growing steel wall (vertical)"
4401   },
4402   {
4403     "expandable_steelwall_any",
4404     "steelwall",
4405     "growing steel wall (any direction)"
4406   },
4407   {
4408     "em_exit_closed",
4409     "em_exit",
4410     "closed exit (EM style)"
4411   },
4412   {
4413     "em_exit_open",
4414     "em_exit",
4415     "open exit (EM style)"
4416   },
4417   {
4418     "em_steel_exit_closed",
4419     "em_steel_exit",
4420     "closed steel exit (EM style)"
4421   },
4422   {
4423     "em_steel_exit_open",
4424     "em_steel_exit",
4425     "open steel exit (EM style)"
4426   },
4427   {
4428     "dc_gate_fake_gray",
4429     "gate",
4430     "gray door (opened by no key)"
4431   },
4432   {
4433     "dc_magic_wall",
4434     "dc_magic_wall",
4435     "magic wall (DC style)"
4436   },
4437   {
4438     "quicksand_fast_empty",
4439     "quicksand",
4440     "fast quicksand (empty)"
4441   },
4442   {
4443     "quicksand_fast_full",
4444     "quicksand",
4445     "fast quicksand (with rock)"
4446   },
4447
4448   /* ----------------------------------------------------------------------- */
4449   /* "real" (and therefore drawable) runtime elements                        */
4450   /* ----------------------------------------------------------------------- */
4451
4452   {
4453     "dynabomb_player_1.active",
4454     "dynabomb",
4455     "-"
4456   },
4457   {
4458     "dynabomb_player_2.active",
4459     "dynabomb",
4460     "-"
4461   },
4462   {
4463     "dynabomb_player_3.active",
4464     "dynabomb",
4465     "-"
4466   },
4467   {
4468     "dynabomb_player_4.active",
4469     "dynabomb",
4470     "-"
4471   },
4472   {
4473     "sp_disk_red.active",
4474     "dynamite",
4475     "-"
4476   },
4477   {
4478     "switchgate.opening",
4479     "switchgate",
4480     "-"
4481   },
4482   {
4483     "switchgate.closing",
4484     "switchgate",
4485     "-"
4486   },
4487   {
4488     "timegate.opening",
4489     "timegate",
4490     "-"
4491   },
4492   {
4493     "timegate.closing",
4494     "timegate",
4495     "-"
4496   },
4497   {
4498     "pearl.breaking",
4499     "pearl",
4500     "-"
4501   },
4502   {
4503     "trap.active",
4504     "trap",
4505     "-"
4506   },
4507   {
4508     "invisible_steelwall.active",
4509     "steelwall",
4510     "-"
4511   },
4512   {
4513     "invisible_wall.active",
4514     "wall",
4515     "-"
4516   },
4517   {
4518     "invisible_sand.active",
4519     "sand",
4520     "-"
4521   },
4522   {
4523     "conveyor_belt_1_left.active",
4524     "conveyor_belt",
4525     "-"
4526   },
4527   {
4528     "conveyor_belt_1_middle.active",
4529     "conveyor_belt",
4530     "-"
4531   },
4532   {
4533     "conveyor_belt_1_right.active",
4534     "conveyor_belt",
4535     "-"
4536   },
4537   {
4538     "conveyor_belt_2_left.active",
4539     "conveyor_belt",
4540     "-"
4541   },
4542   {
4543     "conveyor_belt_2_middle.active",
4544     "conveyor_belt",
4545     "-"
4546   },
4547   {
4548     "conveyor_belt_2_right.active",
4549     "conveyor_belt",
4550     "-"
4551   },
4552   {
4553     "conveyor_belt_3_left.active",
4554     "conveyor_belt",
4555     "-"
4556   },
4557   {
4558     "conveyor_belt_3_middle.active",
4559     "conveyor_belt",
4560     "-"
4561   },
4562   {
4563     "conveyor_belt_3_right.active",
4564     "conveyor_belt",
4565     "-"
4566   },
4567   {
4568     "conveyor_belt_4_left.active",
4569     "conveyor_belt",
4570     "-"
4571   },
4572   {
4573     "conveyor_belt_4_middle.active",
4574     "conveyor_belt",
4575     "-"
4576   },
4577   {
4578     "conveyor_belt_4_right.active",
4579     "conveyor_belt",
4580     "-"
4581   },
4582   {
4583     "exit.opening",
4584     "exit",
4585     "-"
4586   },
4587   {
4588     "exit.closing",
4589     "exit",
4590     "-"
4591   },
4592   {
4593     "steel_exit.opening",
4594     "steel_exit",
4595     "-"
4596   },
4597   {
4598     "steel_exit.closing",
4599     "steel_exit",
4600     "-"
4601   },
4602   {
4603     "em_exit.opening",
4604     "em_exit",
4605     "-"
4606   },
4607   {
4608     "em_exit.closing",
4609     "em_exit",
4610     "-"
4611   },
4612   {
4613     "em_steel_exit.opening",
4614     "em_steel_exit",
4615     "-"
4616   },
4617   {
4618     "em_steel_exit.closing",
4619     "em_steel_exit",
4620     "-"
4621   },
4622   {
4623     "sp_exit.opening",
4624     "sp_exit",
4625     "-"
4626   },
4627   {
4628     "sp_exit.closing",
4629     "sp_exit",
4630     "-"
4631   },
4632   {
4633     "sp_exit_open",
4634     "sp_exit",
4635     "-"
4636   },
4637   {
4638     "sp_terminal.active",
4639     "sp_terminal",
4640     "-"
4641   },
4642   {
4643     "sp_buggy_base.activating",
4644     "sp_buggy_base",
4645     "-"
4646   },
4647   {
4648     "sp_buggy_base.active",
4649     "sp_buggy_base",
4650     "-"
4651   },
4652   {
4653     "sp_murphy_clone",
4654     "murphy_clone",
4655     "-"
4656   },
4657   {
4658     "amoeba.dropping",
4659     "amoeba",
4660     "-"
4661   },
4662   {
4663     "quicksand.emptying",
4664     "quicksand",
4665     "-"
4666   },
4667   {
4668     "quicksand_fast.emptying",
4669     "quicksand",
4670     "-"
4671   },
4672   {
4673     "magic_wall.active",
4674     "magic_wall",
4675     "-"
4676   },
4677   {
4678     "bd_magic_wall.active",
4679     "magic_wall",
4680     "-"
4681   },
4682   {
4683     "dc_magic_wall.active",
4684     "magic_wall",
4685     "-"
4686   },
4687   {
4688     "magic_wall_full",
4689     "magic_wall",
4690     "-"
4691   },
4692   {
4693     "bd_magic_wall_full",
4694     "magic_wall",
4695     "-"
4696   },
4697   {
4698     "dc_magic_wall_full",
4699     "magic_wall",
4700     "-"
4701   },
4702   {
4703     "magic_wall.emptying",
4704     "magic_wall",
4705     "-"
4706   },
4707   {
4708     "bd_magic_wall.emptying",
4709     "magic_wall",
4710     "-"
4711   },
4712   {
4713     "dc_magic_wall.emptying",
4714     "magic_wall",
4715     "-"
4716   },
4717   {
4718     "magic_wall_dead",
4719     "magic_wall",
4720     "-"
4721   },
4722   {
4723     "bd_magic_wall_dead",
4724     "magic_wall",
4725     "-"
4726   },
4727   {
4728     "dc_magic_wall_dead",
4729     "magic_wall",
4730     "-"
4731   },
4732
4733   {
4734     "emc_fake_grass.active",
4735     "fake_grass",
4736     "-"
4737   },
4738   {
4739     "gate_1_gray.active",
4740     "gate",
4741     ""
4742   },
4743   {
4744     "gate_2_gray.active",
4745     "gate",
4746     ""
4747   },
4748   {
4749     "gate_3_gray.active",
4750     "gate",
4751     ""
4752   },
4753   {
4754     "gate_4_gray.active",
4755     "gate",
4756     ""
4757   },
4758   {
4759     "em_gate_1_gray.active",
4760     "gate",
4761     ""
4762   },
4763   {
4764     "em_gate_2_gray.active",
4765     "gate",
4766     ""
4767   },
4768   {
4769     "em_gate_3_gray.active",
4770     "gate",
4771     ""
4772   },
4773   {
4774     "em_gate_4_gray.active",
4775     "gate",
4776     ""
4777   },
4778   {
4779     "emc_gate_5_gray.active",
4780     "gate",
4781     "",
4782   },
4783   {
4784     "emc_gate_6_gray.active",
4785     "gate",
4786     "",
4787   },
4788   {
4789     "emc_gate_7_gray.active",
4790     "gate",
4791     "",
4792   },
4793   {
4794     "emc_gate_8_gray.active",
4795     "gate",
4796     "",
4797   },
4798   {
4799     "dc_gate_white_gray.active",
4800     "gate",
4801     "",
4802   },
4803   {
4804     "emc_dripper.active",
4805     "dripper",
4806     "dripper"
4807   },
4808   {
4809     "emc_spring_bumper.active",
4810     "emc_spring_bumper",
4811     "spring bumper",
4812   },
4813
4814   /* ----------------------------------------------------------------------- */
4815   /* "unreal" (and therefore not drawable) runtime elements                  */
4816   /* ----------------------------------------------------------------------- */
4817
4818   {
4819     "blocked",
4820     "-",
4821     "-"
4822   },
4823   {
4824     "explosion",
4825     "-",
4826     "-"
4827   },
4828   {
4829     "nut.breaking",
4830     "-",
4831     "-"
4832   },
4833   {
4834     "diamond.breaking",
4835     "-",
4836     "-"
4837   },
4838   {
4839     "acid_splash_left",
4840     "-",
4841     "-"
4842   },
4843   {
4844     "acid_splash_right",
4845     "-",
4846     "-"
4847   },
4848   {
4849     "amoeba.growing",
4850     "-",
4851     "-"
4852   },
4853   {
4854     "amoeba.shrinking",
4855     "-",
4856     "-"
4857   },
4858   {
4859     "expandable_wall.growing",
4860     "-",
4861     "-"
4862   },
4863   {
4864     "expandable_steelwall.growing",
4865     "-",
4866     "-"
4867   },
4868   {
4869     "flames",
4870     "-",
4871     "-"
4872   },
4873   {
4874     "player_is_leaving",
4875     "-",
4876     "-"
4877   },
4878   {
4879     "player_is_exploding_1",
4880     "-",
4881     "-"
4882   },
4883   {
4884     "player_is_exploding_2",
4885     "-",
4886     "-"
4887   },
4888   {
4889     "player_is_exploding_3",
4890     "-",
4891     "-"
4892   },
4893   {
4894     "player_is_exploding_4",
4895     "-",
4896     "-"
4897   },
4898   {
4899     "quicksand.filling",
4900     "quicksand",
4901     "-"
4902   },
4903   {
4904     "quicksand_fast.filling",
4905     "quicksand",
4906     "-"
4907   },
4908   {
4909     "magic_wall.filling",
4910     "-",
4911     "-"
4912   },
4913   {
4914     "bd_magic_wall.filling",
4915     "-",
4916     "-"
4917   },
4918   {
4919     "dc_magic_wall.filling",
4920     "-",
4921     "-"
4922   },
4923   {
4924     "element.snapping",
4925     "-",
4926     "-"
4927   },
4928   {
4929     "diagonal.shrinking",
4930     "-",
4931     "-"
4932   },
4933   {
4934     "diagonal.growing",
4935     "-",
4936     "-"
4937   },
4938
4939   /* ----------------------------------------------------------------------- */
4940   /* dummy elements (never used as game elements, only used as graphics)     */
4941   /* ----------------------------------------------------------------------- */
4942
4943   {
4944     "steelwall_topleft",
4945     "-",
4946     "-"
4947   },
4948   {
4949     "steelwall_topright",
4950     "-",
4951     "-"
4952   },
4953   {
4954     "steelwall_bottomleft",
4955     "-",
4956     "-"
4957   },
4958   {
4959     "steelwall_bottomright",
4960     "-",
4961     "-"
4962   },
4963   {
4964     "steelwall_horizontal",
4965     "-",
4966     "-"
4967   },
4968   {
4969     "steelwall_vertical",
4970     "-",
4971     "-"
4972   },
4973   {
4974     "invisible_steelwall_topleft",
4975     "-",
4976     "-"
4977   },
4978   {
4979     "invisible_steelwall_topright",
4980     "-",
4981     "-"
4982   },
4983   {
4984     "invisible_steelwall_bottomleft",
4985     "-",
4986     "-"
4987   },
4988   {
4989     "invisible_steelwall_bottomright",
4990     "-",
4991     "-"
4992   },
4993   {
4994     "invisible_steelwall_horizontal",
4995     "-",
4996     "-"
4997   },
4998   {
4999     "invisible_steelwall_vertical",
5000     "-",
5001     "-"
5002   },
5003   {
5004     "dynabomb",
5005     "-",
5006     "-"
5007   },
5008   {
5009     "dynabomb.active",
5010     "-",
5011     "-"
5012   },
5013   {
5014     "dynabomb_player_1",
5015     "-",
5016     "-"
5017   },
5018   {
5019     "dynabomb_player_2",
5020     "-",
5021     "-"
5022   },
5023   {
5024     "dynabomb_player_3",
5025     "-",
5026     "-"
5027   },
5028   {
5029     "dynabomb_player_4",
5030     "-",
5031     "-"
5032   },
5033   {
5034     "shield_normal.active",
5035     "-",
5036     "-"
5037   },
5038   {
5039     "shield_deadly.active",
5040     "-",
5041     "-"
5042   },
5043   {
5044     "amoeba",
5045     "amoeba",
5046     "-"
5047   },
5048   {
5049     "[default]",
5050     "default",
5051     "-"
5052   },
5053   {
5054     "[bd_default]",
5055     "bd_default",
5056     "-"
5057   },
5058   {
5059     "[sp_default]",
5060     "sp_default",
5061     "-"
5062   },
5063   {
5064     "[sb_default]",
5065     "sb_default",
5066     "-"
5067   },
5068   {
5069     "internal_clipboard_custom",
5070     "internal",
5071     "empty custom element"
5072   },
5073   {
5074     "internal_clipboard_change",
5075     "internal",
5076     "empty change page"
5077   },
5078   {
5079     "internal_clipboard_group",
5080     "internal",
5081     "empty group element"
5082   },
5083   {
5084     "internal_dummy",
5085     "internal",
5086     "-"
5087   },
5088   {
5089     "internal_cascade_bd",
5090     "internal",
5091     "show Boulder Dash elements"
5092   },
5093   {
5094     "internal_cascade_bd.active",
5095     "internal",
5096     "hide Boulder Dash elements"
5097   },
5098   {
5099     "internal_cascade_em",
5100     "internal",
5101     "show Emerald Mine elements"
5102   },
5103   {
5104     "internal_cascade_em.active",
5105     "internal",
5106     "hide Emerald Mine elements"
5107   },
5108   {
5109     "internal_cascade_emc",
5110     "internal",
5111     "show Emerald Mine Club elements"
5112   },
5113   {
5114     "internal_cascade_emc.active",
5115     "internal",
5116     "hide Emerald Mine Club elements"
5117   },
5118   {
5119     "internal_cascade_rnd",
5120     "internal",
5121     "show Rocks'n'Diamonds elements"
5122   },
5123   {
5124     "internal_cascade_rnd.active",
5125     "internal",
5126     "hide Rocks'n'Diamonds elements"
5127   },
5128   {
5129     "internal_cascade_sb",
5130     "internal",
5131     "show Sokoban elements"
5132   },
5133   {
5134     "internal_cascade_sb.active",
5135     "internal",
5136     "hide Sokoban elements"
5137   },
5138   {
5139     "internal_cascade_sp",
5140     "internal",
5141     "show Supaplex elements"
5142   },
5143   {
5144     "internal_cascade_sp.active",
5145     "internal",
5146     "hide Supaplex elements"
5147   },
5148   {
5149     "internal_cascade_dc",
5150     "internal",
5151     "show Diamond Caves II elements"
5152   },
5153   {
5154     "internal_cascade_dc.active",
5155     "internal",
5156     "hide Diamond Caves II elements"
5157   },
5158   {
5159     "internal_cascade_dx",
5160     "internal",
5161     "show DX Boulderdash elements"
5162   },
5163   {
5164     "internal_cascade_dx.active",
5165     "internal",
5166     "hide DX Boulderdash elements"
5167   },
5168   {
5169     "internal_cascade_chars",
5170     "internal",
5171     "show text elements"
5172   },
5173   {
5174     "internal_cascade_chars.active",
5175     "internal",
5176     "hide text elements"
5177   },
5178   {
5179     "internal_cascade_steel_chars",
5180     "internal",
5181     "show steel text elements"
5182   },
5183   {
5184     "internal_cascade_steel_chars.active",
5185     "internal",
5186     "hide steel text elements"
5187   },
5188   {
5189     "internal_cascade_ce",
5190     "internal",
5191     "show custom elements"
5192   },
5193   {
5194     "internal_cascade_ce.active",
5195     "internal",
5196     "hide custom elements"
5197   },
5198   {
5199     "internal_cascade_ge",
5200     "internal",
5201     "show group elements"
5202   },
5203   {
5204     "internal_cascade_ge.active",
5205     "internal",
5206     "hide group elements"
5207   },
5208   {
5209     "internal_cascade_ref",
5210     "internal",
5211     "show reference elements"
5212   },
5213   {
5214     "internal_cascade_ref.active",
5215     "internal",
5216     "hide reference elements"
5217   },
5218   {
5219     "internal_cascade_user",
5220     "internal",
5221     "show user defined elements"
5222   },
5223   {
5224     "internal_cascade_user.active",
5225     "internal",
5226     "hide user defined elements"
5227   },
5228   {
5229     "internal_cascade_dynamic",
5230     "internal",
5231     "show elements used in this level"
5232   },
5233   {
5234     "internal_cascade_dynamic.active",
5235     "internal",
5236     "hide elements used in this level"
5237   },
5238
5239   /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */
5240
5241   {
5242     NULL,
5243     NULL,
5244     NULL
5245   }
5246 };
5247
5248
5249 /* ------------------------------------------------------------------------- */
5250 /* element action and direction definitions                                  */
5251 /* ------------------------------------------------------------------------- */
5252
5253 struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] =
5254 {
5255   { ".[DEFAULT]",               ACTION_DEFAULT,                 TRUE    },
5256   { ".waiting",                 ACTION_WAITING,                 TRUE    },
5257   { ".falling",                 ACTION_FALLING,                 TRUE    },
5258   { ".moving",                  ACTION_MOVING,                  TRUE    },
5259   { ".digging",                 ACTION_DIGGING,                 FALSE   },
5260   { ".snapping",                ACTION_SNAPPING,                FALSE   },
5261   { ".collecting",              ACTION_COLLECTING,              FALSE   },
5262   { ".dropping",                ACTION_DROPPING,                FALSE   },
5263   { ".pushing",                 ACTION_PUSHING,                 FALSE   },
5264   { ".walking",                 ACTION_WALKING,                 FALSE   },
5265   { ".passing",                 ACTION_PASSING,                 FALSE   },
5266   { ".impact",                  ACTION_IMPACT,                  FALSE   },
5267   { ".breaking",                ACTION_BREAKING,                FALSE   },
5268   { ".activating",              ACTION_ACTIVATING,              FALSE   },
5269   { ".deactivating",            ACTION_DEACTIVATING,            FALSE   },
5270   { ".opening",                 ACTION_OPENING,                 FALSE   },
5271   { ".closing",                 ACTION_CLOSING,                 FALSE   },
5272   { ".attacking",               ACTION_ATTACKING,               TRUE    },
5273   { ".growing",                 ACTION_GROWING,                 TRUE    },
5274   { ".shrinking",               ACTION_SHRINKING,               FALSE   },
5275   { ".active",                  ACTION_ACTIVE,                  TRUE    },
5276   { ".filling",                 ACTION_FILLING,                 FALSE   },
5277   { ".emptying",                ACTION_EMPTYING,                FALSE   },
5278   { ".changing",                ACTION_CHANGING,                FALSE   },
5279   { ".exploding",               ACTION_EXPLODING,               FALSE   },
5280   { ".boring",                  ACTION_BORING,                  FALSE   },
5281   { ".boring[1]",               ACTION_BORING_1,                FALSE   },
5282   { ".boring[2]",               ACTION_BORING_2,                FALSE   },
5283   { ".boring[3]",               ACTION_BORING_3,                FALSE   },
5284   { ".boring[4]",               ACTION_BORING_4,                FALSE   },
5285   { ".boring[5]",               ACTION_BORING_5,                FALSE   },
5286   { ".boring[6]",               ACTION_BORING_6,                FALSE   },
5287   { ".boring[7]",               ACTION_BORING_7,                FALSE   },
5288   { ".boring[8]",               ACTION_BORING_8,                FALSE   },
5289   { ".boring[9]",               ACTION_BORING_9,                FALSE   },
5290   { ".boring[10]",              ACTION_BORING_10,               FALSE   },
5291   { ".sleeping",                ACTION_SLEEPING,                FALSE   },
5292   { ".sleeping[1]",             ACTION_SLEEPING_1,              FALSE   },
5293   { ".sleeping[2]",             ACTION_SLEEPING_2,              FALSE   },
5294   { ".sleeping[3]",             ACTION_SLEEPING_3,              FALSE   },
5295   { ".awakening",               ACTION_AWAKENING,               FALSE   },
5296   { ".dying",                   ACTION_DYING,                   FALSE   },
5297   { ".turning",                 ACTION_TURNING,                 FALSE   },
5298   { ".turning_from_left",       ACTION_TURNING_FROM_LEFT,       FALSE   },
5299   { ".turning_from_right",      ACTION_TURNING_FROM_RIGHT,      FALSE   },
5300   { ".turning_from_up",         ACTION_TURNING_FROM_UP,         FALSE   },
5301   { ".turning_from_down",       ACTION_TURNING_FROM_DOWN,       FALSE   },
5302   { ".smashed_by_rock",         ACTION_SMASHED_BY_ROCK,         FALSE   },
5303   { ".smashed_by_spring",       ACTION_SMASHED_BY_SPRING,       FALSE   },
5304   { ".eating",                  ACTION_EATING,                  FALSE   },
5305   { ".twinkling",               ACTION_TWINKLING,               FALSE   },
5306   { ".splashing",               ACTION_SPLASHING,               FALSE   },
5307   { ".page[1]",                 ACTION_PAGE_1,                  FALSE   },
5308   { ".page[2]",                 ACTION_PAGE_2,                  FALSE   },
5309   { ".page[3]",                 ACTION_PAGE_3,                  FALSE   },
5310   { ".page[4]",                 ACTION_PAGE_4,                  FALSE   },
5311   { ".page[5]",                 ACTION_PAGE_5,                  FALSE   },
5312   { ".page[6]",                 ACTION_PAGE_6,                  FALSE   },
5313   { ".page[7]",                 ACTION_PAGE_7,                  FALSE   },
5314   { ".page[8]",                 ACTION_PAGE_8,                  FALSE   },
5315   { ".page[9]",                 ACTION_PAGE_9,                  FALSE   },
5316   { ".page[10]",                ACTION_PAGE_10,                 FALSE   },
5317   { ".page[11]",                ACTION_PAGE_11,                 FALSE   },
5318   { ".page[12]",                ACTION_PAGE_12,                 FALSE   },
5319   { ".page[13]",                ACTION_PAGE_13,                 FALSE   },
5320   { ".page[14]",                ACTION_PAGE_14,                 FALSE   },
5321   { ".page[15]",                ACTION_PAGE_15,                 FALSE   },
5322   { ".page[16]",                ACTION_PAGE_16,                 FALSE   },
5323   { ".page[17]",                ACTION_PAGE_17,                 FALSE   },
5324   { ".page[18]",                ACTION_PAGE_18,                 FALSE   },
5325   { ".page[19]",                ACTION_PAGE_19,                 FALSE   },
5326   { ".page[20]",                ACTION_PAGE_20,                 FALSE   },
5327   { ".page[21]",                ACTION_PAGE_21,                 FALSE   },
5328   { ".page[22]",                ACTION_PAGE_22,                 FALSE   },
5329   { ".page[23]",                ACTION_PAGE_23,                 FALSE   },
5330   { ".page[24]",                ACTION_PAGE_24,                 FALSE   },
5331   { ".page[25]",                ACTION_PAGE_25,                 FALSE   },
5332   { ".page[26]",                ACTION_PAGE_26,                 FALSE   },
5333   { ".page[27]",                ACTION_PAGE_27,                 FALSE   },
5334   { ".page[28]",                ACTION_PAGE_28,                 FALSE   },
5335   { ".page[29]",                ACTION_PAGE_29,                 FALSE   },
5336   { ".page[30]",                ACTION_PAGE_30,                 FALSE   },
5337   { ".page[31]",                ACTION_PAGE_31,                 FALSE   },
5338   { ".page[32]",                ACTION_PAGE_32,                 FALSE   },
5339   { ".other",                   ACTION_OTHER,                   FALSE   },
5340
5341   /* empty suffix always matches -- check as last entry in InitSoundInfo() */
5342   { "",                         ACTION_DEFAULT,                 TRUE    },
5343
5344   { NULL,                       0,                              0       }
5345 };
5346
5347 struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] =
5348 {
5349   { ".left",            MV_BIT_LEFT                     },
5350   { ".right",           MV_BIT_RIGHT                    },
5351   { ".up",              MV_BIT_UP                       },
5352   { ".down",            MV_BIT_DOWN                     },
5353   { ".upleft",          MV_BIT_UP                       },
5354   { ".upright",         MV_BIT_RIGHT                    },
5355   { ".downleft",        MV_BIT_LEFT                     },
5356   { ".downright",       MV_BIT_DOWN                     },
5357
5358   { NULL,               0                               }
5359 };
5360
5361 struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] =
5362 {
5363   { ".[DEFAULT]",       GFX_SPECIAL_ARG_DEFAULT,        },
5364   { ".TITLE",           GFX_SPECIAL_ARG_TITLE,          },
5365   { ".MESSAGE",         GFX_SPECIAL_ARG_MESSAGE,        },
5366   { ".MAIN",            GFX_SPECIAL_ARG_MAIN,           },
5367   { ".LEVELS",          GFX_SPECIAL_ARG_LEVELS          },
5368   { ".SCORES",          GFX_SPECIAL_ARG_SCORES,         },
5369   { ".EDITOR",          GFX_SPECIAL_ARG_EDITOR,         },
5370   { ".INFO",            GFX_SPECIAL_ARG_INFO,           },
5371   { ".SETUP",           GFX_SPECIAL_ARG_SETUP,          },
5372   { ".PLAYING",         GFX_SPECIAL_ARG_PLAYING,        },
5373   { ".DOOR",            GFX_SPECIAL_ARG_DOOR,           },
5374   { ".PREVIEW",         GFX_SPECIAL_ARG_PREVIEW,        },
5375   { ".CRUMBLED",        GFX_SPECIAL_ARG_CRUMBLED,       },
5376
5377   /* empty suffix always matches -- check as last entry in InitMusicInfo() */
5378   { "",                 GFX_SPECIAL_ARG_DEFAULT,        },
5379
5380   { NULL,               0,                              }
5381 };
5382
5383 struct TokenIntPtrInfo image_config_vars[] =
5384 {
5385   {
5386     "titlemessage_initial_1.x",
5387     &titlemessage_initial[0].x
5388   },
5389   {
5390     "titlemessage_initial_1.y",
5391     &titlemessage_initial[0].y
5392   },
5393   {
5394     "titlemessage_initial_1.width",
5395     &titlemessage_initial[0].width
5396   },
5397   {
5398     "titlemessage_initial_1.height",
5399     &titlemessage_initial[0].height
5400   },
5401   {
5402     "titlemessage_initial_1.chars",
5403     &titlemessage_initial[0].chars
5404   },
5405   {
5406     "titlemessage_initial_1.lines",
5407     &titlemessage_initial[0].lines
5408   },
5409   {
5410     "titlemessage_initial_1.align",
5411     &titlemessage_initial[0].align
5412   },
5413   {
5414     "titlemessage_initial_1.autowrap",
5415     &titlemessage_initial[0].autowrap
5416   },
5417   {
5418     "titlemessage_initial_1.centered",
5419     &titlemessage_initial[0].centered
5420   },
5421   {
5422     "titlemessage_initial_1.skip_comments",
5423     &titlemessage_initial[0].skip_comments
5424   },
5425   {
5426     "titlemessage_initial_1.sort_priority",
5427     &titlemessage_initial[0].sort_priority
5428   },
5429   {
5430     "titlemessage_initial_2.x",
5431     &titlemessage_initial[1].x
5432   },
5433   {
5434     "titlemessage_initial_2.y",
5435     &titlemessage_initial[1].y
5436   },
5437   {
5438     "titlemessage_initial_2.width",
5439     &titlemessage_initial[1].width
5440   },
5441   {
5442     "titlemessage_initial_2.height",
5443     &titlemessage_initial[1].height
5444   },
5445   {
5446     "titlemessage_initial_2.chars",
5447     &titlemessage_initial[1].chars
5448   },
5449   {
5450     "titlemessage_initial_2.lines",
5451     &titlemessage_initial[1].lines
5452   },
5453   {
5454     "titlemessage_initial_2.align",
5455     &titlemessage_initial[1].align
5456   },
5457   {
5458     "titlemessage_initial_2.autowrap",
5459     &titlemessage_initial[1].autowrap
5460   },
5461   {
5462     "titlemessage_initial_2.centered",
5463     &titlemessage_initial[1].centered
5464   },
5465   {
5466     "titlemessage_initial_2.skip_comments",
5467     &titlemessage_initial[1].skip_comments
5468   },
5469   {
5470     "titlemessage_initial_2.sort_priority",
5471     &titlemessage_initial[1].sort_priority
5472   },
5473   {
5474     "titlemessage_initial_3.x",
5475     &titlemessage_initial[2].x
5476   },
5477   {
5478     "titlemessage_initial_3.y",
5479     &titlemessage_initial[2].y
5480   },
5481   {
5482     "titlemessage_initial_3.width",
5483     &titlemessage_initial[2].width
5484   },
5485   {
5486     "titlemessage_initial_3.height",
5487     &titlemessage_initial[2].height
5488   },
5489   {
5490     "titlemessage_initial_3.chars",
5491     &titlemessage_initial[2].chars
5492   },
5493   {
5494     "titlemessage_initial_3.lines",
5495     &titlemessage_initial[2].lines
5496   },
5497   {
5498     "titlemessage_initial_3.align",
5499     &titlemessage_initial[2].align
5500   },
5501   {
5502     "titlemessage_initial_3.autowrap",
5503     &titlemessage_initial[2].autowrap
5504   },
5505   {
5506     "titlemessage_initial_3.centered",
5507     &titlemessage_initial[2].centered
5508   },
5509   {
5510     "titlemessage_initial_3.skip_comments",
5511     &titlemessage_initial[2].skip_comments
5512   },
5513   {
5514     "titlemessage_initial_3.sort_priority",
5515     &titlemessage_initial[2].sort_priority
5516   },
5517   {
5518     "titlemessage_initial_4.x",
5519     &titlemessage_initial[3].x
5520   },
5521   {
5522     "titlemessage_initial_4.y",
5523     &titlemessage_initial[3].y
5524   },
5525   {
5526     "titlemessage_initial_4.width",
5527     &titlemessage_initial[3].width
5528   },
5529   {
5530     "titlemessage_initial_4.height",
5531     &titlemessage_initial[3].height
5532   },
5533   {
5534     "titlemessage_initial_4.chars",
5535     &titlemessage_initial[3].chars
5536   },
5537   {
5538     "titlemessage_initial_4.lines",
5539     &titlemessage_initial[3].lines
5540   },
5541   {
5542     "titlemessage_initial_4.align",
5543     &titlemessage_initial[3].align
5544   },
5545   {
5546     "titlemessage_initial_4.autowrap",
5547     &titlemessage_initial[3].autowrap
5548   },
5549   {
5550     "titlemessage_initial_4.centered",
5551     &titlemessage_initial[3].centered
5552   },
5553   {
5554     "titlemessage_initial_4.skip_comments",
5555     &titlemessage_initial[3].skip_comments
5556   },
5557   {
5558     "titlemessage_initial_4.sort_priority",
5559     &titlemessage_initial[3].sort_priority
5560   },
5561   {
5562     "titlemessage_initial_5.x",
5563     &titlemessage_initial[4].x
5564   },
5565   {
5566     "titlemessage_initial_5.y",
5567     &titlemessage_initial[4].y
5568   },
5569   {
5570     "titlemessage_initial_5.width",
5571     &titlemessage_initial[4].width
5572   },
5573   {
5574     "titlemessage_initial_5.height",
5575     &titlemessage_initial[4].height
5576   },
5577   {
5578     "titlemessage_initial_5.chars",
5579     &titlemessage_initial[4].chars
5580   },
5581   {
5582     "titlemessage_initial_5.lines",
5583     &titlemessage_initial[4].lines
5584   },
5585   {
5586     "titlemessage_initial_5.align",
5587     &titlemessage_initial[4].align
5588   },
5589   {
5590     "titlemessage_initial_5.autowrap",
5591     &titlemessage_initial[4].autowrap
5592   },
5593   {
5594     "titlemessage_initial_5.centered",
5595     &titlemessage_initial[4].centered
5596   },
5597   {
5598     "titlemessage_initial_5.skip_comments",
5599     &titlemessage_initial[4].skip_comments
5600   },
5601   {
5602     "titlemessage_initial_5.sort_priority",
5603     &titlemessage_initial[4].sort_priority
5604   },
5605   {
5606     "titlemessage_1.x",
5607     &titlemessage[0].x
5608   },
5609   {
5610     "titlemessage_1.y",
5611     &titlemessage[0].y
5612   },
5613   {
5614     "titlemessage_1.width",
5615     &titlemessage[0].width
5616   },
5617   {
5618     "titlemessage_1.height",
5619     &titlemessage[0].height
5620   },
5621   {
5622     "titlemessage_1.chars",
5623     &titlemessage[0].chars
5624   },
5625   {
5626     "titlemessage_1.lines",
5627     &titlemessage[0].lines
5628   },
5629   {
5630     "titlemessage_1.align",
5631     &titlemessage[0].align
5632   },
5633   {
5634     "titlemessage_1.autowrap",
5635     &titlemessage[0].autowrap
5636   },
5637   {
5638     "titlemessage_1.centered",
5639     &titlemessage[0].centered
5640   },
5641   {
5642     "titlemessage_1.skip_comments",
5643     &titlemessage[0].skip_comments
5644   },
5645   {
5646     "titlemessage_1.sort_priority",
5647     &titlemessage[0].sort_priority
5648   },
5649   {
5650     "titlemessage_2.x",
5651     &titlemessage[1].x
5652   },
5653   {
5654     "titlemessage_2.y",
5655     &titlemessage[1].y
5656   },
5657   {
5658     "titlemessage_2.width",
5659     &titlemessage[1].width
5660   },
5661   {
5662     "titlemessage_2.height",
5663     &titlemessage[1].height
5664   },
5665   {
5666     "titlemessage_2.chars",
5667     &titlemessage[1].chars
5668   },
5669   {
5670     "titlemessage_2.lines",
5671     &titlemessage[1].lines
5672   },
5673   {
5674     "titlemessage_2.align",
5675     &titlemessage[1].align
5676   },
5677   {
5678     "titlemessage_2.autowrap",
5679     &titlemessage[1].autowrap
5680   },
5681   {
5682     "titlemessage_2.centered",
5683     &titlemessage[1].centered
5684   },
5685   {
5686     "titlemessage_2.skip_comments",
5687     &titlemessage[1].skip_comments
5688   },
5689   {
5690     "titlemessage_2.sort_priority",
5691     &titlemessage[1].sort_priority
5692   },
5693   {
5694     "titlemessage_3.x",
5695     &titlemessage[2].x
5696   },
5697   {
5698     "titlemessage_3.y",
5699     &titlemessage[2].y
5700   },
5701   {
5702     "titlemessage_3.width",
5703     &titlemessage[2].width
5704   },
5705   {
5706     "titlemessage_3.height",
5707     &titlemessage[2].height
5708   },
5709   {
5710     "titlemessage_3.chars",
5711     &titlemessage[2].chars
5712   },
5713   {
5714     "titlemessage_3.lines",
5715     &titlemessage[2].lines
5716   },
5717   {
5718     "titlemessage_3.align",
5719     &titlemessage[2].align
5720   },
5721   {
5722     "titlemessage_3.autowrap",
5723     &titlemessage[2].autowrap
5724   },
5725   {
5726     "titlemessage_3.centered",
5727     &titlemessage[2].centered
5728   },
5729   {
5730     "titlemessage_3.skip_comments",
5731     &titlemessage[2].skip_comments
5732   },
5733   {
5734     "titlemessage_3.sort_priority",
5735     &titlemessage[2].sort_priority
5736   },
5737   {
5738     "titlemessage_4.x",
5739     &titlemessage[3].x
5740   },
5741   {
5742     "titlemessage_4.y",
5743     &titlemessage[3].y
5744   },
5745   {
5746     "titlemessage_4.width",
5747     &titlemessage[3].width
5748   },
5749   {
5750     "titlemessage_4.height",
5751     &titlemessage[3].height
5752   },
5753   {
5754     "titlemessage_4.chars",
5755     &titlemessage[3].chars
5756   },
5757   {
5758     "titlemessage_4.lines",
5759     &titlemessage[3].lines
5760   },
5761   {
5762     "titlemessage_4.align",
5763     &titlemessage[3].align
5764   },
5765   {
5766     "titlemessage_4.autowrap",
5767     &titlemessage[3].autowrap
5768   },
5769   {
5770     "titlemessage_4.centered",
5771     &titlemessage[3].centered
5772   },
5773   {
5774     "titlemessage_4.skip_comments",
5775     &titlemessage[3].skip_comments
5776   },
5777   {
5778     "titlemessage_4.sort_priority",
5779     &titlemessage[3].sort_priority
5780   },
5781   {
5782     "titlemessage_5.x",
5783     &titlemessage[4].x
5784   },
5785   {
5786     "titlemessage_5.y",
5787     &titlemessage[4].y
5788   },
5789   {
5790     "titlemessage_5.width",
5791     &titlemessage[4].width
5792   },
5793   {
5794     "titlemessage_5.height",
5795     &titlemessage[4].height
5796   },
5797   {
5798     "titlemessage_5.chars",
5799     &titlemessage[4].chars
5800   },
5801   {
5802     "titlemessage_5.lines",
5803     &titlemessage[4].lines
5804   },
5805   {
5806     "titlemessage_5.align",
5807     &titlemessage[4].align
5808   },
5809   {
5810     "titlemessage_5.autowrap",
5811     &titlemessage[4].autowrap
5812   },
5813   {
5814     "titlemessage_5.centered",
5815     &titlemessage[4].centered
5816   },
5817   {
5818     "titlemessage_5.skip_comments",
5819     &titlemessage[4].skip_comments
5820   },
5821   {
5822     "titlemessage_5.sort_priority",
5823     &titlemessage[4].sort_priority
5824   },
5825
5826   {
5827     "global.num_toons",
5828     &global.num_toons
5829   },
5830
5831   {
5832     "border.draw_masked.TITLE",
5833     &border.draw_masked[GFX_SPECIAL_ARG_TITLE]
5834   },
5835   {
5836     "border.draw_masked.MAIN",
5837     &border.draw_masked[GFX_SPECIAL_ARG_MAIN]
5838   },
5839   {
5840     "border.draw_masked.LEVELS",
5841     &border.draw_masked[GFX_SPECIAL_ARG_LEVELS]
5842   },
5843   {
5844     "border.draw_masked.SCORES",
5845     &border.draw_masked[GFX_SPECIAL_ARG_SCORES]
5846   },
5847   {
5848     "border.draw_masked.EDITOR",
5849     &border.draw_masked[GFX_SPECIAL_ARG_EDITOR]
5850   },
5851   {
5852     "border.draw_masked.INFO",
5853     &border.draw_masked[GFX_SPECIAL_ARG_INFO]
5854   },
5855   {
5856     "border.draw_masked.SETUP",
5857     &border.draw_masked[GFX_SPECIAL_ARG_SETUP]
5858   },
5859   {
5860     "border.draw_masked.PLAYING",
5861     &border.draw_masked[GFX_SPECIAL_ARG_PLAYING]
5862   },
5863   {
5864     "border.draw_masked.DOOR",
5865     &border.draw_masked[GFX_SPECIAL_ARG_DOOR]
5866   },
5867
5868   {
5869     "title.fade_delay",
5870     &title.fade_delay
5871   },
5872   {
5873     "title.post_delay",
5874     &title.post_delay
5875   },
5876   {
5877     "title.auto_delay",
5878     &title.auto_delay
5879   },
5880
5881   {
5882     "menu.fade_delay",
5883     &menu.fade_delay
5884   },
5885   {
5886     "menu.post_delay",
5887     &menu.post_delay
5888   },
5889   {
5890     "menu.auto_delay",
5891     &menu.auto_delay
5892   },
5893
5894   {
5895     "menu.draw_xoffset",
5896     &menu.draw_xoffset[GFX_SPECIAL_ARG_DEFAULT]
5897   },
5898   {
5899     "menu.draw_yoffset",
5900     &menu.draw_yoffset[GFX_SPECIAL_ARG_DEFAULT]
5901   },
5902   {
5903     "menu.draw_xoffset.MAIN",
5904     &menu.draw_xoffset[GFX_SPECIAL_ARG_MAIN]
5905   },
5906   {
5907     "menu.draw_yoffset.MAIN",
5908     &menu.draw_yoffset[GFX_SPECIAL_ARG_MAIN]
5909   },
5910   {
5911     "menu.draw_xoffset.LEVELS",
5912     &menu.draw_xoffset[GFX_SPECIAL_ARG_LEVELS]
5913   },
5914   {
5915     "menu.draw_yoffset.LEVELS",
5916     &menu.draw_yoffset[GFX_SPECIAL_ARG_LEVELS]
5917   },
5918   {
5919     "menu.draw_xoffset.SCORES",
5920     &menu.draw_xoffset[GFX_SPECIAL_ARG_SCORES]
5921   },
5922   {
5923     "menu.draw_yoffset.SCORES",
5924     &menu.draw_yoffset[GFX_SPECIAL_ARG_SCORES]
5925   },
5926   {
5927     "menu.draw_xoffset.EDITOR",
5928     &menu.draw_xoffset[GFX_SPECIAL_ARG_EDITOR]
5929   },
5930   {
5931     "menu.draw_yoffset.EDITOR",
5932     &menu.draw_yoffset[GFX_SPECIAL_ARG_EDITOR]
5933   },
5934   {
5935     "menu.draw_xoffset.INFO",
5936     &menu.draw_xoffset[GFX_SPECIAL_ARG_INFO]
5937   },
5938   {
5939     "menu.draw_yoffset.INFO",
5940     &menu.draw_yoffset[GFX_SPECIAL_ARG_INFO]
5941   },
5942   {
5943     "menu.draw_xoffset.INFO[ELEMENTS]",
5944     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_ELEMENTS]
5945   },
5946   {
5947     "menu.draw_yoffset.INFO[ELEMENTS]",
5948     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_ELEMENTS]
5949   },
5950   {
5951     "menu.draw_xoffset.INFO[MUSIC]",
5952     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_MUSIC]
5953   },
5954   {
5955     "menu.draw_yoffset.INFO[MUSIC]",
5956     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_MUSIC]
5957   },
5958   {
5959     "menu.draw_xoffset.INFO[CREDITS]",
5960     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_CREDITS]
5961   },
5962   {
5963     "menu.draw_yoffset.INFO[CREDITS]",
5964     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_CREDITS]
5965   },
5966   {
5967     "menu.draw_xoffset.INFO[PROGRAM]",
5968     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_PROGRAM]
5969   },
5970   {
5971     "menu.draw_yoffset.INFO[PROGRAM]",
5972     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_PROGRAM]
5973   },
5974   {
5975     "menu.draw_xoffset.INFO[VERSION]",
5976     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_VERSION]
5977   },
5978   {
5979     "menu.draw_yoffset.INFO[VERSION]",
5980     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_VERSION]
5981   },
5982   {
5983     "menu.draw_xoffset.INFO[LEVELSET]",
5984     &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_LEVELSET]
5985   },
5986   {
5987     "menu.draw_yoffset.INFO[LEVELSET]",
5988     &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_LEVELSET]
5989   },
5990   {
5991     "menu.draw_xoffset.SETUP",
5992     &menu.draw_xoffset[GFX_SPECIAL_ARG_SETUP]
5993   },
5994   {
5995     "menu.draw_yoffset.SETUP",
5996     &menu.draw_yoffset[GFX_SPECIAL_ARG_SETUP]
5997   },
5998
5999   {
6000     "menu.scrollbar_xoffset",
6001     &menu.scrollbar_xoffset
6002   },
6003
6004   {
6005     "menu.list_size",
6006     &menu.list_size[GFX_SPECIAL_ARG_DEFAULT]
6007   },
6008   {
6009     "menu.list_size.LEVELS",
6010     &menu.list_size[GFX_SPECIAL_ARG_LEVELS]
6011   },
6012   {
6013     "menu.list_size.SCORES",
6014     &menu.list_size[GFX_SPECIAL_ARG_SCORES]
6015   },
6016   {
6017     "menu.list_size.INFO",
6018     &menu.list_size[GFX_SPECIAL_ARG_INFO]
6019   },
6020
6021   { "main.button.name.x",               &menu.main.button.name.x              },
6022   { "main.button.name.y",               &menu.main.button.name.y              },
6023   { "main.button.levels.x",             &menu.main.button.levels.x            },
6024   { "main.button.levels.y",             &menu.main.button.levels.y            },
6025   { "main.button.scores.x",             &menu.main.button.scores.x            },
6026   { "main.button.scores.y",             &menu.main.button.scores.y            },
6027   { "main.button.editor.x",             &menu.main.button.editor.x            },
6028   { "main.button.editor.y",             &menu.main.button.editor.y            },
6029   { "main.button.info.x",               &menu.main.button.info.x              },
6030   { "main.button.info.y",               &menu.main.button.info.y              },
6031   { "main.button.game.x",               &menu.main.button.game.x              },
6032   { "main.button.game.y",               &menu.main.button.game.y              },
6033   { "main.button.setup.x",              &menu.main.button.setup.x             },
6034   { "main.button.setup.y",              &menu.main.button.setup.y             },
6035   { "main.button.quit.x",               &menu.main.button.quit.x              },
6036   { "main.button.quit.y",               &menu.main.button.quit.y              },
6037
6038   { "main.button.prev_level.x",         &menu.main.button.prev_level.x        },
6039   { "main.button.prev_level.y",         &menu.main.button.prev_level.y        },
6040   { "main.button.next_level.x",         &menu.main.button.next_level.x        },
6041   { "main.button.next_level.y",         &menu.main.button.next_level.y        },
6042
6043   { "main.text.name.x",                 &menu.main.text.name.x                },
6044   { "main.text.name.y",                 &menu.main.text.name.y                },
6045   { "main.text.name.width",             &menu.main.text.name.width            },
6046   { "main.text.name.height",            &menu.main.text.name.height           },
6047   { "main.text.name.align",             &menu.main.text.name.align            },
6048   { "main.text.levels.x",               &menu.main.text.levels.x              },
6049   { "main.text.levels.y",               &menu.main.text.levels.y              },
6050   { "main.text.levels.width",           &menu.main.text.levels.width          },
6051   { "main.text.levels.height",          &menu.main.text.levels.height         },
6052   { "main.text.levels.align",           &menu.main.text.levels.align          },
6053   { "main.text.scores.x",               &menu.main.text.scores.x              },
6054   { "main.text.scores.y",               &menu.main.text.scores.y              },
6055   { "main.text.scores.width",           &menu.main.text.scores.width          },
6056   { "main.text.scores.height",          &menu.main.text.scores.height         },
6057   { "main.text.scores.align",           &menu.main.text.scores.align          },
6058   { "main.text.editor.x",               &menu.main.text.editor.x              },
6059   { "main.text.editor.y",               &menu.main.text.editor.y              },
6060   { "main.text.editor.width",           &menu.main.text.editor.width          },
6061   { "main.text.editor.height",          &menu.main.text.editor.height         },
6062   { "main.text.editor.align",           &menu.main.text.editor.align          },
6063   { "main.text.info.x",                 &menu.main.text.info.x                },
6064   { "main.text.info.y",                 &menu.main.text.info.y                },
6065   { "main.text.info.width",             &menu.main.text.info.width            },
6066   { "main.text.info.height",            &menu.main.text.info.height           },
6067   { "main.text.info.align",             &menu.main.text.info.align            },
6068   { "main.text.game.x",                 &menu.main.text.game.x                },
6069   { "main.text.game.y",                 &menu.main.text.game.y                },
6070   { "main.text.game.width",             &menu.main.text.game.width            },
6071   { "main.text.game.height",            &menu.main.text.game.height           },
6072   { "main.text.game.align",             &menu.main.text.game.align            },
6073   { "main.text.setup.x",                &menu.main.text.setup.x               },
6074   { "main.text.setup.y",                &menu.main.text.setup.y               },
6075   { "main.text.setup.width",            &menu.main.text.setup.width           },
6076   { "main.text.setup.height",           &menu.main.text.setup.height          },
6077   { "main.text.setup.align",            &menu.main.text.setup.align           },
6078   { "main.text.quit.x",                 &menu.main.text.quit.x                },
6079   { "main.text.quit.y",                 &menu.main.text.quit.y                },
6080   { "main.text.quit.width",             &menu.main.text.quit.width            },
6081   { "main.text.quit.height",            &menu.main.text.quit.height           },
6082   { "main.text.quit.align",             &menu.main.text.quit.align            },
6083
6084   { "main.text.current_level.x",        &menu.main.text.current_level.x       },
6085   { "main.text.current_level.y",        &menu.main.text.current_level.y       },
6086   { "main.text.current_level.align",    &menu.main.text.current_level.align   },
6087   { "main.text.first_level.x",          &menu.main.text.first_level.x         },
6088   { "main.text.first_level.y",          &menu.main.text.first_level.y         },
6089   { "main.text.first_level.align",      &menu.main.text.first_level.align     },
6090   { "main.text.last_level.x",           &menu.main.text.last_level.x          },
6091   { "main.text.last_level.y",           &menu.main.text.last_level.y          },
6092   { "main.text.last_level.align",       &menu.main.text.last_level.align      },
6093   { "main.text.level_info_1.x",         &menu.main.text.level_info_1.x        },
6094   { "main.text.level_info_1.y",         &menu.main.text.level_info_1.y        },
6095   { "main.text.level_info_1.align",     &menu.main.text.level_info_1.align    },
6096   { "main.text.level_info_1.chars",     &menu.main.text.level_info_1.chars    },
6097   { "main.text.level_info_2.x",         &menu.main.text.level_info_2.x        },
6098   { "main.text.level_info_2.y",         &menu.main.text.level_info_2.y        },
6099   { "main.text.level_info_2.align",     &menu.main.text.level_info_2.align    },
6100   { "main.text.level_info_2.chars",     &menu.main.text.level_info_2.chars    },
6101   { "main.text.title_1.x",              &menu.main.text.title_1.x             },
6102   { "main.text.title_1.y",              &menu.main.text.title_1.y             },
6103   { "main.text.title_1.align",          &menu.main.text.title_1.align         },
6104   { "main.text.title_2.x",              &menu.main.text.title_2.x             },
6105   { "main.text.title_2.y",              &menu.main.text.title_2.y             },
6106   { "main.text.title_2.align",          &menu.main.text.title_2.align         },
6107   { "main.text.title_3.x",              &menu.main.text.title_3.x             },
6108   { "main.text.title_3.y",              &menu.main.text.title_3.y             },
6109   { "main.text.title_3.align",          &menu.main.text.title_3.align         },
6110
6111   { "main.input.name.x",                &menu.main.input.name.x               },
6112   { "main.input.name.y",                &menu.main.input.name.y               },
6113   { "main.input.name.align",            &menu.main.input.name.align           },
6114
6115   { "preview.x",                        &preview.x                            },
6116   { "preview.y",                        &preview.y                            },
6117   { "preview.align",                    &preview.align                        },
6118   { "preview.xsize",                    &preview.xsize                        },
6119   { "preview.ysize",                    &preview.ysize                        },
6120   { "preview.xoffset",                  &preview.xoffset                      },
6121   { "preview.yoffset",                  &preview.yoffset                      },
6122   { "preview.tile_size",                &preview.tile_size                    },
6123   { "preview.step_offset",              &preview.step_offset                  },
6124   { "preview.step_delay",               &preview.step_delay                   },
6125   { "preview.anim_mode",                &preview.anim_mode                    },
6126
6127   { "door_1.width",                     &door_1.width                         },
6128   { "door_1.height",                    &door_1.height                        },
6129   { "door_1.step_offset",               &door_1.step_offset                   },
6130   { "door_1.step_delay",                &door_1.step_delay                    },
6131   { "door_1.anim_mode",                 &door_1.anim_mode                     },
6132   { "door_2.width",                     &door_2.width                         },
6133   { "door_2.height",                    &door_2.height                        },
6134   { "door_2.step_offset",               &door_2.step_offset                   },
6135   { "door_2.step_delay",                &door_2.step_delay                    },
6136   { "door_2.anim_mode",                 &door_2.anim_mode                     },
6137
6138   { "game.panel.level.x",               &game.panel.level.x                   },
6139   { "game.panel.level.y",               &game.panel.level.y                   },
6140   { "game.panel.level.align",           &game.panel.level.align               },
6141   { "game.panel.level.digits",          &game.panel.level.chars               },
6142   { "game.panel.gems.x",                &game.panel.gems.x                    },
6143   { "game.panel.gems.y",                &game.panel.gems.y                    },
6144   { "game.panel.gems.align",            &game.panel.gems.align                },
6145   { "game.panel.gems.digits",           &game.panel.gems.chars                },
6146   { "game.panel.inventory.x",           &game.panel.inventory.x               },
6147   { "game.panel.inventory.y",           &game.panel.inventory.y               },
6148   { "game.panel.inventory.align",       &game.panel.inventory.align           },
6149   { "game.panel.inventory.digits",      &game.panel.inventory.chars           },
6150   { "game.panel.keys.x",                &game.panel.keys.x                    },
6151   { "game.panel.keys.y",                &game.panel.keys.y                    },
6152   { "game.panel.keys.align",            &game.panel.keys.align                },
6153   { "game.panel.score.x",               &game.panel.score.x                   },
6154   { "game.panel.score.y",               &game.panel.score.y                   },
6155   { "game.panel.score.align",           &game.panel.score.align               },
6156   { "game.panel.score.digits",          &game.panel.score.chars               },
6157   { "game.panel.time.x",                &game.panel.time.x                    },
6158   { "game.panel.time.y",                &game.panel.time.y                    },
6159   { "game.panel.time.align",            &game.panel.time.align                },
6160   { "game.panel.time.digits",           &game.panel.time.chars                },
6161
6162   { "[player].boring_delay_fixed",      &game.player_boring_delay_fixed       },
6163   { "[player].boring_delay_random",     &game.player_boring_delay_random      },
6164   { "[player].sleeping_delay_fixed",    &game.player_sleeping_delay_fixed     },
6165   { "[player].sleeping_delay_random",   &game.player_sleeping_delay_random    },
6166
6167   { NULL,                               NULL,                                 }
6168 };
6169
6170
6171 /* ------------------------------------------------------------------------- */
6172 /* font definitions                                                          */
6173 /* ------------------------------------------------------------------------- */
6174
6175 /* Important: When one entry is a prefix of another entry, the longer entry
6176    must come first, because the dynamic configuration does prefix matching!
6177    (These definitions must match the corresponding definitions in "main.h"!) */
6178
6179 struct FontInfo font_info[NUM_FONTS + 1] =
6180 {
6181   { "font.initial_1"            },
6182   { "font.initial_2"            },
6183   { "font.initial_3"            },
6184   { "font.initial_4"            },
6185   { "font.title_1"              },
6186   { "font.title_2"              },
6187   { "font.menu_1.active"        },
6188   { "font.menu_2.active"        },
6189   { "font.menu_1"               },
6190   { "font.menu_2"               },
6191   { "font.text_1.active"        },
6192   { "font.text_2.active"        },
6193   { "font.text_3.active"        },
6194   { "font.text_4.active"        },
6195   { "font.text_1"               },
6196   { "font.text_2"               },
6197   { "font.text_3"               },
6198   { "font.text_4"               },
6199   { "font.envelope_1"           },
6200   { "font.envelope_2"           },
6201   { "font.envelope_3"           },
6202   { "font.envelope_4"           },
6203   { "font.input_1.active"       },
6204   { "font.input_2.active"       },
6205   { "font.input_1"              },
6206   { "font.input_2"              },
6207   { "font.option_off"           },
6208   { "font.option_on"            },
6209   { "font.value_1"              },
6210   { "font.value_2"              },
6211   { "font.value_old"            },
6212   { "font.level_number.active"  },
6213   { "font.level_number"         },
6214   { "font.tape_recorder"        },
6215   { "font.game_info"            },
6216   { "font.info.elements"        },
6217   { "font.info.levelset"        },
6218 };
6219
6220
6221 /* ------------------------------------------------------------------------- */
6222 /* music token prefix definitions                                            */
6223 /* ------------------------------------------------------------------------- */
6224
6225 struct MusicPrefixInfo music_prefix_info[NUM_MUSIC_PREFIXES + 1] =
6226 {
6227   { "background",               TRUE    },
6228
6229   { NULL,                       0       }
6230 };
6231
6232
6233 /* ========================================================================= */
6234 /* main()                                                                    */
6235 /* ========================================================================= */
6236
6237 static void print_usage()
6238 {
6239   printf("\n"
6240          "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n"
6241          "\n"
6242          "Options:\n"
6243          "  -d, --display HOSTNAME[:SCREEN]  specify X server display\n"
6244          "  -b, --basepath DIRECTORY         alternative base DIRECTORY\n"
6245          "  -l, --level DIRECTORY            alternative level DIRECTORY\n"
6246          "  -g, --graphics DIRECTORY         alternative graphics DIRECTORY\n"
6247          "  -s, --sounds DIRECTORY           alternative sounds DIRECTORY\n"
6248          "  -m, --music DIRECTORY            alternative music DIRECTORY\n"
6249          "  -n, --network                    network multiplayer game\n"
6250          "      --serveronly                 only start network server\n"
6251          "  -v, --verbose                    verbose mode\n"
6252          "      --debug                      display debugging information\n"
6253          "  -e, --execute COMMAND            execute batch COMMAND\n"
6254          "\n"
6255          "Valid commands for '--execute' option:\n"
6256          "  \"print graphicsinfo.conf\"        print default graphics config\n"
6257          "  \"print soundsinfo.conf\"          print default sounds config\n"
6258          "  \"print musicinfo.conf\"           print default music config\n"
6259          "  \"print editorsetup.conf\"         print default editor config\n"
6260          "  \"print helpanim.conf\"            print default helpanim config\n"
6261          "  \"print helptext.conf\"            print default helptext config\n"
6262          "  \"dump level FILE\"                dump level data from FILE\n"
6263          "  \"dump tape FILE\"                 dump tape data from FILE\n"
6264          "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
6265          "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
6266          "\n",
6267          program.command_basename);
6268 }
6269
6270 int main(int argc, char *argv[])
6271 {
6272   char * window_title_string = getWindowTitleString();
6273
6274   InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
6275                   PROGRAM_TITLE_STRING, window_title_string, ICON_TITLE_STRING,
6276                   X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME,
6277                   MSDOS_POINTER_FILENAME,
6278                   COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
6279
6280   InitExitFunction(CloseAllAndExit);
6281   InitPlatformDependentStuff();
6282
6283   GetOptions(argv, print_usage);
6284   OpenAll();
6285
6286   EventLoop();
6287   CloseAllAndExit(0);
6288
6289   return 0;     /* to keep compilers happy */
6290 }