From c89db187b6b1b9eae279f5493a1e849ff1e27977 Mon Sep 17 00:00:00 2001 From: Maschell Date: Mon, 19 Sep 2022 15:57:29 +0200 Subject: [PATCH] Fix opening the config menu with the classic controller --- source/patcher/hooks_patcher_static.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/source/patcher/hooks_patcher_static.cpp b/source/patcher/hooks_patcher_static.cpp index 2402908..0e02fea 100644 --- a/source/patcher/hooks_patcher_static.cpp +++ b/source/patcher/hooks_patcher_static.cpp @@ -86,15 +86,21 @@ DECL_FUNCTION(void, WPADRead, WPADChan chan, WPADStatusProController *data) { real_WPADRead(chan, data); if (!configMenuOpened && data[0].err == 0) { - if (data[0].extensionType == WPAD_EXT_CORE || data[0].extensionType == WPAD_EXT_NUNCHUK) { - // button data is in the first 2 bytes for wiimotes - if (((uint16_t *) data)[0] == (WPAD_BUTTON_B | WPAD_BUTTON_DOWN | WPAD_BUTTON_MINUS)) { - wantsToOpenConfigMenu = true; - } - } else { - // TODO does this work for classic controllers? - if (data[0].buttons == (WPAD_CLASSIC_BUTTON_L | WPAD_CLASSIC_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_MINUS)) { - wantsToOpenConfigMenu = true; + if (data[0].extensionType != 0xFF) { + if (data[0].extensionType == WPAD_EXT_CORE || data[0].extensionType == WPAD_EXT_NUNCHUK) { + // button data is in the first 2 bytes for wiimotes + if (((uint16_t *) data)[0] == (WPAD_BUTTON_B | WPAD_BUTTON_DOWN | WPAD_BUTTON_MINUS)) { + wantsToOpenConfigMenu = true; + } + } else if (data[0].extensionType == WPAD_EXT_CLASSIC) { + // TODO: figure out the real struct.. + if ((((uint32_t *) data)[10] & 0xFFFF) == (WPAD_CLASSIC_BUTTON_L | WPAD_CLASSIC_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_MINUS)) { + wantsToOpenConfigMenu = true; + } + } else if (data[0].extensionType == WPAD_EXT_PRO_CONTROLLER) { + if (data[0].buttons == (WPAD_PRO_TRIGGER_L | WPAD_PRO_BUTTON_DOWN | WPAD_PRO_BUTTON_MINUS)) { + wantsToOpenConfigMenu = true; + } } } }