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