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