From 896911c2797826b12e50d4a231694243fe5fa1ad Mon Sep 17 00:00:00 2001 From: aplumafreak500 Date: Tue, 14 Aug 2018 17:20:22 -0400 Subject: [PATCH 1/5] Re-add WUPC Can detect the "type" of a Classic Controller, 2 = WUPC (1 = CCP, 0 = legacy CC) --- source/button_mapping.c | 24 +++++++++++- source/button_mapping.h | 9 +++-- source/images/icon_settings_wiiupro.png | Bin 0 -> 10729 bytes source/input.cpp | 49 ++++++++++++++++++++---- source/input.h | 2 +- source/menu.cpp | 30 ++++++++++++++- source/preferences.cpp | 2 + 7 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 source/images/icon_settings_wiiupro.png diff --git a/source/button_mapping.c b/source/button_mapping.c index 84543fc..a5f7d25 100644 --- a/source/button_mapping.c +++ b/source/button_mapping.c @@ -24,7 +24,7 @@ * and for displaying the name of said button ***************************************************************************/ -CtrlrMap ctrlr_def[4] = { +CtrlrMap ctrlr_def[5] = { // Gamecube controller btn def { { @@ -112,5 +112,27 @@ CtrlrMap ctrlr_def[4] = { }, 15, CTRLR_CLASSIC +}, +// Wii U pro controller +{ + { + {WPAD_CLASSIC_BUTTON_DOWN, "DOWN"}, + {WPAD_CLASSIC_BUTTON_UP, "UP"}, + {WPAD_CLASSIC_BUTTON_LEFT, "LEFT"}, + {WPAD_CLASSIC_BUTTON_RIGHT, "RIGHT"}, + {WPAD_CLASSIC_BUTTON_A, "A"}, + {WPAD_CLASSIC_BUTTON_B, "B"}, + {WPAD_CLASSIC_BUTTON_X, "X"}, + {WPAD_CLASSIC_BUTTON_Y, "Y"}, + {WPAD_CLASSIC_BUTTON_PLUS, "PLUS"}, + {WPAD_CLASSIC_BUTTON_MINUS, "MINUS"}, + {WPAD_CLASSIC_BUTTON_HOME, "HOME"}, + {WPAD_CLASSIC_BUTTON_FULL_L, "L"}, + {WPAD_CLASSIC_BUTTON_FULL_R, "R"}, + {WPAD_CLASSIC_BUTTON_ZL, "ZL"}, + {WPAD_CLASSIC_BUTTON_ZR, "ZR"} + }, + 15, + CTRLR_WUPC } }; diff --git a/source/button_mapping.h b/source/button_mapping.h index 151274a..b4dcd08 100644 --- a/source/button_mapping.h +++ b/source/button_mapping.h @@ -16,11 +16,12 @@ enum { CTRLR_GCPAD, CTRLR_WIIMOTE, CTRLR_NUNCHUK, - CTRLR_CLASSIC + CTRLR_CLASSIC, + CTRLR_WUPC }; -const char ctrlrName[4][20] = -{ "GameCube Controller", "Wiimote", "Nunchuk + Wiimote", "Classic Controller" }; +const char ctrlrName[5][0x20] = +{ "GameCube Controller", "Wiimote", "Nunchuk + Wiimote", "Classic Controller", "Wii U Pro Controller" }; typedef struct _btn_map { u32 btn; // button 'id' @@ -33,6 +34,6 @@ typedef struct _ctrlr_map { u16 type; // controller type } CtrlrMap; -extern CtrlrMap ctrlr_def[4]; +extern CtrlrMap ctrlr_def[5]; #endif diff --git a/source/images/icon_settings_wiiupro.png b/source/images/icon_settings_wiiupro.png new file mode 100644 index 0000000000000000000000000000000000000000..69eeeeda0f8b8d4461ca059983fa46c0f7132731 GIT binary patch literal 10729 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 X?64N+9saMG6JV%oa=%R5KK%ayBr9>- literal 0 HcmV?d00001 diff --git a/source/input.cpp b/source/input.cpp index e3dc389..90e4217 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -43,7 +43,7 @@ static bool cartridgeRumble = false, possibleCartridgeRumble = false; static int gameRumbleCount = 0, menuRumbleCount = 0, rumbleCountAlready = 0; static unsigned int vbapadmap[10]; // VBA controller buttons -u32 btnmap[4][10]; // button mapping +u32 btnmap[5][10]; // button mapping void ResetControls(int wiiCtrl) { @@ -126,6 +126,21 @@ void ResetControls(int wiiCtrl) btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_2; btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_1; } + /*** Wii U Pro Padmap ***/ + if(wiiCtrl == CTRLR_WUPC || wiiCtrl == -1) + { + i=0; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_Y; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_B; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_MINUS; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_PLUS; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_UP; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_DOWN; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_LEFT; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_RIGHT; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_FULL_L; + btnmap[CTRLR_WUPC][i++] = WPAD_CLASSIC_BUTTON_FULL_R; + } } /**************************************************************************** @@ -538,9 +553,17 @@ u32 DecodeClassic(unsigned short pad) u32 wpad_btns_h = wp->btns_h; if(wp->exp.type == WPAD_EXP_CLASSIC){ - for (u32 i = 0; i < MAXJP; ++i){ - if (wpad_btns_h & btnmap[CTRLR_CLASSIC][i] ) - J |= vbapadmap[i]; + if (wp->exp.classic.type == 2) { + for (u32 i = 0; i < MAXJP; ++i){ + if (wpad_btns_h & btnmap[CTRLR_WUPC][i] ) + J |= vbapadmap[i]; + } + } + else { + for (u32 i = 0; i < MAXJP; ++i){ + if (wpad_btns_h & btnmap[CTRLR_CLASSIC][i] ) + J |= vbapadmap[i]; + } } } #endif @@ -551,11 +574,12 @@ u32 DecodeNunchuk(unsigned short pad) { u32 J = 0; #ifdef HW_RVL - u32 wpad_btns_h = userInput[pad].wpad->btns_h; + WPADData * wp = WPAD_Data(pad); + u32 wpad_btns_h = wp->btns_h; - if(userInput[pad].wpad->exp.type == WPAD_EXP_NUNCHUK){ + if(wp->exp.type == WPAD_EXP_NUNCHUK){ for (u32 i = 0; i < MAXJP; ++i){ - if (wpad_btns_h & btnmap[CTRLR_NUNCHUK][i] ) + if (wpad_btns_h & btnmap[WPAD_EXP_NUNCHUK][i] ) J |= vbapadmap[i]; } } @@ -830,6 +854,7 @@ static u32 DecodeJoy(unsigned short pad) #ifdef HW_RVL u32 wpad_btns_h = userInput[pad].wpad->btns_h; int wpad_exp_type = userInput[pad].wpad->exp.type; + bool isWUPC = userInput[pad].wpad->exp.classic.type == 2; if(wpad_exp_type == WPAD_EXP_NONE) { // wiimote @@ -853,7 +878,17 @@ static u32 DecodeJoy(unsigned short pad) } } + else if(wpad_exp_type == WPAD_EXP_CLASSIC && isWUPC) + { // wii u pro + for (u32 i =0; i < MAXJP; ++i) + { + if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller + || ( (wpad_btns_h & btnmap[CTRLR_WUPC][i]) )) + J |= vbapadmap[i]; + } + + } else if(wpad_exp_type == WPAD_EXP_NUNCHUK) { // nunchuk + wiimote diff --git a/source/input.h b/source/input.h index 5fc20cd..02c442f 100644 --- a/source/input.h +++ b/source/input.h @@ -32,7 +32,7 @@ #define VBA_CAPTURE 2048 extern int rumbleRequest[4]; -extern u32 btnmap[4][10]; +extern u32 btnmap[5][10]; void ResetControls(int wc = -1); void ShutoffRumble(); diff --git a/source/menu.cpp b/source/menu.cpp index ec6cfe5..03918ba 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -2082,7 +2082,7 @@ static int MenuSettingsMappings() GuiImageData iconClassic(icon_settings_classic_png); GuiImageData iconGamecube(icon_settings_gamecube_png); GuiImageData iconNunchuk(icon_settings_nunchuk_png); - + GuiImageData iconWiiupro(icon_settings_wiiupro_png); GuiText gamecubeBtnTxt("GameCube Controller", 22, (GXColor){0, 0, 0, 255}); gamecubeBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30); GuiImage gamecubeBtnImg(&btnLargeOutline); @@ -2100,6 +2100,24 @@ static int MenuSettingsMappings() gamecubeBtn.SetTrigger(trigA); gamecubeBtn.SetTrigger(trig2); gamecubeBtn.SetEffectGrow(); + + GuiText wiiuproBtnTxt("Wii U Pro Controller", 22, (GXColor){0, 0, 0, 255}); + wiiuproBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-20); + GuiImage wiiuproBtnImg(&btnLargeOutline); + GuiImage wiiuproBtnImgOver(&btnLargeOutlineOver); + GuiImage wiiuproBtnIcon(&iconWiiupro); + GuiButton wiiuproBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); + wiiuproBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + wiiuproBtn.SetPosition(0, 250); + wiiuproBtn.SetLabel(&wiiuproBtnTxt); + wiiuproBtn.SetImage(&wiiuproBtnImg); + wiiuproBtn.SetImageOver(&wiiuproBtnImgOver); + wiiuproBtn.SetIcon(&wiiuproBtnIcon); + wiiuproBtn.SetSoundOver(&btnSoundOver); + wiiuproBtn.SetSoundClick(&btnSoundClick); + wiiuproBtn.SetTrigger(trigA); + wiiuproBtn.SetTrigger(trig2); + wiiuproBtn.SetEffectGrow(); GuiText wiimoteBtnTxt("Wiimote", 22, (GXColor){0, 0, 0, 255}); GuiImage wiimoteBtnImg(&btnLargeOutline); @@ -2183,6 +2201,7 @@ static int MenuSettingsMappings() w.Append(&wiimoteBtn); w.Append(&nunchukBtn); w.Append(&classicBtn); + w.Append(&wiiuproBtn); #endif w.Append(&backBtn); @@ -2209,6 +2228,11 @@ static int MenuSettingsMappings() menu = MENU_GAMESETTINGS_MAPPINGS_MAP; mapMenuCtrl = CTRLR_CLASSIC; } + else if(wiiuproBtn.GetState() == STATE_CLICKED) + { + menu = MENU_GAMESETTINGS_MAPPINGS_MAP; + mapMenuCtrl = CTRLR_WUPC; + } else if(gamecubeBtn.GetState() == STATE_CLICKED) { menu = MENU_GAMESETTINGS_MAPPINGS_MAP; @@ -2256,6 +2280,9 @@ ButtonMappingWindow() sprintf(msg, "Press any button on the GameCube Controller now. Press the C-Stick in any direction to clear the existing mapping."); #endif break; + case CTRLR_WUPC: + sprintf(msg, "Press any button on the Wii U Pro Controller now. Press Home to clear the existing mapping."); + break; case CTRLR_WIIMOTE: sprintf(msg, "Press any button on the Wiimote now. Press Home to clear the existing mapping."); break; @@ -2317,6 +2344,7 @@ ButtonMappingWindow() break; case CTRLR_CLASSIC: + case CTRLR_WUPC: if(userInput[0].wpad->exp.type != WPAD_EXP_CLASSIC) pressed = 0; // not a valid input else if(pressed <= 0x1000) diff --git a/source/preferences.cpp b/source/preferences.cpp index 714a0a5..1b18691 100644 --- a/source/preferences.cpp +++ b/source/preferences.cpp @@ -222,6 +222,7 @@ preparePrefsData () createXMLController(btnmap[CTRLR_WIIMOTE], "wmpadmap", "Wiimote"); createXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap", "Classic Controller"); createXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap", "Nunchuk"); + createXMLController(btnmap[CTRLR_WUPC], "wupcpadmap", "Wii U Pro Controller"); createXMLSection("Emulation", "Emulation Settings"); @@ -530,6 +531,7 @@ decodePrefsData () loadXMLController(btnmap[CTRLR_WIIMOTE], "wmpadmap"); loadXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap"); loadXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap"); + loadXMLController(btnmap[CTRLR_WUPC], "wupcpadmap"); // Emulation Settings From 97a776df32805410199eec05b79dc4ded373772c Mon Sep 17 00:00:00 2001 From: aplumafreak500 Date: Tue, 14 Aug 2018 17:27:10 -0400 Subject: [PATCH 2/5] Oops, wrong Nunchuk constant --- source/input.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/input.cpp b/source/input.cpp index 90e4217..061017c 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -579,7 +579,7 @@ u32 DecodeNunchuk(unsigned short pad) if(wp->exp.type == WPAD_EXP_NUNCHUK){ for (u32 i = 0; i < MAXJP; ++i){ - if (wpad_btns_h & btnmap[WPAD_EXP_NUNCHUK][i] ) + if (wpad_btns_h & btnmap[CTRLR_NUNCHUK][i] ) J |= vbapadmap[i]; } } From acc356bd03f7cc28740952560e912db0c9f9243f Mon Sep 17 00:00:00 2001 From: aplumafreak500 Date: Tue, 14 Aug 2018 17:29:07 -0400 Subject: [PATCH 3/5] Move WUPC detection up a little --- source/input.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/source/input.cpp b/source/input.cpp index 061017c..2c8b777 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -869,25 +869,22 @@ static u32 DecodeJoy(unsigned short pad) } else if(wpad_exp_type == WPAD_EXP_CLASSIC) { // classic controller - - for (u32 i =0; i < MAXJP; ++i) - { - if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller - || ( (wpad_btns_h & btnmap[CTRLR_CLASSIC][i]) )) - J |= vbapadmap[i]; + if (isWUPC) { + for (u32 i =0; i < MAXJP; ++i) + { + if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller + || ( (wpad_btns_h & btnmap[CTRLR_CLASSIC][i]) )) + J |= vbapadmap[i]; + } } - - } - else if(wpad_exp_type == WPAD_EXP_CLASSIC && isWUPC) - { // wii u pro - - for (u32 i =0; i < MAXJP; ++i) - { - if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller - || ( (wpad_btns_h & btnmap[CTRLR_WUPC][i]) )) - J |= vbapadmap[i]; + else { + for (u32 i =0; i < MAXJP; ++i) + { + if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller + || ( (wpad_btns_h & btnmap[CTRLR_WUPC][i]) )) + J |= vbapadmap[i]; + } } - } else if(wpad_exp_type == WPAD_EXP_NUNCHUK) { // nunchuk + wiimote From 950d7a522a46641faaf4c6232e26da8e849549d7 Mon Sep 17 00:00:00 2001 From: aplumafreak500 Date: Wed, 15 Aug 2018 13:21:05 -0400 Subject: [PATCH 4/5] Oops again... Fixed switched WUPC and CC defines --- source/input.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/input.cpp b/source/input.cpp index 2c8b777..0204959 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -873,7 +873,7 @@ static u32 DecodeJoy(unsigned short pad) for (u32 i =0; i < MAXJP; ++i) { if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller - || ( (wpad_btns_h & btnmap[CTRLR_CLASSIC][i]) )) + || ( (wpad_btns_h & btnmap[CTRLR_WUPC][i]) )) J |= vbapadmap[i]; } } @@ -881,7 +881,7 @@ static u32 DecodeJoy(unsigned short pad) for (u32 i =0; i < MAXJP; ++i) { if ((pad_btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller - || ( (wpad_btns_h & btnmap[CTRLR_WUPC][i]) )) + || ( (wpad_btns_h & btnmap[CTRLR_CLASSIC][i]) )) J |= vbapadmap[i]; } } From e53146d0f939fc8549c66d7ee7dd852be24558ba Mon Sep 17 00:00:00 2001 From: aplumafreak500 Date: Wed, 15 Aug 2018 13:24:27 -0400 Subject: [PATCH 5/5] Seperate WUPC and CC in mapping assignment --- source/menu.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/menu.cpp b/source/menu.cpp index 03918ba..87cff49 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -2342,15 +2342,18 @@ ButtonMappingWindow() if(pressed > 0x1000) pressed = 0; // not a valid input break; - case CTRLR_CLASSIC: - case CTRLR_WUPC: - if(userInput[0].wpad->exp.type != WPAD_EXP_CLASSIC) + if(userInput[0].wpad->exp.type != WPAD_EXP_CLASSIC && userInput[0].wpad->exp.classic.type < 2) + pressed = 0; // not a valid input + else if(pressed <= 0x1000) + pressed = 0; + break; + case CTRLR_WUPC: + if(userInput[0].wpad->exp.type != WPAD_EXP_CLASSIC && userInput[0].wpad->exp.classic.type == 2) pressed = 0; // not a valid input else if(pressed <= 0x1000) pressed = 0; break; - case CTRLR_NUNCHUK: if(userInput[0].wpad->exp.type != WPAD_EXP_NUNCHUK) pressed = 0; // not a valid input