X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.c;h=670f5335bf3d06b44fa8bf50fe6fa05c1457bfd7;hp=63d70d6ecb8ca04a389fb04f049e71f4e9b15168;hb=310781167f731177d6d46b15093dc32606eeac4e;hpb=24090f8655f9fbf138c1f9105427728f5c21b0b9 diff --git a/src/main.c b/src/main.c index 63d70d6e..670f5335 100644 --- a/src/main.c +++ b/src/main.c @@ -1,15 +1,13 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* main.c * -***********************************************************/ +// ============================================================================ +// Rocks'n'Diamonds - McDuffin Strikes Back! +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// main.c +// ============================================================================ #include "libgame/libgame.h" @@ -17,19 +15,22 @@ #include "init.h" #include "game.h" #include "tape.h" +#include "tools.h" +#include "files.h" #include "events.h" #include "config.h" -Bitmap *bitmap_db_store; -Bitmap *bitmap_db_cross; Bitmap *bitmap_db_field; Bitmap *bitmap_db_panel; -Bitmap *bitmap_db_door; -Bitmap *bitmap_db_toons; +Bitmap *bitmap_db_door_1; +Bitmap *bitmap_db_door_2; +Bitmap *bitmap_db_store_1; +Bitmap *bitmap_db_store_2; DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; int game_status = -1; +boolean game_status_last_screen = -1; boolean level_editor_test_game = FALSE; boolean network_playing = FALSE; @@ -40,13 +41,6 @@ SDL_Thread *server_thread; int key_joystick_mapping = 0; -#if 1 -boolean redraw[MAX_LEV_FIELDX + 2][MAX_LEV_FIELDY + 2]; -#else -boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; -#endif -int redraw_x1 = 0, redraw_y1 = 0; - short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -89,32 +83,46 @@ int ActiveFont[NUM_FONTS]; int lev_fieldx, lev_fieldy; int scroll_x, scroll_y; -int WIN_XSIZE = 672, WIN_YSIZE = 560; -int SCR_FIELDX = 17, SCR_FIELDY = 17; -int SX = 8, SY = 8; +int WIN_XSIZE = WIN_XSIZE_DEFAULT; +int WIN_YSIZE = WIN_YSIZE_DEFAULT; + +int SCR_FIELDX = SCR_FIELDX_DEFAULT; +int SCR_FIELDY = SCR_FIELDY_DEFAULT; + int REAL_SX = 6, REAL_SY = 6; +int SX = 8, SY = 8; int DX = 566, DY = 60; int VX = 566, VY = 400; int EX = 566, EY = 356; +int dDX, dDY; + +int FULL_SXSIZE = 2 + SXSIZE_DEFAULT + 2; +int FULL_SYSIZE = 2 + SYSIZE_DEFAULT + 2; +int SXSIZE = SXSIZE_DEFAULT; +int SYSIZE = SYSIZE_DEFAULT; + +int FADE_SX = 6, FADE_SY = 6; +int FADE_SXSIZE = 2 + SXSIZE_DEFAULT + 2; +int FADE_SYSIZE = 2 + SXSIZE_DEFAULT + 2; + +int DXSIZE = 100; +int DYSIZE = 280; +int VXSIZE = 100; +int VYSIZE = 100; +int EXSIZE = 100; +int EYSIZE = 144; +int TILESIZE_VAR = TILESIZE; -#if 1 int FX, FY; -#else -int FX = SX, FY = SY; -#endif int ScrollStepSize; int ScreenMovDir = MV_NONE, ScreenMovPos = 0; int ScreenGfxPos = 0; int BorderElement = EL_STEELWALL; +int MenuFrameDelay = MENU_FRAME_DELAY; int GameFrameDelay = GAME_FRAME_DELAY; int FfwdFrameDelay = FFWD_FRAME_DELAY; -#if 1 int BX1, BY1; int BX2, BY2; -#else -int BX1 = 0, BY1 = 0; -int BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1; -#endif int SBX_Left, SBX_Right; int SBY_Upper, SBY_Lower; int ZX, ZY; @@ -136,27 +144,46 @@ struct GlobalInfo global; struct BorderInfo border; struct ViewportInfo viewport; struct TitleFadingInfo fading; +struct TitleFadingInfo title_initial_first_default; struct TitleFadingInfo title_initial_default; +struct TitleFadingInfo title_first_default; struct TitleFadingInfo title_default; +struct TitleMessageInfo titlescreen_initial_first_default; +struct TitleMessageInfo titlescreen_initial_first[MAX_NUM_TITLE_IMAGES]; +struct TitleMessageInfo titlescreen_initial_default; +struct TitleMessageInfo titlescreen_initial[MAX_NUM_TITLE_IMAGES]; +struct TitleMessageInfo titlescreen_first_default; +struct TitleMessageInfo titlescreen_first[MAX_NUM_TITLE_IMAGES]; +struct TitleMessageInfo titlescreen_default; +struct TitleMessageInfo titlescreen[MAX_NUM_TITLE_IMAGES]; +struct TitleMessageInfo titlemessage_initial_first_default; +struct TitleMessageInfo titlemessage_initial_first[MAX_NUM_TITLE_MESSAGES]; struct TitleMessageInfo titlemessage_initial_default; struct TitleMessageInfo titlemessage_initial[MAX_NUM_TITLE_MESSAGES]; +struct TitleMessageInfo titlemessage_first_default; +struct TitleMessageInfo titlemessage_first[MAX_NUM_TITLE_MESSAGES]; struct TitleMessageInfo titlemessage_default; struct TitleMessageInfo titlemessage[MAX_NUM_TITLE_MESSAGES]; struct TitleMessageInfo readme; struct InitInfo init, init_last; struct MenuInfo menu; struct DoorInfo door_1, door_2; +struct RequestInfo request; struct PreviewInfo preview; +struct EditorInfo editor; + struct GraphicInfo *graphic_info = NULL; struct SoundInfo *sound_info = NULL; struct MusicInfo *music_info = NULL; struct MusicFileInfo *music_file_info = NULL; struct HelpAnimInfo *helpanim_info = NULL; + SetupFileHash *helptext_info = NULL; SetupFileHash *image_config_hash = NULL; SetupFileHash *element_token_hash = NULL; SetupFileHash *graphic_token_hash = NULL; SetupFileHash *font_token_hash = NULL; +SetupFileHash *hide_setup_hash = NULL; /* ------------------------------------------------------------------------- */ @@ -1091,37 +1118,37 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "char_copyright", "char", - "letter '©'" + "letter '\xa9'" }, { "char_aumlaut", "char", - "letter 'Ä'" + "letter '\xc4'" }, { "char_oumlaut", "char", - "letter 'Ö'" + "letter '\xd6'" }, { "char_uumlaut", "char", - "letter 'Ü'" + "letter '\xdc'" }, { "char_degree", "char", - "letter '°'" + "letter '\xb0'" }, { "char_trademark", "char", - "letter '®'" + "letter '\xae'" }, { "char_cursor", "char", - "letter ' '" + "letter '\xa0'" }, { "char_unused", @@ -4151,37 +4178,37 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "steel_char_copyright", "steel_char", - "steel letter '©'" + "steel letter '\xa9'" }, { "steel_char_aumlaut", "steel_char", - "steel letter 'Ä'" + "steel letter '\xc4'" }, { "steel_char_oumlaut", "steel_char", - "steel letter 'Ö'" + "steel letter '\xd6'" }, { "steel_char_uumlaut", "steel_char", - "steel letter 'Ü'" + "steel letter '\xdc'" }, { "steel_char_degree", "steel_char", - "steel letter '°'" + "steel letter '\xb0'" }, { "steel_char_trademark", "steel_char", - "steel letter '®'" + "steel letter '\xae'" }, { "steel_char_cursor", "steel_char", - "steel letter ' '" + "steel letter '\xa0'" }, { "steel_char_unused", @@ -4488,371 +4515,2171 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "from_level_template", "element taken from level template" }, - - /* ----------------------------------------------------------------------- */ - /* "real" (and therefore drawable) runtime elements */ - /* ----------------------------------------------------------------------- */ - { - "dynabomb_player_1.active", - "dynabomb", - "-" + "mm_empty_space", + "empty_space", + "empty space" }, { - "dynabomb_player_2.active", - "dynabomb", - "-" + "mm_mirror_1", + "mm_mirror", + "mirror (0\xb0)" }, { - "dynabomb_player_3.active", - "dynabomb", - "-" + "mm_mirror_2", + "mm_mirror", + "mirror (11.25\xb0)" }, { - "dynabomb_player_4.active", - "dynabomb", - "-" + "mm_mirror_3", + "mm_mirror", + "mirror (22.5\xb0)" }, { - "sp_disk_red.active", - "dynamite", - "-" + "mm_mirror_4", + "mm_mirror", + "mirror (33.75\xb0)" }, { - "switchgate.opening", - "switchgate", - "-" + "mm_mirror_5", + "mm_mirror", + "mirror (45\xb0)" }, { - "switchgate.closing", - "switchgate", - "-" + "mm_mirror_6", + "mm_mirror", + "mirror (56.25\xb0)" }, { - "timegate.opening", - "timegate", - "-" + "mm_mirror_7", + "mm_mirror", + "mirror (67.5\xb0)" }, { - "timegate.closing", - "timegate", - "-" + "mm_mirror_8", + "mm_mirror", + "mirror (78.75\xb0)" }, { - "pearl.breaking", - "pearl", - "-" + "mm_mirror_9", + "mm_mirror", + "mirror (90\xb0)" }, { - "trap.active", - "trap", - "-" + "mm_mirror_10", + "mm_mirror", + "mirror (101.25\xb0)" }, { - "invisible_steelwall.active", - "steelwall", - "-" + "mm_mirror_11", + "mm_mirror", + "mirror (112.5\xb0)" }, { - "invisible_wall.active", - "wall", - "-" + "mm_mirror_12", + "mm_mirror", + "mirror (123.75\xb0)" }, { - "invisible_sand.active", - "sand", - "-" + "mm_mirror_13", + "mm_mirror", + "mirror (135\xb0)" }, { - "conveyor_belt_1_left.active", - "conveyor_belt", - "-" + "mm_mirror_14", + "mm_mirror", + "mirror (146.25\xb0)" }, { - "conveyor_belt_1_middle.active", - "conveyor_belt", - "-" + "mm_mirror_15", + "mm_mirror", + "mirror (157.5\xb0)" }, { - "conveyor_belt_1_right.active", - "conveyor_belt", - "-" + "mm_mirror_16", + "mm_mirror", + "mirror (168.75\xb0)" }, { - "conveyor_belt_2_left.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_1", + "mm_steel_grid_fixed", + "fixed steel polarizer (0\xb0)" }, { - "conveyor_belt_2_middle.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_2", + "mm_steel_grid_fixed", + "fixed steel polarizer (90\xb0)" }, { - "conveyor_belt_2_right.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_3", + "mm_steel_grid_fixed", + "fixed steel polarizer (45\xb0)" }, { - "conveyor_belt_3_left.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_4", + "mm_steel_grid_fixed", + "fixed steel polarizer (135\xb0)" }, { - "conveyor_belt_3_middle.active", - "conveyor_belt", - "-" + "mm_mcduffin.right", + "mm_mcduffin", + "Gregor McDuffin (looking right)" }, { - "conveyor_belt_3_right.active", - "conveyor_belt", - "-" + "mm_mcduffin.up", + "mm_mcduffin", + "Gregor McDuffin (looking up)" }, { - "conveyor_belt_4_left.active", - "conveyor_belt", - "-" + "mm_mcduffin.left", + "mm_mcduffin", + "Gregor McDuffin (looking left)" }, { - "conveyor_belt_4_middle.active", - "conveyor_belt", - "-" + "mm_mcduffin.down", + "mm_mcduffin", + "Gregor McDuffin (looking down)" }, { - "conveyor_belt_4_right.active", - "conveyor_belt", - "-" + "mm_exit_closed", + "mm_exit", + "closed exit (MM style)" }, { - "exit.opening", - "exit", - "-" + "mm_exit_opening_1", + "mm_exit", + "opening exit 1" }, { - "exit.closing", - "exit", - "-" + "mm_exit_opening_2", + "mm_exit", + "opening exit 2" }, { - "steel_exit.opening", - "steel_exit", - "-" + "mm_exit_open", + "mm_exit", + "open exit (MM style)" }, { - "steel_exit.closing", - "steel_exit", - "-" + "mm_kettle", + "mm_kettle", + "magic kettle" }, { - "em_exit.opening", - "em_exit", - "-" + "mm_bomb", + "mm_bomb", + "bomb (MM style)" }, { - "em_exit.closing", - "em_exit", - "-" + "mm_prism", + "mm_prism", + "prism" }, { - "em_steel_exit.opening", - "em_steel_exit", - "-" + "mm_steel_wall_1", + "mm_steel_wall", + "steel wall" }, { - "em_steel_exit.closing", - "em_steel_exit", - "-" + "mm_steel_wall_2", + "mm_steel_wall", + "steel wall" }, { - "sp_exit.opening", - "sp_exit", - "-" + "mm_steel_wall_3", + "mm_steel_wall", + "steel wall" }, { - "sp_exit.closing", - "sp_exit", - "-" + "mm_steel_wall_4", + "mm_steel_wall", + "steel wall" }, { - "sp_exit_open", - "sp_exit", - "-" + "mm_steel_wall_5", + "mm_steel_wall", + "steel wall" }, { - "sp_terminal.active", - "sp_terminal", - "-" + "mm_steel_wall_6", + "mm_steel_wall", + "steel wall" }, { - "sp_buggy_base.activating", - "sp_buggy_base", - "-" + "mm_steel_wall_7", + "mm_steel_wall", + "steel wall" }, { - "sp_buggy_base.active", - "sp_buggy_base", - "-" + "mm_steel_wall_8", + "mm_steel_wall", + "steel wall" }, { - "sp_murphy_clone", - "murphy_clone", - "-" + "mm_steel_wall_9", + "mm_steel_wall", + "steel wall" }, { - "amoeba.dropping", - "amoeba", - "-" + "mm_steel_wall_10", + "mm_steel_wall", + "steel wall" }, { - "quicksand.emptying", - "quicksand", - "-" + "mm_steel_wall_11", + "mm_steel_wall", + "steel wall" }, { - "quicksand_fast.emptying", - "quicksand", - "-" + "mm_steel_wall_12", + "mm_steel_wall", + "steel wall" }, { - "magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_13", + "mm_steel_wall", + "steel wall" }, { - "bd_magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_14", + "mm_steel_wall", + "steel wall" }, { - "dc_magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_15", + "mm_steel_wall", + "steel wall" }, { - "magic_wall_full", - "magic_wall", - "-" + "mm_steel_wall_16", + "mm_steel_wall", + "steel wall" }, { - "bd_magic_wall_full", - "magic_wall", - "-" + "mm_wooden_wall_1", + "mm_wooden_wall", + "wooden wall" }, { - "dc_magic_wall_full", - "magic_wall", - "-" + "mm_wooden_wall_2", + "mm_wooden_wall", + "wooden wall" }, { - "magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_3", + "mm_wooden_wall", + "wooden wall" }, { - "bd_magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_4", + "mm_wooden_wall", + "wooden wall" }, { - "dc_magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_5", + "mm_wooden_wall", + "wooden wall" }, { - "magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_6", + "mm_wooden_wall", + "wooden wall" }, { - "bd_magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_7", + "mm_wooden_wall", + "wooden wall" }, { - "dc_magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_8", + "mm_wooden_wall", + "wooden wall" }, - { - "emc_fake_grass.active", - "fake_grass", - "-" + "mm_wooden_wall_9", + "mm_wooden_wall", + "wooden wall" }, { - "gate_1_gray.active", - "gate", - "" + "mm_wooden_wall_10", + "mm_wooden_wall", + "wooden wall" }, { - "gate_2_gray.active", - "gate", - "" + "mm_wooden_wall_11", + "mm_wooden_wall", + "wooden wall" }, { - "gate_3_gray.active", - "gate", - "" + "mm_wooden_wall_12", + "mm_wooden_wall", + "wooden wall" }, { - "gate_4_gray.active", - "gate", - "" + "mm_wooden_wall_13", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_1_gray.active", - "gate", - "" + "mm_wooden_wall_14", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_2_gray.active", - "gate", - "" + "mm_wooden_wall_15", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_3_gray.active", - "gate", - "" + "mm_wooden_wall_16", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_4_gray.active", - "gate", - "" + "mm_ice_wall_1", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_5_gray.active", - "gate", - "", + "mm_ice_wall_2", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_6_gray.active", - "gate", - "", + "mm_ice_wall_3", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_7_gray.active", - "gate", - "", + "mm_ice_wall_4", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_8_gray.active", - "gate", - "", + "mm_ice_wall_5", + "mm_ice_wall", + "ice wall" }, { - "dc_gate_white_gray.active", - "gate", - "", + "mm_ice_wall_6", + "mm_ice_wall", + "ice wall" }, { - "emc_dripper.active", - "dripper", - "dripper" + "mm_ice_wall_7", + "mm_ice_wall", + "ice wall" }, { - "emc_spring_bumper.active", - "emc_spring_bumper", - "spring bumper", + "mm_ice_wall_8", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_9", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_10", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_11", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_12", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_13", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_14", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_15", + "mm_ice_wall", + "ice wall" + }, + { + "mm_ice_wall_16", + "mm_ice_wall", + "ice wall" + }, + { + "mm_amoeba_wall_1", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_2", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_3", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_4", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_5", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_6", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_7", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_8", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_9", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_10", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_11", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_12", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_13", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_14", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_15", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_amoeba_wall_16", + "mm_amoeba_wall", + "amoeba wall" + }, + { + "mm_wooden_block", + "mm_wooden_block", + "wooden block" + }, + { + "mm_gray_ball", + "mm_gray_ball", + "gray ball" + }, + { + "mm_teleporter_1", + "mm_teleporter", + "teleporter (0\xb0)" + }, + { + "mm_teleporter_2", + "mm_teleporter", + "teleporter (22.5\xb0)" + }, + { + "mm_teleporter_3", + "mm_teleporter", + "teleporter (45\xb0)" + }, + { + "mm_teleporter_4", + "mm_teleporter", + "teleporter (67.5\xb0)" + }, + { + "mm_teleporter_5", + "mm_teleporter", + "teleporter (90\xb0)" + }, + { + "mm_teleporter_6", + "mm_teleporter", + "teleporter (112.5\xb0)" + }, + { + "mm_teleporter_7", + "mm_teleporter", + "teleporter (135\xb0)" + }, + { + "mm_teleporter_8", + "mm_teleporter", + "teleporter (157.5\xb0)" + }, + { + "mm_teleporter_9", + "mm_teleporter", + "teleporter (180\xb0)" + }, + { + "mm_teleporter_10", + "mm_teleporter", + "teleporter (202.5\xb0)" + }, + { + "mm_teleporter_11", + "mm_teleporter", + "teleporter (225\xb0)" + }, + { + "mm_teleporter_12", + "mm_teleporter", + "teleporter (247.5\xb0)" + }, + { + "mm_teleporter_13", + "mm_teleporter", + "teleporter (270\xb0)" + }, + { + "mm_teleporter_14", + "mm_teleporter", + "teleporter (292.5\xb0)" + }, + { + "mm_teleporter_15", + "mm_teleporter", + "teleporter (315\xb0)" + }, + { + "mm_teleporter_16", + "mm_teleporter", + "teleporter (337.5\xb0)" + }, + { + "mm_fuse.active", + "mm_fuse", + "fuse (on)" + }, + { + "mm_pacman.right", + "mm_pacman", + "pac man (starts moving right)" + }, + { + "mm_pacman.up", + "mm_pacman", + "pac man (starts moving up)" + }, + { + "mm_pacman.left", + "mm_pacman", + "pac man (starts moving left)" + }, + { + "mm_pacman.down", + "mm_pacman", + "pac man (starts moving down)" + }, + { + "mm_polarizer_1", + "mm_polarizer", + "polarizer (0\xb0)" + }, + { + "mm_polarizer_2", + "mm_polarizer", + "polarizer (11.25\xb0)" + }, + { + "mm_polarizer_3", + "mm_polarizer", + "polarizer (22.5\xb0)" + }, + { + "mm_polarizer_4", + "mm_polarizer", + "polarizer (33.75\xb0)" + }, + { + "mm_polarizer_5", + "mm_polarizer", + "polarizer (45\xb0)" + }, + { + "mm_polarizer_6", + "mm_polarizer", + "polarizer (56.25\xb0)" + }, + { + "mm_polarizer_7", + "mm_polarizer", + "polarizer (67.5\xb0)" + }, + { + "mm_polarizer_8", + "mm_polarizer", + "polarizer (78.75\xb0)" + }, + { + "mm_polarizer_9", + "mm_polarizer", + "polarizer (90\xb0)" + }, + { + "mm_polarizer_10", + "mm_polarizer", + "polarizer (101.25\xb0)" + }, + { + "mm_polarizer_11", + "mm_polarizer", + "polarizer (112.5\xb0)" + }, + { + "mm_polarizer_12", + "mm_polarizer", + "polarizer (123.75\xb0)" + }, + { + "mm_polarizer_13", + "mm_polarizer", + "polarizer (135\xb0)" + }, + { + "mm_polarizer_14", + "mm_polarizer", + "polarizer (146.25\xb0)" + }, + { + "mm_polarizer_15", + "mm_polarizer", + "polarizer (157.5\xb0)" + }, + { + "mm_polarizer_16", + "mm_polarizer", + "polarizer (168.75\xb0)" + }, + { + "mm_polarizer_cross_1", + "mm_polarizer_cross", + "two-way polarizer (0\xb0)" + }, + { + "mm_polarizer_cross_2", + "mm_polarizer_cross", + "two-way polarizer (22.5\xb0)" + }, + { + "mm_polarizer_cross_3", + "mm_polarizer_cross", + "two-way polarizer (45\xb0)" + }, + { + "mm_polarizer_cross_4", + "mm_polarizer_cross", + "two-way polarizer (67.5\xb0)" + }, + { + "mm_mirror_fixed_1", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" + }, + { + "mm_mirror_fixed_2", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" + }, + { + "mm_mirror_fixed_3", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" + }, + { + "mm_mirror_fixed_4", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" + }, + { + "mm_steel_lock", + "mm_steel_lock", + "steel lock" + }, + { + "mm_key", + "mm_key", + "key (MM style)" + }, + { + "mm_lightbulb", + "mm_lightbulb", + "light bulb (off)" + }, + { + "mm_lightbulb.active", + "mm_lightbulb", + "light bulb (on)" + }, + { + "mm_lightball", + "mm_lightball", + "bonus ball" + }, + { + "mm_steel_block", + "mm_steel_block", + "steel block" + }, + { + "mm_wooden_lock", + "mm_wooden_lock", + "wooden lock" + }, + { + "mm_fuel_full", + "mm_fuel", + "extra energy ball (full)" + }, + { + "mm_wooden_grid_fixed_1", + "mm_wooden_grid_fixed", + "fixed wooden polarizer (0\xb0)" + }, + { + "mm_wooden_grid_fixed_2", + "mm_wooden_grid_fixed", + "fixed wooden polarizer (90\xb0)" + }, + { + "mm_wooden_grid_fixed_3", + "mm_wooden_grid_fixed", + "fixed wooden polarizer (45\xb0)" + }, + { + "mm_wooden_grid_fixed_4", + "mm_wooden_grid_fixed", + "fixed wooden polarizer (135\xb0)" + }, + { + "mm_fuel_empty", + "mm_fuel", + "extra energy ball (empty)" + }, + { + "mm_unused_156", + "unused", + "(not used)" + }, + { + "mm_unused_157", + "unused", + "(not used)" + }, + { + "mm_unused_158", + "unused", + "(not used)" + }, + { + "mm_unused_159", + "unused", + "(not used)" + }, + { + "df_mirror_1", + "df_mirror", + "mirror (DF style) (0\xb0)" + }, + { + "df_mirror_2", + "df_mirror", + "mirror (DF style) (11.25\xb0)" + }, + { + "df_mirror_3", + "df_mirror", + "mirror (DF style) (22.5\xb0)" + }, + { + "df_mirror_4", + "df_mirror", + "mirror (DF style) (33.75\xb0)" + }, + { + "df_mirror_5", + "df_mirror", + "mirror (DF style) (45\xb0)" + }, + { + "df_mirror_6", + "df_mirror", + "mirror (DF style) (56.25\xb0)" + }, + { + "df_mirror_7", + "df_mirror", + "mirror (DF style) (67.5\xb0)" + }, + { + "df_mirror_8", + "df_mirror", + "mirror (DF style) (78.75\xb0)" + }, + { + "df_mirror_9", + "df_mirror", + "mirror (DF style) (90\xb0)" + }, + { + "df_mirror_10", + "df_mirror", + "mirror (DF style) (101.25\xb0)" + }, + { + "df_mirror_11", + "df_mirror", + "mirror (DF style) (112.5\xb0)" + }, + { + "df_mirror_12", + "df_mirror", + "mirror (DF style) (123.75\xb0)" + }, + { + "df_mirror_13", + "df_mirror", + "mirror (DF style) (135\xb0)" + }, + { + "df_mirror_14", + "df_mirror", + "mirror (DF style) (146.25\xb0)" + }, + { + "df_mirror_15", + "df_mirror", + "mirror (DF style) (157.5\xb0)" + }, + { + "df_mirror_16", + "df_mirror", + "mirror (DF style) (168.75\xb0)" + }, + { + "df_wooden_grid_fixed_1", + "df_wooden_grid_fixed", + "fixed wooden polarizer (0\xb0)" + }, + { + "df_wooden_grid_fixed_2", + "df_wooden_grid_fixed", + "fixed wooden polarizer (22.5\xb0)" + }, + { + "df_wooden_grid_fixed_3", + "df_wooden_grid_fixed", + "fixed wooden polarizer (45\xb0)" + }, + { + "df_wooden_grid_fixed_4", + "df_wooden_grid_fixed", + "fixed wooden polarizer (67.5\xb0)" + }, + { + "df_wooden_grid_fixed_5", + "df_wooden_grid_fixed", + "fixed wooden polarizer (90\xb0)" + }, + { + "df_wooden_grid_fixed_6", + "df_wooden_grid_fixed", + "fixed wooden polarizer (112.5\xb0)" + }, + { + "df_wooden_grid_fixed_7", + "df_wooden_grid_fixed", + "fixed wooden polarizer (135\xb0)" + }, + { + "df_wooden_grid_fixed_8", + "df_wooden_grid_fixed", + "fixed wooden polarizer (157.5\xb0)" + }, + { + "df_steel_grid_fixed_1", + "df_steel_grid_fixed", + "fixed steel polarizer (0\xb0)" + }, + { + "df_steel_grid_fixed_2", + "df_steel_grid_fixed", + "fixed steel polarizer (22.5\xb0)" + }, + { + "df_steel_grid_fixed_3", + "df_steel_grid_fixed", + "fixed steel polarizer (45\xb0)" + }, + { + "df_steel_grid_fixed_4", + "df_steel_grid_fixed", + "fixed steel polarizer (67.5\xb0)" + }, + { + "df_steel_grid_fixed_5", + "df_steel_grid_fixed", + "fixed steel polarizer (90\xb0)" + }, + { + "df_steel_grid_fixed_6", + "df_steel_grid_fixed", + "fixed steel polarizer (112.5\xb0)" + }, + { + "df_steel_grid_fixed_7", + "df_steel_grid_fixed", + "fixed steel polarizer (135\xb0)" + }, + { + "df_steel_grid_fixed_8", + "df_steel_grid_fixed", + "fixed steel polarizer (157.5\xb0)" + }, + { + "df_wooden_wall_1", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_2", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_3", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_4", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_5", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_6", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_7", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_8", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_9", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_10", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_11", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_12", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_13", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_14", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_15", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_wooden_wall_16", + "df_wooden_wall", + "wooden wall (DF style)" + }, + { + "df_steel_wall_1", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_2", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_3", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_4", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_5", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_6", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_7", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_8", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_9", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_10", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_11", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_12", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_13", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_14", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_15", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_steel_wall_16", + "df_steel_wall", + "steel wall (DF style)" + }, + { + "df_empty_space", + "empty_space", + "empty space" + }, + { + "df_cell", + "df_cell", + "cell" + }, + { + "df_mine", + "df_mine", + "mine" + }, + { + "df_refractor", + "df_refractor", + "refractor" + }, + { + "df_laser.right", + "df_laser", + "laser cannon (shooting right)" + }, + { + "df_laser.up", + "df_laser", + "laser cannon (shooting up)" + }, + { + "df_laser.left", + "df_laser", + "laser cannon (shooting left)" + }, + { + "df_laser.down", + "df_laser", + "laser cannon (shooting down)" + }, + { + "df_receiver.right", + "df_receiver", + "laser receiver (directed right)" + }, + { + "df_receiver.up", + "df_receiver", + "laser receiver (directed up)" + }, + { + "df_receiver.left", + "df_receiver", + "laser receiver (directed left)" + }, + { + "df_receiver.down", + "df_receiver", + "laser receiver (directed down)" + }, + { + "df_fibre_optic_red_1", + "df_fibre_optic", + "red fibre optic (part 1)" + }, + { + "df_fibre_optic_red_2", + "df_fibre_optic", + "red fibre optic (part 2)" + }, + { + "df_fibre_optic_yellow_1", + "df_fibre_optic", + "yellow fibre optic (part 1)" + }, + { + "df_fibre_optic_yellow_2", + "df_fibre_optic", + "yellow fibre optic (part 2)" + }, + { + "df_fibre_optic_green_1", + "df_fibre_optic", + "green fibre optic (part 1)" + }, + { + "df_fibre_optic_green_2", + "df_fibre_optic", + "green fibre optic (part 2)" + }, + { + "df_fibre_optic_blue_1", + "df_fibre_optic", + "blue fibre optic (part 1)" + }, + { + "df_fibre_optic_blue_2", + "df_fibre_optic", + "blue fibre optic (part 2)" + }, + { + "df_mirror_rotating_1", + "df_mirror_rotating", + "rotating mirror (0\xb0)" + }, + { + "df_mirror_rotating_2", + "df_mirror_rotating", + "rotating mirror (11.25\xb0)" + }, + { + "df_mirror_rotating_3", + "df_mirror_rotating", + "rotating mirror (22.5\xb0)" + }, + { + "df_mirror_rotating_4", + "df_mirror_rotating", + "rotating mirror (33.75\xb0)" + }, + { + "df_mirror_rotating_5", + "df_mirror_rotating", + "rotating mirror (45\xb0)" + }, + { + "df_mirror_rotating_6", + "df_mirror_rotating", + "rotating mirror (56.25\xb0)" + }, + { + "df_mirror_rotating_7", + "df_mirror_rotating", + "rotating mirror (67.5\xb0)" + }, + { + "df_mirror_rotating_8", + "df_mirror_rotating", + "rotating mirror (78.75\xb0)" + }, + { + "df_mirror_rotating_9", + "df_mirror_rotating", + "rotating mirror (90\xb0)" + }, + { + "df_mirror_rotating_10", + "df_mirror_rotating", + "rotating mirror (101.25\xb0)" + }, + { + "df_mirror_rotating_11", + "df_mirror_rotating", + "rotating mirror (112.5\xb0)" + }, + { + "df_mirror_rotating_12", + "df_mirror_rotating", + "rotating mirror (123.75\xb0)" + }, + { + "df_mirror_rotating_13", + "df_mirror_rotating", + "rotating mirror (135\xb0)" + }, + { + "df_mirror_rotating_14", + "df_mirror_rotating", + "rotating mirror (146.25\xb0)" + }, + { + "df_mirror_rotating_15", + "df_mirror_rotating", + "rotating mirror (157.5\xb0)" + }, + { + "df_mirror_rotating_16", + "df_mirror_rotating", + "rotating mirror (168.75\xb0)" + }, + { + "df_wooden_grid_rotating_1", + "df_wooden_grid_rotating", + "rotating wooden polarizer (0\xb0)" + }, + { + "df_wooden_grid_rotating_2", + "df_wooden_grid_rotating", + "rotating wooden polarizer (22.5\xb0)" + }, + { + "df_wooden_grid_rotating_3", + "df_wooden_grid_rotating", + "rotating wooden polarizer (45\xb0)" + }, + { + "df_wooden_grid_rotating_4", + "df_wooden_grid_rotating", + "rotating wooden polarizer (67.5\xb0)" + }, + { + "df_wooden_grid_rotating_5", + "df_wooden_grid_rotating", + "rotating wooden polarizer (90\xb0)" + }, + { + "df_wooden_grid_rotating_6", + "df_wooden_grid_rotating", + "rotating wooden polarizer (112.5\xb0)" + }, + { + "df_wooden_grid_rotating_7", + "df_wooden_grid_rotating", + "rotating wooden polarizer (135\xb0)" + }, + { + "df_wooden_grid_rotating_8", + "df_wooden_grid_rotating", + "rotating wooden polarizer (157.5\xb0)" + }, + { + "df_steel_grid_rotating_1", + "df_steel_grid_rotating", + "rotating steel polarizer (0\xb0)" + }, + { + "df_steel_grid_rotating_2", + "df_steel_grid_rotating", + "rotating steel polarizer (22.5\xb0)" + }, + { + "df_steel_grid_rotating_3", + "df_steel_grid_rotating", + "rotating steel polarizer (45\xb0)" + }, + { + "df_steel_grid_rotating_4", + "df_steel_grid_rotating", + "rotating steel polarizer (67.5\xb0)" + }, + { + "df_steel_grid_rotating_5", + "df_steel_grid_rotating", + "rotating steel polarizer (90\xb0)" + }, + { + "df_steel_grid_rotating_6", + "df_steel_grid_rotating", + "rotating steel polarizer (112.5\xb0)" + }, + { + "df_steel_grid_rotating_7", + "df_steel_grid_rotating", + "rotating steel polarizer (135\xb0)" + }, + { + "df_steel_grid_rotating_8", + "df_steel_grid_rotating", + "rotating steel polarizer (157.5\xb0)" + }, + { + "mm_teleporter_red_1", + "mm_teleporter", + "red teleporter (0\xb0)" + }, + { + "mm_teleporter_red_2", + "mm_teleporter", + "red teleporter (22.5\xb0)" + }, + { + "mm_teleporter_red_3", + "mm_teleporter", + "red teleporter (45\xb0)" + }, + { + "mm_teleporter_red_4", + "mm_teleporter", + "red teleporter (67.5\xb0)" + }, + { + "mm_teleporter_red_5", + "mm_teleporter", + "red teleporter (90\xb0)" + }, + { + "mm_teleporter_red_6", + "mm_teleporter", + "red teleporter (112.5\xb0)" + }, + { + "mm_teleporter_red_7", + "mm_teleporter", + "red teleporter (135\xb0)" + }, + { + "mm_teleporter_red_8", + "mm_teleporter", + "red teleporter (157.5\xb0)" + }, + { + "mm_teleporter_red_9", + "mm_teleporter", + "red teleporter (180\xb0)" + }, + { + "mm_teleporter_red_10", + "mm_teleporter", + "red teleporter (202.5\xb0)" + }, + { + "mm_teleporter_red_11", + "mm_teleporter", + "red teleporter (225\xb0)" + }, + { + "mm_teleporter_red_12", + "mm_teleporter", + "red teleporter (247.5\xb0)" + }, + { + "mm_teleporter_red_13", + "mm_teleporter", + "red teleporter (270\xb0)" + }, + { + "mm_teleporter_red_14", + "mm_teleporter", + "red teleporter (292.5\xb0)" + }, + { + "mm_teleporter_red_15", + "mm_teleporter", + "red teleporter (315\xb0)" + }, + { + "mm_teleporter_red_16", + "mm_teleporter", + "red teleporter (337.5\xb0)" + }, + { + "mm_teleporter_yellow_1", + "mm_teleporter", + "yellow teleporter (0\xb0)" + }, + { + "mm_teleporter_yellow_2", + "mm_teleporter", + "yellow teleporter (22.5\xb0)" + }, + { + "mm_teleporter_yellow_3", + "mm_teleporter", + "yellow teleporter (45\xb0)" + }, + { + "mm_teleporter_yellow_4", + "mm_teleporter", + "yellow teleporter (67.5\xb0)" + }, + { + "mm_teleporter_yellow_5", + "mm_teleporter", + "yellow teleporter (90\xb0)" + }, + { + "mm_teleporter_yellow_6", + "mm_teleporter", + "yellow teleporter (112.5\xb0)" + }, + { + "mm_teleporter_yellow_7", + "mm_teleporter", + "yellow teleporter (135\xb0)" + }, + { + "mm_teleporter_yellow_8", + "mm_teleporter", + "yellow teleporter (157.5\xb0)" + }, + { + "mm_teleporter_yellow_9", + "mm_teleporter", + "yellow teleporter (180\xb0)" + }, + { + "mm_teleporter_yellow_10", + "mm_teleporter", + "yellow teleporter (202.5\xb0)" + }, + { + "mm_teleporter_yellow_11", + "mm_teleporter", + "yellow teleporter (225\xb0)" + }, + { + "mm_teleporter_yellow_12", + "mm_teleporter", + "yellow teleporter (247.5\xb0)" + }, + { + "mm_teleporter_yellow_13", + "mm_teleporter", + "yellow teleporter (270\xb0)" + }, + { + "mm_teleporter_yellow_14", + "mm_teleporter", + "yellow teleporter (292.5\xb0)" + }, + { + "mm_teleporter_yellow_15", + "mm_teleporter", + "yellow teleporter (315\xb0)" + }, + { + "mm_teleporter_yellow_16", + "mm_teleporter", + "yellow teleporter (337.5\xb0)" + }, + { + "mm_teleporter_green_1", + "mm_teleporter", + "green teleporter (0\xb0)" + }, + { + "mm_teleporter_green_2", + "mm_teleporter", + "green teleporter (22.5\xb0)" + }, + { + "mm_teleporter_green_3", + "mm_teleporter", + "green teleporter (45\xb0)" + }, + { + "mm_teleporter_green_4", + "mm_teleporter", + "green teleporter (67.5\xb0)" + }, + { + "mm_teleporter_green_5", + "mm_teleporter", + "green teleporter (90\xb0)" + }, + { + "mm_teleporter_green_6", + "mm_teleporter", + "green teleporter (112.5\xb0)" + }, + { + "mm_teleporter_green_7", + "mm_teleporter", + "green teleporter (135\xb0)" + }, + { + "mm_teleporter_green_8", + "mm_teleporter", + "green teleporter (157.5\xb0)" + }, + { + "mm_teleporter_green_9", + "mm_teleporter", + "green teleporter (180\xb0)" + }, + { + "mm_teleporter_green_10", + "mm_teleporter", + "green teleporter (202.5\xb0)" + }, + { + "mm_teleporter_green_11", + "mm_teleporter", + "green teleporter (225\xb0)" + }, + { + "mm_teleporter_green_12", + "mm_teleporter", + "green teleporter (247.5\xb0)" + }, + { + "mm_teleporter_green_13", + "mm_teleporter", + "green teleporter (270\xb0)" + }, + { + "mm_teleporter_green_14", + "mm_teleporter", + "green teleporter (292.5\xb0)" + }, + { + "mm_teleporter_green_15", + "mm_teleporter", + "green teleporter (315\xb0)" + }, + { + "mm_teleporter_green_16", + "mm_teleporter", + "green teleporter (337.5\xb0)" + }, + { + "mm_teleporter_blue_1", + "mm_teleporter", + "blue teleporter (0\xb0)" + }, + { + "mm_teleporter_blue_2", + "mm_teleporter", + "blue teleporter (22.5\xb0)" + }, + { + "mm_teleporter_blue_3", + "mm_teleporter", + "blue teleporter (45\xb0)" + }, + { + "mm_teleporter_blue_4", + "mm_teleporter", + "blue teleporter (67.5\xb0)" + }, + { + "mm_teleporter_blue_5", + "mm_teleporter", + "blue teleporter (90\xb0)" + }, + { + "mm_teleporter_blue_6", + "mm_teleporter", + "blue teleporter (112.5\xb0)" + }, + { + "mm_teleporter_blue_7", + "mm_teleporter", + "blue teleporter (135\xb0)" + }, + { + "mm_teleporter_blue_8", + "mm_teleporter", + "blue teleporter (157.5\xb0)" + }, + { + "mm_teleporter_blue_9", + "mm_teleporter", + "blue teleporter (180\xb0)" + }, + { + "mm_teleporter_blue_10", + "mm_teleporter", + "blue teleporter (202.5\xb0)" + }, + { + "mm_teleporter_blue_11", + "mm_teleporter", + "blue teleporter (225\xb0)" + }, + { + "mm_teleporter_blue_12", + "mm_teleporter", + "blue teleporter (247.5\xb0)" + }, + { + "mm_teleporter_blue_13", + "mm_teleporter", + "blue teleporter (270\xb0)" + }, + { + "mm_teleporter_blue_14", + "mm_teleporter", + "blue teleporter (292.5\xb0)" + }, + { + "mm_teleporter_blue_15", + "mm_teleporter", + "blue teleporter (315\xb0)" + }, + { + "mm_teleporter_blue_16", + "mm_teleporter", + "blue teleporter (337.5\xb0)" + }, + { + "mm_mcduffin", + "mm_mcduffin", + "Gregor McDuffin" + }, + { + "mm_pacman", + "mm_pacman", + "pac man (MM style)" + }, + { + "mm_fuse", + "mm_fuse", + "fuse (off)", + }, + { + "mm_steel_wall", + "mm_steel_wall", + "steel wall", + }, + { + "mm_wooden_wall", + "mm_wooden_wall", + "wooden wall", + }, + { + "mm_ice_wall", + "mm_ice_wall", + "ice wall", + }, + { + "mm_amoeba_wall", + "mm_amoeba_wall", + "amoeba wall", + }, + { + "df_laser", + "df_laser", + "laser cannon" + }, + { + "df_receiver", + "df_receiver", + "laser receiver" + }, + { + "df_steel_wall", + "df_steel_wall", + "steel wall (DF style)", + }, + { + "df_wooden_wall", + "df_wooden_wall", + "wooden wall (DF style)", + }, + + /* ----------------------------------------------------------------------- */ + /* "real" (and therefore drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ + + { + "dynabomb_player_1.active", + "dynabomb", + "-" + }, + { + "dynabomb_player_2.active", + "dynabomb", + "-" + }, + { + "dynabomb_player_3.active", + "dynabomb", + "-" + }, + { + "dynabomb_player_4.active", + "dynabomb", + "-" + }, + { + "sp_disk_red.active", + "dynamite", + "-" + }, + { + "switchgate.opening", + "switchgate", + "-" + }, + { + "switchgate.closing", + "switchgate", + "-" + }, + { + "timegate.opening", + "timegate", + "-" + }, + { + "timegate.closing", + "timegate", + "-" + }, + { + "pearl.breaking", + "pearl", + "-" + }, + { + "trap.active", + "trap", + "-" + }, + { + "invisible_steelwall.active", + "steelwall", + "-" + }, + { + "invisible_wall.active", + "wall", + "-" + }, + { + "invisible_sand.active", + "sand", + "-" + }, + { + "conveyor_belt_1_left.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_1_middle.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_1_right.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_2_left.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_2_middle.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_2_right.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_3_left.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_3_middle.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_3_right.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_4_left.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_4_middle.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_4_right.active", + "conveyor_belt", + "-" + }, + { + "exit.opening", + "exit", + "-" + }, + { + "exit.closing", + "exit", + "-" + }, + { + "steel_exit.opening", + "steel_exit", + "-" + }, + { + "steel_exit.closing", + "steel_exit", + "-" + }, + { + "em_exit.opening", + "em_exit", + "-" + }, + { + "em_exit.closing", + "em_exit", + "-" + }, + { + "em_steel_exit.opening", + "em_steel_exit", + "-" + }, + { + "em_steel_exit.closing", + "em_steel_exit", + "-" + }, + { + "sp_exit.opening", + "sp_exit", + "-" + }, + { + "sp_exit.closing", + "sp_exit", + "-" + }, + { + "sp_exit_open", + "sp_exit", + "-" + }, + { + "sp_terminal.active", + "sp_terminal", + "-" + }, + { + "sp_buggy_base.activating", + "sp_buggy_base", + "-" + }, + { + "sp_buggy_base.active", + "sp_buggy_base", + "-" + }, + { + "sp_murphy_clone", + "murphy_clone", + "-" + }, + { + "amoeba.dropping", + "amoeba", + "-" + }, + { + "quicksand.emptying", + "quicksand", + "-" + }, + { + "quicksand_fast.emptying", + "quicksand", + "-" + }, + { + "magic_wall.active", + "magic_wall", + "-" + }, + { + "bd_magic_wall.active", + "magic_wall", + "-" + }, + { + "dc_magic_wall.active", + "magic_wall", + "-" + }, + { + "magic_wall_full", + "magic_wall", + "-" + }, + { + "bd_magic_wall_full", + "magic_wall", + "-" + }, + { + "dc_magic_wall_full", + "magic_wall", + "-" + }, + { + "magic_wall.emptying", + "magic_wall", + "-" + }, + { + "bd_magic_wall.emptying", + "magic_wall", + "-" + }, + { + "dc_magic_wall.emptying", + "magic_wall", + "-" + }, + { + "magic_wall_dead", + "magic_wall", + "-" + }, + { + "bd_magic_wall_dead", + "magic_wall", + "-" + }, + { + "dc_magic_wall_dead", + "magic_wall", + "-" + }, + + { + "emc_fake_grass.active", + "fake_grass", + "-" + }, + { + "gate_1_gray.active", + "gate", + "" + }, + { + "gate_2_gray.active", + "gate", + "" + }, + { + "gate_3_gray.active", + "gate", + "" + }, + { + "gate_4_gray.active", + "gate", + "" + }, + { + "em_gate_1_gray.active", + "gate", + "" + }, + { + "em_gate_2_gray.active", + "gate", + "" + }, + { + "em_gate_3_gray.active", + "gate", + "" + }, + { + "em_gate_4_gray.active", + "gate", + "" + }, + { + "emc_gate_5_gray.active", + "gate", + "", + }, + { + "emc_gate_6_gray.active", + "gate", + "", + }, + { + "emc_gate_7_gray.active", + "gate", + "", + }, + { + "emc_gate_8_gray.active", + "gate", + "", + }, + { + "dc_gate_white_gray.active", + "gate", + "", + }, + { + "emc_dripper.active", + "dripper", + "dripper" + }, + { + "emc_spring_bumper.active", + "emc_spring_bumper", + "spring bumper", + }, + { + "mm_exit.opening", + "mm_exit", + "-" + }, + { + "mm_exit.closing", + "mm_exit", + "-" + }, + { + "mm_gray_ball.opening", + "mm_gray_ball", + "-", + }, + { + "mm_ice_wall.shrinking", + "mm_ice_wall", + "-", + }, + { + "mm_amoeba_wall.growing", + "mm_amoeba_wall", + "-", + }, + { + "mm_pacman.eating.right", + "mm_pacman", + "pac man (eating right)" + }, + { + "mm_pacman.eating.up", + "mm_pacman", + "pac man (eating up)" + }, + { + "mm_pacman.eating.left", + "mm_pacman", + "pac man (eating left)" + }, + { + "mm_pacman.eating.down", + "mm_pacman", + "pac man (eating down)" }, /* ----------------------------------------------------------------------- */ @@ -5089,6 +6916,71 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "amoeba", "-" }, + { + "mm_lightball_red", + "-", + "-" + }, + { + "mm_lightball_blue", + "-", + "-" + }, + { + "mm_lightball_yellow", + "-", + "-" + }, + { + "mm_mask_mcduffin.right", + "-", + "-" + }, + { + "mm_mask_mcduffin.up", + "-", + "-" + }, + { + "mm_mask_mcduffin.left", + "-", + "-" + }, + { + "mm_mask_mcduffin.down", + "-", + "-" + }, + { + "mm_mask_grid_1", + "-", + "-" + }, + { + "mm_mask_grid_2", + "-", + "-" + }, + { + "mm_mask_grid_3", + "-", + "-" + }, + { + "mm_mask_grid_4", + "-", + "-" + }, + { + "mm_mask_rectangle", + "-", + "-" + }, + { + "mm_mask_circle", + "-", + "-" + }, { "[default]", "default", @@ -5109,6 +7001,11 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "sb_default", "-" }, + { + "[mm_default]", + "mm_default", + "-" + }, { "graphic_1", "graphic", @@ -5249,6 +7146,26 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "internal", "hide DX Boulderdash elements" }, + { + "internal_cascade_mm", + "internal", + "show Mirror Magic elements" + }, + { + "internal_cascade_mm.active", + "internal", + "hide Mirror Magic elements" + }, + { + "internal_cascade_df", + "internal", + "show Deflektor elements" + }, + { + "internal_cascade_df.active", + "internal", + "hide Deflektor elements" + }, { "internal_cascade_chars", "internal", @@ -5388,6 +7305,7 @@ struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] = { ".eating", ACTION_EATING, FALSE }, { ".twinkling", ACTION_TWINKLING, FALSE }, { ".splashing", ACTION_SPLASHING, FALSE }, + { ".hitting", ACTION_HITTING, FALSE }, { ".page[1]", ACTION_PAGE_1, FALSE }, { ".page[2]", ACTION_PAGE_2, FALSE }, { ".page[3]", ACTION_PAGE_3, FALSE }, @@ -5420,6 +7338,38 @@ struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] = { ".page[30]", ACTION_PAGE_30, FALSE }, { ".page[31]", ACTION_PAGE_31, FALSE }, { ".page[32]", ACTION_PAGE_32, FALSE }, + { ".part_1", ACTION_PART_1, FALSE }, + { ".part_2", ACTION_PART_2, FALSE }, + { ".part_3", ACTION_PART_3, FALSE }, + { ".part_4", ACTION_PART_4, FALSE }, + { ".part_5", ACTION_PART_5, FALSE }, + { ".part_6", ACTION_PART_6, FALSE }, + { ".part_7", ACTION_PART_7, FALSE }, + { ".part_8", ACTION_PART_8, FALSE }, + { ".part_9", ACTION_PART_9, FALSE }, + { ".part_10", ACTION_PART_10, FALSE }, + { ".part_11", ACTION_PART_11, FALSE }, + { ".part_12", ACTION_PART_12, FALSE }, + { ".part_13", ACTION_PART_13, FALSE }, + { ".part_14", ACTION_PART_14, FALSE }, + { ".part_15", ACTION_PART_15, FALSE }, + { ".part_16", ACTION_PART_16, FALSE }, + { ".part_17", ACTION_PART_17, FALSE }, + { ".part_18", ACTION_PART_18, FALSE }, + { ".part_19", ACTION_PART_19, FALSE }, + { ".part_20", ACTION_PART_20, FALSE }, + { ".part_21", ACTION_PART_21, FALSE }, + { ".part_22", ACTION_PART_22, FALSE }, + { ".part_23", ACTION_PART_23, FALSE }, + { ".part_24", ACTION_PART_24, FALSE }, + { ".part_25", ACTION_PART_25, FALSE }, + { ".part_26", ACTION_PART_26, FALSE }, + { ".part_27", ACTION_PART_27, FALSE }, + { ".part_28", ACTION_PART_28, FALSE }, + { ".part_29", ACTION_PART_29, FALSE }, + { ".part_30", ACTION_PART_30, FALSE }, + { ".part_31", ACTION_PART_31, FALSE }, + { ".part_32", ACTION_PART_32, FALSE }, { ".other", ACTION_OTHER, FALSE }, /* empty suffix always matches -- check as last entry in InitSoundInfo() */ @@ -5447,18 +7397,39 @@ struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = { ".[DEFAULT]", GFX_SPECIAL_ARG_DEFAULT, }, { ".LOADING", GFX_SPECIAL_ARG_LOADING, }, { ".TITLE_INITIAL", GFX_SPECIAL_ARG_TITLE_INITIAL, }, + { ".TITLE_INITIAL_1", GFX_SPECIAL_ARG_TITLE_INITIAL_1, }, + { ".TITLE_INITIAL_2", GFX_SPECIAL_ARG_TITLE_INITIAL_2, }, + { ".TITLE_INITIAL_3", GFX_SPECIAL_ARG_TITLE_INITIAL_3, }, + { ".TITLE_INITIAL_4", GFX_SPECIAL_ARG_TITLE_INITIAL_4, }, + { ".TITLE_INITIAL_5", GFX_SPECIAL_ARG_TITLE_INITIAL_5, }, { ".TITLE", GFX_SPECIAL_ARG_TITLE, }, + { ".TITLE_1", GFX_SPECIAL_ARG_TITLE_1, }, + { ".TITLE_2", GFX_SPECIAL_ARG_TITLE_2, }, + { ".TITLE_3", GFX_SPECIAL_ARG_TITLE_3, }, + { ".TITLE_4", GFX_SPECIAL_ARG_TITLE_4, }, + { ".TITLE_5", GFX_SPECIAL_ARG_TITLE_5, }, { ".MAIN", GFX_SPECIAL_ARG_MAIN, }, { ".LEVELS", GFX_SPECIAL_ARG_LEVELS }, + { ".LEVELNR", GFX_SPECIAL_ARG_LEVELNR }, { ".SCORES", GFX_SPECIAL_ARG_SCORES, }, { ".EDITOR", GFX_SPECIAL_ARG_EDITOR, }, { ".INFO", GFX_SPECIAL_ARG_INFO, }, { ".SETUP", GFX_SPECIAL_ARG_SETUP, }, { ".PLAYING", GFX_SPECIAL_ARG_PLAYING, }, { ".DOOR", GFX_SPECIAL_ARG_DOOR, }, + { ".TAPE", GFX_SPECIAL_ARG_TAPE, }, { ".PANEL", GFX_SPECIAL_ARG_PANEL, }, { ".PREVIEW", GFX_SPECIAL_ARG_PREVIEW, }, { ".CRUMBLED", GFX_SPECIAL_ARG_CRUMBLED, }, + { ".MAINONLY", GFX_SPECIAL_ARG_MAINONLY, }, + { ".TYPENAME", GFX_SPECIAL_ARG_TYPENAME, }, + { ".SUBMENU", GFX_SPECIAL_ARG_SUBMENU, }, + { ".MENU", GFX_SPECIAL_ARG_MENU, }, + { ".TOONS", GFX_SPECIAL_ARG_TOONS, }, + { ".SCORESOLD", GFX_SPECIAL_ARG_SCORESOLD, }, + { ".SCORESNEW", GFX_SPECIAL_ARG_SCORESNEW, }, + { ".FADING", GFX_SPECIAL_ARG_FADING, }, + { ".QUIT", GFX_SPECIAL_ARG_QUIT, }, /* empty suffix always matches -- check as last entry in InitMusicInfo() */ { "", GFX_SPECIAL_ARG_DEFAULT, }, @@ -5501,15 +7472,19 @@ struct FontInfo font_info[NUM_FONTS + 1] = { "font.envelope_2" }, { "font.envelope_3" }, { "font.envelope_4" }, + { "font.request" }, { "font.input_1.active" }, { "font.input_2.active" }, { "font.input_1" }, { "font.input_2" }, + { "font.option_off_narrow" }, { "font.option_off" }, + { "font.option_on_narrow" }, { "font.option_on" }, { "font.value_1" }, { "font.value_2" }, { "font.value_old" }, + { "font.value_narrow" }, { "font.level_number.active" }, { "font.level_number" }, { "font.tape_recorder" }, @@ -5520,6 +7495,82 @@ struct FontInfo font_info[NUM_FONTS + 1] = { NULL } }; +struct GlobalAnimInfo global_anim_info[NUM_GLOBAL_ANIM_TOKENS + 1]; + +/* this contains predefined structure elements to init "global_anim_info" */ +struct GlobalAnimNameInfo global_anim_name_info[NUM_GLOBAL_ANIM_TOKENS + 1] = +{ + /* (real) graphic definitions used to define animation graphics */ + { "gfx.global.anim_1", }, + { "gfx.global.anim_2", }, + { "gfx.global.anim_3", }, + { "gfx.global.anim_4", }, + { "gfx.global.anim_5", }, + { "gfx.global.anim_6", }, + { "gfx.global.anim_7", }, + { "gfx.global.anim_8", }, + { "gfx.global.anim_9", }, + { "gfx.global.anim_10", }, + { "gfx.global.anim_11", }, + { "gfx.global.anim_12", }, + { "gfx.global.anim_13", }, + { "gfx.global.anim_14", }, + { "gfx.global.anim_15", }, + { "gfx.global.anim_16", }, + { "gfx.global.anim_17", }, + { "gfx.global.anim_18", }, + { "gfx.global.anim_19", }, + { "gfx.global.anim_20", }, + { "gfx.global.anim_21", }, + { "gfx.global.anim_22", }, + { "gfx.global.anim_23", }, + { "gfx.global.anim_24", }, + { "gfx.global.anim_25", }, + { "gfx.global.anim_26", }, + { "gfx.global.anim_27", }, + { "gfx.global.anim_28", }, + { "gfx.global.anim_29", }, + { "gfx.global.anim_30", }, + { "gfx.global.anim_31", }, + { "gfx.global.anim_32", }, + + /* (dummy) graphic definitions used to define animation controls */ + { "global.anim_1", }, + { "global.anim_2", }, + { "global.anim_3", }, + { "global.anim_4", }, + { "global.anim_5", }, + { "global.anim_6", }, + { "global.anim_7", }, + { "global.anim_8", }, + { "global.anim_9", }, + { "global.anim_10", }, + { "global.anim_11", }, + { "global.anim_12", }, + { "global.anim_13", }, + { "global.anim_14", }, + { "global.anim_15", }, + { "global.anim_16", }, + { "global.anim_17", }, + { "global.anim_18", }, + { "global.anim_19", }, + { "global.anim_20", }, + { "global.anim_21", }, + { "global.anim_22", }, + { "global.anim_23", }, + { "global.anim_24", }, + { "global.anim_25", }, + { "global.anim_26", }, + { "global.anim_27", }, + { "global.anim_28", }, + { "global.anim_29", }, + { "global.anim_30", }, + { "global.anim_31", }, + { "global.anim_32", }, + + { NULL } +}; + /* ------------------------------------------------------------------------- */ /* music token prefix definitions */ @@ -5539,53 +7590,171 @@ struct MusicPrefixInfo music_prefix_info[NUM_MUSIC_PREFIXES + 1] = static void print_usage() { - printf("\n" - "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n" - "\n" - "Options:\n" - " -d, --display HOSTNAME[:SCREEN] specify X server display\n" - " -b, --basepath DIRECTORY alternative base DIRECTORY\n" - " -l, --level DIRECTORY alternative level DIRECTORY\n" - " -g, --graphics DIRECTORY alternative graphics DIRECTORY\n" - " -s, --sounds DIRECTORY alternative sounds DIRECTORY\n" - " -m, --music DIRECTORY alternative music DIRECTORY\n" - " -n, --network network multiplayer game\n" - " --serveronly only start network server\n" - " -v, --verbose verbose mode\n" - " --debug display debugging information\n" - " --debug-x11-sync enable X11 synchronous mode\n" - " -e, --execute COMMAND execute batch COMMAND\n" - "\n" - "Valid commands for '--execute' option:\n" - " \"print graphicsinfo.conf\" print default graphics config\n" - " \"print soundsinfo.conf\" print default sounds config\n" - " \"print musicinfo.conf\" print default music config\n" - " \"print editorsetup.conf\" print default editor config\n" - " \"print helpanim.conf\" print default helpanim config\n" - " \"print helptext.conf\" print default helptext config\n" - " \"dump level FILE\" dump level data from FILE\n" - " \"dump tape FILE\" dump tape data from FILE\n" - " \"autoplay LEVELDIR [NR ...]\" play level tapes for LEVELDIR\n" - " \"convert LEVELDIR [NR]\" convert levels in LEVELDIR\n" - " \"create images DIRECTORY\" write BMP images to DIRECTORY\n" - "\n", - program.command_basename); + Print("\n" + "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n" + "\n" + "Options:\n" + " -b, --basepath DIRECTORY alternative base DIRECTORY\n" + " -l, --level DIRECTORY alternative level DIRECTORY\n" + " -g, --graphics DIRECTORY alternative graphics DIRECTORY\n" + " -s, --sounds DIRECTORY alternative sounds DIRECTORY\n" + " -m, --music DIRECTORY alternative music DIRECTORY\n" + " --mytapes use private tapes for tape tests\n" + " -n, --network network multiplayer game\n" + " --serveronly only start network server\n" + " -v, --verbose verbose mode\n" + " -V, --version show program version\n" + " --debug display debugging information\n" + " -e, --execute COMMAND execute batch COMMAND\n" + "\n" + "Valid commands for '--execute' option:\n" + " \"print graphicsinfo.conf\" print default graphics config\n" + " \"print soundsinfo.conf\" print default sounds config\n" + " \"print musicinfo.conf\" print default music config\n" + " \"print editorsetup.conf\" print default editor config\n" + " \"print helpanim.conf\" print default helpanim config\n" + " \"print helptext.conf\" print default helptext config\n" + " \"dump level FILE\" dump level data from FILE\n" + " \"dump tape FILE\" dump tape data from FILE\n" + " \"autotest LEVELDIR [NR ...]\" test level tapes for LEVELDIR\n" + " \"autoplay LEVELDIR [NR ...]\" play level tapes for LEVELDIR\n" + " \"autoffwd LEVELDIR [NR ...]\" ffwd level tapes for LEVELDIR\n" + " \"autowarp LEVELDIR [NR ...]\" warp level tapes for LEVELDIR\n" + " \"convert LEVELDIR [NR]\" convert levels in LEVELDIR\n" + " \"create images DIRECTORY\" write BMP images to DIRECTORY\n" + " \"create CE image DIRECTORY\" write BMP image to DIRECTORY\n" + "\n", + program.command_basename); } -int main(int argc, char *argv[]) +static void print_version() +{ + Print("%s", getProgramInitString()); + + if (!strEqual(getProgramVersionString(), getProgramRealVersionString())) + { + Print(" (%s %d.%d.%d.%d%s)", + PROGRAM_TITLE_STRING, + PROGRAM_VERSION_MAJOR, + PROGRAM_VERSION_MINOR, + PROGRAM_VERSION_PATCH, + PROGRAM_VERSION_BUILD, + PROGRAM_VERSION_EXTRA); + } + + Print("\n"); + + if (options.debug) + { + SDL_version sdl_version; + + SDL_VERSION(&sdl_version); + Print("- SDL %d.%d.%d\n", + sdl_version.major, + sdl_version.minor, + sdl_version.patch); + + SDL_IMAGE_VERSION(&sdl_version); + Print("- SDL_image %d.%d.%d\n", + sdl_version.major, + sdl_version.minor, + sdl_version.patch); + + SDL_MIXER_VERSION(&sdl_version); + Print("- SDL_mixer %d.%d.%d\n", + sdl_version.major, + sdl_version.minor, + sdl_version.patch); + + SDL_NET_VERSION(&sdl_version); + Print("- SDL_net %d.%d.%d\n", + sdl_version.major, + sdl_version.minor, + sdl_version.patch); + } +} + +static void InitProgramConfig(char *command_filename) { - char * window_title_string = getWindowTitleString(); + char *program_title = PROGRAM_TITLE_STRING; + char *program_icon_file = PROGRAM_ICON_FILENAME; + char *program_version = getProgramRealVersionString(); + char *config_filename = getProgramConfigFilename(command_filename); + char *userdata_basename = getBaseNameNoSuffix(command_filename); + char *userdata_subdir; + char *userdata_subdir_unix; + + // read default program config, if existing + if (fileExists(config_filename)) + { + // if program config file exists, derive Unix user data directory from it + // (but only if the program config file is not generic "setup.conf" file) + if (!strEqual(getBaseNamePtr(config_filename), SETUP_FILENAME)) + { + userdata_basename = getBaseName(config_filename); + + if (strSuffix(userdata_basename, ".conf")) + userdata_basename[strlen(userdata_basename) - 5] = '\0'; + } - InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX, - PROGRAM_TITLE_STRING, window_title_string, ICON_TITLE_STRING, - X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME, - MSDOS_POINTER_FILENAME, - COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL); + LoadSetupFromFilename(config_filename); + } + + // set user data directory for Linux/Unix (but not Mac OS X) + userdata_subdir_unix = getStringCat2(".", userdata_basename); + + // set program title from potentially redefined program title + if (setup.internal.program_title != NULL && + strlen(setup.internal.program_title) > 0) + program_title = getStringCopy(setup.internal.program_title); + + // set program version from potentially redefined program version + if (setup.internal.program_version != NULL && + strlen(setup.internal.program_version) > 0) + program_version = getStringCopy(setup.internal.program_version); + + // set program icon file from potentially redefined program icon file + if (setup.internal.program_icon_file != NULL && + strlen(setup.internal.program_icon_file) > 0) + program_icon_file = getStringCopy(setup.internal.program_icon_file); + +#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX) + userdata_subdir = program_title; +#elif defined(PLATFORM_UNIX) + userdata_subdir = userdata_subdir_unix; +#else + userdata_subdir = USERDATA_DIRECTORY_OTHER; +#endif + + // set default window size (only relevant on program startup) + if (setup.internal.default_window_width != 0 && + setup.internal.default_window_height != 0) + { + WIN_XSIZE = setup.internal.default_window_width; + WIN_YSIZE = setup.internal.default_window_height; + } + + InitProgramInfo(command_filename, + config_filename, + userdata_subdir, + program_title, + program_title, + program_icon_file, + COOKIE_PREFIX, + program_version, + GAME_VERSION_ACTUAL); +} + +int main(int argc, char *argv[]) +{ + InitProgramConfig(argv[0]); + InitWindowTitleFunction(getWindowTitleString); + InitExitMessageFunction(DisplayExitMessage); InitExitFunction(CloseAllAndExit); InitPlatformDependentStuff(); - GetOptions(argv, print_usage); + GetOptions(argc, argv, print_usage, print_version); OpenAll(); EventLoop();