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; + } } } }