X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=14a2adf4b3d68be9726f6e78f3d51f3ae7b99661;hb=edaa850fd2d2cae7ec31961fae3d56487e710c71;hp=a986ebd57e2adfa559a22ecc20576b5c7412f8bc;hpb=d0747d3b2d7c61844bc1ad096a4e18d889640018;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index a986ebd5..14a2adf4 100644 --- a/src/screens.c +++ b/src/screens.c @@ -58,41 +58,43 @@ #define SETUP_MODE_SHORTCUTS_3 12 #define SETUP_MODE_SHORTCUTS_4 13 #define SETUP_MODE_SHORTCUTS_5 14 +#define SETUP_MODE_SHORTCUTS_6 15 // sub-screens on the setup screen (generic) -#define SETUP_MODE_CHOOSE_ARTWORK 15 -#define SETUP_MODE_CHOOSE_OTHER 16 +#define SETUP_MODE_CHOOSE_ARTWORK 16 +#define SETUP_MODE_CHOOSE_OTHER 17 // sub-screens on the setup screen (specific) -#define SETUP_MODE_CHOOSE_SCORES_TYPE 17 -#define SETUP_MODE_CHOOSE_GAME_SPEED 18 -#define SETUP_MODE_CHOOSE_SCROLL_DELAY 19 -#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 20 -#define SETUP_MODE_CHOOSE_BD_PALETTE_C64 21 -#define SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV 22 -#define SETUP_MODE_CHOOSE_BD_PALETTE_ATARI 23 -#define SETUP_MODE_CHOOSE_BD_COLOR_TYPE 24 -#define SETUP_MODE_CHOOSE_WINDOW_SIZE 25 -#define SETUP_MODE_CHOOSE_SCALING_TYPE 26 -#define SETUP_MODE_CHOOSE_RENDERING 27 -#define SETUP_MODE_CHOOSE_VSYNC 28 -#define SETUP_MODE_CHOOSE_GRAPHICS 29 -#define SETUP_MODE_CHOOSE_SOUNDS 30 -#define SETUP_MODE_CHOOSE_MUSIC 31 -#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 32 -#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 33 -#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 34 -#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 35 -#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 36 -#define SETUP_MODE_CHOOSE_DROP_DISTANCE 37 -#define SETUP_MODE_CHOOSE_TRANSPARENCY 38 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 39 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 40 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 41 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 42 -#define SETUP_MODE_CONFIG_VIRT_BUTTONS 43 - -#define MAX_SETUP_MODES 44 +#define SETUP_MODE_CHOOSE_SCORES_TYPE 18 +#define SETUP_MODE_CHOOSE_GAME_SPEED 19 +#define SETUP_MODE_CHOOSE_SCROLL_DELAY 20 +#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 21 +#define SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE 22 +#define SETUP_MODE_CHOOSE_BD_PALETTE_C64 23 +#define SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV 24 +#define SETUP_MODE_CHOOSE_BD_PALETTE_ATARI 25 +#define SETUP_MODE_CHOOSE_BD_COLOR_TYPE 26 +#define SETUP_MODE_CHOOSE_WINDOW_SIZE 27 +#define SETUP_MODE_CHOOSE_SCALING_TYPE 28 +#define SETUP_MODE_CHOOSE_RENDERING 29 +#define SETUP_MODE_CHOOSE_VSYNC 30 +#define SETUP_MODE_CHOOSE_GRAPHICS 31 +#define SETUP_MODE_CHOOSE_SOUNDS 32 +#define SETUP_MODE_CHOOSE_MUSIC 33 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 34 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 35 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 36 +#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 37 +#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 38 +#define SETUP_MODE_CHOOSE_DROP_DISTANCE 39 +#define SETUP_MODE_CHOOSE_TRANSPARENCY 40 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 41 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 42 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 43 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 44 +#define SETUP_MODE_CONFIG_VIRT_BUTTONS 45 + +#define MAX_SETUP_MODES 46 #define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES) @@ -125,10 +127,11 @@ #define STR_SETUP_CHOOSE_GAME_SPEED "Game Speed" #define STR_SETUP_CHOOSE_SCROLL_DELAY "Scroll Delay" #define STR_SETUP_CHOOSE_SNAPSHOT_MODE "Snapshot Mode" +#define STR_SETUP_CHOOSE_GAME_ENGINE_TYPE "Game Engine" #define STR_SETUP_CHOOSE_BD_PALETTE_C64 "Palette (C64)" #define STR_SETUP_CHOOSE_BD_PALETTE_C64DTV "Palette (C64DTV)" #define STR_SETUP_CHOOSE_BD_PALETTE_ATARI "Palette (Atari)" -#define STR_SETUP_CHOOSE_BD_COLOR_TYPE "Palette Type" +#define STR_SETUP_CHOOSE_BD_COLOR_TYPE "Color Type" #define STR_SETUP_CHOOSE_WINDOW_SIZE "Window Scaling" #define STR_SETUP_CHOOSE_SCALING_TYPE "Anti-Aliasing" #define STR_SETUP_CHOOSE_RENDERING "Rendering Mode" @@ -296,6 +299,7 @@ static void ConfigureJoystick(int); static void ConfigureVirtualButtons(void); static void execSetupGame(void); static void execSetupEngines(void); +static void execSetupEditor(void); static void execSetupGraphics(void); static void execSetupSound(void); static void execSetupTouch(void); @@ -375,6 +379,9 @@ static TreeInfo *scroll_delay_current = NULL; static TreeInfo *snapshot_modes = NULL; static TreeInfo *snapshot_mode_current = NULL; +static TreeInfo *game_engine_types = NULL; +static TreeInfo *game_engine_type_current = NULL; + static TreeInfo *bd_palettes_c64 = NULL; static TreeInfo *bd_palette_c64_current = NULL; @@ -544,6 +551,17 @@ static struct StringValueTextInfo snapshot_modes_list[] = { NULL, NULL }, }; +static struct ValueTextInfo game_engine_types_list[] = +{ + { GAME_ENGINE_TYPE_RND, "Rocks'n'Diamonds" }, + { GAME_ENGINE_TYPE_BD, "Boulder Dash" }, + { GAME_ENGINE_TYPE_EM, "Emerald Mine" }, + { GAME_ENGINE_TYPE_SP, "Supaplex" }, + { GAME_ENGINE_TYPE_MM, "Mirror Magic" }, + + { -1, NULL } +}; + static struct ValueTextInfo bd_palettes_c64_list[] = { { GD_PALETTE_C64_VICE_NEW, "Vice new" }, @@ -706,7 +724,7 @@ static int align_yoffset = 0; INFO_MODE_MAIN) #define DRAW_MODE_SETUP(i) ((i) >= SETUP_MODE_MAIN && \ - (i) <= SETUP_MODE_SHORTCUTS_5 ? (i) : \ + (i) <= SETUP_MODE_SHORTCUTS_6 ? (i) : \ (i) >= SETUP_MODE_CHOOSE_GRAPHICS && \ (i) <= SETUP_MODE_CHOOSE_MUSIC ? \ SETUP_MODE_CHOOSE_ARTWORK : \ @@ -5038,7 +5056,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY || setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE) execSetupGame(); - else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || + else if (setup_mode == SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE || + setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_ATARI || setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) @@ -5239,7 +5258,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY || setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE) execSetupGame(); - else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || + else if (setup_mode == SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE || + setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_ATARI || setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) @@ -5321,7 +5341,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY || setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE) execSetupGame(); - else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || + else if (setup_mode == SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE || + setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64 || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV || setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_ATARI || setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) @@ -5971,6 +5992,7 @@ static char *rendering_mode_text; static char *vsync_mode_text; static char *scroll_delay_text; static char *snapshot_mode_text; +static char *game_engine_type_text; static char *bd_palette_c64_text; static char *bd_palette_c64dtv_text; static char *bd_palette_atari_text; @@ -6286,6 +6308,56 @@ static void execSetupChooseSnapshotMode(void) DrawSetupScreen(); } +static void execSetupEngines_setGameEngineType(void) +{ + if (game_engine_types == NULL) + { + int i; + + for (i = 0; game_engine_types_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = game_engine_types_list[i].value; + char *text = game_engine_types_list[i].text; + + ti->node_top = &game_engine_types; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, STR_SETUP_CHOOSE_GAME_ENGINE_TYPE); + + pushTreeInfo(&game_engine_types, ti); + } + + // sort game engine type values to start with lowest game engine type value + sortTreeInfo(&game_engine_types); + + // set current game engine type value to configured game engine type value + game_engine_type_current = + getTreeInfoFromIdentifier(game_engine_types, i_to_a(setup.default_game_engine_type)); + + // if that fails, set current game engine type to reliable default value + if (game_engine_type_current == NULL) + game_engine_type_current = + getTreeInfoFromIdentifier(game_engine_types, i_to_a(GAME_ENGINE_TYPE_RND)); + + // if that also fails, set current game engine type to first available value + if (game_engine_type_current == NULL) + game_engine_type_current = game_engine_types; + } + + setup.default_game_engine_type = atoi(game_engine_type_current->identifier); + + // needed for displaying game engine type text instead of identifier + game_engine_type_text = game_engine_type_current->name; +} + static void execSetupEngines_setPalettesC64(void) { if (bd_palettes_c64 == NULL) @@ -6463,26 +6535,26 @@ static void execSetupEngines_setColorType(void) pushTreeInfo(&bd_color_types, ti); } - // sort palette values to start with lowest palette value + // sort color type values to start with lowest color type value sortTreeInfo(&bd_color_types); - // set current palette value to configured palette value + // set current color type value to configured color type value bd_color_type_current = - getTreeInfoFromIdentifier(bd_color_types, i_to_a(setup.bd_color_type)); + getTreeInfoFromIdentifier(bd_color_types, i_to_a(setup.bd_default_color_type)); - // if that fails, set current palette to reliable default value + // if that fails, set current color type to reliable default value if (bd_color_type_current == NULL) bd_color_type_current = getTreeInfoFromIdentifier(bd_color_types, i_to_a(GD_DEFAULT_COLOR_TYPE)); - // if that also fails, set current palette to first available value + // if that also fails, set current color type to first available value if (bd_color_type_current == NULL) bd_color_type_current = bd_color_types; } - setup.bd_color_type = atoi(bd_color_type_current->identifier); + setup.bd_default_color_type = atoi(bd_color_type_current->identifier); - // needed for displaying palette text instead of identifier + // needed for displaying color type text instead of identifier bd_color_type_text = bd_color_type_current->name; } @@ -6490,6 +6562,7 @@ static void execSetupEngines(void) { setup_mode = SETUP_MODE_ENGINES; + execSetupEngines_setGameEngineType(); execSetupEngines_setPalettesC64(); execSetupEngines_setPalettesC64DTV(); execSetupEngines_setPalettesAtari(); @@ -6498,6 +6571,13 @@ static void execSetupEngines(void) DrawSetupScreen(); } +static void execSetupChooseGameEngineType(void) +{ + setup_mode = SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE; + + DrawSetupScreen(); +} + static void execSetupChoosePaletteC64(void) { setup_mode = SETUP_MODE_CHOOSE_BD_PALETTE_C64; @@ -7546,6 +7626,13 @@ static void execSetupShortcuts5(void) DrawSetupScreen(); } +static void execSetupShortcuts6(void) +{ + setup_mode = SETUP_MODE_SHORTCUTS_6; + + DrawSetupScreen(); +} + static void execExitSetup(void) { SetGameStatus(GAME_MODE_MAIN); @@ -7715,6 +7802,21 @@ static struct { &setup.engine_snapshot_mode, execSetupChooseSnapshotMode }, { &setup.engine_snapshot_mode, &snapshot_mode_text }, + { &setup.default_game_engine_type, execSetupChooseGameEngineType }, + { &setup.default_game_engine_type, &game_engine_type_text }, + + { &setup.bd_palette_c64, execSetupChoosePaletteC64 }, + { &setup.bd_palette_c64, &bd_palette_c64_text }, + + { &setup.bd_palette_c64dtv, execSetupChoosePaletteC64DTV }, + { &setup.bd_palette_c64dtv, &bd_palette_c64dtv_text }, + + { &setup.bd_palette_atari, execSetupChoosePaletteAtari }, + { &setup.bd_palette_atari, &bd_palette_atari_text }, + + { &setup.bd_default_color_type, execSetupChooseColorType }, + { &setup.bd_default_color_type, &bd_color_type_text }, + { &setup.window_scaling_percent, execSetupChooseWindowSize }, { &setup.window_scaling_percent, &window_size_text }, @@ -7786,6 +7888,7 @@ static struct { &setup.internal.menu_shortcuts_tape, execSetupShortcuts3 }, { &setup.internal.menu_shortcuts_sound, execSetupShortcuts4 }, { &setup.internal.menu_shortcuts_snap, execSetupShortcuts5 }, + { &setup.internal.menu_shortcuts_speed, execSetupShortcuts6 }, { &setup.internal.info_title, execInfoTitleScreen }, { &setup.internal.info_elements, execInfoElements }, @@ -7871,11 +7974,18 @@ static struct TokenInfo setup_info_game[] = static struct TokenInfo setup_info_engines[] = { + { TYPE_ENTER_LIST, &execSetupChooseGameEngineType, "Default Game Engine:" }, + { TYPE_STRING, &game_engine_type_text, "" }, + { TYPE_EMPTY, NULL, "" }, { TYPE_HEADLINE, NULL, "Boulder Dash" }, { TYPE_SWITCH, &setup.bd_skip_uncovering, "Skip (un)covering screen:" }, { TYPE_SWITCH, &setup.bd_skip_hatching, "Skip hatching player:" }, { TYPE_SWITCH, &setup.bd_scroll_delay, "Scroll Delay:" }, { TYPE_YES_NO_AUTO, &setup.bd_smooth_movements, "Smooth Element Movement:" }, + { TYPE_YES_NO_AUTO, &setup.bd_pushing_graphics, "Use Player Pushing Graphics:" }, + { TYPE_YES_NO_AUTO, &setup.bd_up_down_graphics, "Use Player Up/Down Graphics:" }, + { TYPE_YES_NO_AUTO, &setup.bd_skip_falling_sounds, "Mute Double Falling Sounds:" }, + { TYPE_SWITCH, &setup.bd_show_invisible_outbox,"Show invisible outbox:" }, { TYPE_ENTER_LIST, &execSetupChoosePaletteC64, "Color Palette (C64):" }, { TYPE_STRING, &bd_palette_c64_text, "" }, { TYPE_ENTER_LIST, &execSetupChoosePaletteC64DTV, "Color Palette (C64DTV):" }, @@ -7884,6 +7994,7 @@ static struct TokenInfo setup_info_engines[] = { TYPE_STRING, &bd_palette_atari_text, "" }, { TYPE_ENTER_LIST, &execSetupChooseColorType, "Preferred Color Type:" }, { TYPE_STRING, &bd_color_type_text, "" }, + { TYPE_SWITCH, &setup.bd_random_colors, "Random Colors:" }, { TYPE_EMPTY, NULL, "" }, { TYPE_HEADLINE, NULL, "Emerald Mine" }, { TYPE_SWITCH, &setup.forced_scroll_delay, "Scroll Delay:" }, @@ -7981,6 +8092,8 @@ static struct TokenInfo setup_info_sound[] = { TYPE_ENTER_LIST, execSetupChooseVolumeMusic, "Music Volume:" }, { TYPE_STRING, &volume_music_text, "" }, { TYPE_EMPTY, NULL, "" }, + { TYPE_SWITCH, &setup.audio_sample_rate_44100, "44100 Hz audio mixing:" }, + { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, { 0, NULL, NULL } @@ -8104,6 +8217,7 @@ static struct TokenInfo setup_info_shortcuts[] = { TYPE_ENTER_MENU, execSetupShortcuts3, "Tape Buttons" }, { TYPE_ENTER_MENU, execSetupShortcuts4, "Sound & Music" }, { TYPE_ENTER_MENU, execSetupShortcuts5, "TAS Snap Keys" }, + { TYPE_ENTER_MENU, execSetupShortcuts6, "Speed Keys" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, @@ -8199,6 +8313,18 @@ static struct TokenInfo setup_info_shortcuts_5[] = { 0, NULL, NULL } }; +static struct TokenInfo setup_info_shortcuts_6[] = +{ + { TYPE_KEYTEXT, NULL, "Fast Playing Speed:" }, + { TYPE_KEY, &setup.shortcut.speed_fast, "" }, + { TYPE_KEYTEXT, NULL, "Slow Playing Speed:" }, + { TYPE_KEY, &setup.shortcut.speed_slow, "" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_LEAVE_MENU, execSetupShortcuts, "Back" }, + + { 0, NULL, NULL } +}; + static Key getSetupKey(void) { Key key = KSYM_UNDEFINED; @@ -8433,6 +8559,10 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx) if (si->value == &setup.fullscreen) ToggleFullscreenIfNeeded(); + // audio sample rate may have changed at this point + if (si->value == &setup.audio_sample_rate_44100) + ToggleAudioSampleRateIfNeeded(); + // network mode may have changed at this point if (si->value == &setup.network_mode) ToggleNetworkModeIfNeeded(); @@ -8583,6 +8713,11 @@ static void DrawSetupScreen_Generic(void) setup_info = setup_info_shortcuts_5; title_string = STR_SETUP_SHORTCUTS; } + else if (setup_mode == SETUP_MODE_SHORTCUTS_6) + { + setup_info = setup_info_shortcuts_6; + title_string = STR_SETUP_SHORTCUTS; + } // use modified setup info without setup entries marked as hidden setup_info = getSetupInfoFinal(setup_info); @@ -9869,6 +10004,8 @@ void DrawSetupScreen(void) DrawChooseTree(&scroll_delay_current); else if (setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE) DrawChooseTree(&snapshot_mode_current); + else if (setup_mode == SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE) + DrawChooseTree(&game_engine_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64) DrawChooseTree(&bd_palette_c64_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV) @@ -9961,6 +10098,8 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) HandleChooseTree(mx, my, dx, dy, button, &scroll_delay_current); else if (setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE) HandleChooseTree(mx, my, dx, dy, button, &snapshot_mode_current); + else if (setup_mode == SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE) + HandleChooseTree(mx, my, dx, dy, button, &game_engine_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64) HandleChooseTree(mx, my, dx, dy, button, &bd_palette_c64_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV)