X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=2a44ae7b60a3f376fcc1919b1439f44fa0458244;hb=70d64256513a57f375431931c606ae85ed5b9d3f;hp=c4955beebb2ed2a357bcfc252260b99290b04c20;hpb=27bd12f1eebcb66079cf01d3963ea3a0ba56e12d;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index c4955bee..2a44ae7b 100644 --- a/src/screens.c +++ b/src/screens.c @@ -68,30 +68,32 @@ #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_WINDOW_SIZE 24 -#define SETUP_MODE_CHOOSE_SCALING_TYPE 25 -#define SETUP_MODE_CHOOSE_RENDERING 26 -#define SETUP_MODE_CHOOSE_VSYNC 27 -#define SETUP_MODE_CHOOSE_GRAPHICS 28 -#define SETUP_MODE_CHOOSE_SOUNDS 29 -#define SETUP_MODE_CHOOSE_MUSIC 30 -#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 31 -#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 32 -#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 33 -#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 34 -#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 35 -#define SETUP_MODE_CHOOSE_DROP_DISTANCE 36 -#define SETUP_MODE_CHOOSE_TRANSPARENCY 37 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 38 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 39 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 40 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 41 -#define SETUP_MODE_CONFIG_VIRT_BUTTONS 42 - -#define MAX_SETUP_MODES 43 +#define SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE 21 +#define SETUP_MODE_CHOOSE_BD_PALETTE_C64 22 +#define SETUP_MODE_CHOOSE_BD_PALETTE_C64DTV 23 +#define SETUP_MODE_CHOOSE_BD_PALETTE_ATARI 24 +#define SETUP_MODE_CHOOSE_BD_COLOR_TYPE 25 +#define SETUP_MODE_CHOOSE_WINDOW_SIZE 26 +#define SETUP_MODE_CHOOSE_SCALING_TYPE 27 +#define SETUP_MODE_CHOOSE_RENDERING 28 +#define SETUP_MODE_CHOOSE_VSYNC 29 +#define SETUP_MODE_CHOOSE_GRAPHICS 30 +#define SETUP_MODE_CHOOSE_SOUNDS 31 +#define SETUP_MODE_CHOOSE_MUSIC 32 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 33 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 34 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 35 +#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 36 +#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 37 +#define SETUP_MODE_CHOOSE_DROP_DISTANCE 38 +#define SETUP_MODE_CHOOSE_TRANSPARENCY 39 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 40 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 41 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 42 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 43 +#define SETUP_MODE_CONFIG_VIRT_BUTTONS 44 + +#define MAX_SETUP_MODES 45 #define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES) @@ -124,9 +126,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 "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" @@ -294,6 +298,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); @@ -373,6 +378,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; @@ -382,6 +390,9 @@ static TreeInfo *bd_palette_c64dtv_current = NULL; static TreeInfo *bd_palettes_atari = NULL; static TreeInfo *bd_palette_atari_current = NULL; +static TreeInfo *bd_color_types = NULL; +static TreeInfo *bd_color_type_current = NULL; + static TreeInfo *scores_types = NULL; static TreeInfo *scores_type_current = NULL; @@ -539,6 +550,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" }, @@ -577,6 +599,16 @@ static struct ValueTextInfo bd_palettes_atari_list[] = { -1, NULL }, }; +static struct ValueTextInfo bd_color_types_list[] = +{ + { GD_COLOR_TYPE_RGB, "RGB colors" }, + { GD_COLOR_TYPE_C64, "C64 colors" }, + { GD_COLOR_TYPE_C64DTV, "C64DTV colors" }, + { GD_COLOR_TYPE_ATARI, "Atari colors" }, + + { -1, NULL }, +}; + static struct ValueTextInfo volumes_list[] = { { 0, "0 %" }, @@ -5023,9 +5055,11 @@ 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_PALETTE_ATARI || + setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) execSetupEngines(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || @@ -5223,9 +5257,11 @@ 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_PALETTE_ATARI || + setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) execSetupEngines(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || @@ -5304,9 +5340,11 @@ 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_PALETTE_ATARI || + setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) execSetupEngines(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || @@ -5953,9 +5991,11 @@ 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; +static char *bd_color_type_text; static char *game_speed_text; static char *scores_type_text; static char *network_server_text; @@ -6267,6 +6307,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) @@ -6417,13 +6507,72 @@ static void execSetupEngines_setPalettesAtari(void) bd_palette_atari_text = bd_palette_atari_current->name; } +static void execSetupEngines_setColorType(void) +{ + if (bd_color_types == NULL) + { + int i; + + for (i = 0; bd_color_types_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = bd_color_types_list[i].value; + char *text = bd_color_types_list[i].text; + + ti->node_top = &bd_color_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_BD_COLOR_TYPE); + + pushTreeInfo(&bd_color_types, ti); + } + + // sort color type values to start with lowest color type value + sortTreeInfo(&bd_color_types); + + // set current color type value to configured color type value + bd_color_type_current = + getTreeInfoFromIdentifier(bd_color_types, i_to_a(setup.bd_default_color_type)); + + // 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 color type to first available value + if (bd_color_type_current == NULL) + bd_color_type_current = bd_color_types; + } + + setup.bd_default_color_type = atoi(bd_color_type_current->identifier); + + // needed for displaying color type text instead of identifier + bd_color_type_text = bd_color_type_current->name; +} + static void execSetupEngines(void) { setup_mode = SETUP_MODE_ENGINES; + execSetupEngines_setGameEngineType(); execSetupEngines_setPalettesC64(); execSetupEngines_setPalettesC64DTV(); execSetupEngines_setPalettesAtari(); + execSetupEngines_setColorType(); + + DrawSetupScreen(); +} + +static void execSetupChooseGameEngineType(void) +{ + setup_mode = SETUP_MODE_CHOOSE_GAME_ENGINE_TYPE; DrawSetupScreen(); } @@ -6449,6 +6598,13 @@ static void execSetupChoosePaletteAtari(void) DrawSetupScreen(); } +static void execSetupChooseColorType(void) +{ + setup_mode = SETUP_MODE_CHOOSE_BD_COLOR_TYPE; + + DrawSetupScreen(); +} + static void execSetupEditor(void) { setup_mode = SETUP_MODE_EDITOR; @@ -7638,6 +7794,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 }, @@ -7794,6 +7965,9 @@ 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:" }, @@ -7805,6 +7979,9 @@ static struct TokenInfo setup_info_engines[] = { TYPE_STRING, &bd_palette_c64dtv_text, "" }, { TYPE_ENTER_LIST, &execSetupChoosePaletteAtari, "Color Palette (Atari):" }, { 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:" }, @@ -9790,12 +9967,16 @@ 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) DrawChooseTree(&bd_palette_c64dtv_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_ATARI) DrawChooseTree(&bd_palette_atari_current); + else if (setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) + DrawChooseTree(&bd_color_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) DrawChooseTree(&window_size_current); else if (setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE) @@ -9880,12 +10061,16 @@ 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) HandleChooseTree(mx, my, dx, dy, button, &bd_palette_c64dtv_current); else if (setup_mode == SETUP_MODE_CHOOSE_BD_PALETTE_ATARI) HandleChooseTree(mx, my, dx, dy, button, &bd_palette_atari_current); + else if (setup_mode == SETUP_MODE_CHOOSE_BD_COLOR_TYPE) + HandleChooseTree(mx, my, dx, dy, button, &bd_color_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) HandleChooseTree(mx, my, dx, dy, button, &window_size_current); else if (setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE)