From 609719277ff18b8b9abe0c7450f4e5fb3eb02811 Mon Sep 17 00:00:00 2001 From: Orangestar12 Date: Mon, 8 Jun 2020 03:21:09 -0500 Subject: [PATCH 1/4] Remove windowed mode on ESC Since we now have an in-game fullscreen toggle, we no longer need an alternative keybind to enter windowed mode than alt+enter. --- src/pc/gfx/gfx_sdl2.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index 58ef09af43..2cb6f8ffcd 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -222,8 +222,6 @@ static void gfx_sdl_onkeydown(int scancode) { if (state[SDL_SCANCODE_LALT] && state[SDL_SCANCODE_RETURN]) configWindow.fullscreen = !configWindow.fullscreen; - else if (state[SDL_SCANCODE_ESCAPE] && configWindow.fullscreen) - configWindow.fullscreen = false; } static void gfx_sdl_onkeyup(int scancode) { From bec08e77400923ecf19592af7bb0ff93a6f2d6e3 Mon Sep 17 00:00:00 2001 From: Orangestar12 Date: Thu, 11 Jun 2020 00:38:50 -0500 Subject: [PATCH 2/4] Add Fullscreen Toggle to binding menu. Allows users to bind a keyboard key to toggle fullscreen. Note: I didn't bother adding a check for gamepad buttons. --- include/text_options_strings.h.in | 218 +++++++++++++++--------------- src/game/options_menu.c | 6 +- src/pc/configfile.c | 2 + src/pc/configfile.h | 1 + src/pc/gfx/gfx_sdl2.c | 10 ++ 5 files changed, 127 insertions(+), 110 deletions(-) diff --git a/include/text_options_strings.h.in b/include/text_options_strings.h.in index 2941bde1b4..ce04d2edc1 100644 --- a/include/text_options_strings.h.in +++ b/include/text_options_strings.h.in @@ -5,17 +5,17 @@ // Menu title strings -#define TEXT_OPT_OPTIONS _("OPTIONS") -#define TEXT_OPT_CAMERA _("CAMERA") -#define TEXT_OPT_CONTROLS _("CONTROLS") -#define TEXT_OPT_VIDEO _("DISPLAY") -#define TEXT_OPT_AUDIO _("SOUND") -#define TEXT_OPT_CHEATS _("CHEATS") +#define TEXT_OPT_OPTIONS _("OPTIONS") +#define TEXT_OPT_CAMERA _("CAMERA") +#define TEXT_OPT_CONTROLS _("CONTROLS") +#define TEXT_OPT_VIDEO _("DISPLAY") +#define TEXT_OPT_AUDIO _("SOUND") +#define TEXT_OPT_CHEATS _("CHEATS") // Markers -#define TEXT_OPT_HIGHLIGHT _("O") -#define TEXT_OPT_UNBOUND _("NONE") +#define TEXT_OPT_HIGHLIGHT _("O") +#define TEXT_OPT_UNBOUND _("NONE") // Language specific strings @@ -25,117 +25,119 @@ // No . in JP -#define TEXT_OPT_PRESSKEY _("・・・") +#define TEXT_OPT_PRESSKEY _("・・・") // Option strings -#define TEXT_OPT_BUTTON1 _("R OPTIONS") -#define TEXT_OPT_BUTTON2 _("R RETURN") -#define TEXT_OPT_ENABLED _("ENABLED") -#define TEXT_OPT_DISABLED _("DISABLED") -#define TEXT_OPT_CAMX _("CAMERA X SENSITIVITY") -#define TEXT_OPT_CAMY _("CAMERA Y SENSITIVITY") -#define TEXT_OPT_INVERTX _("INVERT X AXIS") -#define TEXT_OPT_INVERTY _("INVERT Y AXIS") -#define TEXT_OPT_CAMC _("CAMERA CENTRE AGGRESSION") -#define TEXT_OPT_CAMP _("CAMERA PAN LEVEL") -#define TEXT_OPT_CAMD _("CAMERA DECELERATION") -#define TEXT_OPT_ANALOGUE _("ANALOGUE CAMERA") -#define TEXT_OPT_MOUSE _("MOUSE LOOK") -#define TEXT_OPT_TEXFILTER _("TEXTURE FILTERING") -#define TEXT_OPT_FSCREEN _("FULLSCREEN") -#define TEXT_OPT_NEAREST _("NEAREST") -#define TEXT_OPT_LINEAR _("LINEAR") -#define TEXT_OPT_MVOLUME _("MASTER VOLUME") -#define TEXT_OPT_VSYNC _("VERTICAL SYNC") -#define TEXT_OPT_DOUBLE _("DOUBLE") -#define TEXT_RESET_WINDOW _("RESET WINDOW") -#define TEXT_OPT_HUD _("HUD") - -#define TEXT_BIND_A _("A BUTTON") -#define TEXT_BIND_B _("B BUTTON") -#define TEXT_BIND_START _("START BUTTON") -#define TEXT_BIND_L _("L TRIGGER") -#define TEXT_BIND_R _("R TRIGGER") -#define TEXT_BIND_Z _("Z TRIGGER") -#define TEXT_BIND_C_UP _("C-UP") -#define TEXT_BIND_C_DOWN _("C-DOWN") -#define TEXT_BIND_C_LEFT _("C-LEFT") -#define TEXT_BIND_C_RIGHT _("C-RIGHT") -#define TEXT_BIND_UP _("STICK UP") -#define TEXT_BIND_DOWN _("STICK DOWN") -#define TEXT_BIND_LEFT _("STICK LEFT") -#define TEXT_BIND_RIGHT _("STICK RIGHT") -#define TEXT_OPT_DEADZONE _("STICK DEADZONE") -#define TEXT_OPT_RUMBLE _("RUMBLE STRENGTH") - -#define TEXT_OPT_CHEAT1 _("ENABLE CHEATS") -#define TEXT_OPT_CHEAT2 _("MOONJUMP (PRESS L)") -#define TEXT_OPT_CHEAT3 _("INVINCIBLE MARIO") -#define TEXT_OPT_CHEAT4 _("INFINITE LIVES") -#define TEXT_OPT_CHEAT5 _("SUPER SPEED") -#define TEXT_OPT_CHEAT6 _("SUPER RESPONSIVE CONTROLS") -#define TEXT_OPT_CHEAT7 _("EXIT COURSE AT ANY TIME") -#define TEXT_OPT_CHEAT8 _("HUGE MARIO") -#define TEXT_OPT_CHEAT9 _("TINY MARIO") +#define TEXT_OPT_BUTTON1 _("R OPTIONS") +#define TEXT_OPT_BUTTON2 _("R RETURN") +#define TEXT_OPT_ENABLED _("ENABLED") +#define TEXT_OPT_DISABLED _("DISABLED") +#define TEXT_OPT_CAMX _("CAMERA X SENSITIVITY") +#define TEXT_OPT_CAMY _("CAMERA Y SENSITIVITY") +#define TEXT_OPT_INVERTX _("INVERT X AXIS") +#define TEXT_OPT_INVERTY _("INVERT Y AXIS") +#define TEXT_OPT_CAMC _("CAMERA CENTRE AGGRESSION") +#define TEXT_OPT_CAMP _("CAMERA PAN LEVEL") +#define TEXT_OPT_CAMD _("CAMERA DECELERATION") +#define TEXT_OPT_ANALOGUE _("ANALOGUE CAMERA") +#define TEXT_OPT_MOUSE _("MOUSE LOOK") +#define TEXT_OPT_TEXFILTER _("TEXTURE FILTERING") +#define TEXT_OPT_FSCREEN _("FULLSCREEN") +#define TEXT_OPT_NEAREST _("NEAREST") +#define TEXT_OPT_LINEAR _("LINEAR") +#define TEXT_OPT_MVOLUME _("MASTER VOLUME") +#define TEXT_OPT_VSYNC _("VERTICAL SYNC") +#define TEXT_OPT_DOUBLE _("DOUBLE") +#define TEXT_RESET_WINDOW _("RESET WINDOW") +#define TEXT_OPT_HUD _("HUD") + +#define TEXT_BIND_A _("A BUTTON") +#define TEXT_BIND_B _("B BUTTON") +#define TEXT_BIND_START _("START BUTTON") +#define TEXT_BIND_L _("L TRIGGER") +#define TEXT_BIND_R _("R TRIGGER") +#define TEXT_BIND_Z _("Z TRIGGER") +#define TEXT_BIND_C_UP _("C-UP") +#define TEXT_BIND_C_DOWN _("C-DOWN") +#define TEXT_BIND_C_LEFT _("C-LEFT") +#define TEXT_BIND_C_RIGHT _("C-RIGHT") +#define TEXT_BIND_UP _("STICK UP") +#define TEXT_BIND_DOWN _("STICK DOWN") +#define TEXT_BIND_LEFT _("STICK LEFT") +#define TEXT_BIND_RIGHT _("STICK RIGHT") +#define TEXT_BIND_FULLTOGGLE _("FULLSCREEN TOGGLE") +#define TEXT_OPT_DEADZONE _("STICK DEADZONE") +#define TEXT_OPT_RUMBLE _("RUMBLE STRENGTH") + +#define TEXT_OPT_CHEAT1 _("ENABLE CHEATS") +#define TEXT_OPT_CHEAT2 _("MOONJUMP (PRESS L)") +#define TEXT_OPT_CHEAT3 _("INVINCIBLE MARIO") +#define TEXT_OPT_CHEAT4 _("INFINITE LIVES") +#define TEXT_OPT_CHEAT5 _("SUPER SPEED") +#define TEXT_OPT_CHEAT6 _("SUPER RESPONSIVE CONTROLS") +#define TEXT_OPT_CHEAT7 _("EXIT COURSE AT ANY TIME") +#define TEXT_OPT_CHEAT8 _("HUGE MARIO") +#define TEXT_OPT_CHEAT9 _("TINY MARIO") #else // VERSION // Markers -#define TEXT_OPT_PRESSKEY _("...") +#define TEXT_OPT_PRESSKEY _("...") // Option strings -#define TEXT_OPT_BUTTON1 _("[R] Options") -#define TEXT_OPT_BUTTON2 _("[R] Return") -#define TEXT_OPT_ENABLED _("Enabled") -#define TEXT_OPT_DISABLED _("Disabled") -#define TEXT_OPT_CAMX _("Camera X Sensitivity") -#define TEXT_OPT_CAMY _("Camera Y Sensitivity") -#define TEXT_OPT_INVERTX _("Invert X Axis") -#define TEXT_OPT_INVERTY _("Invert Y Axis") -#define TEXT_OPT_CAMC _("Camera Centre Aggression") -#define TEXT_OPT_CAMP _("Camera Pan Level") -#define TEXT_OPT_CAMD _("Camera Deceleration") -#define TEXT_OPT_ANALOGUE _("Analogue Camera") -#define TEXT_OPT_MOUSE _("Mouse Look") -#define TEXT_OPT_TEXFILTER _("Texture Filtering") -#define TEXT_OPT_FSCREEN _("Fullscreen") -#define TEXT_OPT_NEAREST _("Nearest") -#define TEXT_OPT_LINEAR _("Linear") -#define TEXT_OPT_MVOLUME _("Master Volume") -#define TEXT_OPT_VSYNC _("Vertical Sync") -#define TEXT_OPT_DOUBLE _("Double") -#define TEXT_RESET_WINDOW _("Reset Window") -#define TEXT_OPT_HUD _("HUD") - -#define TEXT_BIND_A _("A Button") -#define TEXT_BIND_B _("B Button") -#define TEXT_BIND_START _("Start Button") -#define TEXT_BIND_L _("L Trigger") -#define TEXT_BIND_R _("R Trigger") -#define TEXT_BIND_Z _("Z Trigger") -#define TEXT_BIND_C_UP _("C-Up") -#define TEXT_BIND_C_DOWN _("C-Down") -#define TEXT_BIND_C_LEFT _("C-Left") -#define TEXT_BIND_C_RIGHT _("C-Right") -#define TEXT_BIND_UP _("Stick Up") -#define TEXT_BIND_DOWN _("Stick Down") -#define TEXT_BIND_LEFT _("Stick Left") -#define TEXT_BIND_RIGHT _("Stick Right") -#define TEXT_OPT_DEADZONE _("Stick Deadzone") -#define TEXT_OPT_RUMBLE _("Rumble Strength") - -#define TEXT_OPT_CHEAT1 _("Enable cheats") -#define TEXT_OPT_CHEAT2 _("Moonjump (Press L)") -#define TEXT_OPT_CHEAT3 _("Invincible Mario") -#define TEXT_OPT_CHEAT4 _("Infinite lives") -#define TEXT_OPT_CHEAT5 _("Super speed") -#define TEXT_OPT_CHEAT6 _("Super responsive controls") -#define TEXT_OPT_CHEAT7 _("Exit course at any time") -#define TEXT_OPT_CHEAT8 _("Huge Mario") -#define TEXT_OPT_CHEAT9 _("Tiny Mario") +#define TEXT_OPT_BUTTON1 _("[R] Options") +#define TEXT_OPT_BUTTON2 _("[R] Return") +#define TEXT_OPT_ENABLED _("Enabled") +#define TEXT_OPT_DISABLED _("Disabled") +#define TEXT_OPT_CAMX _("Camera X Sensitivity") +#define TEXT_OPT_CAMY _("Camera Y Sensitivity") +#define TEXT_OPT_INVERTX _("Invert X Axis") +#define TEXT_OPT_INVERTY _("Invert Y Axis") +#define TEXT_OPT_CAMC _("Camera Centre Aggression") +#define TEXT_OPT_CAMP _("Camera Pan Level") +#define TEXT_OPT_CAMD _("Camera Deceleration") +#define TEXT_OPT_ANALOGUE _("Analogue Camera") +#define TEXT_OPT_MOUSE _("Mouse Look") +#define TEXT_OPT_TEXFILTER _("Texture Filtering") +#define TEXT_OPT_FSCREEN _("Fullscreen") +#define TEXT_OPT_NEAREST _("Nearest") +#define TEXT_OPT_LINEAR _("Linear") +#define TEXT_OPT_MVOLUME _("Master Volume") +#define TEXT_OPT_VSYNC _("Vertical Sync") +#define TEXT_OPT_DOUBLE _("Double") +#define TEXT_RESET_WINDOW _("Reset Window") +#define TEXT_OPT_HUD _("HUD") + +#define TEXT_BIND_A _("A Button") +#define TEXT_BIND_B _("B Button") +#define TEXT_BIND_START _("Start Button") +#define TEXT_BIND_L _("L Trigger") +#define TEXT_BIND_R _("R Trigger") +#define TEXT_BIND_Z _("Z Trigger") +#define TEXT_BIND_C_UP _("C-Up") +#define TEXT_BIND_C_DOWN _("C-Down") +#define TEXT_BIND_C_LEFT _("C-Left") +#define TEXT_BIND_C_RIGHT _("C-Right") +#define TEXT_BIND_UP _("Stick Up") +#define TEXT_BIND_DOWN _("Stick Down") +#define TEXT_BIND_LEFT _("Stick Left") +#define TEXT_BIND_RIGHT _("Stick Right") +#define TEXT_OPT_DEADZONE _("Stick Deadzone") +#define TEXT_BIND_FULLTOGGLE _("Fullscreen Toggle") +#define TEXT_OPT_RUMBLE _("Rumble Strength") + +#define TEXT_OPT_CHEAT1 _("Enable cheats") +#define TEXT_OPT_CHEAT2 _("Moonjump (Press L)") +#define TEXT_OPT_CHEAT3 _("Invincible Mario") +#define TEXT_OPT_CHEAT4 _("Infinite lives") +#define TEXT_OPT_CHEAT5 _("Super speed") +#define TEXT_OPT_CHEAT6 _("Super responsive controls") +#define TEXT_OPT_CHEAT7 _("Exit course at any time") +#define TEXT_OPT_CHEAT8 _("Huge Mario") +#define TEXT_OPT_CHEAT9 _("Tiny Mario") #endif // VERSION diff --git a/src/game/options_menu.c b/src/game/options_menu.c index d37b6afed3..12bf2b0182 100644 --- a/src/game/options_menu.c +++ b/src/game/options_menu.c @@ -115,6 +115,7 @@ static const u8 bindStr[][32] = { { TEXT_BIND_DOWN }, { TEXT_BIND_LEFT }, { TEXT_BIND_RIGHT }, + { TEXT_BIND_FULLTOGGLE }, { TEXT_OPT_DEADZONE }, { TEXT_OPT_RUMBLE } }; @@ -235,10 +236,11 @@ static struct Option optsControls[] = { DEF_OPT_BIND( bindStr[13], configKeyStickDown ), DEF_OPT_BIND( bindStr[14], configKeyStickLeft ), DEF_OPT_BIND( bindStr[15], configKeyStickRight ), + DEF_OPT_BIND( bindStr[16], configKeyFullscreen ), // max deadzone is 31000; this is less than the max range of ~32768, but this // way, the player can't accidentally lock themselves out of using the stick - DEF_OPT_SCROLL( bindStr[16], &configStickDeadzone, 0, 100, 1 ), - DEF_OPT_SCROLL( bindStr[17], &configRumbleStrength, 0, 100, 1) + DEF_OPT_SCROLL( bindStr[17], &configStickDeadzone, 0, 100, 1 ), + DEF_OPT_SCROLL( bindStr[18], &configRumbleStrength, 0, 100, 1) }; static struct Option optsVideo[] = { diff --git a/src/pc/configfile.c b/src/pc/configfile.c index ab0f166fdc..4ffd23cb07 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -73,6 +73,7 @@ unsigned int configKeyStickUp[MAX_BINDS] = { 0x0011, VK_INVALID, VK_INVALID unsigned int configKeyStickDown[MAX_BINDS] = { 0x001F, VK_INVALID, VK_INVALID }; unsigned int configKeyStickLeft[MAX_BINDS] = { 0x001E, VK_INVALID, VK_INVALID }; unsigned int configKeyStickRight[MAX_BINDS] = { 0x0020, VK_INVALID, VK_INVALID }; +unsigned int configKeyFullscreen[MAX_BINDS] = { 0x001B, VK_INVALID, VK_INVALID }; unsigned int configStickDeadzone = 16; // 16*DEADZONE_STEP=4960 (the original default deadzone) unsigned int configRumbleStrength = 50; #ifdef EXTERNAL_DATA @@ -116,6 +117,7 @@ static const struct ConfigOption options[] = { {.name = "key_stickdown", .type = CONFIG_TYPE_BIND, .uintValue = configKeyStickDown}, {.name = "key_stickleft", .type = CONFIG_TYPE_BIND, .uintValue = configKeyStickLeft}, {.name = "key_stickright", .type = CONFIG_TYPE_BIND, .uintValue = configKeyStickRight}, + {.name = "key_fullscreen", .type = CONFIG_TYPE_BIND, .uintValue = configKeyFullscreen}, {.name = "stick_deadzone", .type = CONFIG_TYPE_UINT, .uintValue = &configStickDeadzone}, {.name = "rumble_strength", .type = CONFIG_TYPE_UINT, .uintValue = &configRumbleStrength}, #ifdef EXTERNAL_DATA diff --git a/src/pc/configfile.h b/src/pc/configfile.h index 850d05b398..d21a6a62f1 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -35,6 +35,7 @@ extern unsigned int configKeyStickUp[]; extern unsigned int configKeyStickDown[]; extern unsigned int configKeyStickLeft[]; extern unsigned int configKeyStickRight[]; +extern unsigned int configKeyFullscreen[]; extern unsigned int configStickDeadzone; extern unsigned int configRumbleStrength; #ifdef EXTERNAL_DATA diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index 2cb6f8ffcd..8ef75fe321 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -222,6 +222,16 @@ static void gfx_sdl_onkeydown(int scancode) { if (state[SDL_SCANCODE_LALT] && state[SDL_SCANCODE_RETURN]) configWindow.fullscreen = !configWindow.fullscreen; + + for (int i=0; i < MAX_BINDS; i++) { + // I don't know why the scancode set in the options menu is one decimal + // higher than the actual keybind unless I messed something up when adding + // the keybind. + // Someone who understands this better than me could probably fix this. + if (state[configKeyFullscreen[i] - 1]) { + configWindow.fullscreen = !configWindow.fullscreen; + } + } } static void gfx_sdl_onkeyup(int scancode) { From b0d763a15e182f12cfe0665e1ba5d3af4116ae80 Mon Sep 17 00:00:00 2001 From: Orangestar12 Date: Thu, 11 Jun 2020 21:31:42 -0500 Subject: [PATCH 3/4] Use correct scancode for FS toggle --- src/pc/configfile.c | 2 +- src/pc/gfx/gfx_sdl2.c | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 4ffd23cb07..a756551a24 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -73,7 +73,7 @@ unsigned int configKeyStickUp[MAX_BINDS] = { 0x0011, VK_INVALID, VK_INVALID unsigned int configKeyStickDown[MAX_BINDS] = { 0x001F, VK_INVALID, VK_INVALID }; unsigned int configKeyStickLeft[MAX_BINDS] = { 0x001E, VK_INVALID, VK_INVALID }; unsigned int configKeyStickRight[MAX_BINDS] = { 0x0020, VK_INVALID, VK_INVALID }; -unsigned int configKeyFullscreen[MAX_BINDS] = { 0x001B, VK_INVALID, VK_INVALID }; +unsigned int configKeyFullscreen[MAX_BINDS] = { 0x0001, VK_INVALID, VK_INVALID }; unsigned int configStickDeadzone = 16; // 16*DEADZONE_STEP=4960 (the original default deadzone) unsigned int configRumbleStrength = 50; #ifdef EXTERNAL_DATA diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index 8ef75fe321..7b5473cb57 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -224,14 +224,12 @@ static void gfx_sdl_onkeydown(int scancode) { configWindow.fullscreen = !configWindow.fullscreen; for (int i=0; i < MAX_BINDS; i++) { - // I don't know why the scancode set in the options menu is one decimal - // higher than the actual keybind unless I messed something up when adding - // the keybind. - // Someone who understands this better than me could probably fix this. - if (state[configKeyFullscreen[i] - 1]) { + // This is kind of a hack. + if (translate_scancode(scancode) == configKeyFullscreen[i]) { configWindow.fullscreen = !configWindow.fullscreen; } } + } static void gfx_sdl_onkeyup(int scancode) { From 853c57b927b40f32c0ca52f4256a731da487b8ab Mon Sep 17 00:00:00 2001 From: Orangestar12 Date: Thu, 11 Jun 2020 23:26:48 -0500 Subject: [PATCH 4/4] Fullscreen toggle now applies video settings Surprise changes to nightly branch ruin me again! --- src/pc/gfx/gfx_sdl2.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index f2a7fe482e..c759b2e071 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -227,8 +227,9 @@ static void gfx_sdl_onkeydown(int scancode) { for (int i=0; i < MAX_BINDS; i++) { // This is kind of a hack. - if (translate_scancode(scancode) == configKeyFullscreen[i]) { + if (translate_scancode(scancode) == (int)configKeyFullscreen[i]) { configWindow.fullscreen = !configWindow.fullscreen; + configWindow.settings_changed = true; } }