mirror of
https://github.com/encounter/aurora.git
synced 2026-07-09 18:19:33 -07:00
Add new mapping for NSO Gamecube and special case it (#165)
* Add new mapping for NSO Gamecube and special case it * No need to swap a/y for NSO Gamecube
This commit is contained in:
@@ -240,7 +240,8 @@ typedef enum {
|
||||
PAD_TYPE_JOYCON_LEFT,
|
||||
PAD_TYPE_JOYCON_RIGHT,
|
||||
PAD_TYPE_JOYCON_PAIR,
|
||||
PAD_TYPE_GAMECUBE
|
||||
PAD_TYPE_GAMECUBE,
|
||||
PAD_TYPE_NSO_GAMECUBE,
|
||||
} PADControllerType;
|
||||
|
||||
void PADSetDefaultMapping(const PADDefaultMapping* mapping, PADControllerType type);
|
||||
|
||||
+97
-75
@@ -10,23 +10,7 @@
|
||||
namespace {
|
||||
constexpr int32_t k_mappingsFileVersion = 3;
|
||||
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsStandard {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsXBox360 {{
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsStandard{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
@@ -41,71 +25,99 @@ std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsXBox360 {{
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsXBoxOne {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsXBox360{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS3 {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsXBoxOne{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS4 {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS3{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS5 {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS4{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsGamecube {{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_X},
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsPS5{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsGamecube{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
{SDL_GAMEPAD_BUTTON_BACK, PAD_TRIGGER_Z},
|
||||
{SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PAD_TRIGGER_L},
|
||||
{SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PAD_TRIGGER_R},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_UP, PAD_BUTTON_UP},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_DOWN, PAD_BUTTON_DOWN},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_LEFT, PAD_BUTTON_LEFT},
|
||||
{SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PAD_BUTTON_RIGHT},
|
||||
}};
|
||||
|
||||
std::array<PADButtonMapping, PAD_BUTTON_COUNT> g_defaultButtonsNSOGamecube{{
|
||||
{SDL_GAMEPAD_BUTTON_SOUTH, PAD_BUTTON_A},
|
||||
{SDL_GAMEPAD_BUTTON_EAST, PAD_BUTTON_X},
|
||||
{SDL_GAMEPAD_BUTTON_WEST, PAD_BUTTON_B},
|
||||
{SDL_GAMEPAD_BUTTON_NORTH, PAD_BUTTON_Y},
|
||||
{SDL_GAMEPAD_BUTTON_START, PAD_BUTTON_START},
|
||||
@@ -405,7 +417,11 @@ void __PADSetDefaultMapping(aurora::input::GameController* controller) {
|
||||
controller->m_buttonMapping = g_defaultButtonsPS5;
|
||||
break;
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO:
|
||||
controller->m_buttonMapping = g_defaultButtonsProCon;
|
||||
if (controller->m_pid == 0x2073) {
|
||||
controller->m_buttonMapping = g_defaultButtonsNSOGamecube;
|
||||
} else {
|
||||
controller->m_buttonMapping = g_defaultButtonsProCon;
|
||||
}
|
||||
break;
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT:
|
||||
controller->m_buttonMapping = g_defaultButtonsJoyConRight;
|
||||
@@ -1433,6 +1449,9 @@ void PADSetDefaultMapping(const PADDefaultMapping* mapping, const PADControllerT
|
||||
case PAD_TYPE_GAMECUBE:
|
||||
g_defaultButtonsGamecube = toStdArray(mapping->buttons);
|
||||
break;
|
||||
case PAD_TYPE_NSO_GAMECUBE:
|
||||
g_defaultButtonsNSOGamecube = toStdArray(mapping->buttons);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1568,5 +1587,8 @@ PADControllerType PADGetControllerTypeForIndex(const u32 index) {
|
||||
}
|
||||
|
||||
auto type = SDL_GetGamepadType(ctrl->m_controller);
|
||||
if (type == SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO && ctrl->m_pid == 0x2073) {
|
||||
return PAD_TYPE_NSO_GAMECUBE;
|
||||
}
|
||||
return static_cast<PADControllerType>(type);
|
||||
}
|
||||
Reference in New Issue
Block a user