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