X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.c;h=670f5335bf3d06b44fa8bf50fe6fa05c1457bfd7;hp=873a344d0ec2dcb3d7eae35f5e5494521014e8a8;hb=310781167f731177d6d46b15093dc32606eeac4e;hpb=590e9a86daa2b0d3923673bfe02525766224808e diff --git a/src/main.c b/src/main.c index 873a344d..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,17 +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_cross; Bitmap *bitmap_db_field; Bitmap *bitmap_db_panel; -Bitmap *bitmap_db_door; +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; @@ -38,9 +41,6 @@ SDL_Thread *server_thread; int key_joystick_mapping = 0; -boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; -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]; @@ -74,19 +74,55 @@ int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +int GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + +int ActiveElement[MAX_NUM_ELEMENTS]; +int ActiveButton[NUM_IMAGE_FILES]; +int ActiveFont[NUM_FONTS]; int lev_fieldx, lev_fieldy; int scroll_x, scroll_y; -int FX = SX, FY = SY; +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; + +int FX, FY; 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; -int BX1 = 0, BY1 = 0; -int BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1; +int BX1, BY1; +int BX2, BY2; int SBX_Left, SBX_Right; int SBY_Upper, SBY_Lower; int ZX, ZY; @@ -106,19 +142,48 @@ struct SetupInfo setup; struct GameInfo game; struct GlobalInfo global; struct BorderInfo border; -struct TitleInfo title; +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; /* ------------------------------------------------------------------------- */ @@ -1053,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", @@ -1247,23 +1312,23 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = }, { "sp_gravity_port_right", - "sp_port", - "gravity port (leading right)" + "sp_gravity_port", + "gravity-on/off port (leading right)" }, { "sp_gravity_port_down", - "sp_port", - "gravity port (leading down)" + "sp_gravity_port", + "gravity-on/off port (leading down)" }, { "sp_gravity_port_left", - "sp_port", - "gravity port (leading left)" + "sp_gravity_port", + "gravity-on/off port (leading left)" }, { "sp_gravity_port_up", - "sp_port", - "gravity port (leading up)" + "sp_gravity_port", + "gravity-on/off port (leading up)" }, { "sp_sniksnak", @@ -1433,7 +1498,7 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "dc_gate_white", "gate", - "white gate" + "white door" }, { "dc_gate_white_gray", @@ -3427,43 +3492,43 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = }, { "sp_gravity_on_port_right", - "sp_port", - "gravity on port (leading right)" + "sp_gravity_on_port", + "gravity-on port (leading right)" }, { "sp_gravity_on_port_down", - "sp_port", - "gravity on port (leading down)" + "sp_gravity_on_port", + "gravity-on port (leading down)" }, { "sp_gravity_on_port_left", - "sp_port", - "gravity on port (leading left)" + "sp_gravity_on_port", + "gravity-on port (leading left)" }, { "sp_gravity_on_port_up", - "sp_port", - "gravity on port (leading up)" + "sp_gravity_on_port", + "gravity-on port (leading up)" }, { "sp_gravity_off_port_right", - "sp_port", - "gravity off port (leading right)" + "sp_gravity_off_port", + "gravity-off port (leading right)" }, { "sp_gravity_off_port_down", - "sp_port", - "gravity off port (leading down)" + "sp_gravity_off_port", + "gravity-off port (leading down)" }, { "sp_gravity_off_port_left", - "sp_port", - "gravity off port (leading left)" + "sp_gravity_off_port", + "gravity-off port (leading left)" }, { "sp_gravity_off_port_up", - "sp_port", - "gravity off port (leading up)" + "sp_gravity_off_port", + "gravity-off port (leading up)" }, { "balloon_switch_none", @@ -4113,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", @@ -4445,1802 +4510,2935 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "quicksand", "fast quicksand (with rock)" }, - - /* ----------------------------------------------------------------------- */ - /* "real" (and therefore drawable) runtime elements */ - /* ----------------------------------------------------------------------- */ - { - "dynabomb_player_1.active", - "dynabomb", - "-" + "from_level_template", + "from_level_template", + "element taken from level template" }, { - "dynabomb_player_2.active", - "dynabomb", - "-" + "mm_empty_space", + "empty_space", + "empty space" }, { - "dynabomb_player_3.active", - "dynabomb", - "-" + "mm_mirror_1", + "mm_mirror", + "mirror (0\xb0)" }, { - "dynabomb_player_4.active", - "dynabomb", - "-" + "mm_mirror_2", + "mm_mirror", + "mirror (11.25\xb0)" }, { - "sp_disk_red.active", - "dynamite", - "-" + "mm_mirror_3", + "mm_mirror", + "mirror (22.5\xb0)" }, { - "switchgate.opening", - "switchgate", - "-" + "mm_mirror_4", + "mm_mirror", + "mirror (33.75\xb0)" }, { - "switchgate.closing", - "switchgate", - "-" + "mm_mirror_5", + "mm_mirror", + "mirror (45\xb0)" }, { - "timegate.opening", - "timegate", - "-" + "mm_mirror_6", + "mm_mirror", + "mirror (56.25\xb0)" }, { - "timegate.closing", - "timegate", - "-" + "mm_mirror_7", + "mm_mirror", + "mirror (67.5\xb0)" }, { - "pearl.breaking", - "pearl", - "-" + "mm_mirror_8", + "mm_mirror", + "mirror (78.75\xb0)" }, { - "trap.active", - "trap", - "-" + "mm_mirror_9", + "mm_mirror", + "mirror (90\xb0)" }, { - "invisible_steelwall.active", - "steelwall", - "-" + "mm_mirror_10", + "mm_mirror", + "mirror (101.25\xb0)" }, { - "invisible_wall.active", - "wall", - "-" + "mm_mirror_11", + "mm_mirror", + "mirror (112.5\xb0)" }, { - "invisible_sand.active", - "sand", - "-" + "mm_mirror_12", + "mm_mirror", + "mirror (123.75\xb0)" }, { - "conveyor_belt_1_left.active", - "conveyor_belt", - "-" + "mm_mirror_13", + "mm_mirror", + "mirror (135\xb0)" }, { - "conveyor_belt_1_middle.active", - "conveyor_belt", - "-" + "mm_mirror_14", + "mm_mirror", + "mirror (146.25\xb0)" }, { - "conveyor_belt_1_right.active", - "conveyor_belt", - "-" + "mm_mirror_15", + "mm_mirror", + "mirror (157.5\xb0)" }, { - "conveyor_belt_2_left.active", - "conveyor_belt", - "-" + "mm_mirror_16", + "mm_mirror", + "mirror (168.75\xb0)" }, { - "conveyor_belt_2_middle.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_1", + "mm_steel_grid_fixed", + "fixed steel polarizer (0\xb0)" }, { - "conveyor_belt_2_right.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_2", + "mm_steel_grid_fixed", + "fixed steel polarizer (90\xb0)" }, { - "conveyor_belt_3_left.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_3", + "mm_steel_grid_fixed", + "fixed steel polarizer (45\xb0)" }, { - "conveyor_belt_3_middle.active", - "conveyor_belt", - "-" + "mm_steel_grid_fixed_4", + "mm_steel_grid_fixed", + "fixed steel polarizer (135\xb0)" }, { - "conveyor_belt_3_right.active", - "conveyor_belt", - "-" + "mm_mcduffin.right", + "mm_mcduffin", + "Gregor McDuffin (looking right)" }, { - "conveyor_belt_4_left.active", - "conveyor_belt", - "-" + "mm_mcduffin.up", + "mm_mcduffin", + "Gregor McDuffin (looking up)" }, { - "conveyor_belt_4_middle.active", - "conveyor_belt", - "-" + "mm_mcduffin.left", + "mm_mcduffin", + "Gregor McDuffin (looking left)" }, { - "conveyor_belt_4_right.active", - "conveyor_belt", - "-" + "mm_mcduffin.down", + "mm_mcduffin", + "Gregor McDuffin (looking down)" }, { - "exit.opening", - "exit", - "-" + "mm_exit_closed", + "mm_exit", + "closed exit (MM style)" }, { - "exit.closing", - "exit", - "-" + "mm_exit_opening_1", + "mm_exit", + "opening exit 1" }, { - "steel_exit.opening", - "steel_exit", - "-" + "mm_exit_opening_2", + "mm_exit", + "opening exit 2" }, { - "steel_exit.closing", - "steel_exit", - "-" + "mm_exit_open", + "mm_exit", + "open exit (MM style)" }, { - "em_exit.opening", - "em_exit", - "-" + "mm_kettle", + "mm_kettle", + "magic kettle" }, { - "em_exit.closing", - "em_exit", - "-" + "mm_bomb", + "mm_bomb", + "bomb (MM style)" }, { - "em_steel_exit.opening", - "em_steel_exit", - "-" + "mm_prism", + "mm_prism", + "prism" }, { - "em_steel_exit.closing", - "em_steel_exit", - "-" + "mm_steel_wall_1", + "mm_steel_wall", + "steel wall" }, { - "sp_exit.opening", - "sp_exit", - "-" + "mm_steel_wall_2", + "mm_steel_wall", + "steel wall" }, { - "sp_exit.closing", - "sp_exit", - "-" + "mm_steel_wall_3", + "mm_steel_wall", + "steel wall" }, { - "sp_exit_open", - "sp_exit", - "-" + "mm_steel_wall_4", + "mm_steel_wall", + "steel wall" }, { - "sp_terminal.active", - "sp_terminal", - "-" + "mm_steel_wall_5", + "mm_steel_wall", + "steel wall" }, { - "sp_buggy_base.activating", - "sp_buggy_base", - "-" + "mm_steel_wall_6", + "mm_steel_wall", + "steel wall" }, { - "sp_buggy_base.active", - "sp_buggy_base", - "-" + "mm_steel_wall_7", + "mm_steel_wall", + "steel wall" }, { - "sp_murphy_clone", - "murphy_clone", - "-" + "mm_steel_wall_8", + "mm_steel_wall", + "steel wall" }, { - "amoeba.dropping", - "amoeba", - "-" + "mm_steel_wall_9", + "mm_steel_wall", + "steel wall" }, { - "quicksand.emptying", - "quicksand", - "-" + "mm_steel_wall_10", + "mm_steel_wall", + "steel wall" }, { - "quicksand_fast.emptying", - "quicksand", - "-" + "mm_steel_wall_11", + "mm_steel_wall", + "steel wall" }, { - "magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_12", + "mm_steel_wall", + "steel wall" }, { - "bd_magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_13", + "mm_steel_wall", + "steel wall" }, { - "dc_magic_wall.active", - "magic_wall", - "-" + "mm_steel_wall_14", + "mm_steel_wall", + "steel wall" }, { - "magic_wall_full", - "magic_wall", - "-" + "mm_steel_wall_15", + "mm_steel_wall", + "steel wall" }, { - "bd_magic_wall_full", - "magic_wall", - "-" + "mm_steel_wall_16", + "mm_steel_wall", + "steel wall" }, { - "dc_magic_wall_full", - "magic_wall", - "-" + "mm_wooden_wall_1", + "mm_wooden_wall", + "wooden wall" }, { - "magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_2", + "mm_wooden_wall", + "wooden wall" }, { - "bd_magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_3", + "mm_wooden_wall", + "wooden wall" }, { - "dc_magic_wall.emptying", - "magic_wall", - "-" + "mm_wooden_wall_4", + "mm_wooden_wall", + "wooden wall" }, { - "magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_5", + "mm_wooden_wall", + "wooden wall" }, { - "bd_magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_6", + "mm_wooden_wall", + "wooden wall" }, { - "dc_magic_wall_dead", - "magic_wall", - "-" + "mm_wooden_wall_7", + "mm_wooden_wall", + "wooden wall" }, - { - "emc_fake_grass.active", - "fake_grass", - "-" + "mm_wooden_wall_8", + "mm_wooden_wall", + "wooden wall" }, { - "gate_1_gray.active", - "gate", - "" + "mm_wooden_wall_9", + "mm_wooden_wall", + "wooden wall" }, { - "gate_2_gray.active", - "gate", - "" + "mm_wooden_wall_10", + "mm_wooden_wall", + "wooden wall" }, { - "gate_3_gray.active", - "gate", - "" + "mm_wooden_wall_11", + "mm_wooden_wall", + "wooden wall" }, { - "gate_4_gray.active", - "gate", - "" + "mm_wooden_wall_12", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_1_gray.active", - "gate", - "" + "mm_wooden_wall_13", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_2_gray.active", - "gate", - "" + "mm_wooden_wall_14", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_3_gray.active", - "gate", - "" + "mm_wooden_wall_15", + "mm_wooden_wall", + "wooden wall" }, { - "em_gate_4_gray.active", - "gate", - "" + "mm_wooden_wall_16", + "mm_wooden_wall", + "wooden wall" }, { - "emc_gate_5_gray.active", - "gate", - "", + "mm_ice_wall_1", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_6_gray.active", - "gate", - "", + "mm_ice_wall_2", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_7_gray.active", - "gate", - "", + "mm_ice_wall_3", + "mm_ice_wall", + "ice wall" }, { - "emc_gate_8_gray.active", - "gate", - "", + "mm_ice_wall_4", + "mm_ice_wall", + "ice wall" }, { - "dc_gate_white_gray.active", - "gate", - "", + "mm_ice_wall_5", + "mm_ice_wall", + "ice wall" }, { - "emc_dripper.active", - "dripper", - "dripper" + "mm_ice_wall_6", + "mm_ice_wall", + "ice wall" }, { - "emc_spring_bumper.active", - "emc_spring_bumper", - "spring bumper", + "mm_ice_wall_7", + "mm_ice_wall", + "ice wall" }, - - /* ----------------------------------------------------------------------- */ - /* "unreal" (and therefore not drawable) runtime elements */ - /* ----------------------------------------------------------------------- */ - { - "blocked", - "-", - "-" + "mm_ice_wall_8", + "mm_ice_wall", + "ice wall" }, { - "explosion", - "-", - "-" + "mm_ice_wall_9", + "mm_ice_wall", + "ice wall" }, { - "nut.breaking", - "-", - "-" + "mm_ice_wall_10", + "mm_ice_wall", + "ice wall" }, { - "diamond.breaking", - "-", - "-" + "mm_ice_wall_11", + "mm_ice_wall", + "ice wall" }, { - "acid_splash_left", - "-", - "-" + "mm_ice_wall_12", + "mm_ice_wall", + "ice wall" }, { - "acid_splash_right", - "-", - "-" + "mm_ice_wall_13", + "mm_ice_wall", + "ice wall" }, { - "amoeba.growing", - "-", - "-" + "mm_ice_wall_14", + "mm_ice_wall", + "ice wall" }, { - "amoeba.shrinking", - "-", - "-" + "mm_ice_wall_15", + "mm_ice_wall", + "ice wall" }, { - "expandable_wall.growing", - "-", - "-" + "mm_ice_wall_16", + "mm_ice_wall", + "ice wall" }, { - "expandable_steelwall.growing", - "-", - "-" + "mm_amoeba_wall_1", + "mm_amoeba_wall", + "amoeba wall" }, { - "flames", - "-", - "-" + "mm_amoeba_wall_2", + "mm_amoeba_wall", + "amoeba wall" }, { - "player_is_leaving", - "-", - "-" + "mm_amoeba_wall_3", + "mm_amoeba_wall", + "amoeba wall" }, { - "player_is_exploding_1", - "-", - "-" + "mm_amoeba_wall_4", + "mm_amoeba_wall", + "amoeba wall" }, { - "player_is_exploding_2", - "-", - "-" + "mm_amoeba_wall_5", + "mm_amoeba_wall", + "amoeba wall" }, { - "player_is_exploding_3", - "-", - "-" + "mm_amoeba_wall_6", + "mm_amoeba_wall", + "amoeba wall" }, { - "player_is_exploding_4", - "-", - "-" + "mm_amoeba_wall_7", + "mm_amoeba_wall", + "amoeba wall" }, { - "quicksand.filling", - "quicksand", - "-" + "mm_amoeba_wall_8", + "mm_amoeba_wall", + "amoeba wall" }, { - "quicksand_fast.filling", - "quicksand", - "-" + "mm_amoeba_wall_9", + "mm_amoeba_wall", + "amoeba wall" }, { - "magic_wall.filling", - "-", - "-" + "mm_amoeba_wall_10", + "mm_amoeba_wall", + "amoeba wall" }, { - "bd_magic_wall.filling", - "-", - "-" + "mm_amoeba_wall_11", + "mm_amoeba_wall", + "amoeba wall" }, { - "dc_magic_wall.filling", - "-", - "-" + "mm_amoeba_wall_12", + "mm_amoeba_wall", + "amoeba wall" }, { - "element.snapping", - "-", - "-" + "mm_amoeba_wall_13", + "mm_amoeba_wall", + "amoeba wall" }, { - "diagonal.shrinking", - "-", - "-" + "mm_amoeba_wall_14", + "mm_amoeba_wall", + "amoeba wall" }, { - "diagonal.growing", - "-", - "-" + "mm_amoeba_wall_15", + "mm_amoeba_wall", + "amoeba wall" }, - - /* ----------------------------------------------------------------------- */ - /* dummy elements (never used as game elements, only used as graphics) */ - /* ----------------------------------------------------------------------- */ - { - "steelwall_topleft", - "-", - "-" + "mm_amoeba_wall_16", + "mm_amoeba_wall", + "amoeba wall" }, { - "steelwall_topright", - "-", - "-" + "mm_wooden_block", + "mm_wooden_block", + "wooden block" }, { - "steelwall_bottomleft", - "-", - "-" + "mm_gray_ball", + "mm_gray_ball", + "gray ball" }, { - "steelwall_bottomright", - "-", - "-" + "mm_teleporter_1", + "mm_teleporter", + "teleporter (0\xb0)" }, { - "steelwall_horizontal", - "-", - "-" + "mm_teleporter_2", + "mm_teleporter", + "teleporter (22.5\xb0)" }, { - "steelwall_vertical", - "-", - "-" + "mm_teleporter_3", + "mm_teleporter", + "teleporter (45\xb0)" }, { - "invisible_steelwall_topleft", - "-", - "-" + "mm_teleporter_4", + "mm_teleporter", + "teleporter (67.5\xb0)" }, { - "invisible_steelwall_topright", - "-", - "-" + "mm_teleporter_5", + "mm_teleporter", + "teleporter (90\xb0)" }, { - "invisible_steelwall_bottomleft", - "-", - "-" + "mm_teleporter_6", + "mm_teleporter", + "teleporter (112.5\xb0)" }, { - "invisible_steelwall_bottomright", - "-", - "-" + "mm_teleporter_7", + "mm_teleporter", + "teleporter (135\xb0)" }, { - "invisible_steelwall_horizontal", - "-", - "-" + "mm_teleporter_8", + "mm_teleporter", + "teleporter (157.5\xb0)" }, { - "invisible_steelwall_vertical", - "-", - "-" + "mm_teleporter_9", + "mm_teleporter", + "teleporter (180\xb0)" }, { - "dynabomb", - "-", - "-" + "mm_teleporter_10", + "mm_teleporter", + "teleporter (202.5\xb0)" }, { - "dynabomb.active", - "-", - "-" + "mm_teleporter_11", + "mm_teleporter", + "teleporter (225\xb0)" }, { - "dynabomb_player_1", - "-", - "-" + "mm_teleporter_12", + "mm_teleporter", + "teleporter (247.5\xb0)" }, { - "dynabomb_player_2", - "-", - "-" + "mm_teleporter_13", + "mm_teleporter", + "teleporter (270\xb0)" }, { - "dynabomb_player_3", - "-", - "-" + "mm_teleporter_14", + "mm_teleporter", + "teleporter (292.5\xb0)" }, { - "dynabomb_player_4", - "-", - "-" + "mm_teleporter_15", + "mm_teleporter", + "teleporter (315\xb0)" }, { - "shield_normal.active", - "-", - "-" + "mm_teleporter_16", + "mm_teleporter", + "teleporter (337.5\xb0)" }, { - "shield_deadly.active", - "-", - "-" + "mm_fuse.active", + "mm_fuse", + "fuse (on)" }, { - "amoeba", - "amoeba", - "-" + "mm_pacman.right", + "mm_pacman", + "pac man (starts moving right)" }, { - "[default]", - "default", - "-" + "mm_pacman.up", + "mm_pacman", + "pac man (starts moving up)" }, { - "[bd_default]", - "bd_default", - "-" + "mm_pacman.left", + "mm_pacman", + "pac man (starts moving left)" }, { - "[sp_default]", - "sp_default", - "-" + "mm_pacman.down", + "mm_pacman", + "pac man (starts moving down)" }, { - "[sb_default]", - "sb_default", - "-" + "mm_polarizer_1", + "mm_polarizer", + "polarizer (0\xb0)" }, { - "internal_clipboard_custom", - "internal", - "empty custom element" + "mm_polarizer_2", + "mm_polarizer", + "polarizer (11.25\xb0)" }, { - "internal_clipboard_change", - "internal", - "empty change page" + "mm_polarizer_3", + "mm_polarizer", + "polarizer (22.5\xb0)" }, { - "internal_clipboard_group", - "internal", - "empty group element" + "mm_polarizer_4", + "mm_polarizer", + "polarizer (33.75\xb0)" }, { - "internal_dummy", - "internal", - "-" + "mm_polarizer_5", + "mm_polarizer", + "polarizer (45\xb0)" }, { - "internal_cascade_bd", - "internal", - "show Boulder Dash elements" + "mm_polarizer_6", + "mm_polarizer", + "polarizer (56.25\xb0)" }, { - "internal_cascade_bd.active", - "internal", - "hide Boulder Dash elements" + "mm_polarizer_7", + "mm_polarizer", + "polarizer (67.5\xb0)" }, { - "internal_cascade_em", - "internal", - "show Emerald Mine elements" + "mm_polarizer_8", + "mm_polarizer", + "polarizer (78.75\xb0)" }, { - "internal_cascade_em.active", - "internal", - "hide Emerald Mine elements" + "mm_polarizer_9", + "mm_polarizer", + "polarizer (90\xb0)" }, { - "internal_cascade_emc", - "internal", - "show Emerald Mine Club elements" + "mm_polarizer_10", + "mm_polarizer", + "polarizer (101.25\xb0)" }, { - "internal_cascade_emc.active", - "internal", - "hide Emerald Mine Club elements" + "mm_polarizer_11", + "mm_polarizer", + "polarizer (112.5\xb0)" }, { - "internal_cascade_rnd", - "internal", - "show Rocks'n'Diamonds elements" + "mm_polarizer_12", + "mm_polarizer", + "polarizer (123.75\xb0)" }, { - "internal_cascade_rnd.active", - "internal", - "hide Rocks'n'Diamonds elements" + "mm_polarizer_13", + "mm_polarizer", + "polarizer (135\xb0)" }, { - "internal_cascade_sb", - "internal", - "show Sokoban elements" + "mm_polarizer_14", + "mm_polarizer", + "polarizer (146.25\xb0)" }, { - "internal_cascade_sb.active", - "internal", - "hide Sokoban elements" + "mm_polarizer_15", + "mm_polarizer", + "polarizer (157.5\xb0)" }, { - "internal_cascade_sp", - "internal", - "show Supaplex elements" + "mm_polarizer_16", + "mm_polarizer", + "polarizer (168.75\xb0)" }, { - "internal_cascade_sp.active", - "internal", - "hide Supaplex elements" + "mm_polarizer_cross_1", + "mm_polarizer_cross", + "two-way polarizer (0\xb0)" }, { - "internal_cascade_dc", - "internal", - "show Diamond Caves II elements" + "mm_polarizer_cross_2", + "mm_polarizer_cross", + "two-way polarizer (22.5\xb0)" }, { - "internal_cascade_dc.active", - "internal", - "hide Diamond Caves II elements" + "mm_polarizer_cross_3", + "mm_polarizer_cross", + "two-way polarizer (45\xb0)" }, { - "internal_cascade_dx", - "internal", - "show DX Boulderdash elements" + "mm_polarizer_cross_4", + "mm_polarizer_cross", + "two-way polarizer (67.5\xb0)" }, { - "internal_cascade_dx.active", - "internal", - "hide DX Boulderdash elements" + "mm_mirror_fixed_1", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" }, { - "internal_cascade_chars", - "internal", - "show text elements" + "mm_mirror_fixed_2", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" }, { - "internal_cascade_chars.active", - "internal", - "hide text elements" + "mm_mirror_fixed_3", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" }, { - "internal_cascade_steel_chars", - "internal", - "show steel text elements" + "mm_mirror_fixed_4", + "mm_mirror_fixed", + "fixed mirror (0\xb0)" }, { - "internal_cascade_steel_chars.active", - "internal", - "hide steel text elements" + "mm_steel_lock", + "mm_steel_lock", + "steel lock" }, { - "internal_cascade_ce", - "internal", - "show custom elements" + "mm_key", + "mm_key", + "key (MM style)" }, { - "internal_cascade_ce.active", - "internal", - "hide custom elements" + "mm_lightbulb", + "mm_lightbulb", + "light bulb (off)" }, { - "internal_cascade_ge", - "internal", - "show group elements" + "mm_lightbulb.active", + "mm_lightbulb", + "light bulb (on)" }, { - "internal_cascade_ge.active", - "internal", - "hide group elements" + "mm_lightball", + "mm_lightball", + "bonus ball" }, { - "internal_cascade_ref", - "internal", - "show reference elements" + "mm_steel_block", + "mm_steel_block", + "steel block" }, { - "internal_cascade_ref.active", - "internal", - "hide reference elements" + "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", + "-" }, { - "internal_cascade_user", - "internal", - "show user defined elements" + "conveyor_belt_1_right.active", + "conveyor_belt", + "-" }, { - "internal_cascade_user.active", - "internal", - "hide user defined elements" + "conveyor_belt_2_left.active", + "conveyor_belt", + "-" }, { - "internal_cascade_dynamic", - "internal", - "show elements used in this level" + "conveyor_belt_2_middle.active", + "conveyor_belt", + "-" }, { - "internal_cascade_dynamic.active", - "internal", - "hide elements used in this level" + "conveyor_belt_2_right.active", + "conveyor_belt", + "-" }, - - /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */ - { - NULL, - NULL, - NULL - } -}; - - -/* ------------------------------------------------------------------------- */ -/* element action and direction definitions */ -/* ------------------------------------------------------------------------- */ - -struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] = -{ - { ".[DEFAULT]", ACTION_DEFAULT, TRUE }, - { ".waiting", ACTION_WAITING, TRUE }, - { ".falling", ACTION_FALLING, TRUE }, - { ".moving", ACTION_MOVING, TRUE }, - { ".digging", ACTION_DIGGING, FALSE }, - { ".snapping", ACTION_SNAPPING, FALSE }, - { ".collecting", ACTION_COLLECTING, FALSE }, - { ".dropping", ACTION_DROPPING, FALSE }, - { ".pushing", ACTION_PUSHING, FALSE }, - { ".walking", ACTION_WALKING, FALSE }, - { ".passing", ACTION_PASSING, FALSE }, - { ".impact", ACTION_IMPACT, FALSE }, - { ".breaking", ACTION_BREAKING, FALSE }, - { ".activating", ACTION_ACTIVATING, FALSE }, - { ".deactivating", ACTION_DEACTIVATING, FALSE }, - { ".opening", ACTION_OPENING, FALSE }, - { ".closing", ACTION_CLOSING, FALSE }, - { ".attacking", ACTION_ATTACKING, TRUE }, - { ".growing", ACTION_GROWING, TRUE }, - { ".shrinking", ACTION_SHRINKING, FALSE }, - { ".active", ACTION_ACTIVE, TRUE }, - { ".filling", ACTION_FILLING, FALSE }, - { ".emptying", ACTION_EMPTYING, FALSE }, - { ".changing", ACTION_CHANGING, FALSE }, - { ".exploding", ACTION_EXPLODING, FALSE }, - { ".boring", ACTION_BORING, FALSE }, - { ".boring[1]", ACTION_BORING_1, FALSE }, - { ".boring[2]", ACTION_BORING_2, FALSE }, - { ".boring[3]", ACTION_BORING_3, FALSE }, - { ".boring[4]", ACTION_BORING_4, FALSE }, - { ".boring[5]", ACTION_BORING_5, FALSE }, - { ".boring[6]", ACTION_BORING_6, FALSE }, - { ".boring[7]", ACTION_BORING_7, FALSE }, - { ".boring[8]", ACTION_BORING_8, FALSE }, - { ".boring[9]", ACTION_BORING_9, FALSE }, - { ".boring[10]", ACTION_BORING_10, FALSE }, - { ".sleeping", ACTION_SLEEPING, FALSE }, - { ".sleeping[1]", ACTION_SLEEPING_1, FALSE }, - { ".sleeping[2]", ACTION_SLEEPING_2, FALSE }, - { ".sleeping[3]", ACTION_SLEEPING_3, FALSE }, - { ".awakening", ACTION_AWAKENING, FALSE }, - { ".dying", ACTION_DYING, FALSE }, - { ".turning", ACTION_TURNING, FALSE }, - { ".turning_from_left", ACTION_TURNING_FROM_LEFT, FALSE }, - { ".turning_from_right", ACTION_TURNING_FROM_RIGHT, FALSE }, - { ".turning_from_up", ACTION_TURNING_FROM_UP, FALSE }, - { ".turning_from_down", ACTION_TURNING_FROM_DOWN, FALSE }, - { ".smashed_by_rock", ACTION_SMASHED_BY_ROCK, FALSE }, - { ".smashed_by_spring", ACTION_SMASHED_BY_SPRING, FALSE }, - { ".eating", ACTION_EATING, FALSE }, - { ".twinkling", ACTION_TWINKLING, FALSE }, - { ".splashing", ACTION_SPLASHING, FALSE }, - { ".page[1]", ACTION_PAGE_1, FALSE }, - { ".page[2]", ACTION_PAGE_2, FALSE }, - { ".page[3]", ACTION_PAGE_3, FALSE }, - { ".page[4]", ACTION_PAGE_4, FALSE }, - { ".page[5]", ACTION_PAGE_5, FALSE }, - { ".page[6]", ACTION_PAGE_6, FALSE }, - { ".page[7]", ACTION_PAGE_7, FALSE }, - { ".page[8]", ACTION_PAGE_8, FALSE }, - { ".page[9]", ACTION_PAGE_9, FALSE }, - { ".page[10]", ACTION_PAGE_10, FALSE }, - { ".page[11]", ACTION_PAGE_11, FALSE }, - { ".page[12]", ACTION_PAGE_12, FALSE }, - { ".page[13]", ACTION_PAGE_13, FALSE }, - { ".page[14]", ACTION_PAGE_14, FALSE }, - { ".page[15]", ACTION_PAGE_15, FALSE }, - { ".page[16]", ACTION_PAGE_16, FALSE }, - { ".page[17]", ACTION_PAGE_17, FALSE }, - { ".page[18]", ACTION_PAGE_18, FALSE }, - { ".page[19]", ACTION_PAGE_19, FALSE }, - { ".page[20]", ACTION_PAGE_20, FALSE }, - { ".page[21]", ACTION_PAGE_21, FALSE }, - { ".page[22]", ACTION_PAGE_22, FALSE }, - { ".page[23]", ACTION_PAGE_23, FALSE }, - { ".page[24]", ACTION_PAGE_24, FALSE }, - { ".page[25]", ACTION_PAGE_25, FALSE }, - { ".page[26]", ACTION_PAGE_26, FALSE }, - { ".page[27]", ACTION_PAGE_27, FALSE }, - { ".page[28]", ACTION_PAGE_28, FALSE }, - { ".page[29]", ACTION_PAGE_29, FALSE }, - { ".page[30]", ACTION_PAGE_30, FALSE }, - { ".page[31]", ACTION_PAGE_31, FALSE }, - { ".page[32]", ACTION_PAGE_32, FALSE }, - { ".other", ACTION_OTHER, FALSE }, - - /* empty suffix always matches -- check as last entry in InitSoundInfo() */ - { "", ACTION_DEFAULT, TRUE }, - - { NULL, 0, 0 } -}; - -struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] = -{ - { ".left", MV_BIT_LEFT }, - { ".right", MV_BIT_RIGHT }, - { ".up", MV_BIT_UP }, - { ".down", MV_BIT_DOWN }, - { ".upleft", MV_BIT_UP }, - { ".upright", MV_BIT_RIGHT }, - { ".downleft", MV_BIT_LEFT }, - { ".downright", MV_BIT_DOWN }, - - { NULL, 0 } -}; - -struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = -{ - { ".[DEFAULT]", GFX_SPECIAL_ARG_DEFAULT, }, - { ".TITLE", GFX_SPECIAL_ARG_TITLE, }, - { ".MESSAGE", GFX_SPECIAL_ARG_MESSAGE, }, - { ".MAIN", GFX_SPECIAL_ARG_MAIN, }, - { ".LEVELS", GFX_SPECIAL_ARG_LEVELS }, - { ".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, }, - { ".PREVIEW", GFX_SPECIAL_ARG_PREVIEW, }, - { ".CRUMBLED", GFX_SPECIAL_ARG_CRUMBLED, }, - - /* empty suffix always matches -- check as last entry in InitMusicInfo() */ - { "", GFX_SPECIAL_ARG_DEFAULT, }, - - { NULL, 0, } -}; - -struct TokenIntPtrInfo image_config_vars[] = -{ + "conveyor_belt_3_left.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_3_middle.active", + "conveyor_belt", + "-" + }, + { + "conveyor_belt_3_right.active", + "conveyor_belt", + "-" + }, { - "titlemessage_initial_1.x", - &titlemessage_initial[0].x + "conveyor_belt_4_left.active", + "conveyor_belt", + "-" }, { - "titlemessage_initial_1.y", - &titlemessage_initial[0].y + "conveyor_belt_4_middle.active", + "conveyor_belt", + "-" }, { - "titlemessage_initial_1.width", - &titlemessage_initial[0].width + "conveyor_belt_4_right.active", + "conveyor_belt", + "-" }, { - "titlemessage_initial_1.height", - &titlemessage_initial[0].height + "exit.opening", + "exit", + "-" }, { - "titlemessage_initial_1.chars", - &titlemessage_initial[0].chars + "exit.closing", + "exit", + "-" }, { - "titlemessage_initial_1.lines", - &titlemessage_initial[0].lines + "steel_exit.opening", + "steel_exit", + "-" }, { - "titlemessage_initial_1.align", - &titlemessage_initial[0].align + "steel_exit.closing", + "steel_exit", + "-" }, { - "titlemessage_initial_1.autowrap", - &titlemessage_initial[0].autowrap + "em_exit.opening", + "em_exit", + "-" }, { - "titlemessage_initial_1.centered", - &titlemessage_initial[0].centered + "em_exit.closing", + "em_exit", + "-" }, { - "titlemessage_initial_1.skip_comments", - &titlemessage_initial[0].skip_comments + "em_steel_exit.opening", + "em_steel_exit", + "-" }, { - "titlemessage_initial_1.sort_priority", - &titlemessage_initial[0].sort_priority + "em_steel_exit.closing", + "em_steel_exit", + "-" }, { - "titlemessage_initial_2.x", - &titlemessage_initial[1].x + "sp_exit.opening", + "sp_exit", + "-" }, { - "titlemessage_initial_2.y", - &titlemessage_initial[1].y + "sp_exit.closing", + "sp_exit", + "-" }, { - "titlemessage_initial_2.width", - &titlemessage_initial[1].width + "sp_exit_open", + "sp_exit", + "-" }, { - "titlemessage_initial_2.height", - &titlemessage_initial[1].height + "sp_terminal.active", + "sp_terminal", + "-" }, { - "titlemessage_initial_2.chars", - &titlemessage_initial[1].chars + "sp_buggy_base.activating", + "sp_buggy_base", + "-" }, { - "titlemessage_initial_2.lines", - &titlemessage_initial[1].lines + "sp_buggy_base.active", + "sp_buggy_base", + "-" }, { - "titlemessage_initial_2.align", - &titlemessage_initial[1].align + "sp_murphy_clone", + "murphy_clone", + "-" }, { - "titlemessage_initial_2.autowrap", - &titlemessage_initial[1].autowrap + "amoeba.dropping", + "amoeba", + "-" }, { - "titlemessage_initial_2.centered", - &titlemessage_initial[1].centered + "quicksand.emptying", + "quicksand", + "-" }, { - "titlemessage_initial_2.skip_comments", - &titlemessage_initial[1].skip_comments + "quicksand_fast.emptying", + "quicksand", + "-" }, { - "titlemessage_initial_2.sort_priority", - &titlemessage_initial[1].sort_priority + "magic_wall.active", + "magic_wall", + "-" }, { - "titlemessage_initial_3.x", - &titlemessage_initial[2].x + "bd_magic_wall.active", + "magic_wall", + "-" }, { - "titlemessage_initial_3.y", - &titlemessage_initial[2].y + "dc_magic_wall.active", + "magic_wall", + "-" }, { - "titlemessage_initial_3.width", - &titlemessage_initial[2].width + "magic_wall_full", + "magic_wall", + "-" }, { - "titlemessage_initial_3.height", - &titlemessage_initial[2].height + "bd_magic_wall_full", + "magic_wall", + "-" }, { - "titlemessage_initial_3.chars", - &titlemessage_initial[2].chars + "dc_magic_wall_full", + "magic_wall", + "-" }, { - "titlemessage_initial_3.lines", - &titlemessage_initial[2].lines + "magic_wall.emptying", + "magic_wall", + "-" }, { - "titlemessage_initial_3.align", - &titlemessage_initial[2].align + "bd_magic_wall.emptying", + "magic_wall", + "-" }, { - "titlemessage_initial_3.autowrap", - &titlemessage_initial[2].autowrap + "dc_magic_wall.emptying", + "magic_wall", + "-" }, { - "titlemessage_initial_3.centered", - &titlemessage_initial[2].centered + "magic_wall_dead", + "magic_wall", + "-" }, { - "titlemessage_initial_3.skip_comments", - &titlemessage_initial[2].skip_comments + "bd_magic_wall_dead", + "magic_wall", + "-" }, { - "titlemessage_initial_3.sort_priority", - &titlemessage_initial[2].sort_priority + "dc_magic_wall_dead", + "magic_wall", + "-" }, + { - "titlemessage_initial_4.x", - &titlemessage_initial[3].x + "emc_fake_grass.active", + "fake_grass", + "-" }, { - "titlemessage_initial_4.y", - &titlemessage_initial[3].y + "gate_1_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.width", - &titlemessage_initial[3].width + "gate_2_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.height", - &titlemessage_initial[3].height + "gate_3_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.chars", - &titlemessage_initial[3].chars + "gate_4_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.lines", - &titlemessage_initial[3].lines + "em_gate_1_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.align", - &titlemessage_initial[3].align + "em_gate_2_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.autowrap", - &titlemessage_initial[3].autowrap + "em_gate_3_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.centered", - &titlemessage_initial[3].centered + "em_gate_4_gray.active", + "gate", + "" }, { - "titlemessage_initial_4.skip_comments", - &titlemessage_initial[3].skip_comments + "emc_gate_5_gray.active", + "gate", + "", }, { - "titlemessage_initial_4.sort_priority", - &titlemessage_initial[3].sort_priority + "emc_gate_6_gray.active", + "gate", + "", }, { - "titlemessage_initial_5.x", - &titlemessage_initial[4].x + "emc_gate_7_gray.active", + "gate", + "", }, { - "titlemessage_initial_5.y", - &titlemessage_initial[4].y + "emc_gate_8_gray.active", + "gate", + "", }, { - "titlemessage_initial_5.width", - &titlemessage_initial[4].width + "dc_gate_white_gray.active", + "gate", + "", }, { - "titlemessage_initial_5.height", - &titlemessage_initial[4].height + "emc_dripper.active", + "dripper", + "dripper" }, { - "titlemessage_initial_5.chars", - &titlemessage_initial[4].chars + "emc_spring_bumper.active", + "emc_spring_bumper", + "spring bumper", }, { - "titlemessage_initial_5.lines", - &titlemessage_initial[4].lines + "mm_exit.opening", + "mm_exit", + "-" }, { - "titlemessage_initial_5.align", - &titlemessage_initial[4].align + "mm_exit.closing", + "mm_exit", + "-" }, { - "titlemessage_initial_5.autowrap", - &titlemessage_initial[4].autowrap + "mm_gray_ball.opening", + "mm_gray_ball", + "-", }, { - "titlemessage_initial_5.centered", - &titlemessage_initial[4].centered + "mm_ice_wall.shrinking", + "mm_ice_wall", + "-", }, { - "titlemessage_initial_5.skip_comments", - &titlemessage_initial[4].skip_comments + "mm_amoeba_wall.growing", + "mm_amoeba_wall", + "-", }, { - "titlemessage_initial_5.sort_priority", - &titlemessage_initial[4].sort_priority + "mm_pacman.eating.right", + "mm_pacman", + "pac man (eating right)" }, { - "titlemessage_1.x", - &titlemessage[0].x + "mm_pacman.eating.up", + "mm_pacman", + "pac man (eating up)" }, { - "titlemessage_1.y", - &titlemessage[0].y + "mm_pacman.eating.left", + "mm_pacman", + "pac man (eating left)" }, { - "titlemessage_1.width", - &titlemessage[0].width + "mm_pacman.eating.down", + "mm_pacman", + "pac man (eating down)" }, + + /* ----------------------------------------------------------------------- */ + /* "unreal" (and therefore not drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ + { - "titlemessage_1.height", - &titlemessage[0].height + "blocked", + "-", + "-" }, { - "titlemessage_1.chars", - &titlemessage[0].chars + "explosion", + "-", + "-" }, { - "titlemessage_1.lines", - &titlemessage[0].lines + "nut.breaking", + "-", + "-" }, { - "titlemessage_1.align", - &titlemessage[0].align + "diamond.breaking", + "-", + "-" }, { - "titlemessage_1.autowrap", - &titlemessage[0].autowrap + "acid_splash_left", + "-", + "-" }, { - "titlemessage_1.centered", - &titlemessage[0].centered + "acid_splash_right", + "-", + "-" }, { - "titlemessage_1.skip_comments", - &titlemessage[0].skip_comments + "amoeba.growing", + "-", + "-" }, { - "titlemessage_1.sort_priority", - &titlemessage[0].sort_priority + "amoeba.shrinking", + "-", + "-" }, { - "titlemessage_2.x", - &titlemessage[1].x + "expandable_wall.growing", + "-", + "-" }, { - "titlemessage_2.y", - &titlemessage[1].y + "expandable_steelwall.growing", + "-", + "-" }, { - "titlemessage_2.width", - &titlemessage[1].width + "flames", + "-", + "-" }, { - "titlemessage_2.height", - &titlemessage[1].height + "player_is_leaving", + "-", + "-" }, { - "titlemessage_2.chars", - &titlemessage[1].chars + "player_is_exploding_1", + "-", + "-" }, { - "titlemessage_2.lines", - &titlemessage[1].lines + "player_is_exploding_2", + "-", + "-" }, { - "titlemessage_2.align", - &titlemessage[1].align + "player_is_exploding_3", + "-", + "-" }, { - "titlemessage_2.autowrap", - &titlemessage[1].autowrap + "player_is_exploding_4", + "-", + "-" }, { - "titlemessage_2.centered", - &titlemessage[1].centered + "quicksand.filling", + "quicksand", + "-" }, { - "titlemessage_2.skip_comments", - &titlemessage[1].skip_comments + "quicksand_fast.filling", + "quicksand", + "-" }, { - "titlemessage_2.sort_priority", - &titlemessage[1].sort_priority + "magic_wall.filling", + "-", + "-" }, { - "titlemessage_3.x", - &titlemessage[2].x + "bd_magic_wall.filling", + "-", + "-" }, { - "titlemessage_3.y", - &titlemessage[2].y + "dc_magic_wall.filling", + "-", + "-" }, { - "titlemessage_3.width", - &titlemessage[2].width + "element.snapping", + "-", + "-" }, { - "titlemessage_3.height", - &titlemessage[2].height + "diagonal.shrinking", + "-", + "-" }, { - "titlemessage_3.chars", - &titlemessage[2].chars + "diagonal.growing", + "-", + "-" }, + + /* ----------------------------------------------------------------------- */ + /* dummy elements (never used as game elements, only used as graphics) */ + /* ----------------------------------------------------------------------- */ + { - "titlemessage_3.lines", - &titlemessage[2].lines + "steelwall_topleft", + "-", + "-" }, { - "titlemessage_3.align", - &titlemessage[2].align + "steelwall_topright", + "-", + "-" }, { - "titlemessage_3.autowrap", - &titlemessage[2].autowrap + "steelwall_bottomleft", + "-", + "-" }, { - "titlemessage_3.centered", - &titlemessage[2].centered + "steelwall_bottomright", + "-", + "-" }, { - "titlemessage_3.skip_comments", - &titlemessage[2].skip_comments + "steelwall_horizontal", + "-", + "-" }, { - "titlemessage_3.sort_priority", - &titlemessage[2].sort_priority + "steelwall_vertical", + "-", + "-" }, { - "titlemessage_4.x", - &titlemessage[3].x + "invisible_steelwall_topleft", + "-", + "-" }, { - "titlemessage_4.y", - &titlemessage[3].y + "invisible_steelwall_topright", + "-", + "-" }, { - "titlemessage_4.width", - &titlemessage[3].width + "invisible_steelwall_bottomleft", + "-", + "-" }, { - "titlemessage_4.height", - &titlemessage[3].height + "invisible_steelwall_bottomright", + "-", + "-" }, { - "titlemessage_4.chars", - &titlemessage[3].chars + "invisible_steelwall_horizontal", + "-", + "-" }, { - "titlemessage_4.lines", - &titlemessage[3].lines + "invisible_steelwall_vertical", + "-", + "-" }, { - "titlemessage_4.align", - &titlemessage[3].align + "dynabomb", + "-", + "-" }, { - "titlemessage_4.autowrap", - &titlemessage[3].autowrap + "dynabomb.active", + "-", + "-" }, { - "titlemessage_4.centered", - &titlemessage[3].centered + "dynabomb_player_1", + "-", + "-" }, { - "titlemessage_4.skip_comments", - &titlemessage[3].skip_comments + "dynabomb_player_2", + "-", + "-" }, { - "titlemessage_4.sort_priority", - &titlemessage[3].sort_priority + "dynabomb_player_3", + "-", + "-" }, { - "titlemessage_5.x", - &titlemessage[4].x + "dynabomb_player_4", + "-", + "-" }, { - "titlemessage_5.y", - &titlemessage[4].y + "shield_normal.active", + "-", + "-" }, { - "titlemessage_5.width", - &titlemessage[4].width + "shield_deadly.active", + "-", + "-" }, { - "titlemessage_5.height", - &titlemessage[4].height + "amoeba", + "amoeba", + "-" }, { - "titlemessage_5.chars", - &titlemessage[4].chars + "mm_lightball_red", + "-", + "-" }, { - "titlemessage_5.lines", - &titlemessage[4].lines + "mm_lightball_blue", + "-", + "-" }, { - "titlemessage_5.align", - &titlemessage[4].align + "mm_lightball_yellow", + "-", + "-" }, { - "titlemessage_5.autowrap", - &titlemessage[4].autowrap + "mm_mask_mcduffin.right", + "-", + "-" }, { - "titlemessage_5.centered", - &titlemessage[4].centered + "mm_mask_mcduffin.up", + "-", + "-" }, { - "titlemessage_5.skip_comments", - &titlemessage[4].skip_comments + "mm_mask_mcduffin.left", + "-", + "-" }, { - "titlemessage_5.sort_priority", - &titlemessage[4].sort_priority + "mm_mask_mcduffin.down", + "-", + "-" }, - { - "readme.x", - &readme.x + "mm_mask_grid_1", + "-", + "-" }, { - "readme.y", - &readme.y + "mm_mask_grid_2", + "-", + "-" }, { - "readme.width", - &readme.width + "mm_mask_grid_3", + "-", + "-" }, { - "readme.height", - &readme.height + "mm_mask_grid_4", + "-", + "-" }, { - "readme.chars", - &readme.chars + "mm_mask_rectangle", + "-", + "-" }, { - "readme.lines", - &readme.lines + "mm_mask_circle", + "-", + "-" }, { - "readme.align", - &readme.align + "[default]", + "default", + "-" }, { - "readme.autowrap", - &readme.autowrap + "[bd_default]", + "bd_default", + "-" }, { - "readme.centered", - &readme.centered + "[sp_default]", + "sp_default", + "-" }, { - "readme.skip_comments", - &readme.skip_comments + "[sb_default]", + "sb_default", + "-" }, { - "readme.sort_priority", - &readme.sort_priority + "[mm_default]", + "mm_default", + "-" }, - { - "global.num_toons", - &global.num_toons + "graphic_1", + "graphic", + "-" }, - { - "border.draw_masked.TITLE", - &border.draw_masked[GFX_SPECIAL_ARG_TITLE] + "graphic_2", + "graphic", + "-" }, { - "border.draw_masked.MAIN", - &border.draw_masked[GFX_SPECIAL_ARG_MAIN] + "graphic_3", + "graphic", + "-" }, { - "border.draw_masked.LEVELS", - &border.draw_masked[GFX_SPECIAL_ARG_LEVELS] + "graphic_4", + "graphic", + "-" }, { - "border.draw_masked.SCORES", - &border.draw_masked[GFX_SPECIAL_ARG_SCORES] + "graphic_5", + "graphic", + "-" }, { - "border.draw_masked.EDITOR", - &border.draw_masked[GFX_SPECIAL_ARG_EDITOR] + "graphic_6", + "graphic", + "-" }, { - "border.draw_masked.INFO", - &border.draw_masked[GFX_SPECIAL_ARG_INFO] + "graphic_7", + "graphic", + "-" }, { - "border.draw_masked.SETUP", - &border.draw_masked[GFX_SPECIAL_ARG_SETUP] + "graphic_8", + "graphic", + "-" }, { - "border.draw_masked.PLAYING", - &border.draw_masked[GFX_SPECIAL_ARG_PLAYING] + "internal_clipboard_custom", + "internal", + "empty custom element" }, { - "border.draw_masked.DOOR", - &border.draw_masked[GFX_SPECIAL_ARG_DOOR] + "internal_clipboard_change", + "internal", + "empty change page" }, - { - "title.fade_delay", - &title.fade_delay + "internal_clipboard_group", + "internal", + "empty group element" }, { - "title.post_delay", - &title.post_delay + "internal_dummy", + "internal", + "-" }, { - "title.auto_delay", - &title.auto_delay + "internal_cascade_bd", + "internal", + "show Boulder Dash elements" }, - { - "menu.fade_delay", - &menu.fade_delay + "internal_cascade_bd.active", + "internal", + "hide Boulder Dash elements" }, { - "menu.post_delay", - &menu.post_delay + "internal_cascade_em", + "internal", + "show Emerald Mine elements" }, { - "menu.auto_delay", - &menu.auto_delay + "internal_cascade_em.active", + "internal", + "hide Emerald Mine elements" }, - { - "menu.draw_xoffset", - &menu.draw_xoffset[GFX_SPECIAL_ARG_DEFAULT] + "internal_cascade_emc", + "internal", + "show Emerald Mine Club elements" }, { - "menu.draw_yoffset", - &menu.draw_yoffset[GFX_SPECIAL_ARG_DEFAULT] + "internal_cascade_emc.active", + "internal", + "hide Emerald Mine Club elements" }, { - "menu.draw_xoffset.MAIN", - &menu.draw_xoffset[GFX_SPECIAL_ARG_MAIN] + "internal_cascade_rnd", + "internal", + "show Rocks'n'Diamonds elements" }, { - "menu.draw_yoffset.MAIN", - &menu.draw_yoffset[GFX_SPECIAL_ARG_MAIN] + "internal_cascade_rnd.active", + "internal", + "hide Rocks'n'Diamonds elements" }, { - "menu.draw_xoffset.LEVELS", - &menu.draw_xoffset[GFX_SPECIAL_ARG_LEVELS] + "internal_cascade_sb", + "internal", + "show Sokoban elements" }, { - "menu.draw_yoffset.LEVELS", - &menu.draw_yoffset[GFX_SPECIAL_ARG_LEVELS] + "internal_cascade_sb.active", + "internal", + "hide Sokoban elements" }, { - "menu.draw_xoffset.SCORES", - &menu.draw_xoffset[GFX_SPECIAL_ARG_SCORES] + "internal_cascade_sp", + "internal", + "show Supaplex elements" }, { - "menu.draw_yoffset.SCORES", - &menu.draw_yoffset[GFX_SPECIAL_ARG_SCORES] + "internal_cascade_sp.active", + "internal", + "hide Supaplex elements" }, { - "menu.draw_xoffset.EDITOR", - &menu.draw_xoffset[GFX_SPECIAL_ARG_EDITOR] + "internal_cascade_dc", + "internal", + "show Diamond Caves II elements" }, { - "menu.draw_yoffset.EDITOR", - &menu.draw_yoffset[GFX_SPECIAL_ARG_EDITOR] + "internal_cascade_dc.active", + "internal", + "hide Diamond Caves II elements" }, { - "menu.draw_xoffset.INFO", - &menu.draw_xoffset[GFX_SPECIAL_ARG_INFO] + "internal_cascade_dx", + "internal", + "show DX Boulderdash elements" }, { - "menu.draw_yoffset.INFO", - &menu.draw_yoffset[GFX_SPECIAL_ARG_INFO] + "internal_cascade_dx.active", + "internal", + "hide DX Boulderdash elements" }, { - "menu.draw_xoffset.INFO[ELEMENTS]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_ELEMENTS] + "internal_cascade_mm", + "internal", + "show Mirror Magic elements" }, { - "menu.draw_yoffset.INFO[ELEMENTS]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_ELEMENTS] + "internal_cascade_mm.active", + "internal", + "hide Mirror Magic elements" }, { - "menu.draw_xoffset.INFO[MUSIC]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_MUSIC] + "internal_cascade_df", + "internal", + "show Deflektor elements" }, { - "menu.draw_yoffset.INFO[MUSIC]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_MUSIC] + "internal_cascade_df.active", + "internal", + "hide Deflektor elements" }, { - "menu.draw_xoffset.INFO[CREDITS]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_CREDITS] + "internal_cascade_chars", + "internal", + "show text elements" }, { - "menu.draw_yoffset.INFO[CREDITS]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_CREDITS] + "internal_cascade_chars.active", + "internal", + "hide text elements" }, { - "menu.draw_xoffset.INFO[PROGRAM]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_PROGRAM] + "internal_cascade_steel_chars", + "internal", + "show steel text elements" }, { - "menu.draw_yoffset.INFO[PROGRAM]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_PROGRAM] + "internal_cascade_steel_chars.active", + "internal", + "hide steel text elements" }, { - "menu.draw_xoffset.INFO[VERSION]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_VERSION] + "internal_cascade_ce", + "internal", + "show custom elements" }, { - "menu.draw_yoffset.INFO[VERSION]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_VERSION] + "internal_cascade_ce.active", + "internal", + "hide custom elements" }, { - "menu.draw_xoffset.INFO[LEVELSET]", - &menu.draw_xoffset_info[GFX_SPECIAL_ARG_INFO_LEVELSET] + "internal_cascade_ge", + "internal", + "show group elements" }, { - "menu.draw_yoffset.INFO[LEVELSET]", - &menu.draw_yoffset_info[GFX_SPECIAL_ARG_INFO_LEVELSET] + "internal_cascade_ge.active", + "internal", + "hide group elements" }, { - "menu.draw_xoffset.SETUP", - &menu.draw_xoffset[GFX_SPECIAL_ARG_SETUP] + "internal_cascade_ref", + "internal", + "show reference elements" }, { - "menu.draw_yoffset.SETUP", - &menu.draw_yoffset[GFX_SPECIAL_ARG_SETUP] + "internal_cascade_ref.active", + "internal", + "hide reference elements" }, - { - "menu.scrollbar_xoffset", - &menu.scrollbar_xoffset + "internal_cascade_user", + "internal", + "show user defined elements" }, - { - "menu.list_size", - &menu.list_size[GFX_SPECIAL_ARG_DEFAULT] + "internal_cascade_user.active", + "internal", + "hide user defined elements" }, { - "menu.list_size.LEVELS", - &menu.list_size[GFX_SPECIAL_ARG_LEVELS] + "internal_cascade_dynamic", + "internal", + "show elements used in this level" }, { - "menu.list_size.SCORES", - &menu.list_size[GFX_SPECIAL_ARG_SCORES] + "internal_cascade_dynamic.active", + "internal", + "hide elements used in this level" }, + + /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */ + { - "menu.list_size.INFO", - &menu.list_size[GFX_SPECIAL_ARG_INFO] - }, + NULL, + NULL, + NULL + } +}; - { "main.button.name.x", &menu.main.button.name.x }, - { "main.button.name.y", &menu.main.button.name.y }, - { "main.button.levels.x", &menu.main.button.levels.x }, - { "main.button.levels.y", &menu.main.button.levels.y }, - { "main.button.scores.x", &menu.main.button.scores.x }, - { "main.button.scores.y", &menu.main.button.scores.y }, - { "main.button.editor.x", &menu.main.button.editor.x }, - { "main.button.editor.y", &menu.main.button.editor.y }, - { "main.button.info.x", &menu.main.button.info.x }, - { "main.button.info.y", &menu.main.button.info.y }, - { "main.button.game.x", &menu.main.button.game.x }, - { "main.button.game.y", &menu.main.button.game.y }, - { "main.button.setup.x", &menu.main.button.setup.x }, - { "main.button.setup.y", &menu.main.button.setup.y }, - { "main.button.quit.x", &menu.main.button.quit.x }, - { "main.button.quit.y", &menu.main.button.quit.y }, - { "main.button.prev_level.x", &menu.main.button.prev_level.x }, - { "main.button.prev_level.y", &menu.main.button.prev_level.y }, - { "main.button.next_level.x", &menu.main.button.next_level.x }, - { "main.button.next_level.y", &menu.main.button.next_level.y }, +/* ------------------------------------------------------------------------- */ +/* element action and direction definitions */ +/* ------------------------------------------------------------------------- */ - { "main.text.name.x", &menu.main.text.name.x }, - { "main.text.name.y", &menu.main.text.name.y }, - { "main.text.name.width", &menu.main.text.name.width }, - { "main.text.name.height", &menu.main.text.name.height }, - { "main.text.name.align", &menu.main.text.name.align }, - { "main.text.levels.x", &menu.main.text.levels.x }, - { "main.text.levels.y", &menu.main.text.levels.y }, - { "main.text.levels.width", &menu.main.text.levels.width }, - { "main.text.levels.height", &menu.main.text.levels.height }, - { "main.text.levels.align", &menu.main.text.levels.align }, - { "main.text.scores.x", &menu.main.text.scores.x }, - { "main.text.scores.y", &menu.main.text.scores.y }, - { "main.text.scores.width", &menu.main.text.scores.width }, - { "main.text.scores.height", &menu.main.text.scores.height }, - { "main.text.scores.align", &menu.main.text.scores.align }, - { "main.text.editor.x", &menu.main.text.editor.x }, - { "main.text.editor.y", &menu.main.text.editor.y }, - { "main.text.editor.width", &menu.main.text.editor.width }, - { "main.text.editor.height", &menu.main.text.editor.height }, - { "main.text.editor.align", &menu.main.text.editor.align }, - { "main.text.info.x", &menu.main.text.info.x }, - { "main.text.info.y", &menu.main.text.info.y }, - { "main.text.info.width", &menu.main.text.info.width }, - { "main.text.info.height", &menu.main.text.info.height }, - { "main.text.info.align", &menu.main.text.info.align }, - { "main.text.game.x", &menu.main.text.game.x }, - { "main.text.game.y", &menu.main.text.game.y }, - { "main.text.game.width", &menu.main.text.game.width }, - { "main.text.game.height", &menu.main.text.game.height }, - { "main.text.game.align", &menu.main.text.game.align }, - { "main.text.setup.x", &menu.main.text.setup.x }, - { "main.text.setup.y", &menu.main.text.setup.y }, - { "main.text.setup.width", &menu.main.text.setup.width }, - { "main.text.setup.height", &menu.main.text.setup.height }, - { "main.text.setup.align", &menu.main.text.setup.align }, - { "main.text.quit.x", &menu.main.text.quit.x }, - { "main.text.quit.y", &menu.main.text.quit.y }, - { "main.text.quit.width", &menu.main.text.quit.width }, - { "main.text.quit.height", &menu.main.text.quit.height }, - { "main.text.quit.align", &menu.main.text.quit.align }, +struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] = +{ + { ".[DEFAULT]", ACTION_DEFAULT, TRUE }, + { ".waiting", ACTION_WAITING, TRUE }, + { ".falling", ACTION_FALLING, TRUE }, + { ".moving", ACTION_MOVING, TRUE }, + { ".digging", ACTION_DIGGING, FALSE }, + { ".snapping", ACTION_SNAPPING, FALSE }, + { ".collecting", ACTION_COLLECTING, FALSE }, + { ".dropping", ACTION_DROPPING, FALSE }, + { ".pushing", ACTION_PUSHING, FALSE }, + { ".walking", ACTION_WALKING, FALSE }, + { ".passing", ACTION_PASSING, FALSE }, + { ".impact", ACTION_IMPACT, FALSE }, + { ".breaking", ACTION_BREAKING, FALSE }, + { ".activating", ACTION_ACTIVATING, FALSE }, + { ".deactivating", ACTION_DEACTIVATING, FALSE }, + { ".opening", ACTION_OPENING, FALSE }, + { ".closing", ACTION_CLOSING, FALSE }, + { ".attacking", ACTION_ATTACKING, TRUE }, + { ".growing", ACTION_GROWING, TRUE }, + { ".shrinking", ACTION_SHRINKING, FALSE }, + { ".active", ACTION_ACTIVE, TRUE }, + { ".filling", ACTION_FILLING, FALSE }, + { ".emptying", ACTION_EMPTYING, FALSE }, + { ".changing", ACTION_CHANGING, FALSE }, + { ".exploding", ACTION_EXPLODING, FALSE }, + { ".boring", ACTION_BORING, FALSE }, + { ".boring[1]", ACTION_BORING_1, FALSE }, + { ".boring[2]", ACTION_BORING_2, FALSE }, + { ".boring[3]", ACTION_BORING_3, FALSE }, + { ".boring[4]", ACTION_BORING_4, FALSE }, + { ".boring[5]", ACTION_BORING_5, FALSE }, + { ".boring[6]", ACTION_BORING_6, FALSE }, + { ".boring[7]", ACTION_BORING_7, FALSE }, + { ".boring[8]", ACTION_BORING_8, FALSE }, + { ".boring[9]", ACTION_BORING_9, FALSE }, + { ".boring[10]", ACTION_BORING_10, FALSE }, + { ".sleeping", ACTION_SLEEPING, FALSE }, + { ".sleeping[1]", ACTION_SLEEPING_1, FALSE }, + { ".sleeping[2]", ACTION_SLEEPING_2, FALSE }, + { ".sleeping[3]", ACTION_SLEEPING_3, FALSE }, + { ".awakening", ACTION_AWAKENING, FALSE }, + { ".dying", ACTION_DYING, FALSE }, + { ".turning", ACTION_TURNING, FALSE }, + { ".turning_from_left", ACTION_TURNING_FROM_LEFT, FALSE }, + { ".turning_from_right", ACTION_TURNING_FROM_RIGHT, FALSE }, + { ".turning_from_up", ACTION_TURNING_FROM_UP, FALSE }, + { ".turning_from_down", ACTION_TURNING_FROM_DOWN, FALSE }, + { ".smashed_by_rock", ACTION_SMASHED_BY_ROCK, FALSE }, + { ".smashed_by_spring", ACTION_SMASHED_BY_SPRING, FALSE }, + { ".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 }, + { ".page[4]", ACTION_PAGE_4, FALSE }, + { ".page[5]", ACTION_PAGE_5, FALSE }, + { ".page[6]", ACTION_PAGE_6, FALSE }, + { ".page[7]", ACTION_PAGE_7, FALSE }, + { ".page[8]", ACTION_PAGE_8, FALSE }, + { ".page[9]", ACTION_PAGE_9, FALSE }, + { ".page[10]", ACTION_PAGE_10, FALSE }, + { ".page[11]", ACTION_PAGE_11, FALSE }, + { ".page[12]", ACTION_PAGE_12, FALSE }, + { ".page[13]", ACTION_PAGE_13, FALSE }, + { ".page[14]", ACTION_PAGE_14, FALSE }, + { ".page[15]", ACTION_PAGE_15, FALSE }, + { ".page[16]", ACTION_PAGE_16, FALSE }, + { ".page[17]", ACTION_PAGE_17, FALSE }, + { ".page[18]", ACTION_PAGE_18, FALSE }, + { ".page[19]", ACTION_PAGE_19, FALSE }, + { ".page[20]", ACTION_PAGE_20, FALSE }, + { ".page[21]", ACTION_PAGE_21, FALSE }, + { ".page[22]", ACTION_PAGE_22, FALSE }, + { ".page[23]", ACTION_PAGE_23, FALSE }, + { ".page[24]", ACTION_PAGE_24, FALSE }, + { ".page[25]", ACTION_PAGE_25, FALSE }, + { ".page[26]", ACTION_PAGE_26, FALSE }, + { ".page[27]", ACTION_PAGE_27, FALSE }, + { ".page[28]", ACTION_PAGE_28, FALSE }, + { ".page[29]", ACTION_PAGE_29, FALSE }, + { ".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 }, - { "main.text.current_level.x", &menu.main.text.current_level.x }, - { "main.text.current_level.y", &menu.main.text.current_level.y }, - { "main.text.current_level.align", &menu.main.text.current_level.align }, - { "main.text.first_level.x", &menu.main.text.first_level.x }, - { "main.text.first_level.y", &menu.main.text.first_level.y }, - { "main.text.first_level.align", &menu.main.text.first_level.align }, - { "main.text.last_level.x", &menu.main.text.last_level.x }, - { "main.text.last_level.y", &menu.main.text.last_level.y }, - { "main.text.last_level.align", &menu.main.text.last_level.align }, - { "main.text.level_info_1.x", &menu.main.text.level_info_1.x }, - { "main.text.level_info_1.y", &menu.main.text.level_info_1.y }, - { "main.text.level_info_1.align", &menu.main.text.level_info_1.align }, - { "main.text.level_info_1.chars", &menu.main.text.level_info_1.chars }, - { "main.text.level_info_2.x", &menu.main.text.level_info_2.x }, - { "main.text.level_info_2.y", &menu.main.text.level_info_2.y }, - { "main.text.level_info_2.align", &menu.main.text.level_info_2.align }, - { "main.text.level_info_2.chars", &menu.main.text.level_info_2.chars }, - { "main.text.level_name.x", &menu.main.text.level_name.x }, - { "main.text.level_name.y", &menu.main.text.level_name.y }, - { "main.text.level_name.align", &menu.main.text.level_name.align }, - { "main.text.level_name.chars", &menu.main.text.level_name.chars }, - { "main.text.level_author.x", &menu.main.text.level_author.x }, - { "main.text.level_author.y", &menu.main.text.level_author.y }, - { "main.text.level_author.align", &menu.main.text.level_author.align }, - { "main.text.level_author.chars", &menu.main.text.level_author.chars }, - { "main.text.level_year.x", &menu.main.text.level_year.x }, - { "main.text.level_year.y", &menu.main.text.level_year.y }, - { "main.text.level_year.align", &menu.main.text.level_year.align }, - { "main.text.level_year.chars", &menu.main.text.level_year.chars }, - { "main.text.level_imported_from.x", &menu.main.text.level_imported_from.x }, - { "main.text.level_imported_from.y", &menu.main.text.level_imported_from.y }, - { "main.text.level_imported_from.align", - &menu.main.text.level_imported_from.align }, - { "main.text.level_imported_from.chars", - &menu.main.text.level_imported_from.chars }, - { "main.text.level_imported_by.x", &menu.main.text.level_imported_by.x }, - { "main.text.level_imported_by.y", &menu.main.text.level_imported_by.y }, - { "main.text.level_imported_by.align", - &menu.main.text.level_imported_by.align }, - { "main.text.level_imported_by.chars", - &menu.main.text.level_imported_by.chars }, - { "main.text.level_tested_by.x", &menu.main.text.level_tested_by.x }, - { "main.text.level_tested_by.y", &menu.main.text.level_tested_by.y }, - { "main.text.level_tested_by.align", &menu.main.text.level_tested_by.align }, - { "main.text.level_tested_by.chars", &menu.main.text.level_tested_by.chars }, - { "main.text.title_1.x", &menu.main.text.title_1.x }, - { "main.text.title_1.y", &menu.main.text.title_1.y }, - { "main.text.title_1.align", &menu.main.text.title_1.align }, - { "main.text.title_2.x", &menu.main.text.title_2.x }, - { "main.text.title_2.y", &menu.main.text.title_2.y }, - { "main.text.title_2.align", &menu.main.text.title_2.align }, - { "main.text.title_3.x", &menu.main.text.title_3.x }, - { "main.text.title_3.y", &menu.main.text.title_3.y }, - { "main.text.title_3.align", &menu.main.text.title_3.align }, + /* empty suffix always matches -- check as last entry in InitSoundInfo() */ + { "", ACTION_DEFAULT, TRUE }, - { "main.input.name.x", &menu.main.input.name.x }, - { "main.input.name.y", &menu.main.input.name.y }, - { "main.input.name.align", &menu.main.input.name.align }, + { NULL, 0, 0 } +}; - { "preview.x", &preview.x }, - { "preview.y", &preview.y }, - { "preview.align", &preview.align }, - { "preview.xsize", &preview.xsize }, - { "preview.ysize", &preview.ysize }, - { "preview.xoffset", &preview.xoffset }, - { "preview.yoffset", &preview.yoffset }, - { "preview.tile_size", &preview.tile_size }, - { "preview.step_offset", &preview.step_offset }, - { "preview.step_delay", &preview.step_delay }, - { "preview.anim_mode", &preview.anim_mode }, +struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] = +{ + { ".left", MV_BIT_LEFT }, + { ".right", MV_BIT_RIGHT }, + { ".up", MV_BIT_UP }, + { ".down", MV_BIT_DOWN }, + { ".upleft", MV_BIT_UP }, + { ".upright", MV_BIT_RIGHT }, + { ".downleft", MV_BIT_LEFT }, + { ".downright", MV_BIT_DOWN }, - { "door_1.width", &door_1.width }, - { "door_1.height", &door_1.height }, - { "door_1.step_offset", &door_1.step_offset }, - { "door_1.step_delay", &door_1.step_delay }, - { "door_1.anim_mode", &door_1.anim_mode }, - { "door_2.width", &door_2.width }, - { "door_2.height", &door_2.height }, - { "door_2.step_offset", &door_2.step_offset }, - { "door_2.step_delay", &door_2.step_delay }, - { "door_2.anim_mode", &door_2.anim_mode }, + { NULL, 0 } +}; - { "game.panel.level.x", &game.panel.level.x }, - { "game.panel.level.y", &game.panel.level.y }, - { "game.panel.level.align", &game.panel.level.align }, - { "game.panel.level.digits", &game.panel.level.chars }, - { "game.panel.gems.x", &game.panel.gems.x }, - { "game.panel.gems.y", &game.panel.gems.y }, - { "game.panel.gems.align", &game.panel.gems.align }, - { "game.panel.gems.digits", &game.panel.gems.chars }, - { "game.panel.inventory.x", &game.panel.inventory.x }, - { "game.panel.inventory.y", &game.panel.inventory.y }, - { "game.panel.inventory.align", &game.panel.inventory.align }, - { "game.panel.inventory.digits", &game.panel.inventory.chars }, - { "game.panel.keys.x", &game.panel.keys.x }, - { "game.panel.keys.y", &game.panel.keys.y }, - { "game.panel.keys.align", &game.panel.keys.align }, - { "game.panel.score.x", &game.panel.score.x }, - { "game.panel.score.y", &game.panel.score.y }, - { "game.panel.score.align", &game.panel.score.align }, - { "game.panel.score.digits", &game.panel.score.chars }, - { "game.panel.time.x", &game.panel.time.x }, - { "game.panel.time.y", &game.panel.time.y }, - { "game.panel.time.align", &game.panel.time.align }, - { "game.panel.time.digits", &game.panel.time.chars }, +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, }, - { "[player].boring_delay_fixed", &game.player_boring_delay_fixed }, - { "[player].boring_delay_random", &game.player_boring_delay_random }, - { "[player].sleeping_delay_fixed", &game.player_sleeping_delay_fixed }, - { "[player].sleeping_delay_random", &game.player_sleeping_delay_random }, + /* empty suffix always matches -- check as last entry in InitMusicInfo() */ + { "", GFX_SPECIAL_ARG_DEFAULT, }, - { NULL, NULL, } + { NULL, 0, } }; +#include "conf_var.c" /* include auto-generated data structure definitions */ + /* ------------------------------------------------------------------------- */ /* font definitions */ @@ -6274,21 +7472,103 @@ 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" }, { "font.game_info" }, { "font.info.elements" }, { "font.info.levelset" }, + + { 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 } }; @@ -6310,51 +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" - " -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" - "\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); - 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); + if (strSuffix(userdata_basename, ".conf")) + userdata_basename[strlen(userdata_basename) - 5] = '\0'; + } + + 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();