X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=0e97d4a7f42acab71d678476604d3146537d84bc;hb=1a22e8bdd70708d1ee0bb3f21a456eca4e3de50a;hp=521f68ced37b21c231d379f915e63ed287c0a013;hpb=1c0de52407dfe17ff01286f0a2ed6ff32617f1ab;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 521f68ce..0e97d4a7 100644 --- a/src/screens.c +++ b/src/screens.c @@ -44,54 +44,56 @@ // (should also match corresponding entries in src/conf_gfx.c) #define SETUP_MODE_MAIN 0 #define SETUP_MODE_GAME 1 -#define SETUP_MODE_EDITOR 2 -#define SETUP_MODE_GRAPHICS 3 -#define SETUP_MODE_SOUND 4 -#define SETUP_MODE_ARTWORK 5 -#define SETUP_MODE_INPUT 6 -#define SETUP_MODE_TOUCH 7 -#define SETUP_MODE_SHORTCUTS 8 -#define SETUP_MODE_SHORTCUTS_1 9 -#define SETUP_MODE_SHORTCUTS_2 10 -#define SETUP_MODE_SHORTCUTS_3 11 -#define SETUP_MODE_SHORTCUTS_4 12 -#define SETUP_MODE_SHORTCUTS_5 13 +#define SETUP_MODE_ENGINES 2 +#define SETUP_MODE_EDITOR 3 +#define SETUP_MODE_GRAPHICS 4 +#define SETUP_MODE_SOUND 5 +#define SETUP_MODE_ARTWORK 6 +#define SETUP_MODE_INPUT 7 +#define SETUP_MODE_TOUCH 8 +#define SETUP_MODE_SHORTCUTS 9 +#define SETUP_MODE_SHORTCUTS_1 10 +#define SETUP_MODE_SHORTCUTS_2 11 +#define SETUP_MODE_SHORTCUTS_3 12 +#define SETUP_MODE_SHORTCUTS_4 13 +#define SETUP_MODE_SHORTCUTS_5 14 // sub-screens on the setup screen (generic) -#define SETUP_MODE_CHOOSE_ARTWORK 14 -#define SETUP_MODE_CHOOSE_OTHER 15 +#define SETUP_MODE_CHOOSE_ARTWORK 15 +#define SETUP_MODE_CHOOSE_OTHER 16 // sub-screens on the setup screen (specific) -#define SETUP_MODE_CHOOSE_GAME_SPEED 16 -#define SETUP_MODE_CHOOSE_SCROLL_DELAY 17 -#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 18 -#define SETUP_MODE_CHOOSE_WINDOW_SIZE 19 -#define SETUP_MODE_CHOOSE_SCALING_TYPE 20 -#define SETUP_MODE_CHOOSE_RENDERING 21 -#define SETUP_MODE_CHOOSE_VSYNC 22 -#define SETUP_MODE_CHOOSE_GRAPHICS 23 -#define SETUP_MODE_CHOOSE_SOUNDS 24 -#define SETUP_MODE_CHOOSE_MUSIC 25 -#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 26 -#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 27 -#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 28 -#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 29 -#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 30 -#define SETUP_MODE_CHOOSE_DROP_DISTANCE 31 -#define SETUP_MODE_CHOOSE_TRANSPARENCY 32 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 33 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 34 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 35 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 36 -#define SETUP_MODE_CONFIG_VIRT_BUTTONS 37 - -#define MAX_SETUP_MODES 38 +#define SETUP_MODE_CHOOSE_GAME_SPEED 17 +#define SETUP_MODE_CHOOSE_SCROLL_DELAY 18 +#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 19 +#define SETUP_MODE_CHOOSE_WINDOW_SIZE 20 +#define SETUP_MODE_CHOOSE_SCALING_TYPE 21 +#define SETUP_MODE_CHOOSE_RENDERING 22 +#define SETUP_MODE_CHOOSE_VSYNC 23 +#define SETUP_MODE_CHOOSE_GRAPHICS 24 +#define SETUP_MODE_CHOOSE_SOUNDS 25 +#define SETUP_MODE_CHOOSE_MUSIC 26 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 27 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 28 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 29 +#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 30 +#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 31 +#define SETUP_MODE_CHOOSE_DROP_DISTANCE 32 +#define SETUP_MODE_CHOOSE_TRANSPARENCY 33 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 34 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 35 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 36 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 37 +#define SETUP_MODE_CONFIG_VIRT_BUTTONS 38 + +#define MAX_SETUP_MODES 39 #define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES) // setup screen titles #define STR_SETUP_MAIN "Setup" #define STR_SETUP_GAME "Game & Menu" +#define STR_SETUP_ENGINES "Game Engines" #define STR_SETUP_EDITOR "Editor" #define STR_SETUP_GRAPHICS "Graphics" #define STR_SETUP_SOUND "Sound & Music" @@ -181,18 +183,19 @@ #define SCREEN_CTRL_ID_NEXT_PLAYER 6 #define SCREEN_CTRL_ID_INSERT_SOLUTION 7 #define SCREEN_CTRL_ID_PLAY_SOLUTION 8 -#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE 9 -#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE 10 -#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE2 11 -#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE2 12 -#define SCREEN_CTRL_ID_SCROLL_UP 13 -#define SCREEN_CTRL_ID_SCROLL_DOWN 14 -#define SCREEN_CTRL_ID_SCROLL_VERTICAL 15 -#define SCREEN_CTRL_ID_NETWORK_SERVER 16 - -#define NUM_SCREEN_GADGETS 17 - -#define NUM_SCREEN_MENUBUTTONS 13 +#define SCREEN_CTRL_ID_SWITCH_ECS_AGA 9 +#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE 10 +#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE 11 +#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE2 12 +#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE2 13 +#define SCREEN_CTRL_ID_SCROLL_UP 14 +#define SCREEN_CTRL_ID_SCROLL_DOWN 15 +#define SCREEN_CTRL_ID_SCROLL_VERTICAL 16 +#define SCREEN_CTRL_ID_NETWORK_SERVER 17 + +#define NUM_SCREEN_GADGETS 18 + +#define NUM_SCREEN_MENUBUTTONS 14 #define NUM_SCREEN_SCROLLBUTTONS 2 #define NUM_SCREEN_SCROLLBARS 1 #define NUM_SCREEN_TEXTINPUT 1 @@ -238,6 +241,7 @@ static void CustomizeKeyboard(int); static void ConfigureJoystick(int); static void ConfigureVirtualButtons(void); static void execSetupGame(void); +static void execSetupEngines(void); static void execSetupGraphics(void); static void execSetupSound(void); static void execSetupTouch(void); @@ -2424,6 +2428,9 @@ static void HandleMenuScreen(int mx, int my, int dx, int dy, int button, static int num_page_entries_all_last[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES]; static int choice_stores[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES]; static int first_entry_stores[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES]; + boolean has_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->mapped; + int mx_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x; + int mx_right_border = (has_scrollbar ? mx_scrollbar : SX + SXSIZE); int *num_page_entries_last = num_page_entries_all_last[game_status]; int *choice_store = choice_stores[game_status]; int *first_entry_store = first_entry_stores[game_status]; @@ -2645,7 +2652,7 @@ static void HandleMenuScreen(int mx, int my, int dx, int dy, int button, if (!anyScrollbarGadgetActive() && IN_VIS_MENU(x, y) && - mx < screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x && + mx < mx_right_border && y >= 0 && y < num_page_entries) { if (button) @@ -4199,6 +4206,9 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, TreeInfo **ti_ptr) { TreeInfo *ti = *ti_ptr; + boolean has_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->mapped; + int mx_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x; + int mx_right_border = (has_scrollbar ? mx_scrollbar : SX + SXSIZE); int x = 0; int y = ti->cl_cursor; int step = (button == 1 ? 1 : button == 2 ? 5 : 10); @@ -4393,7 +4403,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, if (!anyScrollbarGadgetActive() && IN_VIS_MENU(x, y) && - mx < screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x && + mx < mx_right_border && y >= 0 && y < num_page_entries) { if (button) @@ -5016,6 +5026,13 @@ static void execSetupChooseSnapshotMode(void) DrawSetupScreen(); } +static void execSetupEngines(void) +{ + setup_mode = SETUP_MODE_ENGINES; + + DrawSetupScreen(); +} + static void execSetupEditor(void) { setup_mode = SETUP_MODE_EDITOR; @@ -6193,6 +6210,7 @@ static struct { &setup.touch.grid_ysize[1], &grid_size_text[1][1] }, { &setup.internal.menu_game, execSetupGame }, + { &setup.internal.menu_engines, execSetupEngines }, { &setup.internal.menu_editor, execSetupEditor }, { &setup.internal.menu_graphics, execSetupGraphics }, { &setup.internal.menu_sound, execSetupSound }, @@ -6218,6 +6236,7 @@ void setHideRelatedSetupEntries(void) static struct TokenInfo setup_info_main[] = { { TYPE_ENTER_MENU, execSetupGame, STR_SETUP_GAME }, + { TYPE_ENTER_MENU, execSetupEngines, STR_SETUP_ENGINES }, { TYPE_ENTER_MENU, execSetupEditor, STR_SETUP_EDITOR }, { TYPE_ENTER_MENU, execSetupGraphics, STR_SETUP_GRAPHICS }, { TYPE_ENTER_MENU, execSetupSound, STR_SETUP_SOUND }, @@ -6255,7 +6274,6 @@ static struct TokenInfo setup_info_game[] = { TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay:" }, { TYPE_STRING, &scroll_delay_text, "" }, #endif - { TYPE_SWITCH, &setup.forced_scroll_delay,"Scroll Delay in EM engine:" }, { TYPE_ENTER_LIST, execSetupChooseSnapshotMode,"Game Engine Snapshot Mode:" }, { TYPE_STRING, &snapshot_mode_text, "" }, { TYPE_SWITCH, &setup.show_snapshot_buttons,"Show Snapshot Buttons:" }, @@ -6265,6 +6283,21 @@ static struct TokenInfo setup_info_game[] = { 0, NULL, NULL } }; +static struct TokenInfo setup_info_engines[] = +{ + { TYPE_HEADLINE, NULL, "Emerald Mine" }, + { TYPE_SWITCH, &setup.forced_scroll_delay, "Scroll Delay:" }, + { TYPE_ECS_AGA, &setup.prefer_aga_graphics, "Amiga Graphics Chipset:" }, + { TYPE_SWITCH, &setup.prefer_lowpass_sounds,"Low-Pass Filter Sounds:" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_HEADLINE, NULL, "Supaplex" }, + { TYPE_SWITCH, &setup.sp_show_border_elements, "Border Elements:" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_LEAVE_MENU, execSetupMain, "Back" }, + + { 0, NULL, NULL } +}; + static struct TokenInfo setup_info_editor[] = { #if 0 @@ -6321,8 +6354,6 @@ static struct TokenInfo setup_info_graphics[] = { TYPE_SWITCH, &setup.quick_doors, "Quick Menu Doors:" }, { TYPE_SWITCH, &setup.show_titlescreen,"Show Title Screens:" }, { TYPE_SWITCH, &setup.toons, "Show Menu Animations:" }, - { TYPE_ECS_AGA, &setup.prefer_aga_graphics,"EMC graphics preference:" }, - { TYPE_SWITCH, &setup.sp_show_border_elements,"Supaplex Border Elements:" }, { TYPE_SWITCH, &setup.small_game_graphics, "Small Game Graphics:" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, @@ -6893,6 +6924,11 @@ static void DrawSetupScreen_Generic(void) setup_info = setup_info_game; title_string = STR_SETUP_GAME; } + else if (setup_mode == SETUP_MODE_ENGINES) + { + setup_info = setup_info_engines; + title_string = STR_SETUP_ENGINES; + } else if (setup_mode == SETUP_MODE_EDITOR) { setup_info = setup_info_editor; @@ -8460,6 +8496,14 @@ static struct GD_EVENT_RELEASED, FALSE, "play solution tape" }, + { + IMG_MENU_BUTTON_SWITCH_ECS_AGA, IMG_MENU_BUTTON_SWITCH_ECS_AGA_ACTIVE, + &menu.main.button.switch_ecs_aga, &setup.prefer_aga_graphics, + SCREEN_CTRL_ID_SWITCH_ECS_AGA, + SCREEN_MASK_MAIN, + GD_EVENT_RELEASED | GD_EVENT_OFF_BORDERS, + FALSE, "switch ECS/AGA chipset" + }, { IMG_MENU_BUTTON_TOUCH_BACK, IMG_MENU_BUTTON_TOUCH_BACK, &menu.setup.button.touch_back, NULL, @@ -8958,6 +9002,11 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) PlaySolutionTape(); break; + case SCREEN_CTRL_ID_SWITCH_ECS_AGA: + setup.prefer_aga_graphics = !setup.prefer_aga_graphics; + DrawMainMenu(); + break; + case SCREEN_CTRL_ID_TOUCH_PREV_PAGE: case SCREEN_CTRL_ID_TOUCH_NEXT_PAGE: case SCREEN_CTRL_ID_TOUCH_PREV_PAGE2: