1805b6e0db9702a1363dadde7c424b0b2b5475e9
[rocksndiamonds.git] / src / main.c
1 // ============================================================================
2 // Rocks'n'Diamonds - McDuffin Strikes Back!
3 // ----------------------------------------------------------------------------
4 // (c) 1995-2014 by Artsoft Entertainment
5 //                  Holger Schemel
6 //                  info@artsoft.org
7 //                  http://www.artsoft.org/
8 // ----------------------------------------------------------------------------
9 // main.c
10 // ============================================================================
11
12 #include "libgame/libgame.h"
13
14 #include "main.h"
15 #include "init.h"
16 #include "game.h"
17 #include "tape.h"
18 #include "tools.h"
19 #include "files.h"
20 #include "events.h"
21 #include "config.h"
22
23 Bitmap                 *bitmap_db_field;
24 Bitmap                 *bitmap_db_panel;
25 Bitmap                 *bitmap_db_door_1;
26 Bitmap                 *bitmap_db_door_2;
27 Bitmap                 *bitmap_db_store_1;
28 Bitmap                 *bitmap_db_store_2;
29 DrawBuffer             *fieldbuffer;
30 DrawBuffer             *drawto_field;
31
32 int                     game_status = -1;
33 boolean                 game_status_last_screen = -1;
34 boolean                 level_editor_test_game = FALSE;
35 boolean                 network_playing = FALSE;
36
37 #if defined(TARGET_SDL)
38 boolean                 network_server = FALSE;
39 SDL_Thread             *server_thread;
40 #endif
41
42 int                     key_joystick_mapping = 0;
43
44 short                   Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 short                   Last[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short                   MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
49 short                   ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 short                   ChangePage[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
51 short                   CustomValue[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
52 short                   Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
53 short                   Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
54 short                   StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
55 short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
56 boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
57 boolean                 Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
58 short                   ChangeCount[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
59 short                   ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
60 short                   WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
61 short                   WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
62 short                   CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
63 short                   CheckImpact[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
64 short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
65 short                   AmoebaCnt[MAX_NUM_AMOEBA];
66 short                   AmoebaCnt2[MAX_NUM_AMOEBA];
67 short                   ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
68 short                   ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
69 short                   ExplodeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
70 int                     RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
71 int                     PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
72
73 int                     GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
74 int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
75 int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
76 int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
77 int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
78 int                     GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
79
80 int                     ActiveElement[MAX_NUM_ELEMENTS];
81 int                     ActiveButton[NUM_IMAGE_FILES];
82 int                     ActiveFont[NUM_FONTS];
83
84 int                     lev_fieldx, lev_fieldy;
85 int                     scroll_x, scroll_y;
86
87 int                     WIN_XSIZE = WIN_XSIZE_DEFAULT;
88 int                     WIN_YSIZE = WIN_YSIZE_DEFAULT;
89
90 int                     SCR_FIELDX = SCR_FIELDX_DEFAULT;
91 int                     SCR_FIELDY = SCR_FIELDY_DEFAULT;
92
93 int                     REAL_SX = 6, REAL_SY = 6;
94 int                     SX = 8, SY = 8;
95 int                     DX = 566, DY = 60;
96 int                     VX = 566, VY = 400;
97 int                     EX = 566, EY = 356;
98 int                     dDX, dDY;
99
100 int                     FULL_SXSIZE = 2 + SXSIZE_DEFAULT + 2;
101 int                     FULL_SYSIZE = 2 + SYSIZE_DEFAULT + 2;
102 int                     SXSIZE = SXSIZE_DEFAULT;
103 int                     SYSIZE = SYSIZE_DEFAULT;
104
105 int                     FADE_SX = 6, FADE_SY = 6;
106 int                     FADE_SXSIZE = 2 + SXSIZE_DEFAULT + 2;
107 int                     FADE_SYSIZE = 2 + SXSIZE_DEFAULT + 2;
108
109 int                     DXSIZE = 100;
110 int                     DYSIZE = 280;
111 int                     VXSIZE = 100;
112 int                     VYSIZE = 100;
113 int                     EXSIZE = 100;
114 int                     EYSIZE = 144;
115 int                     TILESIZE_VAR = TILESIZE;
116
117 int                     FX, FY;
118 int                     ScrollStepSize;
119 int                     ScreenMovDir = MV_NONE, ScreenMovPos = 0;
120 int                     ScreenGfxPos = 0;
121 int                     BorderElement = EL_STEELWALL;
122 int                     MenuFrameDelay = MENU_FRAME_DELAY;
123 int                     GameFrameDelay = GAME_FRAME_DELAY;
124 int                     FfwdFrameDelay = FFWD_FRAME_DELAY;
125 int                     BX1, BY1;
126 int                     BX2, BY2;
127 int                     SBX_Left, SBX_Right;
128 int                     SBY_Upper, SBY_Lower;
129 int                     ZX, ZY;
130
131 int                     TimeFrames, TimePlayed, TimeLeft, TapeTime;
132
133 boolean                 network_player_action_received = FALSE;
134
135 struct LevelInfo        level, level_template;
136 struct PlayerInfo       stored_player[MAX_PLAYERS], *local_player = NULL;
137 struct HiScore          highscore[MAX_SCORE_ENTRIES];
138 struct TapeInfo         tape;
139 struct SetupInfo        setup;
140 struct GameInfo         game;
141 struct GlobalInfo       global;
142 struct BorderInfo       border;
143 struct ViewportInfo     viewport;
144 struct TitleFadingInfo  fading;
145 struct TitleFadingInfo  title_initial_first_default;
146 struct TitleFadingInfo  title_initial_default;
147 struct TitleFadingInfo  title_first_default;
148 struct TitleFadingInfo  title_default;
149 struct TitleMessageInfo titlescreen_initial_first_default;
150 struct TitleMessageInfo titlescreen_initial_first[MAX_NUM_TITLE_IMAGES];
151 struct TitleMessageInfo titlescreen_initial_default;
152 struct TitleMessageInfo titlescreen_initial[MAX_NUM_TITLE_IMAGES];
153 struct TitleMessageInfo titlescreen_first_default;
154 struct TitleMessageInfo titlescreen_first[MAX_NUM_TITLE_IMAGES];
155 struct TitleMessageInfo titlescreen_default;
156 struct TitleMessageInfo titlescreen[MAX_NUM_TITLE_IMAGES];
157 struct TitleMessageInfo titlemessage_initial_first_default;
158 struct TitleMessageInfo titlemessage_initial_first[MAX_NUM_TITLE_MESSAGES];
159 struct TitleMessageInfo titlemessage_initial_default;
160 struct TitleMessageInfo titlemessage_initial[MAX_NUM_TITLE_MESSAGES];
161 struct TitleMessageInfo titlemessage_first_default;
162 struct TitleMessageInfo titlemessage_first[MAX_NUM_TITLE_MESSAGES];
163 struct TitleMessageInfo titlemessage_default;
164 struct TitleMessageInfo titlemessage[MAX_NUM_TITLE_MESSAGES];
165 struct TitleMessageInfo readme;
166 struct InitInfo         init, init_last;
167 struct MenuInfo         menu;
168 struct DoorInfo         door_1, door_2;
169 struct RequestInfo      request;
170 struct PreviewInfo      preview;
171 struct EditorInfo       editor;
172
173 struct GraphicInfo     *graphic_info = NULL;
174 struct SoundInfo       *sound_info = NULL;
175 struct MusicInfo       *music_info = NULL;
176 struct MusicFileInfo   *music_file_info = NULL;
177 struct HelpAnimInfo    *helpanim_info = NULL;
178
179 SetupFileHash          *helptext_info = NULL;
180 SetupFileHash          *image_config_hash = NULL;
181 SetupFileHash          *element_token_hash = NULL;
182 SetupFileHash          *graphic_token_hash = NULL;
183 SetupFileHash          *font_token_hash = NULL;
184 SetupFileHash          *hide_setup_hash = NULL;
185
186
187 // ----------------------------------------------------------------------------
188 // element definitions
189 // ----------------------------------------------------------------------------
190
191 struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1];
192
193 // this contains predefined structure elements to initialize "element_info"
194 struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] =
195 {
196   // keyword to start parser: "ELEMENT_INFO_START" <-- do not change!
197
198   // --------------------------------------------------------------------------
199   // "real" level file elements
200   // --------------------------------------------------------------------------
201
202   {
203     "empty_space",
204     "empty_space",
205     "empty space"
206   },
207   {
208     "sand",
209     "sand",
210     "sand"
211   },
212   {
213     "wall",
214     "wall",
215     "normal wall"
216   },
217   {
218     "wall_slippery",
219     "wall",
220     "slippery wall"
221   },
222   {
223     "rock",
224     "rock",
225     "rock"
226   },
227   {
228     "key_obsolete",
229     "obsolete",
230     "key (OBSOLETE)"
231   },
232   {
233     "emerald",
234     "emerald",
235     "emerald"
236   },
237   {
238     "exit_closed",
239     "exit",
240     "closed exit"
241   },
242   {
243     "player_obsolete",
244     "obsolete",
245     "player (OBSOLETE)"
246   },
247   {
248     "bug",
249     "bug",
250     "bug (random start direction)"
251   },
252   {
253     "spaceship",
254     "spaceship",
255     "spaceship (random start direction)"
256   },
257   {
258     "yamyam",
259     "yamyam",
260     "yam yam (random start direction)"
261   },
262   {
263     "robot",
264     "robot",
265     "robot"
266   },
267   {
268     "steelwall",
269     "steelwall",
270     "steel wall"
271   },
272   {
273     "diamond",
274     "diamond",
275     "diamond"
276   },
277   {
278     "amoeba_dead",
279     "amoeba",
280     "dead amoeba"
281   },
282   {
283     "quicksand_empty",
284     "quicksand",
285     "quicksand (empty)"
286   },
287   {
288     "quicksand_full",
289     "quicksand",
290     "quicksand (with rock)"
291   },
292   {
293     "amoeba_drop",
294     "amoeba",
295     "amoeba drop"
296   },
297   {
298     "bomb",
299     "bomb",
300     "bomb"
301   },
302   {
303     "magic_wall",
304     "magic_wall",
305     "magic wall"
306   },
307   {
308     "speed_pill",
309     "speed_pill",
310     "speed pill"
311   },
312   {
313     "acid",
314     "acid",
315     "acid"
316   },
317   {
318     "amoeba_wet",
319     "amoeba",
320     "dropping amoeba (EM style)"
321   },
322   {
323     "amoeba_dry",
324     "amoeba",
325     "normal amoeba"
326   },
327   {
328     "nut",
329     "nut",
330     "nut with emerald"
331   },
332   {
333     "game_of_life",
334     "game_of_life",
335     "Conway's wall of life"
336   },
337   {
338     "biomaze",
339     "biomaze",
340     "biomaze"
341   },
342   {
343     "dynamite.active",
344     "dynamite",
345     "burning dynamite"
346   },
347   {
348     "stoneblock",
349     "wall",
350     "wall"
351   },
352   {
353     "robot_wheel",
354     "robot_wheel",
355     "magic wheel"
356   },
357   {
358     "robot_wheel.active",
359     "robot_wheel",
360     "magic wheel (running)"
361   },
362   {
363     "key_1",
364     "key",
365     "key 1"
366   },
367   {
368     "key_2",
369     "key",
370     "key 2"
371   },
372   {
373     "key_3",
374     "key",
375     "key 3"
376   },
377   {
378     "key_4",
379     "key",
380     "key 4"
381   },
382   {
383     "gate_1",
384     "gate",
385     "door 1"
386   },
387   {
388     "gate_2",
389     "gate",
390     "door 2"
391   },
392   {
393     "gate_3",
394     "gate",
395     "door 3"
396   },
397   {
398     "gate_4",
399     "gate",
400     "door 4"
401   },
402   {
403     "gate_1_gray",
404     "gate",
405     "gray door (opened by key 1)"
406   },
407   {
408     "gate_2_gray",
409     "gate",
410     "gray door (opened by key 2)"
411   },
412   {
413     "gate_3_gray",
414     "gate",
415     "gray door (opened by key 3)"
416   },
417   {
418     "gate_4_gray",
419     "gate",
420     "gray door (opened by key 4)"
421   },
422   {
423     "dynamite",
424     "dynamite",
425     "dynamite"
426   },
427   {
428     "pacman",
429     "pacman",
430     "pac man (random start direction)"
431   },
432   {
433     "invisible_wall",
434     "wall",
435     "invisible normal wall"
436   },
437   {
438     "lamp",
439     "lamp",
440     "lamp (off)"
441   },
442   {
443     "lamp.active",
444     "lamp",
445     "lamp (on)"
446   },
447   {
448     "wall_emerald",
449     "wall",
450     "wall with emerald"
451   },
452   {
453     "wall_diamond",
454     "wall",
455     "wall with diamond"
456   },
457   {
458     "amoeba_full",
459     "amoeba",
460     "amoeba with content"
461   },
462   {
463     "bd_amoeba",
464     "bd_amoeba",
465     "amoeba (BD style)"
466   },
467   {
468     "time_orb_full",
469     "time_orb_full",
470     "time orb (full)"
471   },
472   {
473     "time_orb_empty",
474     "time_orb_empty",
475     "time orb (empty)"
476   },
477   {
478     "expandable_wall",
479     "wall",
480     "growing wall (horizontal, visible)"
481   },
482   {
483     "bd_diamond",
484     "bd_diamond",
485     "diamond (BD style)"
486   },
487   {
488     "emerald_yellow",
489     "emerald",
490     "yellow emerald"
491   },
492   {
493     "wall_bd_diamond",
494     "wall",
495     "wall with BD style diamond"
496   },
497   {
498     "wall_emerald_yellow",
499     "wall",
500     "wall with yellow emerald"
501   },
502   {
503     "dark_yamyam",
504     "dark_yamyam",
505     "dark yam yam"
506   },
507   {
508     "bd_magic_wall",
509     "bd_magic_wall",
510     "magic wall (BD style)"
511   },
512   {
513     "invisible_steelwall",
514     "steelwall",
515     "invisible steel wall"
516   },
517   {
518     "sokoban_field_player",
519     "sokoban",
520     "sokoban field with player"
521   },
522   {
523     "dynabomb_increase_number",
524     "dynabomb",
525     "increases number of bombs"
526   },
527   {
528     "dynabomb_increase_size",
529     "dynabomb",
530     "increases explosion size"
531   },
532   {
533     "dynabomb_increase_power",
534     "dynabomb",
535     "increases power of explosion"
536   },
537   {
538     "sokoban_object",
539     "sokoban",
540     "sokoban object"
541   },
542   {
543     "sokoban_field_empty",
544     "sokoban",
545     "sokoban empty field"
546   },
547   {
548     "sokoban_field_full",
549     "sokoban",
550     "sokoban field with object"
551   },
552   {
553     "bd_butterfly.right",
554     "bd_butterfly",
555     "butterfly (starts moving right)"},
556   {
557     "bd_butterfly.up",
558     "bd_butterfly",
559     "butterfly (starts moving up)"
560   },
561   {
562     "bd_butterfly.left",
563     "bd_butterfly",
564     "butterfly (starts moving left)"},
565   {
566     "bd_butterfly.down",
567     "bd_butterfly",
568     "butterfly (starts moving down)"},
569   {
570     "bd_firefly.right",
571     "bd_firefly",
572     "firefly (starts moving right)"
573   },
574   {
575     "bd_firefly.up",
576     "bd_firefly",
577     "firefly (starts moving up)"
578   },
579   {
580     "bd_firefly.left",
581     "bd_firefly",
582     "firefly (starts moving left)"
583   },
584   {
585     "bd_firefly.down",
586     "bd_firefly",
587     "firefly (starts moving down)"
588   },
589   {
590     "bd_butterfly",
591     "bd_butterfly",
592     "butterfly (random start direction)"
593   },
594   {
595     "bd_firefly",
596     "bd_firefly",
597     "firefly (random start direction)"
598   },
599   {
600     "player_1",
601     "player",
602     "player 1"
603   },
604   {
605     "player_2",
606     "player",
607     "player 2"
608   },
609   {
610     "player_3",
611     "player",
612     "player 3"
613   },
614   {
615     "player_4",
616     "player",
617     "player 4"
618   },
619   {
620     "bug.right",
621     "bug",
622     "bug (starts moving right)"
623   },
624   {
625     "bug.up",
626     "bug",
627     "bug (starts moving up)"
628   },
629   {
630     "bug.left",
631     "bug",
632     "bug (starts moving left)"
633   },
634   {
635     "bug.down",
636     "bug",
637     "bug (starts moving down)"
638   },
639   {
640     "spaceship.right",
641     "spaceship",
642     "spaceship (starts moving right)"},
643   {
644     "spaceship.up",
645     "spaceship",
646     "spaceship (starts moving up)"
647   },
648   {
649     "spaceship.left",
650     "spaceship",
651     "spaceship (starts moving left)"},
652   {
653     "spaceship.down",
654     "spaceship",
655     "spaceship (starts moving down)"},
656   {
657     "pacman.right",
658     "pacman",
659     "pac man (starts moving right)"
660   },
661   {
662     "pacman.up",
663     "pacman",
664     "pac man (starts moving up)"
665   },
666   {
667     "pacman.left",
668     "pacman",
669     "pac man (starts moving left)"
670   },
671   {
672     "pacman.down",
673     "pacman",
674     "pac man (starts moving down)"
675   },
676   {
677     "emerald_red",
678     "emerald",
679     "red emerald"
680   },
681   {
682     "emerald_purple",
683     "emerald",
684     "purple emerald"
685   },
686   {
687     "wall_emerald_red",
688     "wall",
689     "wall with red emerald"
690   },
691   {
692     "wall_emerald_purple",
693     "wall",
694     "wall with purple emerald"
695   },
696   {
697     "acid_pool_topleft",
698     "wall",
699     "acid pool (top left)"
700   },
701   {
702     "acid_pool_topright",
703     "wall",
704     "acid pool (top right)"
705   },
706   {
707     "acid_pool_bottomleft",
708     "wall",
709     "acid pool (bottom left)"
710   },
711   {
712     "acid_pool_bottom",
713     "wall",
714     "acid pool (bottom)"
715   },
716   {
717     "acid_pool_bottomright",
718     "wall",
719     "acid pool (bottom right)"
720   },
721   {
722     "bd_wall",
723     "wall",
724     "normal wall (BD style)"
725   },
726   {
727     "bd_rock",
728     "bd_rock",
729     "rock (BD style)"
730   },
731   {
732     "exit_open",
733     "exit",
734     "open exit"
735   },
736   {
737     "black_orb",
738     "black_orb",
739     "black orb bomb"
740   },
741   {
742     "amoeba_to_diamond",
743     "amoeba",
744     "amoeba"
745   },
746   {
747     "mole",
748     "mole",
749     "mole (random start direction)"
750   },
751   {
752     "penguin",
753     "penguin",
754     "penguin"
755   },
756   {
757     "satellite",
758     "satellite",
759     "satellite"
760   },
761   {
762     "arrow_left",
763     "arrow",
764     "arrow left"
765   },
766   {
767     "arrow_right",
768     "arrow",
769     "arrow right"
770   },
771   {
772     "arrow_up",
773     "arrow",
774     "arrow up"
775   },
776   {
777     "arrow_down",
778     "arrow",
779     "arrow down"
780   },
781   {
782     "pig",
783     "pig",
784     "pig"
785   },
786   {
787     "dragon",
788     "dragon",
789     "fire breathing dragon"
790   },
791   {
792     "em_key_1_file_obsolete",
793     "obsolete",
794     "key (OBSOLETE)"
795   },
796   {
797     "char_space",
798     "char",
799     "letter ' '"
800   },
801   {
802     "char_exclam",
803     "char",
804     "letter '!'"
805   },
806   {
807     "char_quotedbl",
808     "char",
809     "letter '\"'"
810   },
811   {
812     "char_numbersign",
813     "char",
814     "letter '#'"
815   },
816   {
817     "char_dollar",
818     "char",
819     "letter '$'"
820   },
821   {
822     "char_percent",
823     "char",
824     "letter '%'"
825   },
826   {
827     "char_ampersand",
828     "char",
829     "letter '&'"
830   },
831   {
832     "char_apostrophe",
833     "char",
834     "letter '''"
835   },
836   {
837     "char_parenleft",
838     "char",
839     "letter '('"
840   },
841   {
842     "char_parenright",
843     "char",
844     "letter ')'"
845   },
846   {
847     "char_asterisk",
848     "char",
849     "letter '*'"
850   },
851   {
852     "char_plus",
853     "char",
854     "letter '+'"
855   },
856   {
857     "char_comma",
858     "char",
859     "letter ','"
860   },
861   {
862     "char_minus",
863     "char",
864     "letter '-'"
865   },
866   {
867     "char_period",
868     "char",
869     "letter '.'"
870   },
871   {
872     "char_slash",
873     "char",
874     "letter '/'"
875   },
876   {
877     "char_0",
878     "char",
879     "letter '0'"
880   },
881   {
882     "char_1",
883     "char",
884     "letter '1'"
885   },
886   {
887     "char_2",
888     "char",
889     "letter '2'"
890   },
891   {
892     "char_3",
893     "char",
894     "letter '3'"
895   },
896   {
897     "char_4",
898     "char",
899     "letter '4'"
900   },
901   {
902     "char_5",
903     "char",
904     "letter '5'"
905   },
906   {
907     "char_6",
908     "char",
909     "letter '6'"
910   },
911   {
912     "char_7",
913     "char",
914     "letter '7'"
915   },
916   {
917     "char_8",
918     "char",
919     "letter '8'"
920   },
921   {
922     "char_9",
923     "char",
924     "letter '9'"
925   },
926   {
927     "char_colon",
928     "char",
929     "letter ':'"
930   },
931   {
932     "char_semicolon",
933     "char",
934     "letter ';'"
935   },
936   {
937     "char_less",
938     "char",
939     "letter '<'"
940   },
941   {
942     "char_equal",
943     "char",
944     "letter '='"
945   },
946   {
947     "char_greater",
948     "char",
949     "letter '>'"
950   },
951   {
952     "char_question",
953     "char",
954     "letter '?'"
955   },
956   {
957     "char_at",
958     "char",
959     "letter '@'"
960   },
961   {
962     "char_a",
963     "char",
964     "letter 'A'"
965   },
966   {
967     "char_b",
968     "char",
969     "letter 'B'"
970   },
971   {
972     "char_c",
973     "char",
974     "letter 'C'"
975   },
976   {
977     "char_d",
978     "char",
979     "letter 'D'"
980   },
981   {
982     "char_e",
983     "char",
984     "letter 'E'"
985   },
986   {
987     "char_f",
988     "char",
989     "letter 'F'"
990   },
991   {
992     "char_g",
993     "char",
994     "letter 'G'"
995   },
996   {
997     "char_h",
998     "char",
999     "letter 'H'"
1000   },
1001   {
1002     "char_i",
1003     "char",
1004     "letter 'I'"
1005   },
1006   {
1007     "char_j",
1008     "char",
1009     "letter 'J'"
1010   },
1011   {
1012     "char_k",
1013     "char",
1014     "letter 'K'"
1015   },
1016   {
1017     "char_l",
1018     "char",
1019     "letter 'L'"
1020   },
1021   {
1022     "char_m",
1023     "char",
1024     "letter 'M'"
1025   },
1026   {
1027     "char_n",
1028     "char",
1029     "letter 'N'"
1030   },
1031   {
1032     "char_o",
1033     "char",
1034     "letter 'O'"
1035   },
1036   {
1037     "char_p",
1038     "char",
1039     "letter 'P'"
1040   },
1041   {
1042     "char_q",
1043     "char",
1044     "letter 'Q'"
1045   },
1046   {
1047     "char_r",
1048     "char",
1049     "letter 'R'"
1050   },
1051   {
1052     "char_s",
1053     "char",
1054     "letter 'S'"
1055   },
1056   {
1057     "char_t",
1058     "char",
1059     "letter 'T'"
1060   },
1061   {
1062     "char_u",
1063     "char",
1064     "letter 'U'"
1065   },
1066   {
1067     "char_v",
1068     "char",
1069     "letter 'V'"
1070   },
1071   {
1072     "char_w",
1073     "char",
1074     "letter 'W'"
1075   },
1076   {
1077     "char_x",
1078     "char",
1079     "letter 'X'"
1080   },
1081   {
1082     "char_y",
1083     "char",
1084     "letter 'Y'"
1085   },
1086   {
1087     "char_z",
1088     "char",
1089     "letter 'Z'"
1090   },
1091   {
1092     "char_bracketleft",
1093     "char",
1094     "letter '['"
1095   },
1096   {
1097     "char_backslash",
1098     "char",
1099     "letter '\\'"
1100   },
1101   {
1102     "char_bracketright",
1103     "char",
1104     "letter ']'"
1105   },
1106   {
1107     "char_asciicircum",
1108     "char",
1109     "letter '^'"
1110   },
1111   {
1112     "char_underscore",
1113     "char",
1114     "letter '_'"
1115   },
1116   {
1117     "char_copyright",
1118     "char",
1119     "letter '\xa9'"
1120   },
1121   {
1122     "char_aumlaut",
1123     "char",
1124     "letter '\xc4'"
1125   },
1126   {
1127     "char_oumlaut",
1128     "char",
1129     "letter '\xd6'"
1130   },
1131   {
1132     "char_uumlaut",
1133     "char",
1134     "letter '\xdc'"
1135   },
1136   {
1137     "char_degree",
1138     "char",
1139     "letter '\xb0'"
1140   },
1141   {
1142     "char_trademark",
1143     "char",
1144     "letter '\xae'"
1145   },
1146   {
1147     "char_cursor",
1148     "char",
1149     "letter '\xa0'"
1150   },
1151   {
1152     "char_unused",
1153     "char",
1154     "letter ''"
1155   },
1156   {
1157     "char_unused",
1158     "char",
1159     "letter ''"
1160   },
1161   {
1162     "char_unused",
1163     "char",
1164     "letter ''"
1165   },
1166   {
1167     "char_unused",
1168     "char",
1169     "letter ''"
1170   },
1171   {
1172     "char_unused",
1173     "char",
1174     "letter ''"
1175   },
1176   {
1177     "char_unused",
1178     "char",
1179     "letter ''"
1180   },
1181   {
1182     "char_unused",
1183     "char",
1184     "letter 'button'"
1185   },
1186   {
1187     "char_unused",
1188     "char",
1189     "letter 'up'"
1190   },
1191   {
1192     "char_unused",
1193     "char",
1194     "letter 'down'"
1195   },
1196   {
1197     "expandable_wall_horizontal",
1198     "wall",
1199     "growing wall (horizontal)"
1200   },
1201   {
1202     "expandable_wall_vertical",
1203     "wall",
1204     "growing wall (vertical)"
1205   },
1206   {
1207     "expandable_wall_any",
1208     "wall",
1209     "growing wall (any direction)"
1210   },
1211   {
1212     "em_gate_1",
1213     "gate",
1214     "door 1 (EM style)"
1215   },
1216   {
1217     "em_gate_2",
1218     "gate",
1219     "door 2 (EM style)"
1220   },
1221   {
1222     "em_gate_3",
1223     "gate",
1224     "door 3 (EM style)"
1225   },
1226   {
1227     "em_gate_4",
1228     "gate",
1229     "door 4 (EM style)"
1230   },
1231   {
1232     "em_key_2_file_obsolete",
1233     "obsolete",
1234     "key (OBSOLETE)"
1235   },
1236   {
1237     "em_key_3_file_obsolete",
1238     "obsolete",
1239     "key (OBSOLETE)"
1240   },
1241   {
1242     "em_key_4_file_obsolete",
1243     "obsolete",
1244     "key (OBSOLETE)"
1245   },
1246   {
1247     "sp_empty_space",
1248     "empty_space",
1249     "empty space"
1250   },
1251   {
1252     "sp_zonk",
1253     "sp_zonk",
1254     "zonk"
1255   },
1256   {
1257     "sp_base",
1258     "sp_base",
1259     "base"
1260   },
1261   {
1262     "sp_murphy",
1263     "player",
1264     "murphy"
1265   },
1266   {
1267     "sp_infotron",
1268     "sp_infotron",
1269     "infotron"
1270   },
1271   {
1272     "sp_chip_single",
1273     "wall",
1274     "chip (single)"
1275   },
1276   {
1277     "sp_hardware_gray",
1278     "wall",
1279     "hardware"
1280   },
1281   {
1282     "sp_exit_closed",
1283     "sp_exit",
1284     "exit"
1285   },
1286   {
1287     "sp_disk_orange",
1288     "sp_disk_orange",
1289     "orange disk"
1290   },
1291   {
1292     "sp_port_right",
1293     "sp_port",
1294     "port (leading right)"
1295   },
1296   {
1297     "sp_port_down",
1298     "sp_port",
1299     "port (leading down)"
1300   },
1301   {
1302     "sp_port_left",
1303     "sp_port",
1304     "port (leading left)"
1305   },
1306   {
1307     "sp_port_up",
1308     "sp_port",
1309     "port (leading up)"
1310   },
1311   {
1312     "sp_gravity_port_right",
1313     "sp_gravity_port",
1314     "gravity-on/off port (leading right)"
1315   },
1316   {
1317     "sp_gravity_port_down",
1318     "sp_gravity_port",
1319     "gravity-on/off port (leading down)"
1320   },
1321   {
1322     "sp_gravity_port_left",
1323     "sp_gravity_port",
1324     "gravity-on/off port (leading left)"
1325   },
1326   {
1327     "sp_gravity_port_up",
1328     "sp_gravity_port",
1329     "gravity-on/off port (leading up)"
1330   },
1331   {
1332     "sp_sniksnak",
1333     "sp_sniksnak",
1334     "snik snak"
1335   },
1336   {
1337     "sp_disk_yellow",
1338     "sp_disk_yellow",
1339     "yellow disk"
1340   },
1341   {
1342     "sp_terminal",
1343     "sp_terminal",
1344     "terminal"
1345   },
1346   {
1347     "sp_disk_red",
1348     "dynamite",
1349     "red disk"
1350   },
1351   {
1352     "sp_port_vertical",
1353     "sp_port",
1354     "port (vertical)"
1355   },
1356   {
1357     "sp_port_horizontal",
1358     "sp_port",
1359     "port (horizontal)"
1360   },
1361   {
1362     "sp_port_any",
1363     "sp_port",
1364     "port (any direction)"
1365   },
1366   {
1367     "sp_electron",
1368     "sp_electron",
1369     "electron"
1370   },
1371   {
1372     "sp_buggy_base",
1373     "sp_buggy_base",
1374     "buggy base"
1375   },
1376   {
1377     "sp_chip_left",
1378     "wall",
1379     "chip (left half)"
1380   },
1381   {
1382     "sp_chip_right",
1383     "wall",
1384     "chip (right half)"
1385   },
1386   {
1387     "sp_hardware_base_1",
1388     "wall",
1389     "hardware"
1390   },
1391   {
1392     "sp_hardware_green",
1393     "wall",
1394     "hardware"
1395   },
1396   {
1397     "sp_hardware_blue",
1398     "wall",
1399     "hardware"
1400   },
1401   {
1402     "sp_hardware_red",
1403     "wall",
1404     "hardware"
1405   },
1406   {
1407     "sp_hardware_yellow",
1408     "wall",
1409     "hardware"
1410   },
1411   {
1412     "sp_hardware_base_2",
1413     "wall",
1414     "hardware"
1415   },
1416   {
1417     "sp_hardware_base_3",
1418     "wall",
1419     "hardware"
1420   },
1421   {
1422     "sp_hardware_base_4",
1423     "wall",
1424     "hardware"
1425   },
1426   {
1427     "sp_hardware_base_5",
1428     "wall",
1429     "hardware"
1430   },
1431   {
1432     "sp_hardware_base_6",
1433     "wall",
1434     "hardware"
1435   },
1436   {
1437     "sp_chip_top",
1438     "wall",
1439     "chip (upper half)"
1440   },
1441   {
1442     "sp_chip_bottom",
1443     "wall",
1444     "chip (lower half)"
1445   },
1446   {
1447     "em_gate_1_gray",
1448     "gate",
1449     "gray door (EM style, key 1)"
1450   },
1451   {
1452     "em_gate_2_gray",
1453     "gate",
1454     "gray door (EM style, key 2)"
1455   },
1456   {
1457     "em_gate_3_gray",
1458     "gate",
1459     "gray door (EM style, key 3)"
1460   },
1461   {
1462     "em_gate_4_gray",
1463     "gate",
1464     "gray door (EM style, key 4)"
1465   },
1466   {
1467     "em_dynamite",
1468     "dynamite",
1469     "dynamite (EM style)"
1470   },
1471   {
1472     "em_dynamite.active",
1473     "dynamite",
1474     "burning dynamite (EM style)"
1475   },
1476   {
1477     "pearl",
1478     "pearl",
1479     "pearl"
1480   },
1481   {
1482     "crystal",
1483     "crystal",
1484     "crystal"
1485   },
1486   {
1487     "wall_pearl",
1488     "wall",
1489     "wall with pearl"
1490   },
1491   {
1492     "wall_crystal",
1493     "wall",
1494     "wall with crystal"
1495   },
1496   {
1497     "dc_gate_white",
1498     "gate",
1499     "white door"
1500   },
1501   {
1502     "dc_gate_white_gray",
1503     "gate",
1504     "gray door (opened by white key)"
1505   },
1506   {
1507     "dc_key_white",
1508     "key",
1509     "white key"
1510   },
1511   {
1512     "shield_normal",
1513     "shield_normal",
1514     "shield (normal)"
1515   },
1516   {
1517     "extra_time",
1518     "extra_time",
1519     "extra time"
1520   },
1521   {
1522     "switchgate_open",
1523     "switchgate",
1524     "switch gate (open)"
1525   },
1526   {
1527     "switchgate_closed",
1528     "switchgate",
1529     "switch gate (closed)"
1530   },
1531   {
1532     "switchgate_switch_up",
1533     "switchgate_switch",
1534     "switch for switch gate"
1535   },
1536   {
1537     "switchgate_switch_down",
1538     "switchgate_switch",
1539     "switch for switch gate"
1540   },
1541   {
1542     "unused_269",
1543     "unused",
1544     "-"
1545   },
1546   {
1547     "unused_270",
1548     "unused",
1549     "-"
1550   },
1551   {
1552     "conveyor_belt_1_left",
1553     "conveyor_belt",
1554     "conveyor belt 1 (left)"
1555   },
1556   {
1557     "conveyor_belt_1_middle",
1558     "conveyor_belt",
1559     "conveyor belt 1 (middle)"
1560   },
1561   {
1562     "conveyor_belt_1_right",
1563     "conveyor_belt",
1564     "conveyor belt 1 (right)"
1565   },
1566   {
1567     "conveyor_belt_1_switch_left",
1568     "conveyor_belt_switch",
1569     "switch for conveyor belt 1 (left)"
1570   },
1571   {
1572     "conveyor_belt_1_switch_middle",
1573     "conveyor_belt_switch",
1574     "switch for conveyor belt 1 (middle)"
1575   },
1576   {
1577     "conveyor_belt_1_switch_right",
1578     "conveyor_belt_switch",
1579     "switch for conveyor belt 1 (right)"
1580   },
1581   {
1582     "conveyor_belt_2_left",
1583     "conveyor_belt",
1584     "conveyor belt 2 (left)"
1585   },
1586   {
1587     "conveyor_belt_2_middle",
1588     "conveyor_belt",
1589     "conveyor belt 2 (middle)"
1590   },
1591   {
1592     "conveyor_belt_2_right",
1593     "conveyor_belt",
1594     "conveyor belt 2 (right)"
1595   },
1596   {
1597     "conveyor_belt_2_switch_left",
1598     "conveyor_belt_switch",
1599     "switch for conveyor belt 2 (left)"
1600   },
1601   {
1602     "conveyor_belt_2_switch_middle",
1603     "conveyor_belt_switch",
1604     "switch for conveyor belt 2 (middle)"
1605   },
1606   {
1607     "conveyor_belt_2_switch_right",
1608     "conveyor_belt_switch",
1609     "switch for conveyor belt 2 (right)"
1610   },
1611   {
1612     "conveyor_belt_3_left",
1613     "conveyor_belt",
1614     "conveyor belt 3 (left)"
1615   },
1616   {
1617     "conveyor_belt_3_middle",
1618     "conveyor_belt",
1619     "conveyor belt 3 (middle)"
1620   },
1621   {
1622     "conveyor_belt_3_right",
1623     "conveyor_belt",
1624     "conveyor belt 3 (right)"
1625   },
1626   {
1627     "conveyor_belt_3_switch_left",
1628     "conveyor_belt_switch",
1629     "switch for conveyor belt 3 (left)"
1630   },
1631   {
1632     "conveyor_belt_3_switch_middle",
1633     "conveyor_belt_switch",
1634     "switch for conveyor belt 3 (middle)"
1635   },
1636   {
1637     "conveyor_belt_3_switch_right",
1638     "conveyor_belt_switch",
1639     "switch for conveyor belt 3 (right)"
1640   },
1641   {
1642     "conveyor_belt_4_left",
1643     "conveyor_belt",
1644     "conveyor belt 4 (left)"
1645   },
1646   {
1647     "conveyor_belt_4_middle",
1648     "conveyor_belt",
1649     "conveyor belt 4 (middle)"
1650   },
1651   {
1652     "conveyor_belt_4_right",
1653     "conveyor_belt",
1654     "conveyor belt 4 (right)"
1655   },
1656   {
1657     "conveyor_belt_4_switch_left",
1658     "conveyor_belt_switch",
1659     "switch for conveyor belt 4 (left)"
1660   },
1661   {
1662     "conveyor_belt_4_switch_middle",
1663     "conveyor_belt_switch",
1664     "switch for conveyor belt 4 (middle)"
1665   },
1666   {
1667     "conveyor_belt_4_switch_right",
1668     "conveyor_belt_switch",
1669     "switch for conveyor belt 4 (right)"
1670   },
1671   {
1672     "landmine",
1673     "landmine",
1674     "land mine (not removable)"
1675   },
1676   {
1677     "envelope_obsolete",
1678     "obsolete",
1679     "envelope (OBSOLETE)"
1680   },
1681   {
1682     "light_switch",
1683     "light_switch",
1684     "light switch (off)"
1685   },
1686   {
1687     "light_switch.active",
1688     "light_switch",
1689     "light switch (on)"
1690   },
1691   {
1692     "sign_exclamation",
1693     "sign",
1694     "sign (exclamation)"
1695   },
1696   {
1697     "sign_radioactivity",
1698     "sign",
1699     "sign (radio activity)"
1700   },
1701   {
1702     "sign_stop",
1703     "sign",
1704     "sign (stop)"
1705   },
1706   {
1707     "sign_wheelchair",
1708     "sign",
1709     "sign (wheel chair)"
1710   },
1711   {
1712     "sign_parking",
1713     "sign",
1714     "sign (parking)"
1715   },
1716   {
1717     "sign_no_entry",
1718     "sign",
1719     "sign (no entry)"
1720   },
1721   {
1722     "sign_unused_1",
1723     "sign",
1724     "sign (unused)"
1725   },
1726   {
1727     "sign_give_way",
1728     "sign",
1729     "sign (give way)"
1730   },
1731   {
1732     "sign_entry_forbidden",
1733     "sign",
1734     "sign (entry forbidden)"
1735   },
1736   {
1737     "sign_emergency_exit",
1738     "sign",
1739     "sign (emergency exit)"
1740   },
1741   {
1742     "sign_yin_yang",
1743     "sign",
1744     "sign (yin yang)"
1745   },
1746   {
1747     "sign_unused_2",
1748     "sign",
1749     "sign (unused)"
1750   },
1751   {
1752     "mole.left",
1753     "mole",
1754     "mole (starts moving left)"
1755   },
1756   {
1757     "mole.right",
1758     "mole",
1759     "mole (starts moving right)"
1760   },
1761   {
1762     "mole.up",
1763     "mole",
1764     "mole (starts moving up)"
1765   },
1766   {
1767     "mole.down",
1768     "mole",
1769     "mole (starts moving down)"
1770   },
1771   {
1772     "steelwall_slippery",
1773     "steelwall",
1774     "slippery steel wall"
1775   },
1776   {
1777     "invisible_sand",
1778     "sand",
1779     "invisible sand"
1780   },
1781   {
1782     "dx_unknown_15",
1783     "unknown",
1784     "dx unknown element 15"
1785   },
1786   {
1787     "dx_unknown_42",
1788     "unknown",
1789     "dx unknown element 42"
1790   },
1791   {
1792     "unused_319",
1793     "unused",
1794     "(not used)"
1795   },
1796   {
1797     "unused_320",
1798     "unused",
1799     "(not used)"
1800   },
1801   {
1802     "shield_deadly",
1803     "shield_deadly",
1804     "shield (deadly, kills enemies)"
1805   },
1806   {
1807     "timegate_open",
1808     "timegate",
1809     "time gate (open)"
1810   },
1811   {
1812     "timegate_closed",
1813     "timegate",
1814     "time gate (closed)"
1815   },
1816   {
1817     "timegate_switch.active",
1818     "timegate_switch",
1819     "switch for time gate"
1820   },
1821   {
1822     "timegate_switch",
1823     "timegate_switch",
1824     "switch for time gate"
1825   },
1826   {
1827     "balloon",
1828     "balloon",
1829     "balloon"
1830   },
1831   {
1832     "balloon_switch_left",
1833     "balloon_switch",
1834     "wind switch (left)"
1835   },
1836   {
1837     "balloon_switch_right",
1838     "balloon_switch",
1839     "wind switch (right)"
1840   },
1841   {
1842     "balloon_switch_up",
1843     "balloon_switch",
1844     "wind switch (up)"
1845   },
1846   {
1847     "balloon_switch_down",
1848     "balloon_switch",
1849     "wind switch (down)"
1850   },
1851   {
1852     "balloon_switch_any",
1853     "balloon_switch",
1854     "wind switch (any direction)"
1855   },
1856   {
1857     "emc_steelwall_1",
1858     "steelwall",
1859     "steel wall"
1860   },
1861   {
1862     "emc_steelwall_2",
1863     "steelwall",
1864     "steel wall"
1865   },
1866   {
1867     "emc_steelwall_3",
1868     "steelwall",
1869     "steel wall"
1870   },
1871   {
1872     "emc_steelwall_4",
1873     "steelwall",
1874     "steel wall"
1875   },
1876   {
1877     "emc_wall_1",
1878     "wall",
1879     "normal wall"
1880   },
1881   {
1882     "emc_wall_2",
1883     "wall",
1884     "normal wall"
1885   },
1886   {
1887     "emc_wall_3",
1888     "wall",
1889     "normal wall"
1890   },
1891   {
1892     "emc_wall_4",
1893     "wall",
1894     "normal wall"
1895   },
1896   {
1897     "emc_wall_5",
1898     "wall",
1899     "normal wall"
1900   },
1901   {
1902     "emc_wall_6",
1903     "wall",
1904     "normal wall"
1905   },
1906   {
1907     "emc_wall_7",
1908     "wall",
1909     "normal wall"
1910   },
1911   {
1912     "emc_wall_8",
1913     "wall",
1914     "normal wall"
1915   },
1916   {
1917     "tube_any",
1918     "tube",
1919     "tube (any direction)"
1920   },
1921   {
1922     "tube_vertical",
1923     "tube",
1924     "tube (vertical)"
1925   },
1926   {
1927     "tube_horizontal",
1928     "tube",
1929     "tube (horizontal)"
1930   },
1931   {
1932     "tube_vertical_left",
1933     "tube",
1934     "tube (vertical & left)"
1935   },
1936   {
1937     "tube_vertical_right",
1938     "tube",
1939     "tube (vertical & right)"
1940   },
1941   {
1942     "tube_horizontal_up",
1943     "tube",
1944     "tube (horizontal & up)"
1945   },
1946   {
1947     "tube_horizontal_down",
1948     "tube",
1949     "tube (horizontal & down)"
1950   },
1951   {
1952     "tube_left_up",
1953     "tube",
1954     "tube (left & up)"
1955   },
1956   {
1957     "tube_left_down",
1958     "tube",
1959     "tube (left & down)"
1960   },
1961   {
1962     "tube_right_up",
1963     "tube",
1964     "tube (right & up)"
1965   },
1966   {
1967     "tube_right_down",
1968     "tube",
1969     "tube (right & down)"
1970   },
1971   {
1972     "spring",
1973     "spring",
1974     "spring"
1975   },
1976   {
1977     "trap",
1978     "trap",
1979     "trap"
1980   },
1981   {
1982     "dx_supabomb",
1983     "bomb",
1984     "stable bomb (DX style)"
1985   },
1986   {
1987     "unused_358",
1988     "unused",
1989     "-"
1990   },
1991   {
1992     "unused_359",
1993     "unused",
1994     "-"
1995   },
1996   {
1997     "custom_1",
1998     "custom",
1999     "custom element 1"
2000   },
2001   {
2002     "custom_2",
2003     "custom",
2004     "custom element 2"
2005   },
2006   {
2007     "custom_3",
2008     "custom",
2009     "custom element 3"
2010   },
2011   {
2012     "custom_4",
2013     "custom",
2014     "custom element 4"
2015   },
2016   {
2017     "custom_5",
2018     "custom",
2019     "custom element 5"
2020   },
2021   {
2022     "custom_6",
2023     "custom",
2024     "custom element 6"
2025   },
2026   {
2027     "custom_7",
2028     "custom",
2029     "custom element 7"
2030   },
2031   {
2032     "custom_8",
2033     "custom",
2034     "custom element 8"
2035   },
2036   {
2037     "custom_9",
2038     "custom",
2039     "custom element 9"
2040   },
2041   {
2042     "custom_10",
2043     "custom",
2044     "custom element 10"
2045   },
2046   {
2047     "custom_11",
2048     "custom",
2049     "custom element 11"
2050   },
2051   {
2052     "custom_12",
2053     "custom",
2054     "custom element 12"
2055   },
2056   {
2057     "custom_13",
2058     "custom",
2059     "custom element 13"
2060   },
2061   {
2062     "custom_14",
2063     "custom",
2064     "custom element 14"
2065   },
2066   {
2067     "custom_15",
2068     "custom",
2069     "custom element 15"
2070   },
2071   {
2072     "custom_16",
2073     "custom",
2074     "custom element 16"
2075   },
2076   {
2077     "custom_17",
2078     "custom",
2079     "custom element 17"
2080   },
2081   {
2082     "custom_18",
2083     "custom",
2084     "custom element 18"
2085   },
2086   {
2087     "custom_19",
2088     "custom",
2089     "custom element 19"
2090   },
2091   {
2092     "custom_20",
2093     "custom",
2094     "custom element 20"
2095   },
2096   {
2097     "custom_21",
2098     "custom",
2099     "custom element 21"
2100   },
2101   {
2102     "custom_22",
2103     "custom",
2104     "custom element 22"
2105   },
2106   {
2107     "custom_23",
2108     "custom",
2109     "custom element 23"
2110   },
2111   {
2112     "custom_24",
2113     "custom",
2114     "custom element 24"
2115   },
2116   {
2117     "custom_25",
2118     "custom",
2119     "custom element 25"
2120   },
2121   {
2122     "custom_26",
2123     "custom",
2124     "custom element 26"
2125   },
2126   {
2127     "custom_27",
2128     "custom",
2129     "custom element 27"
2130   },
2131   {
2132     "custom_28",
2133     "custom",
2134     "custom element 28"
2135   },
2136   {
2137     "custom_29",
2138     "custom",
2139     "custom element 29"
2140   },
2141   {
2142     "custom_30",
2143     "custom",
2144     "custom element 30"
2145   },
2146   {
2147     "custom_31",
2148     "custom",
2149     "custom element 31"
2150   },
2151   {
2152     "custom_32",
2153     "custom",
2154     "custom element 32"
2155   },
2156   {
2157     "custom_33",
2158     "custom",
2159     "custom element 33"
2160   },
2161   {
2162     "custom_34",
2163     "custom",
2164     "custom element 34"
2165   },
2166   {
2167     "custom_35",
2168     "custom",
2169     "custom element 35"
2170   },
2171   {
2172     "custom_36",
2173     "custom",
2174     "custom element 36"
2175   },
2176   {
2177     "custom_37",
2178     "custom",
2179     "custom element 37"
2180   },
2181   {
2182     "custom_38",
2183     "custom",
2184     "custom element 38"
2185   },
2186   {
2187     "custom_39",
2188     "custom",
2189     "custom element 39"
2190   },
2191   {
2192     "custom_40",
2193     "custom",
2194     "custom element 40"
2195   },
2196   {
2197     "custom_41",
2198     "custom",
2199     "custom element 41"
2200   },
2201   {
2202     "custom_42",
2203     "custom",
2204     "custom element 42"
2205   },
2206   {
2207     "custom_43",
2208     "custom",
2209     "custom element 43"
2210   },
2211   {
2212     "custom_44",
2213     "custom",
2214     "custom element 44"
2215   },
2216   {
2217     "custom_45",
2218     "custom",
2219     "custom element 45"
2220   },
2221   {
2222     "custom_46",
2223     "custom",
2224     "custom element 46"
2225   },
2226   {
2227     "custom_47",
2228     "custom",
2229     "custom element 47"
2230   },
2231   {
2232     "custom_48",
2233     "custom",
2234     "custom element 48"
2235   },
2236   {
2237     "custom_49",
2238     "custom",
2239     "custom element 49"
2240   },
2241   {
2242     "custom_50",
2243     "custom",
2244     "custom element 50"
2245   },
2246   {
2247     "custom_51",
2248     "custom",
2249     "custom element 51"
2250   },
2251   {
2252     "custom_52",
2253     "custom",
2254     "custom element 52"
2255   },
2256   {
2257     "custom_53",
2258     "custom",
2259     "custom element 53"
2260   },
2261   {
2262     "custom_54",
2263     "custom",
2264     "custom element 54"
2265   },
2266   {
2267     "custom_55",
2268     "custom",
2269     "custom element 55"
2270   },
2271   {
2272     "custom_56",
2273     "custom",
2274     "custom element 56"
2275   },
2276   {
2277     "custom_57",
2278     "custom",
2279     "custom element 57"
2280   },
2281   {
2282     "custom_58",
2283     "custom",
2284     "custom element 58"
2285   },
2286   {
2287     "custom_59",
2288     "custom",
2289     "custom element 59"
2290   },
2291   {
2292     "custom_60",
2293     "custom",
2294     "custom element 60"
2295   },
2296   {
2297     "custom_61",
2298     "custom",
2299     "custom element 61"
2300   },
2301   {
2302     "custom_62",
2303     "custom",
2304     "custom element 62"
2305   },
2306   {
2307     "custom_63",
2308     "custom",
2309     "custom element 63"
2310   },
2311   {
2312     "custom_64",
2313     "custom",
2314     "custom element 64"
2315   },
2316   {
2317     "custom_65",
2318     "custom",
2319     "custom element 65"
2320   },
2321   {
2322     "custom_66",
2323     "custom",
2324     "custom element 66"
2325   },
2326   {
2327     "custom_67",
2328     "custom",
2329     "custom element 67"
2330   },
2331   {
2332     "custom_68",
2333     "custom",
2334     "custom element 68"
2335   },
2336   {
2337     "custom_69",
2338     "custom",
2339     "custom element 69"
2340   },
2341   {
2342     "custom_70",
2343     "custom",
2344     "custom element 70"
2345   },
2346   {
2347     "custom_71",
2348     "custom",
2349     "custom element 71"
2350   },
2351   {
2352     "custom_72",
2353     "custom",
2354     "custom element 72"
2355   },
2356   {
2357     "custom_73",
2358     "custom",
2359     "custom element 73"
2360   },
2361   {
2362     "custom_74",
2363     "custom",
2364     "custom element 74"
2365   },
2366   {
2367     "custom_75",
2368     "custom",
2369     "custom element 75"
2370   },
2371   {
2372     "custom_76",
2373     "custom",
2374     "custom element 76"
2375   },
2376   {
2377     "custom_77",
2378     "custom",
2379     "custom element 77"
2380   },
2381   {
2382     "custom_78",
2383     "custom",
2384     "custom element 78"
2385   },
2386   {
2387     "custom_79",
2388     "custom",
2389     "custom element 79"
2390   },
2391   {
2392     "custom_80",
2393     "custom",
2394     "custom element 80"
2395   },
2396   {
2397     "custom_81",
2398     "custom",
2399     "custom element 81"
2400   },
2401   {
2402     "custom_82",
2403     "custom",
2404     "custom element 82"
2405   },
2406   {
2407     "custom_83",
2408     "custom",
2409     "custom element 83"
2410   },
2411   {
2412     "custom_84",
2413     "custom",
2414     "custom element 84"
2415   },
2416   {
2417     "custom_85",
2418     "custom",
2419     "custom element 85"
2420   },
2421   {
2422     "custom_86",
2423     "custom",
2424     "custom element 86"
2425   },
2426   {
2427     "custom_87",
2428     "custom",
2429     "custom element 87"
2430   },
2431   {
2432     "custom_88",
2433     "custom",
2434     "custom element 88"
2435   },
2436   {
2437     "custom_89",
2438     "custom",
2439     "custom element 89"
2440   },
2441   {
2442     "custom_90",
2443     "custom",
2444     "custom element 90"
2445   },
2446   {
2447     "custom_91",
2448     "custom",
2449     "custom element 91"
2450   },
2451   {
2452     "custom_92",
2453     "custom",
2454     "custom element 92"
2455   },
2456   {
2457     "custom_93",
2458     "custom",
2459     "custom element 93"
2460   },
2461   {
2462     "custom_94",
2463     "custom",
2464     "custom element 94"
2465   },
2466   {
2467     "custom_95",
2468     "custom",
2469     "custom element 95"
2470   },
2471   {
2472     "custom_96",
2473     "custom",
2474     "custom element 96"
2475   },
2476   {
2477     "custom_97",
2478     "custom",
2479     "custom element 97"
2480   },
2481   {
2482     "custom_98",
2483     "custom",
2484     "custom element 98"
2485   },
2486   {
2487     "custom_99",
2488     "custom",
2489     "custom element 99"
2490   },
2491   {
2492     "custom_100",
2493     "custom",
2494     "custom element 100"
2495   },
2496   {
2497     "custom_101",
2498     "custom",
2499     "custom element 101"
2500   },
2501   {
2502     "custom_102",
2503     "custom",
2504     "custom element 102"
2505   },
2506   {
2507     "custom_103",
2508     "custom",
2509     "custom element 103"
2510   },
2511   {
2512     "custom_104",
2513     "custom",
2514     "custom element 104"
2515   },
2516   {
2517     "custom_105",
2518     "custom",
2519     "custom element 105"
2520   },
2521   {
2522     "custom_106",
2523     "custom",
2524     "custom element 106"
2525   },
2526   {
2527     "custom_107",
2528     "custom",
2529     "custom element 107"
2530   },
2531   {
2532     "custom_108",
2533     "custom",
2534     "custom element 108"
2535   },
2536   {
2537     "custom_109",
2538     "custom",
2539     "custom element 109"
2540   },
2541   {
2542     "custom_110",
2543     "custom",
2544     "custom element 110"
2545   },
2546   {
2547     "custom_111",
2548     "custom",
2549     "custom element 111"
2550   },
2551   {
2552     "custom_112",
2553     "custom",
2554     "custom element 112"
2555   },
2556   {
2557     "custom_113",
2558     "custom",
2559     "custom element 113"
2560   },
2561   {
2562     "custom_114",
2563     "custom",
2564     "custom element 114"
2565   },
2566   {
2567     "custom_115",
2568     "custom",
2569     "custom element 115"
2570   },
2571   {
2572     "custom_116",
2573     "custom",
2574     "custom element 116"
2575   },
2576   {
2577     "custom_117",
2578     "custom",
2579     "custom element 117"
2580   },
2581   {
2582     "custom_118",
2583     "custom",
2584     "custom element 118"
2585   },
2586   {
2587     "custom_119",
2588     "custom",
2589     "custom element 119"
2590   },
2591   {
2592     "custom_120",
2593     "custom",
2594     "custom element 120"
2595   },
2596   {
2597     "custom_121",
2598     "custom",
2599     "custom element 121"
2600   },
2601   {
2602     "custom_122",
2603     "custom",
2604     "custom element 122"
2605   },
2606   {
2607     "custom_123",
2608     "custom",
2609     "custom element 123"
2610   },
2611   {
2612     "custom_124",
2613     "custom",
2614     "custom element 124"
2615   },
2616   {
2617     "custom_125",
2618     "custom",
2619     "custom element 125"
2620   },
2621   {
2622     "custom_126",
2623     "custom",
2624     "custom element 126"
2625   },
2626   {
2627     "custom_127",
2628     "custom",
2629     "custom element 127"
2630   },
2631   {
2632     "custom_128",
2633     "custom",
2634     "custom element 128"
2635   },
2636   {
2637     "custom_129",
2638     "custom",
2639     "custom element 129"
2640   },
2641   {
2642     "custom_130",
2643     "custom",
2644     "custom element 130"
2645   },
2646   {
2647     "custom_131",
2648     "custom",
2649     "custom element 131"
2650   },
2651   {
2652     "custom_132",
2653     "custom",
2654     "custom element 132"
2655   },
2656   {
2657     "custom_133",
2658     "custom",
2659     "custom element 133"
2660   },
2661   {
2662     "custom_134",
2663     "custom",
2664     "custom element 134"
2665   },
2666   {
2667     "custom_135",
2668     "custom",
2669     "custom element 135"
2670   },
2671   {
2672     "custom_136",
2673     "custom",
2674     "custom element 136"
2675   },
2676   {
2677     "custom_137",
2678     "custom",
2679     "custom element 137"
2680   },
2681   {
2682     "custom_138",
2683     "custom",
2684     "custom element 138"
2685   },
2686   {
2687     "custom_139",
2688     "custom",
2689     "custom element 139"
2690   },
2691   {
2692     "custom_140",
2693     "custom",
2694     "custom element 140"
2695   },
2696   {
2697     "custom_141",
2698     "custom",
2699     "custom element 141"
2700   },
2701   {
2702     "custom_142",
2703     "custom",
2704     "custom element 142"
2705   },
2706   {
2707     "custom_143",
2708     "custom",
2709     "custom element 143"
2710   },
2711   {
2712     "custom_144",
2713     "custom",
2714     "custom element 144"
2715   },
2716   {
2717     "custom_145",
2718     "custom",
2719     "custom element 145"
2720   },
2721   {
2722     "custom_146",
2723     "custom",
2724     "custom element 146"
2725   },
2726   {
2727     "custom_147",
2728     "custom",
2729     "custom element 147"
2730   },
2731   {
2732     "custom_148",
2733     "custom",
2734     "custom element 148"
2735   },
2736   {
2737     "custom_149",
2738     "custom",
2739     "custom element 149"
2740   },
2741   {
2742     "custom_150",
2743     "custom",
2744     "custom element 150"
2745   },
2746   {
2747     "custom_151",
2748     "custom",
2749     "custom element 151"
2750   },
2751   {
2752     "custom_152",
2753     "custom",
2754     "custom element 152"
2755   },
2756   {
2757     "custom_153",
2758     "custom",
2759     "custom element 153"
2760   },
2761   {
2762     "custom_154",
2763     "custom",
2764     "custom element 154"
2765   },
2766   {
2767     "custom_155",
2768     "custom",
2769     "custom element 155"
2770   },
2771   {
2772     "custom_156",
2773     "custom",
2774     "custom element 156"
2775   },
2776   {
2777     "custom_157",
2778     "custom",
2779     "custom element 157"
2780   },
2781   {
2782     "custom_158",
2783     "custom",
2784     "custom element 158"
2785   },
2786   {
2787     "custom_159",
2788     "custom",
2789     "custom element 159"
2790   },
2791   {
2792     "custom_160",
2793     "custom",
2794     "custom element 160"
2795   },
2796   {
2797     "custom_161",
2798     "custom",
2799     "custom element 161"
2800   },
2801   {
2802     "custom_162",
2803     "custom",
2804     "custom element 162"
2805   },
2806   {
2807     "custom_163",
2808     "custom",
2809     "custom element 163"
2810   },
2811   {
2812     "custom_164",
2813     "custom",
2814     "custom element 164"
2815   },
2816   {
2817     "custom_165",
2818     "custom",
2819     "custom element 165"
2820   },
2821   {
2822     "custom_166",
2823     "custom",
2824     "custom element 166"
2825   },
2826   {
2827     "custom_167",
2828     "custom",
2829     "custom element 167"
2830   },
2831   {
2832     "custom_168",
2833     "custom",
2834     "custom element 168"
2835   },
2836   {
2837     "custom_169",
2838     "custom",
2839     "custom element 169"
2840   },
2841   {
2842     "custom_170",
2843     "custom",
2844     "custom element 170"
2845   },
2846   {
2847     "custom_171",
2848     "custom",
2849     "custom element 171"
2850   },
2851   {
2852     "custom_172",
2853     "custom",
2854     "custom element 172"
2855   },
2856   {
2857     "custom_173",
2858     "custom",
2859     "custom element 173"
2860   },
2861   {
2862     "custom_174",
2863     "custom",
2864     "custom element 174"
2865   },
2866   {
2867     "custom_175",
2868     "custom",
2869     "custom element 175"
2870   },
2871   {
2872     "custom_176",
2873     "custom",
2874     "custom element 176"
2875   },
2876   {
2877     "custom_177",
2878     "custom",
2879     "custom element 177"
2880   },
2881   {
2882     "custom_178",
2883     "custom",
2884     "custom element 178"
2885   },
2886   {
2887     "custom_179",
2888     "custom",
2889     "custom element 179"
2890   },
2891   {
2892     "custom_180",
2893     "custom",
2894     "custom element 180"
2895   },
2896   {
2897     "custom_181",
2898     "custom",
2899     "custom element 181"
2900   },
2901   {
2902     "custom_182",
2903     "custom",
2904     "custom element 182"
2905   },
2906   {
2907     "custom_183",
2908     "custom",
2909     "custom element 183"
2910   },
2911   {
2912     "custom_184",
2913     "custom",
2914     "custom element 184"
2915   },
2916   {
2917     "custom_185",
2918     "custom",
2919     "custom element 185"
2920   },
2921   {
2922     "custom_186",
2923     "custom",
2924     "custom element 186"
2925   },
2926   {
2927     "custom_187",
2928     "custom",
2929     "custom element 187"
2930   },
2931   {
2932     "custom_188",
2933     "custom",
2934     "custom element 188"
2935   },
2936   {
2937     "custom_189",
2938     "custom",
2939     "custom element 189"
2940   },
2941   {
2942     "custom_190",
2943     "custom",
2944     "custom element 190"
2945   },
2946   {
2947     "custom_191",
2948     "custom",
2949     "custom element 191"
2950   },
2951   {
2952     "custom_192",
2953     "custom",
2954     "custom element 192"
2955   },
2956   {
2957     "custom_193",
2958     "custom",
2959     "custom element 193"
2960   },
2961   {
2962     "custom_194",
2963     "custom",
2964     "custom element 194"
2965   },
2966   {
2967     "custom_195",
2968     "custom",
2969     "custom element 195"
2970   },
2971   {
2972     "custom_196",
2973     "custom",
2974     "custom element 196"
2975   },
2976   {
2977     "custom_197",
2978     "custom",
2979     "custom element 197"
2980   },
2981   {
2982     "custom_198",
2983     "custom",
2984     "custom element 198"
2985   },
2986   {
2987     "custom_199",
2988     "custom",
2989     "custom element 199"
2990   },
2991   {
2992     "custom_200",
2993     "custom",
2994     "custom element 200"
2995   },
2996   {
2997     "custom_201",
2998     "custom",
2999     "custom element 201"
3000   },
3001   {
3002     "custom_202",
3003     "custom",
3004     "custom element 202"
3005   },
3006   {
3007     "custom_203",
3008     "custom",
3009     "custom element 203"
3010   },
3011   {
3012     "custom_204",
3013     "custom",
3014     "custom element 204"
3015   },
3016   {
3017     "custom_205",
3018     "custom",
3019     "custom element 205"
3020   },
3021   {
3022     "custom_206",
3023     "custom",
3024     "custom element 206"
3025   },
3026   {
3027     "custom_207",
3028     "custom",
3029     "custom element 207"
3030   },
3031   {
3032     "custom_208",
3033     "custom",
3034     "custom element 208"
3035   },
3036   {
3037     "custom_209",
3038     "custom",
3039     "custom element 209"
3040   },
3041   {
3042     "custom_210",
3043     "custom",
3044     "custom element 210"
3045   },
3046   {
3047     "custom_211",
3048     "custom",
3049     "custom element 211"
3050   },
3051   {
3052     "custom_212",
3053     "custom",
3054     "custom element 212"
3055   },
3056   {
3057     "custom_213",
3058     "custom",
3059     "custom element 213"
3060   },
3061   {
3062     "custom_214",
3063     "custom",
3064     "custom element 214"
3065   },
3066   {
3067     "custom_215",
3068     "custom",
3069     "custom element 215"
3070   },
3071   {
3072     "custom_216",
3073     "custom",
3074     "custom element 216"
3075   },
3076   {
3077     "custom_217",
3078     "custom",
3079     "custom element 217"
3080   },
3081   {
3082     "custom_218",
3083     "custom",
3084     "custom element 218"
3085   },
3086   {
3087     "custom_219",
3088     "custom",
3089     "custom element 219"
3090   },
3091   {
3092     "custom_220",
3093     "custom",
3094     "custom element 220"
3095   },
3096   {
3097     "custom_221",
3098     "custom",
3099     "custom element 221"
3100   },
3101   {
3102     "custom_222",
3103     "custom",
3104     "custom element 222"
3105   },
3106   {
3107     "custom_223",
3108     "custom",
3109     "custom element 223"
3110   },
3111   {
3112     "custom_224",
3113     "custom",
3114     "custom element 224"
3115   },
3116   {
3117     "custom_225",
3118     "custom",
3119     "custom element 225"
3120   },
3121   {
3122     "custom_226",
3123     "custom",
3124     "custom element 226"
3125   },
3126   {
3127     "custom_227",
3128     "custom",
3129     "custom element 227"
3130   },
3131   {
3132     "custom_228",
3133     "custom",
3134     "custom element 228"
3135   },
3136   {
3137     "custom_229",
3138     "custom",
3139     "custom element 229"
3140   },
3141   {
3142     "custom_230",
3143     "custom",
3144     "custom element 230"
3145   },
3146   {
3147     "custom_231",
3148     "custom",
3149     "custom element 231"
3150   },
3151   {
3152     "custom_232",
3153     "custom",
3154     "custom element 232"
3155   },
3156   {
3157     "custom_233",
3158     "custom",
3159     "custom element 233"
3160   },
3161   {
3162     "custom_234",
3163     "custom",
3164     "custom element 234"
3165   },
3166   {
3167     "custom_235",
3168     "custom",
3169     "custom element 235"
3170   },
3171   {
3172     "custom_236",
3173     "custom",
3174     "custom element 236"
3175   },
3176   {
3177     "custom_237",
3178     "custom",
3179     "custom element 237"
3180   },
3181   {
3182     "custom_238",
3183     "custom",
3184     "custom element 238"
3185   },
3186   {
3187     "custom_239",
3188     "custom",
3189     "custom element 239"
3190   },
3191   {
3192     "custom_240",
3193     "custom",
3194     "custom element 240"
3195   },
3196   {
3197     "custom_241",
3198     "custom",
3199     "custom element 241"
3200   },
3201   {
3202     "custom_242",
3203     "custom",
3204     "custom element 242"
3205   },
3206   {
3207     "custom_243",
3208     "custom",
3209     "custom element 243"
3210   },
3211   {
3212     "custom_244",
3213     "custom",
3214     "custom element 244"
3215   },
3216   {
3217     "custom_245",
3218     "custom",
3219     "custom element 245"
3220   },
3221   {
3222     "custom_246",
3223     "custom",
3224     "custom element 246"
3225   },
3226   {
3227     "custom_247",
3228     "custom",
3229     "custom element 247"
3230   },
3231   {
3232     "custom_248",
3233     "custom",
3234     "custom element 248"
3235   },
3236   {
3237     "custom_249",
3238     "custom",
3239     "custom element 249"
3240   },
3241   {
3242     "custom_250",
3243     "custom",
3244     "custom element 250"
3245   },
3246   {
3247     "custom_251",
3248     "custom",
3249     "custom element 251"
3250   },
3251   {
3252     "custom_252",
3253     "custom",
3254     "custom element 252"
3255   },
3256   {
3257     "custom_253",
3258     "custom",
3259     "custom element 253"
3260   },
3261   {
3262     "custom_254",
3263     "custom",
3264     "custom element 254"
3265   },
3266   {
3267     "custom_255",
3268     "custom",
3269     "custom element 255"
3270   },
3271   {
3272     "custom_256",
3273     "custom",
3274     "custom element 256"
3275   },
3276   {
3277     "em_key_1",
3278     "key",
3279     "key 1 (EM style)"
3280     },
3281   {
3282     "em_key_2",
3283     "key",
3284     "key 2 (EM style)"
3285     },
3286   {
3287     "em_key_3",
3288     "key",
3289     "key 3 (EM style)"
3290   },
3291   {
3292     "em_key_4",
3293     "key",
3294     "key 4 (EM style)"
3295   },
3296   {
3297     "envelope_1",
3298     "envelope",
3299     "mail envelope 1"
3300   },
3301   {
3302     "envelope_2",
3303     "envelope",
3304     "mail envelope 2"
3305   },
3306   {
3307     "envelope_3",
3308     "envelope",
3309     "mail envelope 3"
3310   },
3311   {
3312     "envelope_4",
3313     "envelope",
3314     "mail envelope 4"
3315   },
3316   {
3317     "group_1",
3318     "group",
3319     "group element 1"
3320   },
3321   {
3322     "group_2",
3323     "group",
3324     "group element 2"
3325   },
3326   {
3327     "group_3",
3328     "group",
3329     "group element 3"
3330   },
3331   {
3332     "group_4",
3333     "group",
3334     "group element 4"
3335   },
3336   {
3337     "group_5",
3338     "group",
3339     "group element 5"
3340   },
3341   {
3342     "group_6",
3343     "group",
3344     "group element 6"
3345   },
3346   {
3347     "group_7",
3348     "group",
3349     "group element 7"
3350   },
3351   {
3352     "group_8",
3353     "group",
3354     "group element 8"
3355   },
3356   {
3357     "group_9",
3358     "group",
3359     "group element 9"
3360   },
3361   {
3362     "group_10",
3363     "group",
3364     "group element 10"
3365   },
3366   {
3367     "group_11",
3368     "group",
3369     "group element 11"
3370   },
3371   {
3372     "group_12",
3373     "group",
3374     "group element 12"
3375   },
3376   {
3377     "group_13",
3378     "group",
3379     "group element 13"
3380   },
3381   {
3382     "group_14",
3383     "group",
3384     "group element 14"
3385   },
3386   {
3387     "group_15",
3388     "group",
3389     "group element 15"
3390   },
3391   {
3392     "group_16",
3393     "group",
3394     "group element 16"
3395   },
3396   {
3397     "group_17",
3398     "group",
3399     "group element 17"
3400   },
3401   {
3402     "group_18",
3403     "group",
3404     "group element 18"
3405   },
3406   {
3407     "group_19",
3408     "group",
3409     "group element 19"
3410   },
3411   {
3412     "group_20",
3413     "group",
3414     "group element 20"
3415   },
3416   {
3417     "group_21",
3418     "group",
3419     "group element 21"
3420   },
3421   {
3422     "group_22",
3423     "group",
3424     "group element 22"
3425   },
3426   {
3427     "group_23",
3428     "group",
3429     "group element 23"
3430   },
3431   {
3432     "group_24",
3433     "group",
3434     "group element 24"
3435   },
3436   {
3437     "group_25",
3438     "group",
3439     "group element 25"
3440   },
3441   {
3442     "group_26",
3443     "group",
3444     "group element 26"
3445   },
3446   {
3447     "group_27",
3448     "group",
3449     "group element 27"
3450   },
3451   {
3452     "group_28",
3453     "group",
3454     "group element 28"
3455   },
3456   {
3457     "group_29",
3458     "group",
3459     "group element 29"
3460   },
3461   {
3462     "group_30",
3463     "group",
3464     "group element 30"
3465   },
3466   {
3467     "group_31",
3468     "group",
3469     "group element 31"
3470   },
3471   {
3472     "group_32",
3473     "group",
3474     "group element 32"
3475   },
3476   {
3477     "unknown",
3478     "unknown",
3479     "unknown element"
3480   },
3481   {
3482     "trigger_element",
3483     "trigger",
3484     "element triggering change"
3485   },
3486   {
3487     "trigger_player",
3488     "trigger",
3489     "player triggering change"
3490   },
3491   {
3492     "sp_gravity_on_port_right",
3493     "sp_gravity_on_port",
3494     "gravity-on port (leading right)"
3495   },
3496   {
3497     "sp_gravity_on_port_down",
3498     "sp_gravity_on_port",
3499     "gravity-on port (leading down)"
3500   },
3501   {
3502     "sp_gravity_on_port_left",
3503     "sp_gravity_on_port",
3504     "gravity-on port (leading left)"
3505   },
3506   {
3507     "sp_gravity_on_port_up",
3508     "sp_gravity_on_port",
3509     "gravity-on port (leading up)"
3510   },
3511   {
3512     "sp_gravity_off_port_right",
3513     "sp_gravity_off_port",
3514     "gravity-off port (leading right)"
3515   },
3516   {
3517     "sp_gravity_off_port_down",
3518     "sp_gravity_off_port",
3519     "gravity-off port (leading down)"
3520   },
3521   {
3522     "sp_gravity_off_port_left",
3523     "sp_gravity_off_port",
3524     "gravity-off port (leading left)"
3525   },
3526   {
3527     "sp_gravity_off_port_up",
3528     "sp_gravity_off_port",
3529     "gravity-off port (leading up)"
3530   },
3531   {
3532     "balloon_switch_none",
3533     "balloon_switch",
3534     "wind switch (off)"
3535   },
3536   {
3537     "emc_gate_5",
3538     "gate",
3539     "door 5 (EMC style)",
3540   },
3541   {
3542     "emc_gate_6",
3543     "gate",
3544     "door 6 (EMC style)",
3545   },
3546   {
3547     "emc_gate_7",
3548     "gate",
3549     "door 7 (EMC style)",
3550   },
3551   {
3552     "emc_gate_8",
3553     "gate",
3554     "door 8 (EMC style)",
3555   },
3556   {
3557     "emc_gate_5_gray",
3558     "gate",
3559     "gray door (EMC style, key 5)",
3560   },
3561   {
3562     "emc_gate_6_gray",
3563     "gate",
3564     "gray door (EMC style, key 6)",
3565   },
3566   {
3567     "emc_gate_7_gray",
3568     "gate",
3569     "gray door (EMC style, key 7)",
3570   },
3571   {
3572     "emc_gate_8_gray",
3573     "gate",
3574     "gray door (EMC style, key 8)",
3575   },
3576   {
3577     "emc_key_5",
3578     "key",
3579     "key 5 (EMC style)",
3580   },
3581   {
3582     "emc_key_6",
3583     "key",
3584     "key 6 (EMC style)",
3585   },
3586   {
3587     "emc_key_7",
3588     "key",
3589     "key 7 (EMC style)",
3590   },
3591   {
3592     "emc_key_8",
3593     "key",
3594     "key 8 (EMC style)",
3595   },
3596   {
3597     "emc_android",
3598     "emc_android",
3599     "android",
3600   },
3601   {
3602     "emc_grass",
3603     "emc_grass",
3604     "grass",
3605   },
3606   {
3607     "emc_magic_ball",
3608     "emc_magic_ball",
3609     "magic ball",
3610   },
3611   {
3612     "emc_magic_ball.active",
3613     "emc_magic_ball",
3614     "magic ball (activated)",
3615   },
3616   {
3617     "emc_magic_ball_switch",
3618     "emc_magic_ball_switch",
3619     "magic ball switch (off)",
3620   },
3621   {
3622     "emc_magic_ball_switch.active",
3623     "emc_magic_ball_switch",
3624     "magic ball switch (on)",
3625   },
3626   {
3627     "emc_spring_bumper",
3628     "emc_spring_bumper",
3629     "spring bumper",
3630   },
3631   {
3632     "emc_plant",
3633     "emc_plant",
3634     "plant",
3635   },
3636   {
3637     "emc_lenses",
3638     "emc_lenses",
3639     "lenses",
3640   },
3641   {
3642     "emc_magnifier",
3643     "emc_magnifier",
3644     "magnifier",
3645   },
3646   {
3647     "emc_wall_9",
3648     "wall",
3649     "normal wall"
3650   },
3651   {
3652     "emc_wall_10",
3653     "wall",
3654     "normal wall"
3655   },
3656   {
3657     "emc_wall_11",
3658     "wall",
3659     "normal wall"
3660   },
3661   {
3662     "emc_wall_12",
3663     "wall",
3664     "normal wall"
3665   },
3666   {
3667     "emc_wall_13",
3668     "wall",
3669     "normal wall"
3670   },
3671   {
3672     "emc_wall_14",
3673     "wall",
3674     "normal wall"
3675   },
3676   {
3677     "emc_wall_15",
3678     "wall",
3679     "normal wall"
3680   },
3681   {
3682     "emc_wall_16",
3683     "wall",
3684     "normal wall"
3685   },
3686   {
3687     "emc_wall_slippery_1",
3688     "wall",
3689     "slippery wall"
3690   },
3691   {
3692     "emc_wall_slippery_2",
3693     "wall",
3694     "slippery wall"
3695   },
3696   {
3697     "emc_wall_slippery_3",
3698     "wall",
3699     "slippery wall"
3700   },
3701   {
3702     "emc_wall_slippery_4",
3703     "wall",
3704     "slippery wall"
3705   },
3706   {
3707     "emc_fake_grass",
3708     "fake_grass",
3709     "fake grass"
3710   },
3711   {
3712     "emc_fake_acid",
3713     "fake_acid",
3714     "fake acid"
3715   },
3716   {
3717     "emc_dripper",
3718     "dripper",
3719     "dripper"
3720   },
3721   {
3722     "trigger_ce_value",
3723     "trigger",
3724     "CE value of element triggering change"
3725   },
3726   {
3727     "trigger_ce_score",
3728     "trigger",
3729     "CE score of element triggering change"
3730   },
3731   {
3732     "current_ce_value",
3733     "current",
3734     "CE value of current element"
3735   },
3736   {
3737     "current_ce_score",
3738     "current",
3739     "CE score of current element"
3740   },
3741   {
3742     "yamyam.left",
3743     "yamyam",
3744     "yam yam (starts moving left)"
3745   },
3746   {
3747     "yamyam.right",
3748     "yamyam",
3749     "yam yam (starts moving right)"
3750   },
3751   {
3752     "yamyam.up",
3753     "yamyam",
3754     "yam yam (starts moving up)"
3755   },
3756   {
3757     "yamyam.down",
3758     "yamyam",
3759     "yam yam (starts moving down)"
3760   },
3761   {
3762     "bd_expandable_wall",
3763     "wall",
3764     "growing wall (horizontal, BD style)"
3765   },
3766   {
3767     "prev_ce_8",
3768     "prev_ce",
3769     "CE 8 positions earlier in list"
3770   },
3771   {
3772     "prev_ce_7",
3773     "prev_ce",
3774     "CE 7 positions earlier in list"
3775   },
3776   {
3777     "prev_ce_6",
3778     "prev_ce",
3779     "CE 6 positions earlier in list"
3780   },
3781   {
3782     "prev_ce_5",
3783     "prev_ce",
3784     "CE 5 positions earlier in list"
3785   },
3786   {
3787     "prev_ce_4",
3788     "prev_ce",
3789     "CE 4 positions earlier in list"
3790   },
3791   {
3792     "prev_ce_3",
3793     "prev_ce",
3794     "CE 3 positions earlier in list"
3795   },
3796   {
3797     "prev_ce_2",
3798     "prev_ce",
3799     "CE 2 positions earlier in list"
3800   },
3801   {
3802     "prev_ce_1",
3803     "prev_ce",
3804     "CE 1 position earlier in list"
3805   },
3806   {
3807     "self",
3808     "self",
3809     "the current custom element"
3810   },
3811   {
3812     "next_ce_1",
3813     "next_ce",
3814     "CE 1 position later in list"
3815   },
3816   {
3817     "next_ce_2",
3818     "next_ce",
3819     "CE 2 positions later in list"
3820   },
3821   {
3822     "next_ce_3",
3823     "next_ce",
3824     "CE 3 positions later in list"
3825   },
3826   {
3827     "next_ce_4",
3828     "next_ce",
3829     "CE 4 positions later in list"
3830   },
3831   {
3832     "next_ce_5",
3833     "next_ce",
3834     "CE 5 positions later in list"
3835   },
3836   {
3837     "next_ce_6",
3838     "next_ce",
3839     "CE 6 positions later in list"
3840   },
3841   {
3842     "next_ce_7",
3843     "next_ce",
3844     "CE 7 positions later in list"
3845   },
3846   {
3847     "next_ce_8",
3848     "next_ce",
3849     "CE 8 positions later in list"
3850   },
3851   {
3852     "any_element",
3853     "any_element",
3854     "this element matches any element"
3855   },
3856   {
3857     "steel_char_space",
3858     "steel_char",
3859     "steel letter ' '"
3860   },
3861   {
3862     "steel_char_exclam",
3863     "steel_char",
3864     "steel letter '!'"
3865   },
3866   {
3867     "steel_char_quotedbl",
3868     "steel_char",
3869     "steel letter '\"'"
3870   },
3871   {
3872     "steel_char_numbersign",
3873     "steel_char",
3874     "steel letter '#'"
3875   },
3876   {
3877     "steel_char_dollar",
3878     "steel_char",
3879     "steel letter '$'"
3880   },
3881   {
3882     "steel_char_percent",
3883     "steel_char",
3884     "steel letter '%'"
3885   },
3886   {
3887     "steel_char_ampersand",
3888     "steel_char",
3889     "steel letter '&'"
3890   },
3891   {
3892     "steel_char_apostrophe",
3893     "steel_char",
3894     "steel letter '''"
3895   },
3896   {
3897     "steel_char_parenleft",
3898     "steel_char",
3899     "steel letter '('"
3900   },
3901   {
3902     "steel_char_parenright",
3903     "steel_char",
3904     "steel letter ')'"
3905   },
3906   {
3907     "steel_char_asterisk",
3908     "steel_char",
3909     "steel letter '*'"
3910   },
3911   {
3912     "steel_char_plus",
3913     "steel_char",
3914     "steel letter '+'"
3915   },
3916   {
3917     "steel_char_comma",
3918     "steel_char",
3919     "steel letter ','"
3920   },
3921   {
3922     "steel_char_minus",
3923     "steel_char",
3924     "steel letter '-'"
3925   },
3926   {
3927     "steel_char_period",
3928     "steel_char",
3929     "steel letter '.'"
3930   },
3931   {
3932     "steel_char_slash",
3933     "steel_char",
3934     "steel letter '/'"
3935   },
3936   {
3937     "steel_char_0",
3938     "steel_char",
3939     "steel letter '0'"
3940   },
3941   {
3942     "steel_char_1",
3943     "steel_char",
3944     "steel letter '1'"
3945   },
3946   {
3947     "steel_char_2",
3948     "steel_char",
3949     "steel letter '2'"
3950   },
3951   {
3952     "steel_char_3",
3953     "steel_char",
3954     "steel letter '3'"
3955   },
3956   {
3957     "steel_char_4",
3958     "steel_char",
3959     "steel letter '4'"
3960   },
3961   {
3962     "steel_char_5",
3963     "steel_char",
3964     "steel letter '5'"
3965   },
3966   {
3967     "steel_char_6",
3968     "steel_char",
3969     "steel letter '6'"
3970   },
3971   {
3972     "steel_char_7",
3973     "steel_char",
3974     "steel letter '7'"
3975   },
3976   {
3977     "steel_char_8",
3978     "steel_char",
3979     "steel letter '8'"
3980   },
3981   {
3982     "steel_char_9",
3983     "steel_char",
3984     "steel letter '9'"
3985   },
3986   {
3987     "steel_char_colon",
3988     "steel_char",
3989     "steel letter ':'"
3990   },
3991   {
3992     "steel_char_semicolon",
3993     "steel_char",
3994     "steel letter ';'"
3995   },
3996   {
3997     "steel_char_less",
3998     "steel_char",
3999     "steel letter '<'"
4000   },
4001   {
4002     "steel_char_equal",
4003     "steel_char",
4004     "steel letter '='"
4005   },
4006   {
4007     "steel_char_greater",
4008     "steel_char",
4009     "steel letter '>'"
4010   },
4011   {
4012     "steel_char_question",
4013     "steel_char",
4014     "steel letter '?'"
4015   },
4016   {
4017     "steel_char_at",
4018     "steel_char",
4019     "steel letter '@'"
4020   },
4021   {
4022     "steel_char_a",
4023     "steel_char",
4024     "steel letter 'A'"
4025   },
4026   {
4027     "steel_char_b",
4028     "steel_char",
4029     "steel letter 'B'"
4030   },
4031   {
4032     "steel_char_c",
4033     "steel_char",
4034     "steel letter 'C'"
4035   },
4036   {
4037     "steel_char_d",
4038     "steel_char",
4039     "steel letter 'D'"
4040   },
4041   {
4042     "steel_char_e",
4043     "steel_char",
4044     "steel letter 'E'"
4045   },
4046   {
4047     "steel_char_f",
4048     "steel_char",
4049     "steel letter 'F'"
4050   },
4051   {
4052     "steel_char_g",
4053     "steel_char",
4054     "steel letter 'G'"
4055   },
4056   {
4057     "steel_char_h",
4058     "steel_char",
4059     "steel letter 'H'"
4060   },
4061   {
4062     "steel_char_i",
4063     "steel_char",
4064     "steel letter 'I'"
4065   },
4066   {
4067     "steel_char_j",
4068     "steel_char",
4069     "steel letter 'J'"
4070   },
4071   {
4072     "steel_char_k",
4073     "steel_char",
4074     "steel letter 'K'"
4075   },
4076   {
4077     "steel_char_l",
4078     "steel_char",
4079     "steel letter 'L'"
4080   },
4081   {
4082     "steel_char_m",
4083     "steel_char",
4084     "steel letter 'M'"
4085   },
4086   {
4087     "steel_char_n",
4088     "steel_char",
4089     "steel letter 'N'"
4090   },
4091   {
4092     "steel_char_o",
4093     "steel_char",
4094     "steel letter 'O'"
4095   },
4096   {
4097     "steel_char_p",
4098     "steel_char",
4099     "steel letter 'P'"
4100   },
4101   {
4102     "steel_char_q",
4103     "steel_char",
4104     "steel letter 'Q'"
4105   },
4106   {
4107     "steel_char_r",
4108     "steel_char",
4109     "steel letter 'R'"
4110   },
4111   {
4112     "steel_char_s",
4113     "steel_char",
4114     "steel letter 'S'"
4115   },
4116   {
4117     "steel_char_t",
4118     "steel_char",
4119     "steel letter 'T'"
4120   },
4121   {
4122     "steel_char_u",
4123     "steel_char",
4124     "steel letter 'U'"
4125   },
4126   {
4127     "steel_char_v",
4128     "steel_char",
4129     "steel letter 'V'"
4130   },
4131   {
4132     "steel_char_w",
4133     "steel_char",
4134     "steel letter 'W'"
4135   },
4136   {
4137     "steel_char_x",
4138     "steel_char",
4139     "steel letter 'X'"
4140   },
4141   {
4142     "steel_char_y",
4143     "steel_char",
4144     "steel letter 'Y'"
4145   },
4146   {
4147     "steel_char_z",
4148     "steel_char",
4149     "steel letter 'Z'"
4150   },
4151   {
4152     "steel_char_bracketleft",
4153     "steel_char",
4154     "steel letter '['"
4155   },
4156   {
4157     "steel_char_backslash",
4158     "steel_char",
4159     "steel letter '\\'"
4160   },
4161   {
4162     "steel_char_bracketright",
4163     "steel_char",
4164     "steel letter ']'"
4165   },
4166   {
4167     "steel_char_asciicircum",
4168     "steel_char",
4169     "steel letter '^'"
4170   },
4171   {
4172     "steel_char_underscore",
4173     "steel_char",
4174     "steel letter '_'"
4175   },
4176   {
4177     "steel_char_copyright",
4178     "steel_char",
4179     "steel letter '\xa9'"
4180   },
4181   {
4182     "steel_char_aumlaut",
4183     "steel_char",
4184     "steel letter '\xc4'"
4185   },
4186   {
4187     "steel_char_oumlaut",
4188     "steel_char",
4189     "steel letter '\xd6'"
4190   },
4191   {
4192     "steel_char_uumlaut",
4193     "steel_char",
4194     "steel letter '\xdc'"
4195   },
4196   {
4197     "steel_char_degree",
4198     "steel_char",
4199     "steel letter '\xb0'"
4200   },
4201   {
4202     "steel_char_trademark",
4203     "steel_char",
4204     "steel letter '\xae'"
4205   },
4206   {
4207     "steel_char_cursor",
4208     "steel_char",
4209     "steel letter '\xa0'"
4210   },
4211   {
4212     "steel_char_unused",
4213     "steel_char",
4214     "steel letter ''"
4215   },
4216   {
4217     "steel_char_unused",
4218     "steel_char",
4219     "steel letter ''"
4220   },
4221   {
4222     "steel_char_unused",
4223     "steel_char",
4224     "steel letter ''"
4225   },
4226   {
4227     "steel_char_unused",
4228     "steel_char",
4229     "steel letter ''"
4230   },
4231   {
4232     "steel_char_unused",
4233     "steel_char",
4234     "steel letter ''"
4235   },
4236   {
4237     "steel_char_unused",
4238     "steel_char",
4239     "steel letter ''"
4240   },
4241   {
4242     "steel_char_unused",
4243     "steel_char",
4244     "steel letter 'button'"
4245   },
4246   {
4247     "steel_char_unused",
4248     "steel_char",
4249     "steel letter 'up'"
4250   },
4251   {
4252     "steel_char_unused",
4253     "steel_char",
4254     "steel letter 'down'"
4255   },
4256   {
4257     "sperms",
4258     "frankie",
4259     "sperms"
4260   },
4261   {
4262     "bullet",
4263     "frankie",
4264     "bullet"
4265   },
4266   {
4267     "heart",
4268     "frankie",
4269     "heart"
4270   },
4271   {
4272     "cross",
4273     "frankie",
4274     "cross"
4275   },
4276   {
4277     "frankie",
4278     "frankie",
4279     "frankie"
4280   },
4281   {
4282     "sign_sperms",
4283     "sign",
4284     "sign (sperms)"
4285   },
4286   {
4287     "sign_bullet",
4288     "sign",
4289     "sign (bullet)"
4290   },
4291   {
4292     "sign_heart",
4293     "sign",
4294     "sign (heart)"
4295   },
4296   {
4297     "sign_cross",
4298     "sign",
4299     "sign (cross)"
4300   },
4301   {
4302     "sign_frankie",
4303     "sign",
4304     "sign (frankie)"
4305   },
4306   {
4307     "steel_exit_closed",
4308     "steel_exit",
4309     "closed steel exit"
4310   },
4311   {
4312     "steel_exit_open",
4313     "steel_exit",
4314     "open steel exit"
4315   },
4316   {
4317     "dc_steelwall_1_left",
4318     "steelwall",
4319     "steel wall (left)"
4320   },
4321   {
4322     "dc_steelwall_1_right",
4323     "steelwall",
4324     "steel wall (right)"
4325   },
4326   {
4327     "dc_steelwall_1_top",
4328     "steelwall",
4329     "steel wall (top)"
4330   },
4331   {
4332     "dc_steelwall_1_bottom",
4333     "steelwall",
4334     "steel wall (bottom)"
4335   },
4336   {
4337     "dc_steelwall_1_horizontal",
4338     "steelwall",
4339     "steel wall (top/bottom)"
4340   },
4341   {
4342     "dc_steelwall_1_vertical",
4343     "steelwall",
4344     "steel wall (left/right)"
4345   },
4346   {
4347     "dc_steelwall_1_topleft",
4348     "steelwall",
4349     "steel wall (top/left)"
4350   },
4351   {
4352     "dc_steelwall_1_topright",
4353     "steelwall",
4354     "steel wall (top/right)"
4355   },
4356   {
4357     "dc_steelwall_1_bottomleft",
4358     "steelwall",
4359     "steel wall (bottom/left)"
4360   },
4361   {
4362     "dc_steelwall_1_bottomright",
4363     "steelwall",
4364     "steel wall (bottom/right)"
4365   },
4366   {
4367     "dc_steelwall_1_topleft_2",
4368     "steelwall",
4369     "steel wall (top/left corner)"
4370   },
4371   {
4372     "dc_steelwall_1_topright_2",
4373     "steelwall",
4374     "steel wall (top/right corner)"
4375   },
4376   {
4377     "dc_steelwall_1_bottomleft_2",
4378     "steelwall",
4379     "steel wall (bottom/left corner)"
4380   },
4381   {
4382     "dc_steelwall_1_bottomright_2",
4383     "steelwall",
4384     "steel wall (bottom/right corner)"
4385   },
4386   {
4387     "dc_steelwall_2_left",
4388     "steelwall",
4389     "steel wall (left)"
4390   },
4391   {
4392     "dc_steelwall_2_right",
4393     "steelwall",
4394     "steel wall (right)"
4395   },
4396   {
4397     "dc_steelwall_2_top",
4398     "steelwall",
4399     "steel wall (top)"
4400   },
4401   {
4402     "dc_steelwall_2_bottom",
4403     "steelwall",
4404     "steel wall (bottom)"
4405   },
4406   {
4407     "dc_steelwall_2_horizontal",
4408     "steelwall",
4409     "steel wall (horizontal)"
4410   },
4411   {
4412     "dc_steelwall_2_vertical",
4413     "steelwall",
4414     "steel wall (vertical)"
4415   },
4416   {
4417     "dc_steelwall_2_middle",
4418     "steelwall",
4419     "steel wall (middle)"
4420   },
4421   {
4422     "dc_steelwall_2_single",
4423     "steelwall",
4424     "steel wall (single)"
4425   },
4426   {
4427     "dc_switchgate_switch_up",
4428     "switchgate_switch",
4429     "switch for switch gate (steel)"
4430   },
4431   {
4432     "dc_switchgate_switch_down",
4433     "switchgate_switch",
4434     "switch for switch gate (steel)"
4435   },
4436   {
4437     "dc_timegate_switch",
4438     "timegate_switch",
4439     "switch for time gate (steel)"
4440   },
4441   {
4442     "dc_timegate_switch.active",
4443     "timegate_switch",
4444     "switch for time gate (steel)"
4445   },
4446   {
4447     "dc_landmine",
4448     "dc_landmine",
4449     "land mine (DC style, removable)"
4450   },
4451   {
4452     "expandable_steelwall",
4453     "steelwall",
4454     "growing steel wall"
4455   },
4456   {
4457     "expandable_steelwall_horizontal",
4458     "steelwall",
4459     "growing steel wall (horizontal)"
4460   },
4461   {
4462     "expandable_steelwall_vertical",
4463     "steelwall",
4464     "growing steel wall (vertical)"
4465   },
4466   {
4467     "expandable_steelwall_any",
4468     "steelwall",
4469     "growing steel wall (any direction)"
4470   },
4471   {
4472     "em_exit_closed",
4473     "em_exit",
4474     "closed exit (EM style)"
4475   },
4476   {
4477     "em_exit_open",
4478     "em_exit",
4479     "open exit (EM style)"
4480   },
4481   {
4482     "em_steel_exit_closed",
4483     "em_steel_exit",
4484     "closed steel exit (EM style)"
4485   },
4486   {
4487     "em_steel_exit_open",
4488     "em_steel_exit",
4489     "open steel exit (EM style)"
4490   },
4491   {
4492     "dc_gate_fake_gray",
4493     "gate",
4494     "gray door (opened by no key)"
4495   },
4496   {
4497     "dc_magic_wall",
4498     "dc_magic_wall",
4499     "magic wall (DC style)"
4500   },
4501   {
4502     "quicksand_fast_empty",
4503     "quicksand",
4504     "fast quicksand (empty)"
4505   },
4506   {
4507     "quicksand_fast_full",
4508     "quicksand",
4509     "fast quicksand (with rock)"
4510   },
4511   {
4512     "from_level_template",
4513     "from_level_template",
4514     "element taken from level template"
4515   },
4516   {
4517     "mm_empty_space",
4518     "empty_space",
4519     "empty space"
4520   },
4521   {
4522     "mm_mirror_1",
4523     "mm_mirror",
4524     "mirror (0\xb0)"
4525   },
4526   {
4527     "mm_mirror_2",
4528     "mm_mirror",
4529     "mirror (11.25\xb0)"
4530   },
4531   {
4532     "mm_mirror_3",
4533     "mm_mirror",
4534     "mirror (22.5\xb0)"
4535   },
4536   {
4537     "mm_mirror_4",
4538     "mm_mirror",
4539     "mirror (33.75\xb0)"
4540   },
4541   {
4542     "mm_mirror_5",
4543     "mm_mirror",
4544     "mirror (45\xb0)"
4545   },
4546   {
4547     "mm_mirror_6",
4548     "mm_mirror",
4549     "mirror (56.25\xb0)"
4550   },
4551   {
4552     "mm_mirror_7",
4553     "mm_mirror",
4554     "mirror (67.5\xb0)"
4555   },
4556   {
4557     "mm_mirror_8",
4558     "mm_mirror",
4559     "mirror (78.75\xb0)"
4560   },
4561   {
4562     "mm_mirror_9",
4563     "mm_mirror",
4564     "mirror (90\xb0)"
4565   },
4566   {
4567     "mm_mirror_10",
4568     "mm_mirror",
4569     "mirror (101.25\xb0)"
4570   },
4571   {
4572     "mm_mirror_11",
4573     "mm_mirror",
4574     "mirror (112.5\xb0)"
4575   },
4576   {
4577     "mm_mirror_12",
4578     "mm_mirror",
4579     "mirror (123.75\xb0)"
4580   },
4581   {
4582     "mm_mirror_13",
4583     "mm_mirror",
4584     "mirror (135\xb0)"
4585   },
4586   {
4587     "mm_mirror_14",
4588     "mm_mirror",
4589     "mirror (146.25\xb0)"
4590   },
4591   {
4592     "mm_mirror_15",
4593     "mm_mirror",
4594     "mirror (157.5\xb0)"
4595   },
4596   {
4597     "mm_mirror_16",
4598     "mm_mirror",
4599     "mirror (168.75\xb0)"
4600   },
4601   {
4602     "mm_steel_grid_fixed_1",
4603     "mm_steel_grid_fixed",
4604     "fixed steel polarizer (0\xb0)"
4605   },
4606   {
4607     "mm_steel_grid_fixed_2",
4608     "mm_steel_grid_fixed",
4609     "fixed steel polarizer (90\xb0)"
4610   },
4611   {
4612     "mm_steel_grid_fixed_3",
4613     "mm_steel_grid_fixed",
4614     "fixed steel polarizer (45\xb0)"
4615   },
4616   {
4617     "mm_steel_grid_fixed_4",
4618     "mm_steel_grid_fixed",
4619     "fixed steel polarizer (135\xb0)"
4620   },
4621   {
4622     "mm_mcduffin.right",
4623     "mm_mcduffin",
4624     "Gregor McDuffin (looking right)"
4625   },
4626   {
4627     "mm_mcduffin.up",
4628     "mm_mcduffin",
4629     "Gregor McDuffin (looking up)"
4630   },
4631   {
4632     "mm_mcduffin.left",
4633     "mm_mcduffin",
4634     "Gregor McDuffin (looking left)"
4635   },
4636   {
4637     "mm_mcduffin.down",
4638     "mm_mcduffin",
4639     "Gregor McDuffin (looking down)"
4640   },
4641   {
4642     "mm_exit_closed",
4643     "mm_exit",
4644     "closed exit (MM style)"
4645   },
4646   {
4647     "mm_exit_opening_1",
4648     "mm_exit",
4649     "opening exit 1"
4650   },
4651   {
4652     "mm_exit_opening_2",
4653     "mm_exit",
4654     "opening exit 2"
4655   },
4656   {
4657     "mm_exit_open",
4658     "mm_exit",
4659     "open exit (MM style)"
4660   },
4661   {
4662     "mm_kettle",
4663     "mm_kettle",
4664     "magic kettle"
4665   },
4666   {
4667     "mm_bomb",
4668     "mm_bomb",
4669     "bomb (MM style)"
4670   },
4671   {
4672     "mm_prism",
4673     "mm_prism",
4674     "prism"
4675   },
4676   {
4677     "mm_steel_wall_1",
4678     "mm_steel_wall",
4679     "steel wall"
4680   },
4681   {
4682     "mm_steel_wall_2",
4683     "mm_steel_wall",
4684     "steel wall"
4685   },
4686   {
4687     "mm_steel_wall_3",
4688     "mm_steel_wall",
4689     "steel wall"
4690   },
4691   {
4692     "mm_steel_wall_4",
4693     "mm_steel_wall",
4694     "steel wall"
4695   },
4696   {
4697     "mm_steel_wall_5",
4698     "mm_steel_wall",
4699     "steel wall"
4700   },
4701   {
4702     "mm_steel_wall_6",
4703     "mm_steel_wall",
4704     "steel wall"
4705   },
4706   {
4707     "mm_steel_wall_7",
4708     "mm_steel_wall",
4709     "steel wall"
4710   },
4711   {
4712     "mm_steel_wall_8",
4713     "mm_steel_wall",
4714     "steel wall"
4715   },
4716   {
4717     "mm_steel_wall_9",
4718     "mm_steel_wall",
4719     "steel wall"
4720   },
4721   {
4722     "mm_steel_wall_10",
4723     "mm_steel_wall",
4724     "steel wall"
4725   },
4726   {
4727     "mm_steel_wall_11",
4728     "mm_steel_wall",
4729     "steel wall"
4730   },
4731   {
4732     "mm_steel_wall_12",
4733     "mm_steel_wall",
4734     "steel wall"
4735   },
4736   {
4737     "mm_steel_wall_13",
4738     "mm_steel_wall",
4739     "steel wall"
4740   },
4741   {
4742     "mm_steel_wall_14",
4743     "mm_steel_wall",
4744     "steel wall"
4745   },
4746   {
4747     "mm_steel_wall_15",
4748     "mm_steel_wall",
4749     "steel wall"
4750   },
4751   {
4752     "mm_steel_wall_16",
4753     "mm_steel_wall",
4754     "steel wall"
4755   },
4756   {
4757     "mm_wooden_wall_1",
4758     "mm_wooden_wall",
4759     "wooden wall"
4760   },
4761   {
4762     "mm_wooden_wall_2",
4763     "mm_wooden_wall",
4764     "wooden wall"
4765   },
4766   {
4767     "mm_wooden_wall_3",
4768     "mm_wooden_wall",
4769     "wooden wall"
4770   },
4771   {
4772     "mm_wooden_wall_4",
4773     "mm_wooden_wall",
4774     "wooden wall"
4775   },
4776   {
4777     "mm_wooden_wall_5",
4778     "mm_wooden_wall",
4779     "wooden wall"
4780   },
4781   {
4782     "mm_wooden_wall_6",
4783     "mm_wooden_wall",
4784     "wooden wall"
4785   },
4786   {
4787     "mm_wooden_wall_7",
4788     "mm_wooden_wall",
4789     "wooden wall"
4790   },
4791   {
4792     "mm_wooden_wall_8",
4793     "mm_wooden_wall",
4794     "wooden wall"
4795   },
4796   {
4797     "mm_wooden_wall_9",
4798     "mm_wooden_wall",
4799     "wooden wall"
4800   },
4801   {
4802     "mm_wooden_wall_10",
4803     "mm_wooden_wall",
4804     "wooden wall"
4805   },
4806   {
4807     "mm_wooden_wall_11",
4808     "mm_wooden_wall",
4809     "wooden wall"
4810   },
4811   {
4812     "mm_wooden_wall_12",
4813     "mm_wooden_wall",
4814     "wooden wall"
4815   },
4816   {
4817     "mm_wooden_wall_13",
4818     "mm_wooden_wall",
4819     "wooden wall"
4820   },
4821   {
4822     "mm_wooden_wall_14",
4823     "mm_wooden_wall",
4824     "wooden wall"
4825   },
4826   {
4827     "mm_wooden_wall_15",
4828     "mm_wooden_wall",
4829     "wooden wall"
4830   },
4831   {
4832     "mm_wooden_wall_16",
4833     "mm_wooden_wall",
4834     "wooden wall"
4835   },
4836   {
4837     "mm_ice_wall_1",
4838     "mm_ice_wall",
4839     "ice wall"
4840   },
4841   {
4842     "mm_ice_wall_2",
4843     "mm_ice_wall",
4844     "ice wall"
4845   },
4846   {
4847     "mm_ice_wall_3",
4848     "mm_ice_wall",
4849     "ice wall"
4850   },
4851   {
4852     "mm_ice_wall_4",
4853     "mm_ice_wall",
4854     "ice wall"
4855   },
4856   {
4857     "mm_ice_wall_5",
4858     "mm_ice_wall",
4859     "ice wall"
4860   },
4861   {
4862     "mm_ice_wall_6",
4863     "mm_ice_wall",
4864     "ice wall"
4865   },
4866   {
4867     "mm_ice_wall_7",
4868     "mm_ice_wall",
4869     "ice wall"
4870   },
4871   {
4872     "mm_ice_wall_8",
4873     "mm_ice_wall",
4874     "ice wall"
4875   },
4876   {
4877     "mm_ice_wall_9",
4878     "mm_ice_wall",
4879     "ice wall"
4880   },
4881   {
4882     "mm_ice_wall_10",
4883     "mm_ice_wall",
4884     "ice wall"
4885   },
4886   {
4887     "mm_ice_wall_11",
4888     "mm_ice_wall",
4889     "ice wall"
4890   },
4891   {
4892     "mm_ice_wall_12",
4893     "mm_ice_wall",
4894     "ice wall"
4895   },
4896   {
4897     "mm_ice_wall_13",
4898     "mm_ice_wall",
4899     "ice wall"
4900   },
4901   {
4902     "mm_ice_wall_14",
4903     "mm_ice_wall",
4904     "ice wall"
4905   },
4906   {
4907     "mm_ice_wall_15",
4908     "mm_ice_wall",
4909     "ice wall"
4910   },
4911   {
4912     "mm_ice_wall_16",
4913     "mm_ice_wall",
4914     "ice wall"
4915   },
4916   {
4917     "mm_amoeba_wall_1",
4918     "mm_amoeba_wall",
4919     "amoeba wall"
4920   },
4921   {
4922     "mm_amoeba_wall_2",
4923     "mm_amoeba_wall",
4924     "amoeba wall"
4925   },
4926   {
4927     "mm_amoeba_wall_3",
4928     "mm_amoeba_wall",
4929     "amoeba wall"
4930   },
4931   {
4932     "mm_amoeba_wall_4",
4933     "mm_amoeba_wall",
4934     "amoeba wall"
4935   },
4936   {
4937     "mm_amoeba_wall_5",
4938     "mm_amoeba_wall",
4939     "amoeba wall"
4940   },
4941   {
4942     "mm_amoeba_wall_6",
4943     "mm_amoeba_wall",
4944     "amoeba wall"
4945   },
4946   {
4947     "mm_amoeba_wall_7",
4948     "mm_amoeba_wall",
4949     "amoeba wall"
4950   },
4951   {
4952     "mm_amoeba_wall_8",
4953     "mm_amoeba_wall",
4954     "amoeba wall"
4955   },
4956   {
4957     "mm_amoeba_wall_9",
4958     "mm_amoeba_wall",
4959     "amoeba wall"
4960   },
4961   {
4962     "mm_amoeba_wall_10",
4963     "mm_amoeba_wall",
4964     "amoeba wall"
4965   },
4966   {
4967     "mm_amoeba_wall_11",
4968     "mm_amoeba_wall",
4969     "amoeba wall"
4970   },
4971   {
4972     "mm_amoeba_wall_12",
4973     "mm_amoeba_wall",
4974     "amoeba wall"
4975   },
4976   {
4977     "mm_amoeba_wall_13",
4978     "mm_amoeba_wall",
4979     "amoeba wall"
4980   },
4981   {
4982     "mm_amoeba_wall_14",
4983     "mm_amoeba_wall",
4984     "amoeba wall"
4985   },
4986   {
4987     "mm_amoeba_wall_15",
4988     "mm_amoeba_wall",
4989     "amoeba wall"
4990   },
4991   {
4992     "mm_amoeba_wall_16",
4993     "mm_amoeba_wall",
4994     "amoeba wall"
4995   },
4996   {
4997     "mm_wooden_block",
4998     "mm_wooden_block",
4999     "wooden block"
5000   },
5001   {
5002     "mm_gray_ball",
5003     "mm_gray_ball",
5004     "gray ball"
5005   },
5006   {
5007     "mm_teleporter_1",
5008     "mm_teleporter",
5009     "teleporter (0\xb0)"
5010   },
5011   {
5012     "mm_teleporter_2",
5013     "mm_teleporter",
5014     "teleporter (22.5\xb0)"
5015   },
5016   {
5017     "mm_teleporter_3",
5018     "mm_teleporter",
5019     "teleporter (45\xb0)"
5020   },
5021   {
5022     "mm_teleporter_4",
5023     "mm_teleporter",
5024     "teleporter (67.5\xb0)"
5025   },
5026   {
5027     "mm_teleporter_5",
5028     "mm_teleporter",
5029     "teleporter (90\xb0)"
5030   },
5031   {
5032     "mm_teleporter_6",
5033     "mm_teleporter",
5034     "teleporter (112.5\xb0)"
5035   },
5036   {
5037     "mm_teleporter_7",
5038     "mm_teleporter",
5039     "teleporter (135\xb0)"
5040   },
5041   {
5042     "mm_teleporter_8",
5043     "mm_teleporter",
5044     "teleporter (157.5\xb0)"
5045   },
5046   {
5047     "mm_teleporter_9",
5048     "mm_teleporter",
5049     "teleporter (180\xb0)"
5050   },
5051   {
5052     "mm_teleporter_10",
5053     "mm_teleporter",
5054     "teleporter (202.5\xb0)"
5055   },
5056   {
5057     "mm_teleporter_11",
5058     "mm_teleporter",
5059     "teleporter (225\xb0)"
5060   },
5061   {
5062     "mm_teleporter_12",
5063     "mm_teleporter",
5064     "teleporter (247.5\xb0)"
5065   },
5066   {
5067     "mm_teleporter_13",
5068     "mm_teleporter",
5069     "teleporter (270\xb0)"
5070   },
5071   {
5072     "mm_teleporter_14",
5073     "mm_teleporter",
5074     "teleporter (292.5\xb0)"
5075   },
5076   {
5077     "mm_teleporter_15",
5078     "mm_teleporter",
5079     "teleporter (315\xb0)"
5080   },
5081   {
5082     "mm_teleporter_16",
5083     "mm_teleporter",
5084     "teleporter (337.5\xb0)"
5085   },
5086   {
5087     "mm_fuse.active",
5088     "mm_fuse",
5089     "fuse (on)"
5090   },
5091   {
5092     "mm_pacman.right",
5093     "mm_pacman",
5094     "pac man (starts moving right)"
5095   },
5096   {
5097     "mm_pacman.up",
5098     "mm_pacman",
5099     "pac man (starts moving up)"
5100   },
5101   {
5102     "mm_pacman.left",
5103     "mm_pacman",
5104     "pac man (starts moving left)"
5105   },
5106   {
5107     "mm_pacman.down",
5108     "mm_pacman",
5109     "pac man (starts moving down)"
5110   },
5111   {
5112     "mm_polarizer_1",
5113     "mm_polarizer",
5114     "polarizer (0\xb0)"
5115   },
5116   {
5117     "mm_polarizer_2",
5118     "mm_polarizer",
5119     "polarizer (11.25\xb0)"
5120   },
5121   {
5122     "mm_polarizer_3",
5123     "mm_polarizer",
5124     "polarizer (22.5\xb0)"
5125   },
5126   {
5127     "mm_polarizer_4",
5128     "mm_polarizer",
5129     "polarizer (33.75\xb0)"
5130   },
5131   {
5132     "mm_polarizer_5",
5133     "mm_polarizer",
5134     "polarizer (45\xb0)"
5135   },
5136   {
5137     "mm_polarizer_6",
5138     "mm_polarizer",
5139     "polarizer (56.25\xb0)"
5140   },
5141   {
5142     "mm_polarizer_7",
5143     "mm_polarizer",
5144     "polarizer (67.5\xb0)"
5145   },
5146   {
5147     "mm_polarizer_8",
5148     "mm_polarizer",
5149     "polarizer (78.75\xb0)"
5150   },
5151   {
5152     "mm_polarizer_9",
5153     "mm_polarizer",
5154     "polarizer (90\xb0)"
5155   },
5156   {
5157     "mm_polarizer_10",
5158     "mm_polarizer",
5159     "polarizer (101.25\xb0)"
5160   },
5161   {
5162     "mm_polarizer_11",
5163     "mm_polarizer",
5164     "polarizer (112.5\xb0)"
5165   },
5166   {
5167     "mm_polarizer_12",
5168     "mm_polarizer",
5169     "polarizer (123.75\xb0)"
5170   },
5171   {
5172     "mm_polarizer_13",
5173     "mm_polarizer",
5174     "polarizer (135\xb0)"
5175   },
5176   {
5177     "mm_polarizer_14",
5178     "mm_polarizer",
5179     "polarizer (146.25\xb0)"
5180   },
5181   {
5182     "mm_polarizer_15",
5183     "mm_polarizer",
5184     "polarizer (157.5\xb0)"
5185   },
5186   {
5187     "mm_polarizer_16",
5188     "mm_polarizer",
5189     "polarizer (168.75\xb0)"
5190   },
5191   {
5192     "mm_polarizer_cross_1",
5193     "mm_polarizer_cross",
5194     "two-way polarizer (0\xb0)"
5195   },
5196   {
5197     "mm_polarizer_cross_2",
5198     "mm_polarizer_cross",
5199     "two-way polarizer (22.5\xb0)"
5200   },
5201   {
5202     "mm_polarizer_cross_3",
5203     "mm_polarizer_cross",
5204     "two-way polarizer (45\xb0)"
5205   },
5206   {
5207     "mm_polarizer_cross_4",
5208     "mm_polarizer_cross",
5209     "two-way polarizer (67.5\xb0)"
5210   },
5211   {
5212     "mm_mirror_fixed_1",
5213     "mm_mirror_fixed",
5214     "fixed mirror (0\xb0)"
5215   },
5216   {
5217     "mm_mirror_fixed_2",
5218     "mm_mirror_fixed",
5219     "fixed mirror (0\xb0)"
5220   },
5221   {
5222     "mm_mirror_fixed_3",
5223     "mm_mirror_fixed",
5224     "fixed mirror (0\xb0)"
5225   },
5226   {
5227     "mm_mirror_fixed_4",
5228     "mm_mirror_fixed",
5229     "fixed mirror (0\xb0)"
5230   },
5231   {
5232     "mm_steel_lock",
5233     "mm_steel_lock",
5234     "steel lock"
5235   },
5236   {
5237     "mm_key",
5238     "mm_key",
5239     "key (MM style)"
5240   },
5241   {
5242     "mm_lightbulb",
5243     "mm_lightbulb",
5244     "light bulb (off)"
5245   },
5246   {
5247     "mm_lightbulb.active",
5248     "mm_lightbulb",
5249     "light bulb (on)"
5250   },
5251   {
5252     "mm_lightball",
5253     "mm_lightball",
5254     "bonus ball"
5255   },
5256   {
5257     "mm_steel_block",
5258     "mm_steel_block",
5259     "steel block"
5260   },
5261   {
5262     "mm_wooden_lock",
5263     "mm_wooden_lock",
5264     "wooden lock"
5265   },
5266   {
5267     "mm_fuel_full",
5268     "mm_fuel",
5269     "extra energy ball (full)"
5270   },
5271   {
5272     "mm_wooden_grid_fixed_1",
5273     "mm_wooden_grid_fixed",
5274     "fixed wooden polarizer (0\xb0)"
5275   },
5276   {
5277     "mm_wooden_grid_fixed_2",
5278     "mm_wooden_grid_fixed",
5279     "fixed wooden polarizer (90\xb0)"
5280   },
5281   {
5282     "mm_wooden_grid_fixed_3",
5283     "mm_wooden_grid_fixed",
5284     "fixed wooden polarizer (45\xb0)"
5285   },
5286   {
5287     "mm_wooden_grid_fixed_4",
5288     "mm_wooden_grid_fixed",
5289     "fixed wooden polarizer (135\xb0)"
5290   },
5291   {
5292     "mm_fuel_empty",
5293     "mm_fuel",
5294     "extra energy ball (empty)"
5295   },
5296   {
5297     "mm_unused_156",
5298     "unused",
5299     "(not used)"
5300   },
5301   {
5302     "mm_unused_157",
5303     "unused",
5304     "(not used)"
5305   },
5306   {
5307     "mm_unused_158",
5308     "unused",
5309     "(not used)"
5310   },
5311   {
5312     "mm_unused_159",
5313     "unused",
5314     "(not used)"
5315   },
5316   {
5317     "df_mirror_1",
5318     "df_mirror",
5319     "mirror (DF style) (0\xb0)"
5320   },
5321   {
5322     "df_mirror_2",
5323     "df_mirror",
5324     "mirror (DF style) (11.25\xb0)"
5325   },
5326   {
5327     "df_mirror_3",
5328     "df_mirror",
5329     "mirror (DF style) (22.5\xb0)"
5330   },
5331   {
5332     "df_mirror_4",
5333     "df_mirror",
5334     "mirror (DF style) (33.75\xb0)"
5335   },
5336   {
5337     "df_mirror_5",
5338     "df_mirror",
5339     "mirror (DF style) (45\xb0)"
5340   },
5341   {
5342     "df_mirror_6",
5343     "df_mirror",
5344     "mirror (DF style) (56.25\xb0)"
5345   },
5346   {
5347     "df_mirror_7",
5348     "df_mirror",
5349     "mirror (DF style) (67.5\xb0)"
5350   },
5351   {
5352     "df_mirror_8",
5353     "df_mirror",
5354     "mirror (DF style) (78.75\xb0)"
5355   },
5356   {
5357     "df_mirror_9",
5358     "df_mirror",
5359     "mirror (DF style) (90\xb0)"
5360   },
5361   {
5362     "df_mirror_10",
5363     "df_mirror",
5364     "mirror (DF style) (101.25\xb0)"
5365   },
5366   {
5367     "df_mirror_11",
5368     "df_mirror",
5369     "mirror (DF style) (112.5\xb0)"
5370   },
5371   {
5372     "df_mirror_12",
5373     "df_mirror",
5374     "mirror (DF style) (123.75\xb0)"
5375   },
5376   {
5377     "df_mirror_13",
5378     "df_mirror",
5379     "mirror (DF style) (135\xb0)"
5380   },
5381   {
5382     "df_mirror_14",
5383     "df_mirror",
5384     "mirror (DF style) (146.25\xb0)"
5385   },
5386   {
5387     "df_mirror_15",
5388     "df_mirror",
5389     "mirror (DF style) (157.5\xb0)"
5390   },
5391   {
5392     "df_mirror_16",
5393     "df_mirror",
5394     "mirror (DF style) (168.75\xb0)"
5395   },
5396   {
5397     "df_wooden_grid_fixed_1",
5398     "df_wooden_grid_fixed",
5399     "fixed wooden polarizer (0\xb0)"
5400   },
5401   {
5402     "df_wooden_grid_fixed_2",
5403     "df_wooden_grid_fixed",
5404     "fixed wooden polarizer (22.5\xb0)"
5405   },
5406   {
5407     "df_wooden_grid_fixed_3",
5408     "df_wooden_grid_fixed",
5409     "fixed wooden polarizer (45\xb0)"
5410   },
5411   {
5412     "df_wooden_grid_fixed_4",
5413     "df_wooden_grid_fixed",
5414     "fixed wooden polarizer (67.5\xb0)"
5415   },
5416   {
5417     "df_wooden_grid_fixed_5",
5418     "df_wooden_grid_fixed",
5419     "fixed wooden polarizer (90\xb0)"
5420   },
5421   {
5422     "df_wooden_grid_fixed_6",
5423     "df_wooden_grid_fixed",
5424     "fixed wooden polarizer (112.5\xb0)"
5425   },
5426   {
5427     "df_wooden_grid_fixed_7",
5428     "df_wooden_grid_fixed",
5429     "fixed wooden polarizer (135\xb0)"
5430   },
5431   {
5432     "df_wooden_grid_fixed_8",
5433     "df_wooden_grid_fixed",
5434     "fixed wooden polarizer (157.5\xb0)"
5435   },
5436   {
5437     "df_steel_grid_fixed_1",
5438     "df_steel_grid_fixed",
5439     "fixed steel polarizer (0\xb0)"
5440   },
5441   {
5442     "df_steel_grid_fixed_2",
5443     "df_steel_grid_fixed",
5444     "fixed steel polarizer (22.5\xb0)"
5445   },
5446   {
5447     "df_steel_grid_fixed_3",
5448     "df_steel_grid_fixed",
5449     "fixed steel polarizer (45\xb0)"
5450   },
5451   {
5452     "df_steel_grid_fixed_4",
5453     "df_steel_grid_fixed",
5454     "fixed steel polarizer (67.5\xb0)"
5455   },
5456   {
5457     "df_steel_grid_fixed_5",
5458     "df_steel_grid_fixed",
5459     "fixed steel polarizer (90\xb0)"
5460   },
5461   {
5462     "df_steel_grid_fixed_6",
5463     "df_steel_grid_fixed",
5464     "fixed steel polarizer (112.5\xb0)"
5465   },
5466   {
5467     "df_steel_grid_fixed_7",
5468     "df_steel_grid_fixed",
5469     "fixed steel polarizer (135\xb0)"
5470   },
5471   {
5472     "df_steel_grid_fixed_8",
5473     "df_steel_grid_fixed",
5474     "fixed steel polarizer (157.5\xb0)"
5475   },
5476   {
5477     "df_wooden_wall_1",
5478     "df_wooden_wall",
5479     "wooden wall (DF style)"
5480   },
5481   {
5482     "df_wooden_wall_2",
5483     "df_wooden_wall",
5484     "wooden wall (DF style)"
5485   },
5486   {
5487     "df_wooden_wall_3",
5488     "df_wooden_wall",
5489     "wooden wall (DF style)"
5490   },
5491   {
5492     "df_wooden_wall_4",
5493     "df_wooden_wall",
5494     "wooden wall (DF style)"
5495   },
5496   {
5497     "df_wooden_wall_5",
5498     "df_wooden_wall",
5499     "wooden wall (DF style)"
5500   },
5501   {
5502     "df_wooden_wall_6",
5503     "df_wooden_wall",
5504     "wooden wall (DF style)"
5505   },
5506   {
5507     "df_wooden_wall_7",
5508     "df_wooden_wall",
5509     "wooden wall (DF style)"
5510   },
5511   {
5512     "df_wooden_wall_8",
5513     "df_wooden_wall",
5514     "wooden wall (DF style)"
5515   },
5516   {
5517     "df_wooden_wall_9",
5518     "df_wooden_wall",
5519     "wooden wall (DF style)"
5520   },
5521   {
5522     "df_wooden_wall_10",
5523     "df_wooden_wall",
5524     "wooden wall (DF style)"
5525   },
5526   {
5527     "df_wooden_wall_11",
5528     "df_wooden_wall",
5529     "wooden wall (DF style)"
5530   },
5531   {
5532     "df_wooden_wall_12",
5533     "df_wooden_wall",
5534     "wooden wall (DF style)"
5535   },
5536   {
5537     "df_wooden_wall_13",
5538     "df_wooden_wall",
5539     "wooden wall (DF style)"
5540   },
5541   {
5542     "df_wooden_wall_14",
5543     "df_wooden_wall",
5544     "wooden wall (DF style)"
5545   },
5546   {
5547     "df_wooden_wall_15",
5548     "df_wooden_wall",
5549     "wooden wall (DF style)"
5550   },
5551   {
5552     "df_wooden_wall_16",
5553     "df_wooden_wall",
5554     "wooden wall (DF style)"
5555   },
5556   {
5557     "df_steel_wall_1",
5558     "df_steel_wall",
5559     "steel wall (DF style)"
5560   },
5561   {
5562     "df_steel_wall_2",
5563     "df_steel_wall",
5564     "steel wall (DF style)"
5565   },
5566   {
5567     "df_steel_wall_3",
5568     "df_steel_wall",
5569     "steel wall (DF style)"
5570   },
5571   {
5572     "df_steel_wall_4",
5573     "df_steel_wall",
5574     "steel wall (DF style)"
5575   },
5576   {
5577     "df_steel_wall_5",
5578     "df_steel_wall",
5579     "steel wall (DF style)"
5580   },
5581   {
5582     "df_steel_wall_6",
5583     "df_steel_wall",
5584     "steel wall (DF style)"
5585   },
5586   {
5587     "df_steel_wall_7",
5588     "df_steel_wall",
5589     "steel wall (DF style)"
5590   },
5591   {
5592     "df_steel_wall_8",
5593     "df_steel_wall",
5594     "steel wall (DF style)"
5595   },
5596   {
5597     "df_steel_wall_9",
5598     "df_steel_wall",
5599     "steel wall (DF style)"
5600   },
5601   {
5602     "df_steel_wall_10",
5603     "df_steel_wall",
5604     "steel wall (DF style)"
5605   },
5606   {
5607     "df_steel_wall_11",
5608     "df_steel_wall",
5609     "steel wall (DF style)"
5610   },
5611   {
5612     "df_steel_wall_12",
5613     "df_steel_wall",
5614     "steel wall (DF style)"
5615   },
5616   {
5617     "df_steel_wall_13",
5618     "df_steel_wall",
5619     "steel wall (DF style)"
5620   },
5621   {
5622     "df_steel_wall_14",
5623     "df_steel_wall",
5624     "steel wall (DF style)"
5625   },
5626   {
5627     "df_steel_wall_15",
5628     "df_steel_wall",
5629     "steel wall (DF style)"
5630   },
5631   {
5632     "df_steel_wall_16",
5633     "df_steel_wall",
5634     "steel wall (DF style)"
5635   },
5636   {
5637     "df_empty_space",
5638     "empty_space",
5639     "empty space"
5640   },
5641   {
5642     "df_cell",
5643     "df_cell",
5644     "cell"
5645   },
5646   {
5647     "df_mine",
5648     "df_mine",
5649     "mine"
5650   },
5651   {
5652     "df_refractor",
5653     "df_refractor",
5654     "refractor"
5655   },
5656   {
5657     "df_laser.right",
5658     "df_laser",
5659     "laser cannon (shooting right)"
5660   },
5661   {
5662     "df_laser.up",
5663     "df_laser",
5664     "laser cannon (shooting up)"
5665   },
5666   {
5667     "df_laser.left",
5668     "df_laser",
5669     "laser cannon (shooting left)"
5670   },
5671   {
5672     "df_laser.down",
5673     "df_laser",
5674     "laser cannon (shooting down)"
5675   },
5676   {
5677     "df_receiver.right",
5678     "df_receiver",
5679     "laser receiver (directed right)"
5680   },
5681   {
5682     "df_receiver.up",
5683     "df_receiver",
5684     "laser receiver (directed up)"
5685   },
5686   {
5687     "df_receiver.left",
5688     "df_receiver",
5689     "laser receiver (directed left)"
5690   },
5691   {
5692     "df_receiver.down",
5693     "df_receiver",
5694     "laser receiver (directed down)"
5695   },
5696   {
5697     "df_fibre_optic_red_1",
5698     "df_fibre_optic",
5699     "red fibre optic (part 1)"
5700   },
5701   {
5702     "df_fibre_optic_red_2",
5703     "df_fibre_optic",
5704     "red fibre optic (part 2)"
5705   },
5706   {
5707     "df_fibre_optic_yellow_1",
5708     "df_fibre_optic",
5709     "yellow fibre optic (part 1)"
5710   },
5711   {
5712     "df_fibre_optic_yellow_2",
5713     "df_fibre_optic",
5714     "yellow fibre optic (part 2)"
5715   },
5716   {
5717     "df_fibre_optic_green_1",
5718     "df_fibre_optic",
5719     "green fibre optic (part 1)"
5720   },
5721   {
5722     "df_fibre_optic_green_2",
5723     "df_fibre_optic",
5724     "green fibre optic (part 2)"
5725   },
5726   {
5727     "df_fibre_optic_blue_1",
5728     "df_fibre_optic",
5729     "blue fibre optic (part 1)"
5730   },
5731   {
5732     "df_fibre_optic_blue_2",
5733     "df_fibre_optic",
5734     "blue fibre optic (part 2)"
5735   },
5736   {
5737     "df_mirror_rotating_1",
5738     "df_mirror_rotating",
5739     "rotating mirror (0\xb0)"
5740   },
5741   {
5742     "df_mirror_rotating_2",
5743     "df_mirror_rotating",
5744     "rotating mirror (11.25\xb0)"
5745   },
5746   {
5747     "df_mirror_rotating_3",
5748     "df_mirror_rotating",
5749     "rotating mirror (22.5\xb0)"
5750   },
5751   {
5752     "df_mirror_rotating_4",
5753     "df_mirror_rotating",
5754     "rotating mirror (33.75\xb0)"
5755   },
5756   {
5757     "df_mirror_rotating_5",
5758     "df_mirror_rotating",
5759     "rotating mirror (45\xb0)"
5760   },
5761   {
5762     "df_mirror_rotating_6",
5763     "df_mirror_rotating",
5764     "rotating mirror (56.25\xb0)"
5765   },
5766   {
5767     "df_mirror_rotating_7",
5768     "df_mirror_rotating",
5769     "rotating mirror (67.5\xb0)"
5770   },
5771   {
5772     "df_mirror_rotating_8",
5773     "df_mirror_rotating",
5774     "rotating mirror (78.75\xb0)"
5775   },
5776   {
5777     "df_mirror_rotating_9",
5778     "df_mirror_rotating",
5779     "rotating mirror (90\xb0)"
5780   },
5781   {
5782     "df_mirror_rotating_10",
5783     "df_mirror_rotating",
5784     "rotating mirror (101.25\xb0)"
5785   },
5786   {
5787     "df_mirror_rotating_11",
5788     "df_mirror_rotating",
5789     "rotating mirror (112.5\xb0)"
5790   },
5791   {
5792     "df_mirror_rotating_12",
5793     "df_mirror_rotating",
5794     "rotating mirror (123.75\xb0)"
5795   },
5796   {
5797     "df_mirror_rotating_13",
5798     "df_mirror_rotating",
5799     "rotating mirror (135\xb0)"
5800   },
5801   {
5802     "df_mirror_rotating_14",
5803     "df_mirror_rotating",
5804     "rotating mirror (146.25\xb0)"
5805   },
5806   {
5807     "df_mirror_rotating_15",
5808     "df_mirror_rotating",
5809     "rotating mirror (157.5\xb0)"
5810   },
5811   {
5812     "df_mirror_rotating_16",
5813     "df_mirror_rotating",
5814     "rotating mirror (168.75\xb0)"
5815   },
5816   {
5817     "df_wooden_grid_rotating_1",
5818     "df_wooden_grid_rotating",
5819     "rotating wooden polarizer (0\xb0)"
5820   },
5821   {
5822     "df_wooden_grid_rotating_2",
5823     "df_wooden_grid_rotating",
5824     "rotating wooden polarizer (22.5\xb0)"
5825   },
5826   {
5827     "df_wooden_grid_rotating_3",
5828     "df_wooden_grid_rotating",
5829     "rotating wooden polarizer (45\xb0)"
5830   },
5831   {
5832     "df_wooden_grid_rotating_4",
5833     "df_wooden_grid_rotating",
5834     "rotating wooden polarizer (67.5\xb0)"
5835   },
5836   {
5837     "df_wooden_grid_rotating_5",
5838     "df_wooden_grid_rotating",
5839     "rotating wooden polarizer (90\xb0)"
5840   },
5841   {
5842     "df_wooden_grid_rotating_6",
5843     "df_wooden_grid_rotating",
5844     "rotating wooden polarizer (112.5\xb0)"
5845   },
5846   {
5847     "df_wooden_grid_rotating_7",
5848     "df_wooden_grid_rotating",
5849     "rotating wooden polarizer (135\xb0)"
5850   },
5851   {
5852     "df_wooden_grid_rotating_8",
5853     "df_wooden_grid_rotating",
5854     "rotating wooden polarizer (157.5\xb0)"
5855   },
5856   {
5857     "df_steel_grid_rotating_1",
5858     "df_steel_grid_rotating",
5859     "rotating steel polarizer (0\xb0)"
5860   },
5861   {
5862     "df_steel_grid_rotating_2",
5863     "df_steel_grid_rotating",
5864     "rotating steel polarizer (22.5\xb0)"
5865   },
5866   {
5867     "df_steel_grid_rotating_3",
5868     "df_steel_grid_rotating",
5869     "rotating steel polarizer (45\xb0)"
5870   },
5871   {
5872     "df_steel_grid_rotating_4",
5873     "df_steel_grid_rotating",
5874     "rotating steel polarizer (67.5\xb0)"
5875   },
5876   {
5877     "df_steel_grid_rotating_5",
5878     "df_steel_grid_rotating",
5879     "rotating steel polarizer (90\xb0)"
5880   },
5881   {
5882     "df_steel_grid_rotating_6",
5883     "df_steel_grid_rotating",
5884     "rotating steel polarizer (112.5\xb0)"
5885   },
5886   {
5887     "df_steel_grid_rotating_7",
5888     "df_steel_grid_rotating",
5889     "rotating steel polarizer (135\xb0)"
5890   },
5891   {
5892     "df_steel_grid_rotating_8",
5893     "df_steel_grid_rotating",
5894     "rotating steel polarizer (157.5\xb0)"
5895   },
5896   {
5897     "mm_teleporter_red_1",
5898     "mm_teleporter",
5899     "red teleporter (0\xb0)"
5900   },
5901   {
5902     "mm_teleporter_red_2",
5903     "mm_teleporter",
5904     "red teleporter (22.5\xb0)"
5905   },
5906   {
5907     "mm_teleporter_red_3",
5908     "mm_teleporter",
5909     "red teleporter (45\xb0)"
5910   },
5911   {
5912     "mm_teleporter_red_4",
5913     "mm_teleporter",
5914     "red teleporter (67.5\xb0)"
5915   },
5916   {
5917     "mm_teleporter_red_5",
5918     "mm_teleporter",
5919     "red teleporter (90\xb0)"
5920   },
5921   {
5922     "mm_teleporter_red_6",
5923     "mm_teleporter",
5924     "red teleporter (112.5\xb0)"
5925   },
5926   {
5927     "mm_teleporter_red_7",
5928     "mm_teleporter",
5929     "red teleporter (135\xb0)"
5930   },
5931   {
5932     "mm_teleporter_red_8",
5933     "mm_teleporter",
5934     "red teleporter (157.5\xb0)"
5935   },
5936   {
5937     "mm_teleporter_red_9",
5938     "mm_teleporter",
5939     "red teleporter (180\xb0)"
5940   },
5941   {
5942     "mm_teleporter_red_10",
5943     "mm_teleporter",
5944     "red teleporter (202.5\xb0)"
5945   },
5946   {
5947     "mm_teleporter_red_11",
5948     "mm_teleporter",
5949     "red teleporter (225\xb0)"
5950   },
5951   {
5952     "mm_teleporter_red_12",
5953     "mm_teleporter",
5954     "red teleporter (247.5\xb0)"
5955   },
5956   {
5957     "mm_teleporter_red_13",
5958     "mm_teleporter",
5959     "red teleporter (270\xb0)"
5960   },
5961   {
5962     "mm_teleporter_red_14",
5963     "mm_teleporter",
5964     "red teleporter (292.5\xb0)"
5965   },
5966   {
5967     "mm_teleporter_red_15",
5968     "mm_teleporter",
5969     "red teleporter (315\xb0)"
5970   },
5971   {
5972     "mm_teleporter_red_16",
5973     "mm_teleporter",
5974     "red teleporter (337.5\xb0)"
5975   },
5976   {
5977     "mm_teleporter_yellow_1",
5978     "mm_teleporter",
5979     "yellow teleporter (0\xb0)"
5980   },
5981   {
5982     "mm_teleporter_yellow_2",
5983     "mm_teleporter",
5984     "yellow teleporter (22.5\xb0)"
5985   },
5986   {
5987     "mm_teleporter_yellow_3",
5988     "mm_teleporter",
5989     "yellow teleporter (45\xb0)"
5990   },
5991   {
5992     "mm_teleporter_yellow_4",
5993     "mm_teleporter",
5994     "yellow teleporter (67.5\xb0)"
5995   },
5996   {
5997     "mm_teleporter_yellow_5",
5998     "mm_teleporter",
5999     "yellow teleporter (90\xb0)"
6000   },
6001   {
6002     "mm_teleporter_yellow_6",
6003     "mm_teleporter",
6004     "yellow teleporter (112.5\xb0)"
6005   },
6006   {
6007     "mm_teleporter_yellow_7",
6008     "mm_teleporter",
6009     "yellow teleporter (135\xb0)"
6010   },
6011   {
6012     "mm_teleporter_yellow_8",
6013     "mm_teleporter",
6014     "yellow teleporter (157.5\xb0)"
6015   },
6016   {
6017     "mm_teleporter_yellow_9",
6018     "mm_teleporter",
6019     "yellow teleporter (180\xb0)"
6020   },
6021   {
6022     "mm_teleporter_yellow_10",
6023     "mm_teleporter",
6024     "yellow teleporter (202.5\xb0)"
6025   },
6026   {
6027     "mm_teleporter_yellow_11",
6028     "mm_teleporter",
6029     "yellow teleporter (225\xb0)"
6030   },
6031   {
6032     "mm_teleporter_yellow_12",
6033     "mm_teleporter",
6034     "yellow teleporter (247.5\xb0)"
6035   },
6036   {
6037     "mm_teleporter_yellow_13",
6038     "mm_teleporter",
6039     "yellow teleporter (270\xb0)"
6040   },
6041   {
6042     "mm_teleporter_yellow_14",
6043     "mm_teleporter",
6044     "yellow teleporter (292.5\xb0)"
6045   },
6046   {
6047     "mm_teleporter_yellow_15",
6048     "mm_teleporter",
6049     "yellow teleporter (315\xb0)"
6050   },
6051   {
6052     "mm_teleporter_yellow_16",
6053     "mm_teleporter",
6054     "yellow teleporter (337.5\xb0)"
6055   },
6056   {
6057     "mm_teleporter_green_1",
6058     "mm_teleporter",
6059     "green teleporter (0\xb0)"
6060   },
6061   {
6062     "mm_teleporter_green_2",
6063     "mm_teleporter",
6064     "green teleporter (22.5\xb0)"
6065   },
6066   {
6067     "mm_teleporter_green_3",
6068     "mm_teleporter",
6069     "green teleporter (45\xb0)"
6070   },
6071   {
6072     "mm_teleporter_green_4",
6073     "mm_teleporter",
6074     "green teleporter (67.5\xb0)"
6075   },
6076   {
6077     "mm_teleporter_green_5",
6078     "mm_teleporter",
6079     "green teleporter (90\xb0)"
6080   },
6081   {
6082     "mm_teleporter_green_6",
6083     "mm_teleporter",
6084     "green teleporter (112.5\xb0)"
6085   },
6086   {
6087     "mm_teleporter_green_7",
6088     "mm_teleporter",
6089     "green teleporter (135\xb0)"
6090   },
6091   {
6092     "mm_teleporter_green_8",
6093     "mm_teleporter",
6094     "green teleporter (157.5\xb0)"
6095   },
6096   {
6097     "mm_teleporter_green_9",
6098     "mm_teleporter",
6099     "green teleporter (180\xb0)"
6100   },
6101   {
6102     "mm_teleporter_green_10",
6103     "mm_teleporter",
6104     "green teleporter (202.5\xb0)"
6105   },
6106   {
6107     "mm_teleporter_green_11",
6108     "mm_teleporter",
6109     "green teleporter (225\xb0)"
6110   },
6111   {
6112     "mm_teleporter_green_12",
6113     "mm_teleporter",
6114     "green teleporter (247.5\xb0)"
6115   },
6116   {
6117     "mm_teleporter_green_13",
6118     "mm_teleporter",
6119     "green teleporter (270\xb0)"
6120   },
6121   {
6122     "mm_teleporter_green_14",
6123     "mm_teleporter",
6124     "green teleporter (292.5\xb0)"
6125   },
6126   {
6127     "mm_teleporter_green_15",
6128     "mm_teleporter",
6129     "green teleporter (315\xb0)"
6130   },
6131   {
6132     "mm_teleporter_green_16",
6133     "mm_teleporter",
6134     "green teleporter (337.5\xb0)"
6135   },
6136   {
6137     "mm_teleporter_blue_1",
6138     "mm_teleporter",
6139     "blue teleporter (0\xb0)"
6140   },
6141   {
6142     "mm_teleporter_blue_2",
6143     "mm_teleporter",
6144     "blue teleporter (22.5\xb0)"
6145   },
6146   {
6147     "mm_teleporter_blue_3",
6148     "mm_teleporter",
6149     "blue teleporter (45\xb0)"
6150   },
6151   {
6152     "mm_teleporter_blue_4",
6153     "mm_teleporter",
6154     "blue teleporter (67.5\xb0)"
6155   },
6156   {
6157     "mm_teleporter_blue_5",
6158     "mm_teleporter",
6159     "blue teleporter (90\xb0)"
6160   },
6161   {
6162     "mm_teleporter_blue_6",
6163     "mm_teleporter",
6164     "blue teleporter (112.5\xb0)"
6165   },
6166   {
6167     "mm_teleporter_blue_7",
6168     "mm_teleporter",
6169     "blue teleporter (135\xb0)"
6170   },
6171   {
6172     "mm_teleporter_blue_8",
6173     "mm_teleporter",
6174     "blue teleporter (157.5\xb0)"
6175   },
6176   {
6177     "mm_teleporter_blue_9",
6178     "mm_teleporter",
6179     "blue teleporter (180\xb0)"
6180   },
6181   {
6182     "mm_teleporter_blue_10",
6183     "mm_teleporter",
6184     "blue teleporter (202.5\xb0)"
6185   },
6186   {
6187     "mm_teleporter_blue_11",
6188     "mm_teleporter",
6189     "blue teleporter (225\xb0)"
6190   },
6191   {
6192     "mm_teleporter_blue_12",
6193     "mm_teleporter",
6194     "blue teleporter (247.5\xb0)"
6195   },
6196   {
6197     "mm_teleporter_blue_13",
6198     "mm_teleporter",
6199     "blue teleporter (270\xb0)"
6200   },
6201   {
6202     "mm_teleporter_blue_14",
6203     "mm_teleporter",
6204     "blue teleporter (292.5\xb0)"
6205   },
6206   {
6207     "mm_teleporter_blue_15",
6208     "mm_teleporter",
6209     "blue teleporter (315\xb0)"
6210   },
6211   {
6212     "mm_teleporter_blue_16",
6213     "mm_teleporter",
6214     "blue teleporter (337.5\xb0)"
6215   },
6216   {
6217     "mm_mcduffin",
6218     "mm_mcduffin",
6219     "Gregor McDuffin"
6220   },
6221   {
6222     "mm_pacman",
6223     "mm_pacman",
6224     "pac man (MM style)"
6225   },
6226   {
6227     "mm_fuse",
6228     "mm_fuse",
6229     "fuse (off)",
6230   },
6231   {
6232     "mm_steel_wall",
6233     "mm_steel_wall",
6234     "steel wall",
6235   },
6236   {
6237     "mm_wooden_wall",
6238     "mm_wooden_wall",
6239     "wooden wall",
6240   },
6241   {
6242     "mm_ice_wall",
6243     "mm_ice_wall",
6244     "ice wall",
6245   },
6246   {
6247     "mm_amoeba_wall",
6248     "mm_amoeba_wall",
6249     "amoeba wall",
6250   },
6251   {
6252     "df_laser",
6253     "df_laser",
6254     "laser cannon"
6255   },
6256   {
6257     "df_receiver",
6258     "df_receiver",
6259     "laser receiver"
6260   },
6261   {
6262     "df_steel_wall",
6263     "df_steel_wall",
6264     "steel wall (DF style)",
6265   },
6266   {
6267     "df_wooden_wall",
6268     "df_wooden_wall",
6269     "wooden wall (DF style)",
6270   },
6271
6272   // --------------------------------------------------------------------------
6273   // "real" (and therefore drawable) runtime elements
6274   // --------------------------------------------------------------------------
6275
6276   {
6277     "dynabomb_player_1.active",
6278     "dynabomb",
6279     "-"
6280   },
6281   {
6282     "dynabomb_player_2.active",
6283     "dynabomb",
6284     "-"
6285   },
6286   {
6287     "dynabomb_player_3.active",
6288     "dynabomb",
6289     "-"
6290   },
6291   {
6292     "dynabomb_player_4.active",
6293     "dynabomb",
6294     "-"
6295   },
6296   {
6297     "sp_disk_red.active",
6298     "dynamite",
6299     "-"
6300   },
6301   {
6302     "switchgate.opening",
6303     "switchgate",
6304     "-"
6305   },
6306   {
6307     "switchgate.closing",
6308     "switchgate",
6309     "-"
6310   },
6311   {
6312     "timegate.opening",
6313     "timegate",
6314     "-"
6315   },
6316   {
6317     "timegate.closing",
6318     "timegate",
6319     "-"
6320   },
6321   {
6322     "pearl.breaking",
6323     "pearl",
6324     "-"
6325   },
6326   {
6327     "trap.active",
6328     "trap",
6329     "-"
6330   },
6331   {
6332     "invisible_steelwall.active",
6333     "steelwall",
6334     "-"
6335   },
6336   {
6337     "invisible_wall.active",
6338     "wall",
6339     "-"
6340   },
6341   {
6342     "invisible_sand.active",
6343     "sand",
6344     "-"
6345   },
6346   {
6347     "conveyor_belt_1_left.active",
6348     "conveyor_belt",
6349     "-"
6350   },
6351   {
6352     "conveyor_belt_1_middle.active",
6353     "conveyor_belt",
6354     "-"
6355   },
6356   {
6357     "conveyor_belt_1_right.active",
6358     "conveyor_belt",
6359     "-"
6360   },
6361   {
6362     "conveyor_belt_2_left.active",
6363     "conveyor_belt",
6364     "-"
6365   },
6366   {
6367     "conveyor_belt_2_middle.active",
6368     "conveyor_belt",
6369     "-"
6370   },
6371   {
6372     "conveyor_belt_2_right.active",
6373     "conveyor_belt",
6374     "-"
6375   },
6376   {
6377     "conveyor_belt_3_left.active",
6378     "conveyor_belt",
6379     "-"
6380   },
6381   {
6382     "conveyor_belt_3_middle.active",
6383     "conveyor_belt",
6384     "-"
6385   },
6386   {
6387     "conveyor_belt_3_right.active",
6388     "conveyor_belt",
6389     "-"
6390   },
6391   {
6392     "conveyor_belt_4_left.active",
6393     "conveyor_belt",
6394     "-"
6395   },
6396   {
6397     "conveyor_belt_4_middle.active",
6398     "conveyor_belt",
6399     "-"
6400   },
6401   {
6402     "conveyor_belt_4_right.active",
6403     "conveyor_belt",
6404     "-"
6405   },
6406   {
6407     "exit.opening",
6408     "exit",
6409     "-"
6410   },
6411   {
6412     "exit.closing",
6413     "exit",
6414     "-"
6415   },
6416   {
6417     "steel_exit.opening",
6418     "steel_exit",
6419     "-"
6420   },
6421   {
6422     "steel_exit.closing",
6423     "steel_exit",
6424     "-"
6425   },
6426   {
6427     "em_exit.opening",
6428     "em_exit",
6429     "-"
6430   },
6431   {
6432     "em_exit.closing",
6433     "em_exit",
6434     "-"
6435   },
6436   {
6437     "em_steel_exit.opening",
6438     "em_steel_exit",
6439     "-"
6440   },
6441   {
6442     "em_steel_exit.closing",
6443     "em_steel_exit",
6444     "-"
6445   },
6446   {
6447     "sp_exit.opening",
6448     "sp_exit",
6449     "-"
6450   },
6451   {
6452     "sp_exit.closing",
6453     "sp_exit",
6454     "-"
6455   },
6456   {
6457     "sp_exit_open",
6458     "sp_exit",
6459     "-"
6460   },
6461   {
6462     "sp_terminal.active",
6463     "sp_terminal",
6464     "-"
6465   },
6466   {
6467     "sp_buggy_base.activating",
6468     "sp_buggy_base",
6469     "-"
6470   },
6471   {
6472     "sp_buggy_base.active",
6473     "sp_buggy_base",
6474     "-"
6475   },
6476   {
6477     "sp_murphy_clone",
6478     "murphy_clone",
6479     "-"
6480   },
6481   {
6482     "amoeba.dropping",
6483     "amoeba",
6484     "-"
6485   },
6486   {
6487     "quicksand.emptying",
6488     "quicksand",
6489     "-"
6490   },
6491   {
6492     "quicksand_fast.emptying",
6493     "quicksand",
6494     "-"
6495   },
6496   {
6497     "magic_wall.active",
6498     "magic_wall",
6499     "-"
6500   },
6501   {
6502     "bd_magic_wall.active",
6503     "magic_wall",
6504     "-"
6505   },
6506   {
6507     "dc_magic_wall.active",
6508     "magic_wall",
6509     "-"
6510   },
6511   {
6512     "magic_wall_full",
6513     "magic_wall",
6514     "-"
6515   },
6516   {
6517     "bd_magic_wall_full",
6518     "magic_wall",
6519     "-"
6520   },
6521   {
6522     "dc_magic_wall_full",
6523     "magic_wall",
6524     "-"
6525   },
6526   {
6527     "magic_wall.emptying",
6528     "magic_wall",
6529     "-"
6530   },
6531   {
6532     "bd_magic_wall.emptying",
6533     "magic_wall",
6534     "-"
6535   },
6536   {
6537     "dc_magic_wall.emptying",
6538     "magic_wall",
6539     "-"
6540   },
6541   {
6542     "magic_wall_dead",
6543     "magic_wall",
6544     "-"
6545   },
6546   {
6547     "bd_magic_wall_dead",
6548     "magic_wall",
6549     "-"
6550   },
6551   {
6552     "dc_magic_wall_dead",
6553     "magic_wall",
6554     "-"
6555   },
6556
6557   {
6558     "emc_fake_grass.active",
6559     "fake_grass",
6560     "-"
6561   },
6562   {
6563     "gate_1_gray.active",
6564     "gate",
6565     ""
6566   },
6567   {
6568     "gate_2_gray.active",
6569     "gate",
6570     ""
6571   },
6572   {
6573     "gate_3_gray.active",
6574     "gate",
6575     ""
6576   },
6577   {
6578     "gate_4_gray.active",
6579     "gate",
6580     ""
6581   },
6582   {
6583     "em_gate_1_gray.active",
6584     "gate",
6585     ""
6586   },
6587   {
6588     "em_gate_2_gray.active",
6589     "gate",
6590     ""
6591   },
6592   {
6593     "em_gate_3_gray.active",
6594     "gate",
6595     ""
6596   },
6597   {
6598     "em_gate_4_gray.active",
6599     "gate",
6600     ""
6601   },
6602   {
6603     "emc_gate_5_gray.active",
6604     "gate",
6605     "",
6606   },
6607   {
6608     "emc_gate_6_gray.active",
6609     "gate",
6610     "",
6611   },
6612   {
6613     "emc_gate_7_gray.active",
6614     "gate",
6615     "",
6616   },
6617   {
6618     "emc_gate_8_gray.active",
6619     "gate",
6620     "",
6621   },
6622   {
6623     "dc_gate_white_gray.active",
6624     "gate",
6625     "",
6626   },
6627   {
6628     "emc_dripper.active",
6629     "dripper",
6630     "dripper"
6631   },
6632   {
6633     "emc_spring_bumper.active",
6634     "emc_spring_bumper",
6635     "spring bumper",
6636   },
6637   {
6638     "mm_exit.opening",
6639     "mm_exit",
6640     "-"
6641   },
6642   {
6643     "mm_exit.closing",
6644     "mm_exit",
6645     "-"
6646   },
6647   {
6648     "mm_gray_ball.opening",
6649     "mm_gray_ball",
6650     "-",
6651   },
6652   {
6653     "mm_ice_wall.shrinking",
6654     "mm_ice_wall",
6655     "-",
6656   },
6657   {
6658     "mm_amoeba_wall.growing",
6659     "mm_amoeba_wall",
6660     "-",
6661   },
6662   {
6663     "mm_pacman.eating.right",
6664     "mm_pacman",
6665     "pac man (eating right)"
6666   },
6667   {
6668     "mm_pacman.eating.up",
6669     "mm_pacman",
6670     "pac man (eating up)"
6671   },
6672   {
6673     "mm_pacman.eating.left",
6674     "mm_pacman",
6675     "pac man (eating left)"
6676   },
6677   {
6678     "mm_pacman.eating.down",
6679     "mm_pacman",
6680     "pac man (eating down)"
6681   },
6682
6683   // --------------------------------------------------------------------------
6684   // "unreal" (and therefore not drawable) runtime elements
6685   // --------------------------------------------------------------------------
6686
6687   {
6688     "blocked",
6689     "-",
6690     "-"
6691   },
6692   {
6693     "explosion",
6694     "-",
6695     "-"
6696   },
6697   {
6698     "nut.breaking",
6699     "-",
6700     "-"
6701   },
6702   {
6703     "diamond.breaking",
6704     "-",
6705     "-"
6706   },
6707   {
6708     "acid_splash_left",
6709     "-",
6710     "-"
6711   },
6712   {
6713     "acid_splash_right",
6714     "-",
6715     "-"
6716   },
6717   {
6718     "amoeba.growing",
6719     "-",
6720     "-"
6721   },
6722   {
6723     "amoeba.shrinking",
6724     "-",
6725     "-"
6726   },
6727   {
6728     "expandable_wall.growing",
6729     "-",
6730     "-"
6731   },
6732   {
6733     "expandable_steelwall.growing",
6734     "-",
6735     "-"
6736   },
6737   {
6738     "flames",
6739     "-",
6740     "-"
6741   },
6742   {
6743     "player_is_leaving",
6744     "-",
6745     "-"
6746   },
6747   {
6748     "player_is_exploding_1",
6749     "-",
6750     "-"
6751   },
6752   {
6753     "player_is_exploding_2",
6754     "-",
6755     "-"
6756   },
6757   {
6758     "player_is_exploding_3",
6759     "-",
6760     "-"
6761   },
6762   {
6763     "player_is_exploding_4",
6764     "-",
6765     "-"
6766   },
6767   {
6768     "quicksand.filling",
6769     "quicksand",
6770     "-"
6771   },
6772   {
6773     "quicksand_fast.filling",
6774     "quicksand",
6775     "-"
6776   },
6777   {
6778     "magic_wall.filling",
6779     "-",
6780     "-"
6781   },
6782   {
6783     "bd_magic_wall.filling",
6784     "-",
6785     "-"
6786   },
6787   {
6788     "dc_magic_wall.filling",
6789     "-",
6790     "-"
6791   },
6792   {
6793     "element.snapping",
6794     "-",
6795     "-"
6796   },
6797   {
6798     "diagonal.shrinking",
6799     "-",
6800     "-"
6801   },
6802   {
6803     "diagonal.growing",
6804     "-",
6805     "-"
6806   },
6807
6808   // --------------------------------------------------------------------------
6809   // dummy elements (never used as game elements, only used as graphics)
6810   // --------------------------------------------------------------------------
6811
6812   {
6813     "steelwall_topleft",
6814     "-",
6815     "-"
6816   },
6817   {
6818     "steelwall_topright",
6819     "-",
6820     "-"
6821   },
6822   {
6823     "steelwall_bottomleft",
6824     "-",
6825     "-"
6826   },
6827   {
6828     "steelwall_bottomright",
6829     "-",
6830     "-"
6831   },
6832   {
6833     "steelwall_horizontal",
6834     "-",
6835     "-"
6836   },
6837   {
6838     "steelwall_vertical",
6839     "-",
6840     "-"
6841   },
6842   {
6843     "invisible_steelwall_topleft",
6844     "-",
6845     "-"
6846   },
6847   {
6848     "invisible_steelwall_topright",
6849     "-",
6850     "-"
6851   },
6852   {
6853     "invisible_steelwall_bottomleft",
6854     "-",
6855     "-"
6856   },
6857   {
6858     "invisible_steelwall_bottomright",
6859     "-",
6860     "-"
6861   },
6862   {
6863     "invisible_steelwall_horizontal",
6864     "-",
6865     "-"
6866   },
6867   {
6868     "invisible_steelwall_vertical",
6869     "-",
6870     "-"
6871   },
6872   {
6873     "dynabomb",
6874     "-",
6875     "-"
6876   },
6877   {
6878     "dynabomb.active",
6879     "-",
6880     "-"
6881   },
6882   {
6883     "dynabomb_player_1",
6884     "-",
6885     "-"
6886   },
6887   {
6888     "dynabomb_player_2",
6889     "-",
6890     "-"
6891   },
6892   {
6893     "dynabomb_player_3",
6894     "-",
6895     "-"
6896   },
6897   {
6898     "dynabomb_player_4",
6899     "-",
6900     "-"
6901   },
6902   {
6903     "shield_normal.active",
6904     "-",
6905     "-"
6906   },
6907   {
6908     "shield_deadly.active",
6909     "-",
6910     "-"
6911   },
6912   {
6913     "amoeba",
6914     "amoeba",
6915     "-"
6916   },
6917   {
6918     "mm_lightball_red",
6919     "-",
6920     "-"
6921   },
6922   {
6923     "mm_lightball_blue",
6924     "-",
6925     "-"
6926   },
6927   {
6928     "mm_lightball_yellow",
6929     "-",
6930     "-"
6931   },
6932   {
6933     "mm_mask_mcduffin.right",
6934     "-",
6935     "-"
6936   },
6937   {
6938     "mm_mask_mcduffin.up",
6939     "-",
6940     "-"
6941   },
6942   {
6943     "mm_mask_mcduffin.left",
6944     "-",
6945     "-"
6946   },
6947   {
6948     "mm_mask_mcduffin.down",
6949     "-",
6950     "-"
6951   },
6952   {
6953     "mm_mask_grid_1",
6954     "-",
6955     "-"
6956   },
6957   {
6958     "mm_mask_grid_2",
6959     "-",
6960     "-"
6961   },
6962   {
6963     "mm_mask_grid_3",
6964     "-",
6965     "-"
6966   },
6967   {
6968     "mm_mask_grid_4",
6969     "-",
6970     "-"
6971   },
6972   {
6973     "mm_mask_rectangle",
6974     "-",
6975     "-"
6976   },
6977   {
6978     "mm_mask_circle",
6979     "-",
6980     "-"
6981   },
6982   {
6983     "[default]",
6984     "default",
6985     "-"
6986   },
6987   {
6988     "[bd_default]",
6989     "bd_default",
6990     "-"
6991   },
6992   {
6993     "[sp_default]",
6994     "sp_default",
6995     "-"
6996   },
6997   {
6998     "[sb_default]",
6999     "sb_default",
7000     "-"
7001   },
7002   {
7003     "[mm_default]",
7004     "mm_default",
7005     "-"
7006   },
7007   {
7008     "graphic_1",
7009     "graphic",
7010     "-"
7011   },
7012   {
7013     "graphic_2",
7014     "graphic",
7015     "-"
7016   },
7017   {
7018     "graphic_3",
7019     "graphic",
7020     "-"
7021   },
7022   {
7023     "graphic_4",
7024     "graphic",
7025     "-"
7026   },
7027   {
7028     "graphic_5",
7029     "graphic",
7030     "-"
7031   },
7032   {
7033     "graphic_6",
7034     "graphic",
7035     "-"
7036   },
7037   {
7038     "graphic_7",
7039     "graphic",
7040     "-"
7041   },
7042   {
7043     "graphic_8",
7044     "graphic",
7045     "-"
7046   },
7047   {
7048     "internal_clipboard_custom",
7049     "internal",
7050     "empty custom element"
7051   },
7052   {
7053     "internal_clipboard_change",
7054     "internal",
7055     "empty change page"
7056   },
7057   {
7058     "internal_clipboard_group",
7059     "internal",
7060     "empty group element"
7061   },
7062   {
7063     "internal_dummy",
7064     "internal",
7065     "-"
7066   },
7067   {
7068     "internal_cascade_bd",
7069     "internal",
7070     "show Boulder Dash elements"
7071   },
7072   {
7073     "internal_cascade_bd.active",
7074     "internal",
7075     "hide Boulder Dash elements"
7076   },
7077   {
7078     "internal_cascade_em",
7079     "internal",
7080     "show Emerald Mine elements"
7081   },
7082   {
7083     "internal_cascade_em.active",
7084     "internal",
7085     "hide Emerald Mine elements"
7086   },
7087   {
7088     "internal_cascade_emc",
7089     "internal",
7090     "show Emerald Mine Club elements"
7091   },
7092   {
7093     "internal_cascade_emc.active",
7094     "internal",
7095     "hide Emerald Mine Club elements"
7096   },
7097   {
7098     "internal_cascade_rnd",
7099     "internal",
7100     "show Rocks'n'Diamonds elements"
7101   },
7102   {
7103     "internal_cascade_rnd.active",
7104     "internal",
7105     "hide Rocks'n'Diamonds elements"
7106   },
7107   {
7108     "internal_cascade_sb",
7109     "internal",
7110     "show Sokoban elements"
7111   },
7112   {
7113     "internal_cascade_sb.active",
7114     "internal",
7115     "hide Sokoban elements"
7116   },
7117   {
7118     "internal_cascade_sp",
7119     "internal",
7120     "show Supaplex elements"
7121   },
7122   {
7123     "internal_cascade_sp.active",
7124     "internal",
7125     "hide Supaplex elements"
7126   },
7127   {
7128     "internal_cascade_dc",
7129     "internal",
7130     "show Diamond Caves II elements"
7131   },
7132   {
7133     "internal_cascade_dc.active",
7134     "internal",
7135     "hide Diamond Caves II elements"
7136   },
7137   {
7138     "internal_cascade_dx",
7139     "internal",
7140     "show DX Boulderdash elements"
7141   },
7142   {
7143     "internal_cascade_dx.active",
7144     "internal",
7145     "hide DX Boulderdash elements"
7146   },
7147   {
7148     "internal_cascade_mm",
7149     "internal",
7150     "show Mirror Magic elements"
7151   },
7152   {
7153     "internal_cascade_mm.active",
7154     "internal",
7155     "hide Mirror Magic elements"
7156   },
7157   {
7158     "internal_cascade_df",
7159     "internal",
7160     "show Deflektor elements"
7161   },
7162   {
7163     "internal_cascade_df.active",
7164     "internal",
7165     "hide Deflektor elements"
7166   },
7167   {
7168     "internal_cascade_chars",
7169     "internal",
7170     "show text elements"
7171   },
7172   {
7173     "internal_cascade_chars.active",
7174     "internal",
7175     "hide text elements"
7176   },
7177   {
7178     "internal_cascade_steel_chars",
7179     "internal",
7180     "show steel text elements"
7181   },
7182   {
7183     "internal_cascade_steel_chars.active",
7184     "internal",
7185     "hide steel text elements"
7186   },
7187   {
7188     "internal_cascade_ce",
7189     "internal",
7190     "show custom elements"
7191   },
7192   {
7193     "internal_cascade_ce.active",
7194     "internal",
7195     "hide custom elements"
7196   },
7197   {
7198     "internal_cascade_ge",
7199     "internal",
7200     "show group elements"
7201   },
7202   {
7203     "internal_cascade_ge.active",
7204     "internal",
7205     "hide group elements"
7206   },
7207   {
7208     "internal_cascade_ref",
7209     "internal",
7210     "show reference elements"
7211   },
7212   {
7213     "internal_cascade_ref.active",
7214     "internal",
7215     "hide reference elements"
7216   },
7217   {
7218     "internal_cascade_user",
7219     "internal",
7220     "show user defined elements"
7221   },
7222   {
7223     "internal_cascade_user.active",
7224     "internal",
7225     "hide user defined elements"
7226   },
7227   {
7228     "internal_cascade_dynamic",
7229     "internal",
7230     "show elements used in this level"
7231   },
7232   {
7233     "internal_cascade_dynamic.active",
7234     "internal",
7235     "hide elements used in this level"
7236   },
7237
7238   // keyword to stop parser: "ELEMENT_INFO_END" <-- do not change!
7239
7240   {
7241     NULL,
7242     NULL,
7243     NULL
7244   }
7245 };
7246
7247
7248 // ----------------------------------------------------------------------------
7249 // element action and direction definitions
7250 // ----------------------------------------------------------------------------
7251
7252 struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] =
7253 {
7254   { ".[DEFAULT]",               ACTION_DEFAULT,                 TRUE    },
7255   { ".waiting",                 ACTION_WAITING,                 TRUE    },
7256   { ".falling",                 ACTION_FALLING,                 TRUE    },
7257   { ".moving",                  ACTION_MOVING,                  TRUE    },
7258   { ".digging",                 ACTION_DIGGING,                 FALSE   },
7259   { ".snapping",                ACTION_SNAPPING,                FALSE   },
7260   { ".collecting",              ACTION_COLLECTING,              FALSE   },
7261   { ".dropping",                ACTION_DROPPING,                FALSE   },
7262   { ".pushing",                 ACTION_PUSHING,                 FALSE   },
7263   { ".walking",                 ACTION_WALKING,                 FALSE   },
7264   { ".passing",                 ACTION_PASSING,                 FALSE   },
7265   { ".impact",                  ACTION_IMPACT,                  FALSE   },
7266   { ".breaking",                ACTION_BREAKING,                FALSE   },
7267   { ".activating",              ACTION_ACTIVATING,              FALSE   },
7268   { ".deactivating",            ACTION_DEACTIVATING,            FALSE   },
7269   { ".opening",                 ACTION_OPENING,                 FALSE   },
7270   { ".closing",                 ACTION_CLOSING,                 FALSE   },
7271   { ".attacking",               ACTION_ATTACKING,               TRUE    },
7272   { ".growing",                 ACTION_GROWING,                 TRUE    },
7273   { ".shrinking",               ACTION_SHRINKING,               FALSE   },
7274   { ".active",                  ACTION_ACTIVE,                  TRUE    },
7275   { ".filling",                 ACTION_FILLING,                 FALSE   },
7276   { ".emptying",                ACTION_EMPTYING,                FALSE   },
7277   { ".changing",                ACTION_CHANGING,                FALSE   },
7278   { ".exploding",               ACTION_EXPLODING,               FALSE   },
7279   { ".boring",                  ACTION_BORING,                  FALSE   },
7280   { ".boring[1]",               ACTION_BORING_1,                FALSE   },
7281   { ".boring[2]",               ACTION_BORING_2,                FALSE   },
7282   { ".boring[3]",               ACTION_BORING_3,                FALSE   },
7283   { ".boring[4]",               ACTION_BORING_4,                FALSE   },
7284   { ".boring[5]",               ACTION_BORING_5,                FALSE   },
7285   { ".boring[6]",               ACTION_BORING_6,                FALSE   },
7286   { ".boring[7]",               ACTION_BORING_7,                FALSE   },
7287   { ".boring[8]",               ACTION_BORING_8,                FALSE   },
7288   { ".boring[9]",               ACTION_BORING_9,                FALSE   },
7289   { ".boring[10]",              ACTION_BORING_10,               FALSE   },
7290   { ".sleeping",                ACTION_SLEEPING,                FALSE   },
7291   { ".sleeping[1]",             ACTION_SLEEPING_1,              FALSE   },
7292   { ".sleeping[2]",             ACTION_SLEEPING_2,              FALSE   },
7293   { ".sleeping[3]",             ACTION_SLEEPING_3,              FALSE   },
7294   { ".awakening",               ACTION_AWAKENING,               FALSE   },
7295   { ".dying",                   ACTION_DYING,                   FALSE   },
7296   { ".turning",                 ACTION_TURNING,                 FALSE   },
7297   { ".turning_from_left",       ACTION_TURNING_FROM_LEFT,       FALSE   },
7298   { ".turning_from_right",      ACTION_TURNING_FROM_RIGHT,      FALSE   },
7299   { ".turning_from_up",         ACTION_TURNING_FROM_UP,         FALSE   },
7300   { ".turning_from_down",       ACTION_TURNING_FROM_DOWN,       FALSE   },
7301   { ".smashed_by_rock",         ACTION_SMASHED_BY_ROCK,         FALSE   },
7302   { ".smashed_by_spring",       ACTION_SMASHED_BY_SPRING,       FALSE   },
7303   { ".eating",                  ACTION_EATING,                  FALSE   },
7304   { ".twinkling",               ACTION_TWINKLING,               FALSE   },
7305   { ".splashing",               ACTION_SPLASHING,               FALSE   },
7306   { ".hitting",                 ACTION_HITTING,                 FALSE   },
7307   { ".page[1]",                 ACTION_PAGE_1,                  FALSE   },
7308   { ".page[2]",                 ACTION_PAGE_2,                  FALSE   },
7309   { ".page[3]",                 ACTION_PAGE_3,                  FALSE   },
7310   { ".page[4]",                 ACTION_PAGE_4,                  FALSE   },
7311   { ".page[5]",                 ACTION_PAGE_5,                  FALSE   },
7312   { ".page[6]",                 ACTION_PAGE_6,                  FALSE   },
7313   { ".page[7]",                 ACTION_PAGE_7,                  FALSE   },
7314   { ".page[8]",                 ACTION_PAGE_8,                  FALSE   },
7315   { ".page[9]",                 ACTION_PAGE_9,                  FALSE   },
7316   { ".page[10]",                ACTION_PAGE_10,                 FALSE   },
7317   { ".page[11]",                ACTION_PAGE_11,                 FALSE   },
7318   { ".page[12]",                ACTION_PAGE_12,                 FALSE   },
7319   { ".page[13]",                ACTION_PAGE_13,                 FALSE   },
7320   { ".page[14]",                ACTION_PAGE_14,                 FALSE   },
7321   { ".page[15]",                ACTION_PAGE_15,                 FALSE   },
7322   { ".page[16]",                ACTION_PAGE_16,                 FALSE   },
7323   { ".page[17]",                ACTION_PAGE_17,                 FALSE   },
7324   { ".page[18]",                ACTION_PAGE_18,                 FALSE   },
7325   { ".page[19]",                ACTION_PAGE_19,                 FALSE   },
7326   { ".page[20]",                ACTION_PAGE_20,                 FALSE   },
7327   { ".page[21]",                ACTION_PAGE_21,                 FALSE   },
7328   { ".page[22]",                ACTION_PAGE_22,                 FALSE   },
7329   { ".page[23]",                ACTION_PAGE_23,                 FALSE   },
7330   { ".page[24]",                ACTION_PAGE_24,                 FALSE   },
7331   { ".page[25]",                ACTION_PAGE_25,                 FALSE   },
7332   { ".page[26]",                ACTION_PAGE_26,                 FALSE   },
7333   { ".page[27]",                ACTION_PAGE_27,                 FALSE   },
7334   { ".page[28]",                ACTION_PAGE_28,                 FALSE   },
7335   { ".page[29]",                ACTION_PAGE_29,                 FALSE   },
7336   { ".page[30]",                ACTION_PAGE_30,                 FALSE   },
7337   { ".page[31]",                ACTION_PAGE_31,                 FALSE   },
7338   { ".page[32]",                ACTION_PAGE_32,                 FALSE   },
7339   { ".part_1",                  ACTION_PART_1,                  FALSE   },
7340   { ".part_2",                  ACTION_PART_2,                  FALSE   },
7341   { ".part_3",                  ACTION_PART_3,                  FALSE   },
7342   { ".part_4",                  ACTION_PART_4,                  FALSE   },
7343   { ".part_5",                  ACTION_PART_5,                  FALSE   },
7344   { ".part_6",                  ACTION_PART_6,                  FALSE   },
7345   { ".part_7",                  ACTION_PART_7,                  FALSE   },
7346   { ".part_8",                  ACTION_PART_8,                  FALSE   },
7347   { ".part_9",                  ACTION_PART_9,                  FALSE   },
7348   { ".part_10",                 ACTION_PART_10,                 FALSE   },
7349   { ".part_11",                 ACTION_PART_11,                 FALSE   },
7350   { ".part_12",                 ACTION_PART_12,                 FALSE   },
7351   { ".part_13",                 ACTION_PART_13,                 FALSE   },
7352   { ".part_14",                 ACTION_PART_14,                 FALSE   },
7353   { ".part_15",                 ACTION_PART_15,                 FALSE   },
7354   { ".part_16",                 ACTION_PART_16,                 FALSE   },
7355   { ".part_17",                 ACTION_PART_17,                 FALSE   },
7356   { ".part_18",                 ACTION_PART_18,                 FALSE   },
7357   { ".part_19",                 ACTION_PART_19,                 FALSE   },
7358   { ".part_20",                 ACTION_PART_20,                 FALSE   },
7359   { ".part_21",                 ACTION_PART_21,                 FALSE   },
7360   { ".part_22",                 ACTION_PART_22,                 FALSE   },
7361   { ".part_23",                 ACTION_PART_23,                 FALSE   },
7362   { ".part_24",                 ACTION_PART_24,                 FALSE   },
7363   { ".part_25",                 ACTION_PART_25,                 FALSE   },
7364   { ".part_26",                 ACTION_PART_26,                 FALSE   },
7365   { ".part_27",                 ACTION_PART_27,                 FALSE   },
7366   { ".part_28",                 ACTION_PART_28,                 FALSE   },
7367   { ".part_29",                 ACTION_PART_29,                 FALSE   },
7368   { ".part_30",                 ACTION_PART_30,                 FALSE   },
7369   { ".part_31",                 ACTION_PART_31,                 FALSE   },
7370   { ".part_32",                 ACTION_PART_32,                 FALSE   },
7371   { ".other",                   ACTION_OTHER,                   FALSE   },
7372
7373   // empty suffix always matches -- check as last entry in InitSoundInfo()
7374   { "",                         ACTION_DEFAULT,                 TRUE    },
7375
7376   { NULL,                       0,                              0       }
7377 };
7378
7379 struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] =
7380 {
7381   { ".left",                    MV_BIT_LEFT                             },
7382   { ".right",                   MV_BIT_RIGHT                            },
7383   { ".up",                      MV_BIT_UP                               },
7384   { ".down",                    MV_BIT_DOWN                             },
7385   { ".upleft",                  MV_BIT_UP                               },
7386   { ".upright",                 MV_BIT_RIGHT                            },
7387   { ".downleft",                MV_BIT_LEFT                             },
7388   { ".downright",               MV_BIT_DOWN                             },
7389
7390   { NULL,                       0                                       }
7391 };
7392
7393 struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] =
7394 {
7395   { ".[DEFAULT]",               GFX_SPECIAL_ARG_DEFAULT,                },
7396   { ".LOADING",                 GFX_SPECIAL_ARG_LOADING,                },
7397   { ".TITLE_INITIAL",           GFX_SPECIAL_ARG_TITLE_INITIAL,          },
7398   { ".TITLE_INITIAL_1",         GFX_SPECIAL_ARG_TITLE_INITIAL_1,        },
7399   { ".TITLE_INITIAL_2",         GFX_SPECIAL_ARG_TITLE_INITIAL_2,        },
7400   { ".TITLE_INITIAL_3",         GFX_SPECIAL_ARG_TITLE_INITIAL_3,        },
7401   { ".TITLE_INITIAL_4",         GFX_SPECIAL_ARG_TITLE_INITIAL_4,        },
7402   { ".TITLE_INITIAL_5",         GFX_SPECIAL_ARG_TITLE_INITIAL_5,        },
7403   { ".TITLE",                   GFX_SPECIAL_ARG_TITLE,                  },
7404   { ".TITLE_1",                 GFX_SPECIAL_ARG_TITLE_1,                },
7405   { ".TITLE_2",                 GFX_SPECIAL_ARG_TITLE_2,                },
7406   { ".TITLE_3",                 GFX_SPECIAL_ARG_TITLE_3,                },
7407   { ".TITLE_4",                 GFX_SPECIAL_ARG_TITLE_4,                },
7408   { ".TITLE_5",                 GFX_SPECIAL_ARG_TITLE_5,                },
7409   { ".MAIN",                    GFX_SPECIAL_ARG_MAIN,                   },
7410   { ".LEVELS",                  GFX_SPECIAL_ARG_LEVELS                  },
7411   { ".LEVELNR",                 GFX_SPECIAL_ARG_LEVELNR                 },
7412   { ".SCORES",                  GFX_SPECIAL_ARG_SCORES,                 },
7413   { ".EDITOR",                  GFX_SPECIAL_ARG_EDITOR,                 },
7414   { ".INFO",                    GFX_SPECIAL_ARG_INFO,                   },
7415   { ".SETUP",                   GFX_SPECIAL_ARG_SETUP,                  },
7416   { ".PLAYING",                 GFX_SPECIAL_ARG_PLAYING,                },
7417   { ".DOOR",                    GFX_SPECIAL_ARG_DOOR,                   },
7418   { ".TAPE",                    GFX_SPECIAL_ARG_TAPE,                   },
7419   { ".PANEL",                   GFX_SPECIAL_ARG_PANEL,                  },
7420   { ".PREVIEW",                 GFX_SPECIAL_ARG_PREVIEW,                },
7421   { ".CRUMBLED",                GFX_SPECIAL_ARG_CRUMBLED,               },
7422   { ".MAINONLY",                GFX_SPECIAL_ARG_MAINONLY,               },
7423   { ".TYPENAME",                GFX_SPECIAL_ARG_TYPENAME,               },
7424   { ".SUBMENU",                 GFX_SPECIAL_ARG_SUBMENU,                },
7425   { ".MENU",                    GFX_SPECIAL_ARG_MENU,                   },
7426   { ".TOONS",                   GFX_SPECIAL_ARG_TOONS,                  },
7427   { ".SCORESOLD",               GFX_SPECIAL_ARG_SCORESOLD,              },
7428   { ".SCORESNEW",               GFX_SPECIAL_ARG_SCORESNEW,              },
7429   { ".NO_TITLE",                GFX_SPECIAL_ARG_NO_TITLE,               },
7430   { ".FADING",                  GFX_SPECIAL_ARG_FADING,                 },
7431   { ".QUIT",                    GFX_SPECIAL_ARG_QUIT,                   },
7432
7433   // empty suffix always matches -- check as last entry in InitMusicInfo()
7434   { "",                         GFX_SPECIAL_ARG_DEFAULT,                },
7435
7436   { NULL,                       0,                                      }
7437 };
7438
7439 #include "conf_var.c"   // include auto-generated data structure definitions
7440
7441
7442 // ----------------------------------------------------------------------------
7443 // font definitions
7444 // ----------------------------------------------------------------------------
7445
7446 // Important: When one entry is a prefix of another entry, the longer entry
7447 // must come first, because the dynamic configuration does prefix matching!
7448 // (These definitions must match the corresponding definitions in "main.h"!)
7449
7450 struct FontInfo font_info[NUM_FONTS + 1] =
7451 {
7452   { "font.initial_1"            },
7453   { "font.initial_2"            },
7454   { "font.initial_3"            },
7455   { "font.initial_4"            },
7456   { "font.title_1"              },
7457   { "font.title_2"              },
7458   { "font.menu_1.active"        },
7459   { "font.menu_2.active"        },
7460   { "font.menu_1"               },
7461   { "font.menu_2"               },
7462   { "font.text_1.active"        },
7463   { "font.text_2.active"        },
7464   { "font.text_3.active"        },
7465   { "font.text_4.active"        },
7466   { "font.text_1"               },
7467   { "font.text_2"               },
7468   { "font.text_3"               },
7469   { "font.text_4"               },
7470   { "font.envelope_1"           },
7471   { "font.envelope_2"           },
7472   { "font.envelope_3"           },
7473   { "font.envelope_4"           },
7474   { "font.request"              },
7475   { "font.input_1.active"       },
7476   { "font.input_2.active"       },
7477   { "font.input_1"              },
7478   { "font.input_2"              },
7479   { "font.option_off_narrow"    },
7480   { "font.option_off"           },
7481   { "font.option_on_narrow"     },
7482   { "font.option_on"            },
7483   { "font.value_1"              },
7484   { "font.value_2"              },
7485   { "font.value_old_narrow"     },
7486   { "font.value_old"            },
7487   { "font.value_narrow"         },
7488   { "font.level_number.active"  },
7489   { "font.level_number"         },
7490   { "font.tape_recorder"        },
7491   { "font.game_info"            },
7492   { "font.info.elements"        },
7493   { "font.info.levelset"        },
7494   { "font.main.network_players" },
7495
7496   { NULL                        }
7497 };
7498
7499 struct GlobalAnimInfo global_anim_info[NUM_GLOBAL_ANIM_TOKENS + 1];
7500
7501 // this contains predefined structure elements to init "global_anim_info"
7502 struct GlobalAnimNameInfo global_anim_name_info[NUM_GLOBAL_ANIM_TOKENS + 1] =
7503 {
7504   // (real) graphic definitions used to define animation graphics
7505   { "gfx.global.anim_1",        },
7506   { "gfx.global.anim_2",        },
7507   { "gfx.global.anim_3",        },
7508   { "gfx.global.anim_4",        },
7509   { "gfx.global.anim_5",        },
7510   { "gfx.global.anim_6",        },
7511   { "gfx.global.anim_7",        },
7512   { "gfx.global.anim_8",        },
7513   { "gfx.global.anim_9",        },
7514   { "gfx.global.anim_10",       },
7515   { "gfx.global.anim_11",       },
7516   { "gfx.global.anim_12",       },
7517   { "gfx.global.anim_13",       },
7518   { "gfx.global.anim_14",       },
7519   { "gfx.global.anim_15",       },
7520   { "gfx.global.anim_16",       },
7521   { "gfx.global.anim_17",       },
7522   { "gfx.global.anim_18",       },
7523   { "gfx.global.anim_19",       },
7524   { "gfx.global.anim_20",       },
7525   { "gfx.global.anim_21",       },
7526   { "gfx.global.anim_22",       },
7527   { "gfx.global.anim_23",       },
7528   { "gfx.global.anim_24",       },
7529   { "gfx.global.anim_25",       },
7530   { "gfx.global.anim_26",       },
7531   { "gfx.global.anim_27",       },
7532   { "gfx.global.anim_28",       },
7533   { "gfx.global.anim_29",       },
7534   { "gfx.global.anim_30",       },
7535   { "gfx.global.anim_31",       },
7536   { "gfx.global.anim_32",       },
7537
7538   // (dummy) graphic definitions used to define animation controls
7539   { "global.anim_1",            },
7540   { "global.anim_2",            },
7541   { "global.anim_3",            },
7542   { "global.anim_4",            },
7543   { "global.anim_5",            },
7544   { "global.anim_6",            },
7545   { "global.anim_7",            },
7546   { "global.anim_8",            },
7547   { "global.anim_9",            },
7548   { "global.anim_10",           },
7549   { "global.anim_11",           },
7550   { "global.anim_12",           },
7551   { "global.anim_13",           },
7552   { "global.anim_14",           },
7553   { "global.anim_15",           },
7554   { "global.anim_16",           },
7555   { "global.anim_17",           },
7556   { "global.anim_18",           },
7557   { "global.anim_19",           },
7558   { "global.anim_20",           },
7559   { "global.anim_21",           },
7560   { "global.anim_22",           },
7561   { "global.anim_23",           },
7562   { "global.anim_24",           },
7563   { "global.anim_25",           },
7564   { "global.anim_26",           },
7565   { "global.anim_27",           },
7566   { "global.anim_28",           },
7567   { "global.anim_29",           },
7568   { "global.anim_30",           },
7569   { "global.anim_31",           },
7570   { "global.anim_32",           },
7571
7572   { NULL                        }
7573 };
7574
7575
7576 // ----------------------------------------------------------------------------
7577 // music token prefix definitions
7578 // ----------------------------------------------------------------------------
7579
7580 struct MusicPrefixInfo music_prefix_info[NUM_MUSIC_PREFIXES + 1] =
7581 {
7582   { "background",               TRUE    },
7583
7584   { NULL,                       0       }
7585 };
7586
7587
7588 // ============================================================================
7589 // main()
7590 // ============================================================================
7591
7592 static void print_usage(void)
7593 {
7594   Print("\n"
7595         "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n"
7596         "\n"
7597         "Options:\n"
7598         "  -b, --basepath DIRECTORY         alternative base DIRECTORY\n"
7599         "  -l, --level DIRECTORY            alternative level DIRECTORY\n"
7600         "  -g, --graphics DIRECTORY         alternative graphics DIRECTORY\n"
7601         "  -s, --sounds DIRECTORY           alternative sounds DIRECTORY\n"
7602         "  -m, --music DIRECTORY            alternative music DIRECTORY\n"
7603         "      --mytapes                    use private tapes for tape tests\n"
7604         "  -n, --network                    network multiplayer game\n"
7605         "      --serveronly                 only start network server\n"
7606         "  -v, --verbose                    verbose mode\n"
7607         "  -V, --version                    show program version\n"
7608         "      --debug                      display debugging information\n"
7609         "  -e, --execute COMMAND            execute batch COMMAND\n"
7610         "\n"
7611         "Valid commands for '--execute' option:\n"
7612         "  \"print graphicsinfo.conf\"        print default graphics config\n"
7613         "  \"print soundsinfo.conf\"          print default sounds config\n"
7614         "  \"print musicinfo.conf\"           print default music config\n"
7615         "  \"print editorsetup.conf\"         print default editor config\n"
7616         "  \"print helpanim.conf\"            print default helpanim config\n"
7617         "  \"print helptext.conf\"            print default helptext config\n"
7618         "  \"dump level FILE\"                dump level data from FILE\n"
7619         "  \"dump tape FILE\"                 dump tape data from FILE\n"
7620         "  \"autotest LEVELDIR [NR ...]\"     test level tapes for LEVELDIR\n"
7621         "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
7622         "  \"autoffwd LEVELDIR [NR ...]\"     ffwd level tapes for LEVELDIR\n"
7623         "  \"autowarp LEVELDIR [NR ...]\"     warp level tapes for LEVELDIR\n"
7624         "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
7625         "  \"create images DIRECTORY\"        write BMP images to DIRECTORY\n"
7626         "  \"create CE image DIRECTORY\"      write BMP image to DIRECTORY\n"
7627         "\n",
7628         program.command_basename);
7629 }
7630
7631 static void print_version(void)
7632 {
7633   Print("%s", getProgramInitString());
7634
7635   if (!strEqual(getProgramVersionString(), getProgramRealVersionString()))
7636   {
7637     Print(" (%s %d.%d.%d.%d%s)",
7638           PROGRAM_TITLE_STRING,
7639           PROGRAM_VERSION_SUPER,
7640           PROGRAM_VERSION_MAJOR,
7641           PROGRAM_VERSION_MINOR,
7642           PROGRAM_VERSION_PATCH,
7643           PROGRAM_VERSION_EXTRA);
7644   }
7645
7646   Print("\n");
7647
7648   if (options.debug)
7649   {
7650     SDL_version sdl_version;
7651
7652     SDL_VERSION(&sdl_version);
7653     Print("- SDL %d.%d.%d\n",
7654           sdl_version.major,
7655           sdl_version.minor,
7656           sdl_version.patch);
7657
7658     SDL_IMAGE_VERSION(&sdl_version);
7659     Print("- SDL_image %d.%d.%d\n",
7660           sdl_version.major,
7661           sdl_version.minor,
7662           sdl_version.patch);
7663
7664     SDL_MIXER_VERSION(&sdl_version);
7665     Print("- SDL_mixer %d.%d.%d\n",
7666           sdl_version.major,
7667           sdl_version.minor,
7668           sdl_version.patch);
7669
7670     SDL_NET_VERSION(&sdl_version);
7671     Print("- SDL_net %d.%d.%d\n",
7672           sdl_version.major,
7673           sdl_version.minor,
7674           sdl_version.patch);
7675   }
7676 }
7677
7678 static void InitProgramConfig(char *command_filename)
7679 {
7680   char *program_title = PROGRAM_TITLE_STRING;
7681   char *program_icon_file = PROGRAM_ICON_FILENAME;
7682   char *program_version = getProgramRealVersionString();
7683   char *config_filename = getProgramConfigFilename(command_filename);
7684   char *userdata_basename = getBaseNameNoSuffix(command_filename);
7685   char *userdata_subdir;
7686   char *userdata_subdir_unix;
7687
7688   // read default program config, if existing
7689   if (fileExists(config_filename))
7690   {
7691     // if program config file exists, derive Unix user data directory from it
7692     // (but only if the program config file is not generic "setup.conf" file)
7693     if (!strEqual(getBaseNamePtr(config_filename), SETUP_FILENAME))
7694     {
7695       userdata_basename = getBaseName(config_filename);
7696
7697       if (strSuffix(userdata_basename, ".conf"))
7698         userdata_basename[strlen(userdata_basename) - 5] = '\0';
7699     }
7700
7701     LoadSetupFromFilename(config_filename);
7702   }
7703
7704   // set user data directory for Linux/Unix (but not Mac OS X)
7705   userdata_subdir_unix = getStringCat2(".", userdata_basename);
7706
7707   // set program title from potentially redefined program title
7708   if (setup.internal.program_title != NULL &&
7709       strlen(setup.internal.program_title) > 0)
7710     program_title = getStringCopy(setup.internal.program_title);
7711
7712   // set program version from potentially redefined program version
7713   if (setup.internal.program_version != NULL &&
7714       strlen(setup.internal.program_version) > 0)
7715     program_version = getStringCopy(setup.internal.program_version);
7716
7717   // set program icon file from potentially redefined program icon file
7718   if (setup.internal.program_icon_file != NULL &&
7719       strlen(setup.internal.program_icon_file) > 0)
7720     program_icon_file = getStringCopy(setup.internal.program_icon_file);
7721
7722 #if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX)
7723   userdata_subdir = program_title;
7724 #elif defined(PLATFORM_UNIX)
7725   userdata_subdir = userdata_subdir_unix;
7726 #else
7727   userdata_subdir = USERDATA_DIRECTORY_OTHER;
7728 #endif
7729
7730   // set default window size (only relevant on program startup)
7731   if (setup.internal.default_window_width  != 0 &&
7732       setup.internal.default_window_height != 0)
7733   {
7734     WIN_XSIZE = setup.internal.default_window_width;
7735     WIN_YSIZE = setup.internal.default_window_height;
7736   }
7737
7738   InitProgramInfo(command_filename,
7739                   config_filename,
7740                   userdata_subdir,
7741                   program_title,
7742                   program_title,
7743                   program_icon_file,
7744                   COOKIE_PREFIX,
7745                   program_version,
7746                   GAME_VERSION_ACTUAL);
7747 }
7748
7749 int main(int argc, char *argv[])
7750 {
7751   InitProgramConfig(argv[0]);
7752
7753   InitWindowTitleFunction(getWindowTitleString);
7754   InitExitMessageFunction(DisplayExitMessage);
7755   InitExitFunction(CloseAllAndExit);
7756   InitPlatformDependentStuff();
7757
7758   GetOptions(argc, argv, print_usage, print_version);
7759   OpenAll();
7760
7761   EventLoop();
7762   CloseAllAndExit(0);
7763
7764   return 0;     // to keep compilers happy
7765 }