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