X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.c;h=a1ba5c7c5cc6069b92d5ec07e8bb689848182b70;hp=1805b6e0db9702a1363dadde7c424b0b2b5475e9;hb=HEAD;hpb=54cd73c4e6a8fc9521f0adda5501cd09eb294b4c diff --git a/src/main.c b/src/main.c index 1805b6e0..a1ba5c7c 100644 --- a/src/main.c +++ b/src/main.c @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // main.c // ============================================================================ @@ -21,7 +21,6 @@ #include "config.h" Bitmap *bitmap_db_field; -Bitmap *bitmap_db_panel; Bitmap *bitmap_db_door_1; Bitmap *bitmap_db_door_2; Bitmap *bitmap_db_store_1; @@ -30,18 +29,14 @@ DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; int game_status = -1; -boolean game_status_last_screen = -1; +int game_status_last_screen = -1; boolean level_editor_test_game = FALSE; +boolean score_info_tape_play = FALSE; boolean network_playing = FALSE; -#if defined(TARGET_SDL) -boolean network_server = FALSE; -SDL_Thread *server_thread; -#endif - int key_joystick_mapping = 0; -short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Tile[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Last[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -72,7 +67,9 @@ int PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +int GfxRandomStatic[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +int GfxElementEmpty[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]; @@ -126,7 +123,6 @@ int BX1, BY1; int BX2, BY2; int SBX_Left, SBX_Right; int SBY_Upper, SBY_Lower; -int ZX, ZY; int TimeFrames, TimePlayed, TimeLeft, TapeTime; @@ -134,9 +130,8 @@ boolean network_player_action_received = FALSE; struct LevelInfo level, level_template; struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL; -struct HiScore highscore[MAX_SCORE_ENTRIES]; +struct ScoreInfo scores, server_scores; struct TapeInfo tape; -struct SetupInfo setup; struct GameInfo game; struct GlobalInfo global; struct BorderInfo border; @@ -182,6 +177,7 @@ SetupFileHash *element_token_hash = NULL; SetupFileHash *graphic_token_hash = NULL; SetupFileHash *font_token_hash = NULL; SetupFileHash *hide_setup_hash = NULL; +SetupFileHash *anim_url_hash = NULL; // ---------------------------------------------------------------------------- @@ -552,7 +548,8 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "bd_butterfly.right", "bd_butterfly", - "butterfly (starts moving right)"}, + "butterfly (starts moving right)" + }, { "bd_butterfly.up", "bd_butterfly", @@ -561,11 +558,13 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "bd_butterfly.left", "bd_butterfly", - "butterfly (starts moving left)"}, + "butterfly (starts moving left)" + }, { "bd_butterfly.down", "bd_butterfly", - "butterfly (starts moving down)"}, + "butterfly (starts moving down)" + }, { "bd_firefly.right", "bd_firefly", @@ -639,7 +638,8 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "spaceship.right", "spaceship", - "spaceship (starts moving right)"}, + "spaceship (starts moving right)" + }, { "spaceship.up", "spaceship", @@ -648,11 +648,13 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "spaceship.left", "spaceship", - "spaceship (starts moving left)"}, + "spaceship (starts moving left)" + }, { "spaceship.down", "spaceship", - "spaceship (starts moving down)"}, + "spaceship (starts moving down)" + }, { "pacman.right", "pacman", @@ -1179,17 +1181,17 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "letter ''" }, { - "char_unused", + "char_button", "char", "letter 'button'" }, { - "char_unused", + "char_up", "char", "letter 'up'" }, { - "char_unused", + "char_down", "char", "letter 'down'" }, @@ -1856,62 +1858,62 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "emc_steelwall_1", "steelwall", - "steel wall" + "steel wall 1 (EMC style)" }, { "emc_steelwall_2", "steelwall", - "steel wall" + "steel wall 2 (EMC style)" }, { "emc_steelwall_3", "steelwall", - "steel wall" + "steel wall 3 (EMC style)" }, { "emc_steelwall_4", "steelwall", - "steel wall" + "steel wall 4 (EMC style)" }, { "emc_wall_1", "wall", - "normal wall" + "normal wall 1 (EMC style)" }, { "emc_wall_2", "wall", - "normal wall" + "normal wall 2 (EMC style)" }, { "emc_wall_3", "wall", - "normal wall" + "normal wall 3 (EMC style)" }, { "emc_wall_4", "wall", - "normal wall" + "normal wall 4 (EMC style)" }, { "emc_wall_5", "wall", - "normal wall" + "normal wall 5 (EMC style)" }, { "emc_wall_6", "wall", - "normal wall" + "normal wall 6 (EMC style)" }, { "emc_wall_7", "wall", - "normal wall" + "normal wall 7 (EMC style)" }, { "emc_wall_8", "wall", - "normal wall" + "normal wall 8 (EMC style)" }, { "tube_any", @@ -3646,62 +3648,62 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "emc_wall_9", "wall", - "normal wall" + "normal wall 9 (EMC style)" }, { "emc_wall_10", "wall", - "normal wall" + "normal wall 10 (EMC style)" }, { "emc_wall_11", "wall", - "normal wall" + "normal wall 11 (EMC style)" }, { "emc_wall_12", "wall", - "normal wall" + "normal wall 12 (EMC style)" }, { "emc_wall_13", "wall", - "normal wall" + "normal wall 13 (EMC style)" }, { "emc_wall_14", "wall", - "normal wall" + "normal wall 14 (EMC style)" }, { "emc_wall_15", "wall", - "normal wall" + "normal wall 15 (EMC style)" }, { "emc_wall_16", "wall", - "normal wall" + "normal wall 16 (EMC style)" }, { "emc_wall_slippery_1", "wall", - "slippery wall" + "slippery wall 1 (EMC style)" }, { "emc_wall_slippery_2", "wall", - "slippery wall" + "slippery wall 2 (EMC style)" }, { "emc_wall_slippery_3", "wall", - "slippery wall" + "slippery wall 3 (EMC style)" }, { "emc_wall_slippery_4", "wall", - "slippery wall" + "slippery wall 4 (EMC style)" }, { "emc_fake_grass", @@ -4239,17 +4241,17 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "steel letter ''" }, { - "steel_char_unused", + "steel_char_button", "steel_char", "steel letter 'button'" }, { - "steel_char_unused", + "steel_char_up", "steel_char", "steel letter 'up'" }, { - "steel_char_unused", + "steel_char_down", "steel_char", "steel letter 'down'" }, @@ -4316,112 +4318,112 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "dc_steelwall_1_left", "steelwall", - "steel wall (left)" + "steel wall 1 (left)" }, { "dc_steelwall_1_right", "steelwall", - "steel wall (right)" + "steel wall 1 (right)" }, { "dc_steelwall_1_top", "steelwall", - "steel wall (top)" + "steel wall 1 (top)" }, { "dc_steelwall_1_bottom", "steelwall", - "steel wall (bottom)" + "steel wall 1 (bottom)" }, { "dc_steelwall_1_horizontal", "steelwall", - "steel wall (top/bottom)" + "steel wall 1 (top/bottom)" }, { "dc_steelwall_1_vertical", "steelwall", - "steel wall (left/right)" + "steel wall 1 (left/right)" }, { "dc_steelwall_1_topleft", "steelwall", - "steel wall (top/left)" + "steel wall 1 (top/left)" }, { "dc_steelwall_1_topright", "steelwall", - "steel wall (top/right)" + "steel wall 1 (top/right)" }, { "dc_steelwall_1_bottomleft", "steelwall", - "steel wall (bottom/left)" + "steel wall 1 (bottom/left)" }, { "dc_steelwall_1_bottomright", "steelwall", - "steel wall (bottom/right)" + "steel wall 1 (bottom/right)" }, { "dc_steelwall_1_topleft_2", "steelwall", - "steel wall (top/left corner)" + "steel wall 1 (top/left corner)" }, { "dc_steelwall_1_topright_2", "steelwall", - "steel wall (top/right corner)" + "steel wall 1 (top/right corner)" }, { "dc_steelwall_1_bottomleft_2", "steelwall", - "steel wall (bottom/left corner)" + "steel wall 1 (bottom/left corner)" }, { "dc_steelwall_1_bottomright_2", "steelwall", - "steel wall (bottom/right corner)" + "steel wall 1 (bottom/right corner)" }, { "dc_steelwall_2_left", "steelwall", - "steel wall (left)" + "steel wall 2 (left)" }, { "dc_steelwall_2_right", "steelwall", - "steel wall (right)" + "steel wall 2 (right)" }, { "dc_steelwall_2_top", "steelwall", - "steel wall (top)" + "steel wall 2 (top)" }, { "dc_steelwall_2_bottom", "steelwall", - "steel wall (bottom)" + "steel wall 2 (bottom)" }, { "dc_steelwall_2_horizontal", "steelwall", - "steel wall (horizontal)" + "steel wall 2 (horizontal)" }, { "dc_steelwall_2_vertical", "steelwall", - "steel wall (vertical)" + "steel wall 2 (vertical)" }, { "dc_steelwall_2_middle", "steelwall", - "steel wall (middle)" + "steel wall 2 (middle)" }, { "dc_steelwall_2_single", "steelwall", - "steel wall (single)" + "steel wall 2 (single)" }, { "dc_switchgate_switch_up", @@ -4661,7 +4663,7 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "mm_kettle", "mm_kettle", - "magic kettle" + "magic cauldron" }, { "mm_bomb", @@ -4676,322 +4678,322 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "mm_steel_wall_1", "mm_steel_wall", - "steel wall" + "steel wall 1 (MM style)" }, { "mm_steel_wall_2", "mm_steel_wall", - "steel wall" + "steel wall 2 (MM style)" }, { "mm_steel_wall_3", "mm_steel_wall", - "steel wall" + "steel wall 3 (MM style)" }, { "mm_steel_wall_4", "mm_steel_wall", - "steel wall" + "steel wall 4 (MM style)" }, { "mm_steel_wall_5", "mm_steel_wall", - "steel wall" + "steel wall 5 (MM style)" }, { "mm_steel_wall_6", "mm_steel_wall", - "steel wall" + "steel wall 6 (MM style)" }, { "mm_steel_wall_7", "mm_steel_wall", - "steel wall" + "steel wall 7 (MM style)" }, { "mm_steel_wall_8", "mm_steel_wall", - "steel wall" + "steel wall 8 (MM style)" }, { "mm_steel_wall_9", "mm_steel_wall", - "steel wall" + "steel wall 9 (MM style)" }, { "mm_steel_wall_10", "mm_steel_wall", - "steel wall" + "steel wall 10 (MM style)" }, { "mm_steel_wall_11", "mm_steel_wall", - "steel wall" + "steel wall 11 (MM style)" }, { "mm_steel_wall_12", "mm_steel_wall", - "steel wall" + "steel wall 12 (MM style)" }, { "mm_steel_wall_13", "mm_steel_wall", - "steel wall" + "steel wall 13 (MM style)" }, { "mm_steel_wall_14", "mm_steel_wall", - "steel wall" + "steel wall 14 (MM style)" }, { "mm_steel_wall_15", "mm_steel_wall", - "steel wall" + "steel wall 15 (MM style)" }, { "mm_steel_wall_16", "mm_steel_wall", - "steel wall" + "steel wall 16 (MM style)" }, { "mm_wooden_wall_1", "mm_wooden_wall", - "wooden wall" + "wooden wall 1 (MM style)" }, { "mm_wooden_wall_2", "mm_wooden_wall", - "wooden wall" + "wooden wall 2 (MM style)" }, { "mm_wooden_wall_3", "mm_wooden_wall", - "wooden wall" + "wooden wall 3 (MM style)" }, { "mm_wooden_wall_4", "mm_wooden_wall", - "wooden wall" + "wooden wall 4 (MM style)" }, { "mm_wooden_wall_5", "mm_wooden_wall", - "wooden wall" + "wooden wall 5 (MM style)" }, { "mm_wooden_wall_6", "mm_wooden_wall", - "wooden wall" + "wooden wall 6 (MM style)" }, { "mm_wooden_wall_7", "mm_wooden_wall", - "wooden wall" + "wooden wall 7 (MM style)" }, { "mm_wooden_wall_8", "mm_wooden_wall", - "wooden wall" + "wooden wall 8 (MM style)" }, { "mm_wooden_wall_9", "mm_wooden_wall", - "wooden wall" + "wooden wall 9 (MM style)" }, { "mm_wooden_wall_10", "mm_wooden_wall", - "wooden wall" + "wooden wall 10 (MM style)" }, { "mm_wooden_wall_11", "mm_wooden_wall", - "wooden wall" + "wooden wall 11 (MM style)" }, { "mm_wooden_wall_12", "mm_wooden_wall", - "wooden wall" + "wooden wall 12 (MM style)" }, { "mm_wooden_wall_13", "mm_wooden_wall", - "wooden wall" + "wooden wall 13 (MM style)" }, { "mm_wooden_wall_14", "mm_wooden_wall", - "wooden wall" + "wooden wall 14 (MM style)" }, { "mm_wooden_wall_15", "mm_wooden_wall", - "wooden wall" + "wooden wall 15 (MM style)" }, { "mm_wooden_wall_16", "mm_wooden_wall", - "wooden wall" + "wooden wall 16 (MM style)" }, { "mm_ice_wall_1", "mm_ice_wall", - "ice wall" + "ice wall 1" }, { "mm_ice_wall_2", "mm_ice_wall", - "ice wall" + "ice wall 2" }, { "mm_ice_wall_3", "mm_ice_wall", - "ice wall" + "ice wall 3" }, { "mm_ice_wall_4", "mm_ice_wall", - "ice wall" + "ice wall 4" }, { "mm_ice_wall_5", "mm_ice_wall", - "ice wall" + "ice wall 5" }, { "mm_ice_wall_6", "mm_ice_wall", - "ice wall" + "ice wall 6" }, { "mm_ice_wall_7", "mm_ice_wall", - "ice wall" + "ice wall 7" }, { "mm_ice_wall_8", "mm_ice_wall", - "ice wall" + "ice wall 8" }, { "mm_ice_wall_9", "mm_ice_wall", - "ice wall" + "ice wall 9" }, { "mm_ice_wall_10", "mm_ice_wall", - "ice wall" + "ice wall 10" }, { "mm_ice_wall_11", "mm_ice_wall", - "ice wall" + "ice wall 11" }, { "mm_ice_wall_12", "mm_ice_wall", - "ice wall" + "ice wall 12" }, { "mm_ice_wall_13", "mm_ice_wall", - "ice wall" + "ice wall 13" }, { "mm_ice_wall_14", "mm_ice_wall", - "ice wall" + "ice wall 14" }, { "mm_ice_wall_15", "mm_ice_wall", - "ice wall" + "ice wall 15" }, { "mm_ice_wall_16", "mm_ice_wall", - "ice wall" + "ice wall 16" }, { "mm_amoeba_wall_1", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 1" }, { "mm_amoeba_wall_2", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 2" }, { "mm_amoeba_wall_3", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 3" }, { "mm_amoeba_wall_4", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 4" }, { "mm_amoeba_wall_5", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 5" }, { "mm_amoeba_wall_6", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 6" }, { "mm_amoeba_wall_7", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 7" }, { "mm_amoeba_wall_8", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 8" }, { "mm_amoeba_wall_9", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 9" }, { "mm_amoeba_wall_10", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 10" }, { "mm_amoeba_wall_11", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 11" }, { "mm_amoeba_wall_12", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 12" }, { "mm_amoeba_wall_13", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 13" }, { "mm_amoeba_wall_14", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 14" }, { "mm_amoeba_wall_15", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 15" }, { "mm_amoeba_wall_16", "mm_amoeba_wall", - "amoeba wall" + "amoeba wall 16" }, { "mm_wooden_block", @@ -5216,17 +5218,17 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "mm_mirror_fixed_2", "mm_mirror_fixed", - "fixed mirror (0\xb0)" + "fixed mirror (45\xb0)" }, { "mm_mirror_fixed_3", "mm_mirror_fixed", - "fixed mirror (0\xb0)" + "fixed mirror (90\xb0)" }, { "mm_mirror_fixed_4", "mm_mirror_fixed", - "fixed mirror (0\xb0)" + "fixed mirror (135\xb0)" }, { "mm_steel_lock", @@ -5294,24 +5296,24 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "extra energy ball (empty)" }, { - "mm_unused_156", - "unused", - "(not used)" + "mm_envelope_1", + "mm_envelope", + "mail envelope 1 (MM style)" }, { - "mm_unused_157", - "unused", - "(not used)" + "mm_envelope_2", + "mm_envelope", + "mail envelope 2 (MM style)" }, { - "mm_unused_158", - "unused", - "(not used)" + "mm_envelope_3", + "mm_envelope", + "mail envelope 3 (MM style)" }, { - "mm_unused_159", - "unused", - "(not used)" + "mm_envelope_4", + "mm_envelope", + "mail envelope 4 (MM style)" }, { "df_mirror_1", @@ -5396,242 +5398,242 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "df_wooden_grid_fixed_1", "df_wooden_grid_fixed", - "fixed wooden polarizer (0\xb0)" + "fixed wooden polarizer (DF) (0\xb0)" }, { "df_wooden_grid_fixed_2", "df_wooden_grid_fixed", - "fixed wooden polarizer (22.5\xb0)" + "fixed wooden polarizer (DF) (22.5\xb0)" }, { "df_wooden_grid_fixed_3", "df_wooden_grid_fixed", - "fixed wooden polarizer (45\xb0)" + "fixed wooden polarizer (DF) (45\xb0)" }, { "df_wooden_grid_fixed_4", "df_wooden_grid_fixed", - "fixed wooden polarizer (67.5\xb0)" + "fixed wooden polarizer (DF) (67.5\xb0)" }, { "df_wooden_grid_fixed_5", "df_wooden_grid_fixed", - "fixed wooden polarizer (90\xb0)" + "fixed wooden polarizer (DF) (90\xb0)" }, { "df_wooden_grid_fixed_6", "df_wooden_grid_fixed", - "fixed wooden polarizer (112.5\xb0)" + "fixed wooden polarizer (DF) (112.5\xb0)" }, { "df_wooden_grid_fixed_7", "df_wooden_grid_fixed", - "fixed wooden polarizer (135\xb0)" + "fixed wooden polarizer (DF) (135\xb0)" }, { "df_wooden_grid_fixed_8", "df_wooden_grid_fixed", - "fixed wooden polarizer (157.5\xb0)" + "fixed wooden polarizer (DF) (157.5\xb0)" }, { "df_steel_grid_fixed_1", "df_steel_grid_fixed", - "fixed steel polarizer (0\xb0)" + "fixed steel polarizer (DF) (0\xb0)" }, { "df_steel_grid_fixed_2", "df_steel_grid_fixed", - "fixed steel polarizer (22.5\xb0)" + "fixed steel polarizer (DF) (22.5\xb0)" }, { "df_steel_grid_fixed_3", "df_steel_grid_fixed", - "fixed steel polarizer (45\xb0)" + "fixed steel polarizer (DF) (45\xb0)" }, { "df_steel_grid_fixed_4", "df_steel_grid_fixed", - "fixed steel polarizer (67.5\xb0)" + "fixed steel polarizer (DF) (67.5\xb0)" }, { "df_steel_grid_fixed_5", "df_steel_grid_fixed", - "fixed steel polarizer (90\xb0)" + "fixed steel polarizer (DF) (90\xb0)" }, { "df_steel_grid_fixed_6", "df_steel_grid_fixed", - "fixed steel polarizer (112.5\xb0)" + "fixed steel polarizer (DF) (112.5\xb0)" }, { "df_steel_grid_fixed_7", "df_steel_grid_fixed", - "fixed steel polarizer (135\xb0)" + "fixed steel polarizer (DF) (135\xb0)" }, { "df_steel_grid_fixed_8", "df_steel_grid_fixed", - "fixed steel polarizer (157.5\xb0)" + "fixed steel polarizer (DF) (157.5\xb0)" }, { "df_wooden_wall_1", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 1 (DF style)" }, { "df_wooden_wall_2", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 2 (DF style)" }, { "df_wooden_wall_3", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 3 (DF style)" }, { "df_wooden_wall_4", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 4 (DF style)" }, { "df_wooden_wall_5", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 5 (DF style)" }, { "df_wooden_wall_6", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 6 (DF style)" }, { "df_wooden_wall_7", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 7 (DF style)" }, { "df_wooden_wall_8", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 8 (DF style)" }, { "df_wooden_wall_9", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 9 (DF style)" }, { "df_wooden_wall_10", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 10 (DF style)" }, { "df_wooden_wall_11", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 11 (DF style)" }, { "df_wooden_wall_12", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 12 (DF style)" }, { "df_wooden_wall_13", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 13 (DF style)" }, { "df_wooden_wall_14", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 14 (DF style)" }, { "df_wooden_wall_15", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 15 (DF style)" }, { "df_wooden_wall_16", "df_wooden_wall", - "wooden wall (DF style)" + "wooden wall 16 (DF style)" }, { "df_steel_wall_1", "df_steel_wall", - "steel wall (DF style)" + "steel wall 1 (DF style)" }, { "df_steel_wall_2", "df_steel_wall", - "steel wall (DF style)" + "steel wall 2 (DF style)" }, { "df_steel_wall_3", "df_steel_wall", - "steel wall (DF style)" + "steel wall 3 (DF style)" }, { "df_steel_wall_4", "df_steel_wall", - "steel wall (DF style)" + "steel wall 4 (DF style)" }, { "df_steel_wall_5", "df_steel_wall", - "steel wall (DF style)" + "steel wall 5 (DF style)" }, { "df_steel_wall_6", "df_steel_wall", - "steel wall (DF style)" + "steel wall 6 (DF style)" }, { "df_steel_wall_7", "df_steel_wall", - "steel wall (DF style)" + "steel wall 7 (DF style)" }, { "df_steel_wall_8", "df_steel_wall", - "steel wall (DF style)" + "steel wall 8 (DF style)" }, { "df_steel_wall_9", "df_steel_wall", - "steel wall (DF style)" + "steel wall 9 (DF style)" }, { "df_steel_wall_10", "df_steel_wall", - "steel wall (DF style)" + "steel wall 10 (DF style)" }, { "df_steel_wall_11", "df_steel_wall", - "steel wall (DF style)" + "steel wall 11 (DF style)" }, { "df_steel_wall_12", "df_steel_wall", - "steel wall (DF style)" + "steel wall 12 (DF style)" }, { "df_steel_wall_13", "df_steel_wall", - "steel wall (DF style)" + "steel wall 13 (DF style)" }, { "df_steel_wall_14", "df_steel_wall", - "steel wall (DF style)" + "steel wall 14 (DF style)" }, { "df_steel_wall_15", "df_steel_wall", - "steel wall (DF style)" + "steel wall 15 (DF style)" }, { "df_steel_wall_16", "df_steel_wall", - "steel wall (DF style)" + "steel wall 16 (DF style)" }, { "df_empty_space", @@ -6231,12 +6233,12 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = { "mm_steel_wall", "mm_steel_wall", - "steel wall", + "steel wall (MM style)", }, { "mm_wooden_wall", "mm_wooden_wall", - "wooden wall", + "wooden wall (MM style)", }, { "mm_ice_wall", @@ -6268,6 +6270,196 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "df_wooden_wall", "wooden wall (DF style)", }, + { + "spring.left", + "spring", + "spring (starts moving left)" + }, + { + "spring.right", + "spring", + "spring (starts moving right)" + }, + { + "empty_space_1", + "empty_space", + "empty space 1" + }, + { + "empty_space_2", + "empty_space", + "empty space 2" + }, + { + "empty_space_3", + "empty_space", + "empty space 3" + }, + { + "empty_space_4", + "empty_space", + "empty space 4" + }, + { + "empty_space_5", + "empty_space", + "empty space 5" + }, + { + "empty_space_6", + "empty_space", + "empty space 6" + }, + { + "empty_space_7", + "empty_space", + "empty space 7" + }, + { + "empty_space_8", + "empty_space", + "empty space 8" + }, + { + "empty_space_9", + "empty_space", + "empty space 9" + }, + { + "empty_space_10", + "empty_space", + "empty space 10" + }, + { + "empty_space_11", + "empty_space", + "empty space 11" + }, + { + "empty_space_12", + "empty_space", + "empty space 12" + }, + { + "empty_space_13", + "empty_space", + "empty space 13" + }, + { + "empty_space_14", + "empty_space", + "empty space 14" + }, + { + "empty_space_15", + "empty_space", + "empty space 15" + }, + { + "empty_space_16", + "empty_space", + "empty space 16" + }, + { + "df_mirror_fixed_1", + "df_mirror_fixed", + "fixed mirror (DF style) (0\xb0)" + }, + { + "df_mirror_fixed_2", + "df_mirror_fixed", + "fixed mirror (DF style) (11.25\xb0)" + }, + { + "df_mirror_fixed_3", + "df_mirror_fixed", + "fixed mirror (DF style) (22.5\xb0)" + }, + { + "df_mirror_fixed_4", + "df_mirror_fixed", + "fixed mirror (DF style) (33.75\xb0)" + }, + { + "df_mirror_fixed_5", + "df_mirror_fixed", + "fixed mirror (DF style) (45\xb0)" + }, + { + "df_mirror_fixed_6", + "df_mirror_fixed", + "fixed mirror (DF style) (56.25\xb0)" + }, + { + "df_mirror_fixed_7", + "df_mirror_fixed", + "fixed mirror (DF style) (67.5\xb0)" + }, + { + "df_mirror_fixed_8", + "df_mirror_fixed", + "fixed mirror (DF style) (78.75\xb0)" + }, + { + "df_mirror_fixed_9", + "df_mirror_fixed", + "fixed mirror (DF style) (90\xb0)" + }, + { + "df_mirror_fixed_10", + "df_mirror_fixed", + "fixed mirror (DF style) (101.25\xb0)" + }, + { + "df_mirror_fixed_11", + "df_mirror_fixed", + "fixed mirror (DF style) (112.5\xb0)" + }, + { + "df_mirror_fixed_12", + "df_mirror_fixed", + "fixed mirror (DF style) (123.75\xb0)" + }, + { + "df_mirror_fixed_13", + "df_mirror_fixed", + "fixed mirror (DF style) (135\xb0)" + }, + { + "df_mirror_fixed_14", + "df_mirror_fixed", + "fixed mirror (DF style) (146.25\xb0)" + }, + { + "df_mirror_fixed_15", + "df_mirror_fixed", + "fixed mirror (DF style) (157.5\xb0)" + }, + { + "df_mirror_fixed_16", + "df_mirror_fixed", + "fixed mirror (DF style) (168.75\xb0)" + }, + { + "df_slope_1", + "df_slope", + "slope (DF style) (45\xb0)" + }, + { + "df_slope_2", + "df_slope", + "slope (DF style) (135\xb0)" + }, + { + "df_slope_3", + "df_slope", + "slope (DF style) (225\xb0)" + }, + { + "df_slope_4", + "df_slope", + "slope (DF style) (315\xb0)" + }, // -------------------------------------------------------------------------- // "real" (and therefore drawable) runtime elements @@ -6644,6 +6836,11 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "mm_exit", "-" }, + { + "mm_gray_ball.active", + "mm_gray_ball", + "-", + }, { "mm_gray_ball.opening", "mm_gray_ball", @@ -6679,6 +6876,16 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "mm_pacman", "pac man (eating down)" }, + { + "mm_bomb.active", + "mm_bomb", + "active bomb (MM style)" + }, + { + "df_mine.active", + "df_mine", + "active mine" + }, // -------------------------------------------------------------------------- // "unreal" (and therefore not drawable) runtime elements @@ -6929,56 +7136,6 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "-", "-" }, - { - "mm_mask_mcduffin.right", - "-", - "-" - }, - { - "mm_mask_mcduffin.up", - "-", - "-" - }, - { - "mm_mask_mcduffin.left", - "-", - "-" - }, - { - "mm_mask_mcduffin.down", - "-", - "-" - }, - { - "mm_mask_grid_1", - "-", - "-" - }, - { - "mm_mask_grid_2", - "-", - "-" - }, - { - "mm_mask_grid_3", - "-", - "-" - }, - { - "mm_mask_grid_4", - "-", - "-" - }, - { - "mm_mask_rectangle", - "-", - "-" - }, - { - "mm_mask_circle", - "-", - "-" - }, { "[default]", "default", @@ -7204,6 +7361,16 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "internal", "hide group elements" }, + { + "internal_cascade_es", + "internal", + "show empty space elements" + }, + { + "internal_cascade_es.active", + "internal", + "hide empty space elements" + }, { "internal_cascade_ref", "internal", @@ -7393,6 +7560,7 @@ struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] = struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = { { ".[DEFAULT]", GFX_SPECIAL_ARG_DEFAULT, }, + { ".LOADING_INITIAL", GFX_SPECIAL_ARG_LOADING_INITIAL, }, { ".LOADING", GFX_SPECIAL_ARG_LOADING, }, { ".TITLE_INITIAL", GFX_SPECIAL_ARG_TITLE_INITIAL, }, { ".TITLE_INITIAL_1", GFX_SPECIAL_ARG_TITLE_INITIAL_1, }, @@ -7407,9 +7575,11 @@ struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = { ".TITLE_4", GFX_SPECIAL_ARG_TITLE_4, }, { ".TITLE_5", GFX_SPECIAL_ARG_TITLE_5, }, { ".MAIN", GFX_SPECIAL_ARG_MAIN, }, + { ".NAMES", GFX_SPECIAL_ARG_NAMES, }, { ".LEVELS", GFX_SPECIAL_ARG_LEVELS }, { ".LEVELNR", GFX_SPECIAL_ARG_LEVELNR }, { ".SCORES", GFX_SPECIAL_ARG_SCORES, }, + { ".SCOREINFO", GFX_SPECIAL_ARG_SCOREINFO, }, { ".EDITOR", GFX_SPECIAL_ARG_EDITOR, }, { ".INFO", GFX_SPECIAL_ARG_INFO, }, { ".SETUP", GFX_SPECIAL_ARG_SETUP, }, @@ -7420,7 +7590,10 @@ struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = { ".PREVIEW", GFX_SPECIAL_ARG_PREVIEW, }, { ".CRUMBLED", GFX_SPECIAL_ARG_CRUMBLED, }, { ".MAINONLY", GFX_SPECIAL_ARG_MAINONLY, }, + { ".NAMESONLY", GFX_SPECIAL_ARG_NAMESONLY, }, + { ".SCORESONLY", GFX_SPECIAL_ARG_SCORESONLY, }, { ".TYPENAME", GFX_SPECIAL_ARG_TYPENAME, }, + { ".TYPENAMES", GFX_SPECIAL_ARG_TYPENAMES, }, { ".SUBMENU", GFX_SPECIAL_ARG_SUBMENU, }, { ".MENU", GFX_SPECIAL_ARG_MENU, }, { ".TOONS", GFX_SPECIAL_ARG_TOONS, }, @@ -7471,6 +7644,7 @@ struct FontInfo font_info[NUM_FONTS + 1] = { "font.envelope_2" }, { "font.envelope_3" }, { "font.envelope_4" }, + { "font.request_narrow" }, { "font.request" }, { "font.input_1.active" }, { "font.input_2.active" }, @@ -7572,6 +7746,11 @@ struct GlobalAnimNameInfo global_anim_name_info[NUM_GLOBAL_ANIM_TOKENS + 1] = { NULL } }; +struct GlobalAnimEventInfo global_anim_event_info = +{ + NULL, 0 +}; + // ---------------------------------------------------------------------------- // music token prefix definitions @@ -7596,16 +7775,17 @@ static void print_usage(void) "\n" "Options:\n" " -b, --basepath DIRECTORY alternative base DIRECTORY\n" - " -l, --level DIRECTORY alternative level DIRECTORY\n" + " -l, --levels DIRECTORY alternative levels DIRECTORY\n" " -g, --graphics DIRECTORY alternative graphics DIRECTORY\n" " -s, --sounds DIRECTORY alternative sounds DIRECTORY\n" " -m, --music DIRECTORY alternative music DIRECTORY\n" + " --display NR open program window on display NR\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" + " --debug[=MODE] show (and limit) debug output\n" " -e, --execute COMMAND execute batch COMMAND\n" "\n" "Valid commands for '--execute' option:\n" @@ -7617,13 +7797,15 @@ static void print_usage(void) " \"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" + " \"autotest LEVELDIR [NR ...]\" test level tapes for LEVELDIR\n" + " \"autofix LEVELDIR [NR ...]\" test and fix tapes for LEVELDIR\n" + " \"patch tapes MODE LEVELDIR [NR]\" patch 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" + " \"create sketch images DIRECTORY\" write BMP images to DIRECTORY\n" + " \"create collect image DIRECTORY\" write BMP image to DIRECTORY\n" "\n", program.command_basename); } @@ -7680,29 +7862,13 @@ static void InitProgramConfig(char *command_filename) char *program_title = PROGRAM_TITLE_STRING; char *program_icon_file = PROGRAM_ICON_FILENAME; char *program_version = getProgramRealVersionString(); + char *program_basename = getBaseNameNoSuffix(command_filename); char *config_filename = getProgramConfigFilename(command_filename); - char *userdata_basename = getBaseNameNoSuffix(command_filename); char *userdata_subdir; - char *userdata_subdir_unix; // read default program config, if existing if (fileExists(config_filename)) - { - // if program config file exists, derive Unix user data directory from it - // (but only if the program config file is not generic "setup.conf" file) - if (!strEqual(getBaseNamePtr(config_filename), SETUP_FILENAME)) - { - userdata_basename = getBaseName(config_filename); - - if (strSuffix(userdata_basename, ".conf")) - userdata_basename[strlen(userdata_basename) - 5] = '\0'; - } - 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 && @@ -7719,10 +7885,10 @@ static void InitProgramConfig(char *command_filename) strlen(setup.internal.program_icon_file) > 0) program_icon_file = getStringCopy(setup.internal.program_icon_file); -#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX) +#if defined(PLATFORM_WINDOWS) || defined(PLATFORM_MAC) || defined(PLATFORM_EMSCRIPTEN) userdata_subdir = program_title; #elif defined(PLATFORM_UNIX) - userdata_subdir = userdata_subdir_unix; + userdata_subdir = getStringCat2(".", program_basename); #else userdata_subdir = USERDATA_DIRECTORY_OTHER; #endif @@ -7738,7 +7904,7 @@ static void InitProgramConfig(char *command_filename) InitProgramInfo(command_filename, config_filename, userdata_subdir, - program_title, + program_basename, program_title, program_icon_file, COOKIE_PREFIX,