From 4f727060107f89f1592f9afc915230e2bbef5959 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Thu, 22 Sep 2022 09:50:50 -0500 Subject: [PATCH] spearmint: Add keys for SDL 2.0.14's new gamepad buttons --- code/client/cl_joystick.c | 30 ++++++++++++++++++++++++++ code/client/cl_keys.c | 28 ++++++++++++++++++++++++ code/client/keycodes.h | 45 +++++++++++++++++++++++++++++++++++++++ code/sdl/sdl_input.c | 10 ++++++++- 4 files changed, 112 insertions(+), 1 deletion(-) diff --git a/code/client/cl_joystick.c b/code/client/cl_joystick.c index 6ab735612..2394f4a42 100644 --- a/code/client/cl_joystick.c +++ b/code/client/cl_joystick.c @@ -200,6 +200,16 @@ qboolean CL_SetKeyForJoyEvent( int localPlayerNum, const joyevent_t *joyevent, i else if ( keynum >= K_FIRST_4JOY && keynum <= K_LAST_4JOY ) { keynum = K_FIRST_JOY + keynum - K_FIRST_4JOY; } + // check second range of keys + else if ( keynum >= K_FIRST_2JOY_PART2 && keynum <= K_LAST_2JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_2JOY_PART2; + } + else if ( keynum >= K_FIRST_3JOY_PART2 && keynum <= K_LAST_3JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_3JOY_PART2; + } + else if ( keynum >= K_FIRST_4JOY_PART2 && keynum <= K_LAST_4JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_4JOY_PART2; + } for ( i = 0; i < MAX_JOY_REMAPS; i++ ) { if ( device->remap[i].event.type == JOYEVENT_NONE ) { @@ -271,6 +281,16 @@ int CL_GetKeyForJoyEvent( int localPlayerNum, const joyevent_t *joyevent ) { keynum = K_FIRST_4JOY + keynum - K_FIRST_JOY; } } + // check second range of keys + else if ( keynum >= K_FIRST_JOY_PART2 && keynum <= K_LAST_JOY_PART2 ) { + if ( localPlayerNum == 1 ) { + keynum = K_FIRST_2JOY_PART2 + keynum - K_FIRST_JOY_PART2; + } else if ( localPlayerNum == 2 ) { + keynum = K_FIRST_3JOY_PART2 + keynum - K_FIRST_JOY_PART2; + } else if ( localPlayerNum == 3 ) { + keynum = K_FIRST_4JOY_PART2 + keynum - K_FIRST_JOY_PART2; + } + } return keynum; } @@ -303,6 +323,16 @@ int CL_GetJoyEventForKey( int localPlayerNum, int keynum, int startIndex, joyeve else if ( keynum >= K_FIRST_4JOY && keynum <= K_LAST_4JOY ) { keynum = K_FIRST_JOY + keynum - K_FIRST_4JOY; } + // check second range of keys + else if ( keynum >= K_FIRST_2JOY_PART2 && keynum <= K_LAST_2JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_2JOY_PART2; + } + else if ( keynum >= K_FIRST_3JOY_PART2 && keynum <= K_LAST_3JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_3JOY_PART2; + } + else if ( keynum >= K_FIRST_4JOY_PART2 && keynum <= K_LAST_4JOY_PART2 ) { + keynum = K_FIRST_JOY_PART2 + keynum - K_FIRST_4JOY_PART2; + } for ( i = startIndex; i < MAX_JOY_REMAPS; i++ ) { if ( device->remap[i].event.type == JOYEVENT_NONE ) diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index 286b38e23..aed0dad8e 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -143,6 +143,13 @@ keyname_t keynames[] = {"JOY_RIGHTSTICK_DOWN", K_JOY_RIGHTSTICK_DOWN}, {"JOY_RIGHTSTICK_LEFT", K_JOY_RIGHTSTICK_LEFT}, + {"JOY_MISC1", K_JOY_MISC1}, + {"JOY_PADDLE1", K_JOY_PADDLE1}, + {"JOY_PADDLE2", K_JOY_PADDLE2}, + {"JOY_PADDLE3", K_JOY_PADDLE3}, + {"JOY_PADDLE4", K_JOY_PADDLE4}, + {"JOY_TOUCHPAD", K_JOY_TOUCHPAD}, + // player 2 {"2JOY_A", K_2JOY_A}, {"2JOY_B", K_2JOY_B}, @@ -176,6 +183,13 @@ keyname_t keynames[] = {"2JOY_RIGHTSTICK_DOWN", K_2JOY_RIGHTSTICK_DOWN}, {"2JOY_RIGHTSTICK_LEFT", K_2JOY_RIGHTSTICK_LEFT}, + {"2JOY_MISC1", K_2JOY_MISC1}, + {"2JOY_PADDLE1", K_2JOY_PADDLE1}, + {"2JOY_PADDLE2", K_2JOY_PADDLE2}, + {"2JOY_PADDLE3", K_2JOY_PADDLE3}, + {"2JOY_PADDLE4", K_2JOY_PADDLE4}, + {"2JOY_TOUCHPAD", K_2JOY_TOUCHPAD}, + // player 3 {"3JOY_A", K_3JOY_A}, {"3JOY_B", K_3JOY_B}, @@ -209,6 +223,13 @@ keyname_t keynames[] = {"3JOY_RIGHTSTICK_DOWN", K_3JOY_RIGHTSTICK_DOWN}, {"3JOY_RIGHTSTICK_LEFT", K_3JOY_RIGHTSTICK_LEFT}, + {"3JOY_MISC1", K_3JOY_MISC1}, + {"3JOY_PADDLE1", K_3JOY_PADDLE1}, + {"3JOY_PADDLE2", K_3JOY_PADDLE2}, + {"3JOY_PADDLE3", K_3JOY_PADDLE3}, + {"3JOY_PADDLE4", K_3JOY_PADDLE4}, + {"3JOY_TOUCHPAD", K_3JOY_TOUCHPAD}, + // player 4 {"4JOY_A", K_4JOY_A}, {"4JOY_B", K_4JOY_B}, @@ -242,6 +263,13 @@ keyname_t keynames[] = {"4JOY_RIGHTSTICK_DOWN", K_4JOY_RIGHTSTICK_DOWN}, {"4JOY_RIGHTSTICK_LEFT", K_4JOY_RIGHTSTICK_LEFT}, + {"4JOY_MISC1", K_4JOY_MISC1}, + {"4JOY_PADDLE1", K_4JOY_PADDLE1}, + {"4JOY_PADDLE2", K_4JOY_PADDLE2}, + {"4JOY_PADDLE3", K_4JOY_PADDLE3}, + {"4JOY_PADDLE4", K_4JOY_PADDLE4}, + {"4JOY_TOUCHPAD", K_4JOY_TOUCHPAD}, + {"AUX1", K_AUX1}, {"AUX2", K_AUX2}, {"AUX3", K_AUX3}, diff --git a/code/client/keycodes.h b/code/client/keycodes.h index 81089e67c..79e5ffd56 100644 --- a/code/client/keycodes.h +++ b/code/client/keycodes.h @@ -554,6 +554,51 @@ typedef enum { // Pseudo-key that brings the console down K_CONSOLE, + K_FIRST_JOY_PART2, + + K_JOY_MISC1 = K_FIRST_JOY_PART2, + K_JOY_PADDLE1, + K_JOY_PADDLE2, + K_JOY_PADDLE3, + K_JOY_PADDLE4, + K_JOY_TOUCHPAD, + + // + 16 to reserve space for more keys to avoid needing another section to prevent mod API break. + K_LAST_JOY_PART2 = K_FIRST_JOY_PART2 + 16, + + K_FIRST_2JOY_PART2, + + K_2JOY_MISC1 = K_FIRST_2JOY_PART2, + K_2JOY_PADDLE1, + K_2JOY_PADDLE2, + K_2JOY_PADDLE3, + K_2JOY_PADDLE4, + K_2JOY_TOUCHPAD, + + K_LAST_2JOY_PART2 = K_FIRST_2JOY_PART2 + 16, + + K_FIRST_3JOY_PART2, + + K_3JOY_MISC1 = K_FIRST_3JOY_PART2, + K_3JOY_PADDLE1, + K_3JOY_PADDLE2, + K_3JOY_PADDLE3, + K_3JOY_PADDLE4, + K_3JOY_TOUCHPAD, + + K_LAST_3JOY_PART2 = K_FIRST_3JOY_PART2 + 16, + + K_FIRST_4JOY_PART2, + + K_4JOY_MISC1 = K_FIRST_4JOY_PART2, + K_4JOY_PADDLE1, + K_4JOY_PADDLE2, + K_4JOY_PADDLE3, + K_4JOY_PADDLE4, + K_4JOY_TOUCHPAD, + + K_LAST_4JOY_PART2 = K_FIRST_4JOY_PART2 + 16, + MAX_KEYS } keyNum_t; diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 5f5331374..23486c85e 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -498,7 +498,15 @@ static qboolean IN_SetGameControllerDefaults( int localPlayerNum, int joystickNu { SDL_CONTROLLER_BUTTON_DPAD_UP, K_JOY_DPAD_UP }, { SDL_CONTROLLER_BUTTON_DPAD_DOWN, K_JOY_DPAD_DOWN }, { SDL_CONTROLLER_BUTTON_DPAD_LEFT, K_JOY_DPAD_LEFT }, - { SDL_CONTROLLER_BUTTON_DPAD_RIGHT, K_JOY_DPAD_RIGHT } + { SDL_CONTROLLER_BUTTON_DPAD_RIGHT, K_JOY_DPAD_RIGHT }, +#if SDL_VERSION_ATLEAST( 2, 0, 14 ) + { SDL_CONTROLLER_BUTTON_MISC1, K_JOY_MISC1 }, + { SDL_CONTROLLER_BUTTON_PADDLE1, K_JOY_PADDLE1 }, + { SDL_CONTROLLER_BUTTON_PADDLE2, K_JOY_PADDLE2 }, + { SDL_CONTROLLER_BUTTON_PADDLE3, K_JOY_PADDLE3 }, + { SDL_CONTROLLER_BUTTON_PADDLE4, K_JOY_PADDLE4 }, + { SDL_CONTROLLER_BUTTON_TOUCHPAD, K_JOY_TOUCHPAD } +#endif }; SDL_GameControllerButtonBind bind;