diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 5f91fe4d..b96a4018 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -6949,8 +6949,13 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) break; } case Menu::accessibility: + { + int offset = -1; #if !defined(MAKEANDPLAY) option(loc::gettext("unlock play modes")); + // For now, we're not going to allow the player to unlock play modes from the options menu, until we come up with a good UI for it. + //touch::create_menu_button((320 - 160) / 2, 120 - 32, 160, 26, loc::gettext("unlock play modes"), 0); + offset = 0; #endif option(loc::gettext("invincibility"), !ingame_titlemode || !incompetitive()); option(loc::gettext("slowdown"), !ingame_titlemode || !incompetitive()); @@ -6961,8 +6966,19 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) menuyoff = 0; maxspacing = 15; - buttonscentered = true; + auto_buttons = false; + + touch::create_toggle_button((320 - 160) / 2, 120 - 24 - 8, 160, 12, loc::gettext("invincibility"), offset + 1, map.invincibility); + touch::create_slider_button((320 - 160) / 2, 120 - 16, 160, 48, loc::gettext("game speed"), &slowdown, 12, 30); + touch::create_toggle_button((320 - 160) / 2, 120 + 32, 160, 12, loc::gettext("animated backgrounds"), offset + 3, !colourblindmode); + touch::create_toggle_button((320 - 160) / 2, 120 + 48, 160, 12, loc::gettext("screen effects"), offset + 4, !noflashingmode); + touch::create_toggle_button((320 - 160) / 2, 120 + 64, 160, 12, loc::gettext("text outline"), offset + 5, !graphics.notextoutline); + + touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2); + touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), offset + 6); + touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1); break; + } case Menu::controller: option(loc::gettext("analog stick sensitivity")); option(loc::gettext("bind flip")); @@ -6983,7 +6999,9 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) auto_buttons = false; - touch::create_slider_button((320 - 160) / 2, 120 + 32, 160, 48, loc::gettext("ui scale"), &touch::scale, 5, 20); + touch::create_menu_button((320 - 160) / 2, 120 - 32, 160, 26, loc::gettext("control style"), 1, false); + + touch::create_slider_button((320 - 160) / 2, 120 + 16, 160, 48, loc::gettext("ui scale"), &touch::scale, 5, 20); touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2); touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), 2); @@ -6991,6 +7009,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) break; case Menu::language: + auto_buttons = false; if (loc::languagelist.empty()) { option(loc::gettext("ok")); @@ -7017,6 +7036,11 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) menuyoff = 70-(menuoptions.size()*10); maxspacing = 5; } + + touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2); + touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), -3); + touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1); + break; case Menu::translator_main: option(loc::gettext("translator options")); @@ -7115,6 +7139,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) option(loc::gettext("no, return to options")); option(loc::gettext("yes, enable")); menuyoff = 64; + buttonyoff = -24; break; case Menu::setslowdown: option(loc::gettext("normal speed")); @@ -7301,7 +7326,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) { option(loc::gettext("secret lab")); } - option(loc::gettext("play modes")); + option(loc::gettext("play modes"), true, PR_RTL_XFLIP, false); // Disable an auto button for play modes for now, we haven't done the menu if (save_exists()) { option(loc::gettext("new game")); @@ -7331,6 +7356,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) option(loc::gettext("start new game")); option(loc::gettext("return")); menuyoff = 64; + buttonyoff = -16; break; case Menu::playmodes: option(loc::gettext("time trials"), !nocompetitive_unless_translator()); @@ -7500,10 +7526,11 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) { if (menuoptions[i].auto_button) { + int button_width = SDL_max(160, font::len(menuoptions[i].print_flags, menuoptions[i].text) + 16); touch::create_menu_button( - (320 - 160) / 2, + (320 - button_width) / 2, base_y + offset * (button_height + button_spacing), - 160, + button_width, button_height, menuoptions[i].text, i, diff --git a/desktop_version/src/Input.cpp b/desktop_version/src/Input.cpp index fa51fd96..e9f85d98 100644 --- a/desktop_version/src/Input.cpp +++ b/desktop_version/src/Input.cpp @@ -896,6 +896,21 @@ void menuactionpress(void) break; case Menu::accessibility: { + if (game.currentmenuoption == -2) + { + // touch menu + music.playef(Sound_VIRIDIAN); + game.createmenu(Menu::touch_input, true); + map.nexttowercolour(); + } + if (game.currentmenuoption == -1) + { + // language menu + music.playef(Sound_VIRIDIAN); + game.createmenu(Menu::language, true); + map.nexttowercolour(); + } + int accessibilityoffset = 0; #if !defined(MAKEANDPLAY) accessibilityoffset = 1; diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index 044f450b..4a9a8f0a 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -1220,89 +1220,97 @@ static void menurender(void) break; case Menu::accessibility: { + if (key.using_touch) + { + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Accessibility"), tr, tg, tb); + font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disable screen effects, enable slowdown modes or invincibility."), tr, tg, tb); + } + else + { #ifdef MAKEANDPLAY #define OFFSET 0 #else #define OFFSET 1 #endif - switch (game.currentmenuoption) - { + switch (game.currentmenuoption) + { #if !defined(MAKEANDPLAY) - case 0: - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Unlock Play Modes"), tr, tg, tb); - font::print_wrap(PR_CEN, -1, 65, loc::gettext("Unlock parts of the game normally unlocked as you progress."), tr, tg, tb); - break; + case 0: + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Unlock Play Modes"), tr, tg, tb); + font::print_wrap(PR_CEN, -1, 65, loc::gettext("Unlock parts of the game normally unlocked as you progress."), tr, tg, tb); + break; #endif - case OFFSET+0: - { - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Invincibility"), tr, tg, tb); - int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Explore the game freely without dying. (Can cause glitches.)"), tr, tg, tb); - if (map.invincibility) + case OFFSET + 0: { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Invincibility is ON."), tr, tg, tb); + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Invincibility"), tr, tg, tb); + int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Explore the game freely without dying. (Can cause glitches.)"), tr, tg, tb); + if (map.invincibility) + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Invincibility is ON."), tr, tg, tb); + } + else + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Invincibility is OFF."), tr / 2, tg / 2, tb / 2); + } + break; } - else + case OFFSET + 1: { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Invincibility is OFF."), tr / 2, tg / 2, tb / 2); + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Slowdown"), tr, tg, tb); + int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Reduce the game speed."), tr, tg, tb); + drawslowdowntext(next_y); + break; } - break; - } - case OFFSET+1: - { - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Slowdown"), tr, tg, tb); - int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Reduce the game speed."), tr, tg, tb); - drawslowdowntext(next_y); - break; - } - case OFFSET+2: - { - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Backgrounds"), tr, tg, tb); - int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disable animated backgrounds in menus and during gameplay."), tr, tg, tb); - if (!game.colourblindmode) + case OFFSET + 2: { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Backgrounds are ON."), tr, tg, tb); + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Backgrounds"), tr, tg, tb); + int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disable animated backgrounds in menus and during gameplay."), tr, tg, tb); + if (!game.colourblindmode) + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Backgrounds are ON."), tr, tg, tb); + } + else + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Backgrounds are OFF."), tr / 2, tg / 2, tb / 2); + } + break; } - else + case OFFSET + 3: { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Backgrounds are OFF."), tr / 2, tg / 2, tb / 2); + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Screen Effects"), tr, tg, tb); + int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disables screen shakes and flashes."), tr, tg, tb); + if (!game.noflashingmode) + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Screen Effects are ON."), tr, tg, tb); + } + else + { + font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Screen Effects are OFF."), tr / 2, tg / 2, tb / 2); + } + break; } - break; - } - case OFFSET+3: - { - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Screen Effects"), tr, tg, tb); - int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disables screen shakes and flashes."), tr, tg, tb); - if (!game.noflashingmode) + case OFFSET + 4: { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Screen Effects are ON."), tr, tg, tb); - } - else - { - font::print_wrap(PR_CEN, -1, next_y, loc::gettext("Screen Effects are OFF."), tr / 2, tg / 2, tb / 2); - } - break; - } - case OFFSET+4: - { - const char* text; + const char* text; - font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Text Outline"), tr, tg, tb); - int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disables outline on game text."), tr, tg, tb); + font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Text Outline"), tr, tg, tb); + int next_y = font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disables outline on game text."), tr, tg, tb); - graphics.fill_rect(0, next_y-4, 320, 16, tr, tg, tb); + graphics.fill_rect(0, next_y - 4, 320, 16, tr, tg, tb); - if (!graphics.notextoutline) - { - text = loc::gettext("Text outlines are ON."); + if (!graphics.notextoutline) + { + text = loc::gettext("Text outlines are ON."); + } + else + { + text = loc::gettext("Text outlines are OFF."); + } + + font::print(PR_BOR | PR_CEN, -1, next_y, text, 255, 255, 255); + break; } - else - { - text = loc::gettext("Text outlines are OFF."); - } - - font::print(PR_BOR | PR_CEN, -1, next_y, text, 255, 255, 255); - break; } }