diff --git a/out/bins/ext_booter.bin b/out/bins/ext_booter.bin index d91d28a2..7aec9372 100644 Binary files a/out/bins/ext_booter.bin and b/out/bins/ext_booter.bin differ diff --git a/out/boot.dol b/out/boot.dol index 9cdcf664..68b6ed8c 100644 Binary files a/out/boot.dol and b/out/boot.dol differ diff --git a/resources/wiiflow_game_booter/source/ChannelHandler.cpp b/resources/wiiflow_game_booter/source/ChannelHandler.cpp index 831db21d..ed7818f0 100644 --- a/resources/wiiflow_game_booter/source/ChannelHandler.cpp +++ b/resources/wiiflow_game_booter/source/ChannelHandler.cpp @@ -150,7 +150,8 @@ u32 LoadChannel(u64 title, bool dol, u32 *IOS) return entry; } -void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u8 bootType) +void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, + u8 private_server, bool patchFix480p, u8 bootType) { bool hookpatched = false; for(u8 i = 0; i < dolchunkcount; i++) @@ -164,6 +165,8 @@ void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin PatchCountryStrings(dolchunkoffset[i], dolchunksize[i]); if(aspectRatio != -1) PatchAspectRatio(dolchunkoffset[i], dolchunksize[i], aspectRatio); + if(private_server) + PrivateServerPatcher(dolchunkoffset[i], dolchunksize[i], private_server); if(hooktype != 0 && hookpatched == false) hookpatched = dogamehooks(dolchunkoffset[i], dolchunksize[i], true); DCFlushRange(dolchunkoffset[i], dolchunksize[i]); @@ -172,4 +175,7 @@ void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin } if(hookpatched) ocarina_do_code(); + + if(patchFix480p) + PatchFix480p(); } diff --git a/resources/wiiflow_game_booter/source/ChannelHandler.hpp b/resources/wiiflow_game_booter/source/ChannelHandler.hpp index 936b1c61..d94de943 100644 --- a/resources/wiiflow_game_booter/source/ChannelHandler.hpp +++ b/resources/wiiflow_game_booter/source/ChannelHandler.hpp @@ -14,7 +14,7 @@ typedef struct _dolheader } ATTRIBUTE_PACKED dolheader; void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, - u8 patchVidModes, int aspectRatio, u8 bootType); + u8 patchVidModes, int aspectRatio, u8 private_server, bool patchFix480p, u8 bootType); u32 LoadChannel(u64 title, bool dol, u32 *IOS); #endif /* __CHANHANDLE_HPP_ */ diff --git a/resources/wiiflow_game_booter/source/Config.hpp b/resources/wiiflow_game_booter/source/Config.hpp index 8ecfde32..f69de83b 100644 --- a/resources/wiiflow_game_booter/source/Config.hpp +++ b/resources/wiiflow_game_booter/source/Config.hpp @@ -30,31 +30,31 @@ struct the_CFG { u8 GameBootType; WIP_Code *wip_list; u32 wip_count; - bool use_led; + u32 *gameconf; + u32 gameconfsize; + void *codelist; + u8 *codelistend; bool patchregion; - bool private_server; - bool patchFix480p; /* needed for channels */ u64 title; bool use_dol; - /* General Stuff */ + /* needed for both channels and wii games */ IOS_Info IOS; u8 BootType; + u8 configbytes[2];// [0] used for language. [1] not used + u8 countryString; u8 vidMode; u8 patchVidMode; - u8 configbytes[2]; - u8 debugger; u8 vipatch; - u8 countryString; - int aspectRatio; - void *codelist; - u8 *codelistend; + s8 aspectRatio; + bool patchFix480p; + u8 private_server; u8 *cheats; u32 cheatSize; + u8 debugger; u32 hooktype; - u32 *gameconf; - u32 gameconfsize; u32 returnTo; + bool use_led; } ATTRIBUTE_PACKED; #endif /* _CFG_HPP_ */ diff --git a/resources/wiiflow_game_booter/source/apploader.c b/resources/wiiflow_game_booter/source/apploader.c index 74d3b81a..8dc252be 100644 --- a/resources/wiiflow_game_booter/source/apploader.c +++ b/resources/wiiflow_game_booter/source/apploader.c @@ -29,13 +29,13 @@ static const char *GameID = (const char*)0x80000000; #define APPLDR_CODE 0x918 void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipatch, - bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, bool patchregion, bool private_server, u8 bootType); + bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, bool patchregion, u8 private_server, u8 bootType); static void patch_NoDiscinDrive(void *buffer, u32 len); static void Anti_002_fix(void *Address, int Size); static bool Remove_001_Protection(void *Address, int Size); static void PrinceOfPersiaPatch(); static void NewSuperMarioBrosPatch(); -static void MarioKartWiiWiimmfiPatch( bool server); +static void MarioKartWiiWiimmfiPatch(u8 server); bool hookpatched = false; /* Thanks Tinyload */ @@ -49,7 +49,7 @@ static struct } apploader_hdr ATTRIBUTE_ALIGN(32); u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, - bool patchregion , bool private_server, bool patchFix480p, u8 bootType) + bool patchregion , u8 private_server, bool patchFix480p, u8 bootType) { PrinceOfPersiaPatch(); NewSuperMarioBrosPatch(); @@ -95,8 +95,12 @@ u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin { /* Read data from DVD */ WDVD_Read(dst, len, offset); - maindolpatches(dst, len, vidMode, vmode, vipatch, countryString, - patchVidModes, aspectRatio, returnTo, patchregion, private_server, bootType); + // if server is wiimmfi and game is mario kart wii don't use private server. use MarioKartWiiWiimmfiPatch below + if(private_server == PRIVSERV_WIIMMFI && memcmp("RMC", GameID, 3) == 0)// 2= wiimmfi + maindolpatches(dst, len, vidMode, vmode, vipatch, countryString, patchVidModes, aspectRatio, returnTo, patchregion, 0, bootType); + else + maindolpatches(dst, len, vidMode, vmode, vipatch, countryString, patchVidModes, aspectRatio, returnTo, patchregion, private_server, bootType); + DCFlushRange(dst, len); ICInvalidateRange(dst, len); prog(20); @@ -108,13 +112,13 @@ u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin if(patchFix480p) PatchFix480p(); - MarioKartWiiWiimmfiPatch(private_server); + MarioKartWiiWiimmfiPatch(private_server);// only done if wiimfi server and game is mario kart wii /* Set entry point from apploader */ return (u32)appldr_final(); } -void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, bool patchregion , bool private_server, u8 bootType) +void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, bool patchregion , u8 private_server, u8 bootType) { do_wip_code((u8 *)dst, len); Remove_001_Protection(dst, len); @@ -143,7 +147,7 @@ void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipa if(patchregion) PatchRegion(dst, len); if(private_server) - PrivateServerPatcher(dst,len); + PrivateServerPatcher(dst,len, private_server); } static void patch_NoDiscinDrive(void *buffer, u32 len) @@ -175,9 +179,9 @@ static void Anti_002_fix(void *Address, int Size) } } -static void MarioKartWiiWiimmfiPatch( bool server) { +static void MarioKartWiiWiimmfiPatch(u8 server) { if(memcmp("RMC", GameID, 3) != 0) return; // This isn't MKWii - if(server == 0) return; // no Wiimmfi patch wanted + if(server != PRIVSERV_WIIMMFI) return; // no Wiimmfi patch wanted do_new_wiimmfi(); } diff --git a/resources/wiiflow_game_booter/source/apploader.h b/resources/wiiflow_game_booter/source/apploader.h index b848469e..eb0ffd57 100644 --- a/resources/wiiflow_game_booter/source/apploader.h +++ b/resources/wiiflow_game_booter/source/apploader.h @@ -7,7 +7,16 @@ extern "C" { /* Prototypes */ u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, - bool patchregion, bool private_server, bool patchFix480p, u8 bootType); + bool patchregion, u8 private_server, bool patchFix480p, u8 bootType); + +enum +{ + PRIVSERV_OFF, + PRIVSERV_NOSSL, + PRIVSERV_WIIMMFI, + PRIVSERV_MAX_CHOICE + +}; #ifdef __cplusplus } diff --git a/resources/wiiflow_game_booter/source/main.cpp b/resources/wiiflow_game_booter/source/main.cpp index b9bee2e4..2f79ce49 100644 --- a/resources/wiiflow_game_booter/source/main.cpp +++ b/resources/wiiflow_game_booter/source/main.cpp @@ -117,8 +117,8 @@ int main() *Disc_ID = TITLE_LOWER(normalCFG.title); vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg); AppEntrypoint = LoadChannel(normalCFG.title, normalCFG.use_dol, &GameIOS); - PatchChannel(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, - normalCFG.patchVidMode, normalCFG.aspectRatio, normalCFG.BootType); + PatchChannel(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio, + normalCFG.private_server, normalCFG.patchFix480p, normalCFG.BootType); ISFS_Deinitialize(); } gprintf("Entrypoint: %08x, Requested Game IOS: %i\n", AppEntrypoint, GameIOS); @@ -129,6 +129,9 @@ int main() if(normalCFG.BootType == TYPE_CHANNEL && AppEntrypoint != 0x3400) Disc_SetLowMemChan(); /* Real DOL without appldr */ + /* Enable front LED if requested */ + if(normalCFG.use_led) *HW_GPIOB_OUT |= 0x20; + /* Set an appropriate video mode */ Disc_SetVMode(vmode, vmode_reg); @@ -137,9 +140,6 @@ int main() __IOS_ShutdownSubsystems(); __exception_closeall(); - /* Enable front LED if requested */ - if(normalCFG.use_led) *HW_GPIOB_OUT |= 0x20; - /* Originally from tueidj - taken from NeoGamma (thx) */ *(vu32*)0xCC003024 = 1; diff --git a/resources/wiiflow_game_booter/source/patchcode.c b/resources/wiiflow_game_booter/source/patchcode.c index 71c50be6..5be81e1e 100644 --- a/resources/wiiflow_game_booter/source/patchcode.c +++ b/resources/wiiflow_game_booter/source/patchcode.c @@ -643,7 +643,7 @@ void PatchRegion(void *Address, int Size) } /** Patch URLs for private Servers - Thanks to ULGX **/ -void PrivateServerPatcher(void *addr, u32 len) +void PrivateServerPatcher(void *addr, u32 len, u8 private_server) { // Patch protocol https -> http char *cur = (char *)addr; @@ -659,7 +659,8 @@ void PrivateServerPatcher(void *addr, u32 len) } } while (++cur < end); - domainpatcher(addr, len, "wiimmfi.de"); + if(private_server == PRIVSERV_WIIMMFI) + domainpatcher(addr, len, "wiimmfi.de"); } void domainpatcher(void *addr, u32 len, const char* domain) @@ -852,7 +853,7 @@ u32 do_new_wiimmfi() { strncpy(patched, (char *)&patcher, 42); // Do the plain old patching with the string search - PrivateServerPatcher((void*)0x80004000, 0x385200); + PrivateServerPatcher((void*)0x80004000, 0x385200, PRIVSERV_WIIMMFI); // Replace some URLs for Wiimmfi's new update system char newURL1[] = "http://ca.nas.wiimmfi.de/ca"; diff --git a/resources/wiiflow_game_booter/source/patchcode.h b/resources/wiiflow_game_booter/source/patchcode.h index 1d0c1da3..01cf4679 100644 --- a/resources/wiiflow_game_booter/source/patchcode.h +++ b/resources/wiiflow_game_booter/source/patchcode.h @@ -42,7 +42,7 @@ s32 BlockIOSReload(void); void PatchRegion(void *Address, int Size); void PatchFix480p(); u32 do_new_wiimmfi(); -void PrivateServerPatcher(void *addr, u32 len); +void PrivateServerPatcher(void *addr, u32 len, u8 private_server); void domainpatcher(void *addr, u32 len, const char* domain); #ifdef __cplusplus diff --git a/source/booter/Config.h b/source/booter/Config.h index 80b8aedc..4191e99f 100644 --- a/source/booter/Config.h +++ b/source/booter/Config.h @@ -30,31 +30,31 @@ struct the_CFG { u8 GameBootType; WIP_Code *wip_list; u32 wip_count; - bool use_led; - bool patchregion; - bool private_server; - bool patchFix480p; + u32 *gameconf; + u32 gameconfsize; + void *codelist; + u8 *codelistend; + bool patchregion; /* needed for channels */ u64 title; bool use_dol; - /* General Stuff */ + /* needed for both channels and wii games */ IOS_Info IOS; u8 BootType; + u8 configbytes[2];// [0] used for language. [1] not used + u8 countryString; u8 vidMode; u8 patchVidMode; - u8 configbytes[2]; - u8 debugger; u8 vipatch; - u8 countryString; - int aspectRatio; - void *codelist; - u8 *codelistend; + s8 aspectRatio; + bool patchFix480p; + u8 private_server; u8 *cheats; u32 cheatSize; + u8 debugger; u32 hooktype; - u32 *gameconf; - u32 gameconfsize; u32 returnTo; + bool use_led; } ATTRIBUTE_PACKED; #endif /* _CFG_HPP_ */ diff --git a/source/booter/external_booter.cpp b/source/booter/external_booter.cpp index dd00fd75..f41373f1 100644 --- a/source/booter/external_booter.cpp +++ b/source/booter/external_booter.cpp @@ -61,14 +61,16 @@ extern u32 *gameconf; u8 *booter_ptr = NULL; u32 booter_size = 0; -void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, - int aspectRatio, u32 returnTo, u8 BootType, bool use_led) +void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, bool patchFix480p, + u32 returnTo, u8 BootType, bool use_led) { normalCFG.vidMode = vidMode; normalCFG.vipatch = vipatch; normalCFG.countryString = countryString; normalCFG.patchVidMode = patchVidMode; normalCFG.aspectRatio = aspectRatio; + normalCFG.private_server = private_server; + normalCFG.patchFix480p = patchFix480p; normalCFG.returnTo = returnTo; normalCFG.configbytes[0] = configbytes[0]; normalCFG.configbytes[1] = configbytes[1]; @@ -124,7 +126,7 @@ bool ExternalBooter_LoadBins(const char *binDir) extern FragList *frag_list; extern s32 wbfsDev; extern u32 wbfs_part_idx; -void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, bool private_server, bool patchFix480p, const char *ID) +void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, const char *ID) { memset(&normalCFG, 0, sizeof(the_CFG)); normalCFG.GameBootType = dvd ? TYPE_WII_DISC : (wbfs ? TYPE_WII_WBFS : TYPE_WII_WBFS_EXT); @@ -133,8 +135,6 @@ void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, bool pri normalCFG.wbfsDevice = wbfsDev; normalCFG.wbfsPart = wbfs_part_idx; normalCFG.patchregion = patchregion; - normalCFG.private_server = private_server; - normalCFG.patchFix480p = patchFix480p; } void ExternalBooter_ChannelSetup(u64 title, bool dol) diff --git a/source/booter/external_booter.hpp b/source/booter/external_booter.hpp index a78e8cfa..a76b5bb3 100644 --- a/source/booter/external_booter.hpp +++ b/source/booter/external_booter.hpp @@ -28,11 +28,11 @@ extern u32 hooktype; } #endif -void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, - int aspectRatio, u32 returnTo, u8 BootType, bool use_led); +void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, bool patchFix480p, + u32 returnTo, u8 BootType, bool use_led); bool ExternalBooter_LoadBins(const char *binDir); void ExternalBooter_ChannelSetup(u64 title, bool dol); -void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, bool private_server, bool patchFix480p, const char *ID); +void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, const char *ID); void ShutdownBeforeExit(void); #endif diff --git a/source/defines.h b/source/defines.h index 93aecdb1..ff509e84 100644 --- a/source/defines.h +++ b/source/defines.h @@ -1,6 +1,6 @@ #define APP_NAME "WiiFlow WFL" -#define APP_VERSION "5.4.9 beta 2" +#define APP_VERSION "5.4.9 beta 4" #define APP_DATA_DIR "wiiflow" #define APPS_DIR "apps/wiiflow" diff --git a/source/menu/menu.hpp b/source/menu/menu.hpp index d212f326..c933bd92 100644 --- a/source/menu/menu.hpp +++ b/source/menu/menu.hpp @@ -583,7 +583,9 @@ private: s16 m_gameSettingsBtnCountryPatch; s16 m_gameSettingsLblPrivateServer; - s16 m_gameSettingsBtnPrivateServer; + s16 m_gameSettingsLblPrivateServerVal; + s16 m_gameSettingsBtnPrivateServerM; + s16 m_gameSettingsBtnPrivateServerP; s16 m_gameSettingsLblFix480p; s16 m_gameSettingsBtnFix480p; @@ -1307,6 +1309,7 @@ private: static const SOption _debugger[3]; static const SOption _hooktype[8]; static const SOption _exitTo[3]; + static const SOption _privateServer[3]; static int _version[9]; static const SCFParamDesc _cfParams[]; diff --git a/source/menu/menu_config_game.cpp b/source/menu/menu_config_game.cpp index 987206d9..f492c278 100644 --- a/source/menu/menu_config_game.cpp +++ b/source/menu/menu_config_game.cpp @@ -12,6 +12,158 @@ u8 GCLoader = 0; int videoScale, videoOffset; const dir_discHdr *GameHdr; +const CMenu::SOption CMenu::_GlobalVideoModes[6] = { + { "vidgame", L"Game" }, + { "vidsys", L"System" }, + { "vidp50", L"PAL 50Hz" }, + { "vidp60", L"PAL 60Hz" }, + { "vidntsc", L"NTSC" }, + { "vidprog", L"Progressive" }, +}; + +const CMenu::SOption CMenu::_VideoModes[7] = { + { "viddef", L"Default" }, + { "vidgame", L"Game" }, + { "vidsys", L"System" }, + { "vidp50", L"PAL 50Hz" }, + { "vidp60", L"PAL 60Hz" }, + { "vidntsc", L"NTSC" }, + { "vidprog", L"Progressive" }, +}; + +const CMenu::SOption CMenu::_GlobalGCvideoModes[6] = { + { "vidgame", L"Game" }, + { "vidp50", L"PAL 50Hz" }, + { "vidp60", L"PAL 60Hz" }, + { "vidntsc", L"NTSC" }, + { "DMLmpal", L"MPAL" }, + { "vidprog", L"Progressive" }, +}; + +const CMenu::SOption CMenu::_GCvideoModes[7] = { + { "viddef", L"Default" }, + { "vidgame", L"Game" }, + { "vidp50", L"PAL 50Hz" }, + { "vidp60", L"PAL 60Hz" }, + { "vidntsc", L"NTSC" }, + { "DMLmpal", L"MPAL" }, + { "vidprog", L"Progressive" }, +}; + +const CMenu::SOption CMenu::_languages[11] = { + { "lngdef", L"Default" },// next should be console + { "lngjap", L"Japanese" }, + { "lngeng", L"English" }, + { "lngger", L"German" }, + { "lngfre", L"French" }, + { "lngspa", L"Spanish" }, + { "lngita", L"Italian" }, + { "lngdut", L"Dutch" }, + { "lngsch", L"S. Chinese" }, + { "lngtch", L"T. Chinese" }, + { "lngkor", L"Korean" } +}; + +const CMenu::SOption CMenu::_GlobalGClanguages[7] = { + { "lngsys", L"System" }, + { "lngeng", L"English" }, + { "lngger", L"German" }, + { "lngfre", L"French" }, + { "lngspa", L"Spanish" }, + { "lngita", L"Italian" }, + { "lngdut", L"Dutch" } +}; + +const CMenu::SOption CMenu::_GClanguages[8] = { + { "lngdef", L"Default" }, + { "lngsys", L"System" }, + { "lngeng", L"English" }, + { "lngger", L"German" }, + { "lngfre", L"French" }, + { "lngspa", L"Spanish" }, + { "lngita", L"Italian" }, + { "lngdut", L"Dutch" } +}; + +const CMenu::SOption CMenu::_ChannelsType[3] = { + { "ChanReal", L"Real NAND" }, + { "ChanEmu", L"Emu NAND" }, + { "ChanBoth", L"Both" }, +}; + +const CMenu::SOption CMenu::_NandEmu[2] = { + { "NANDpart", L"Partial" }, + { "NANDfull", L"Full" }, +}; + +const CMenu::SOption CMenu::_GlobalSaveEmu[3] = { + { "SaveOffG", L"Off" }, + { "SavePartG", L"Game save" }, + { "SaveFullG", L"Full" }, +}; + +const CMenu::SOption CMenu::_SaveEmu[4] = { + { "SaveDef", L"Default" }, + { "SaveOff", L"Off" }, + { "SavePart", L"Game save" }, + { "SaveFull", L"Full" }, +}; + +const CMenu::SOption CMenu::_AspectRatio[3] = { + { "aspectDef", L"Default" }, + { "aspect43", L"Force 4:3" }, + { "aspect169", L"Force 16:9" }, +}; + +const CMenu::SOption CMenu::_NinEmuCard[5] = { + { "NinMCDef", L"Default" }, + { "NinMCOff", L"Disabled" }, + { "NinMCon", L"Enabled" }, + { "NinMCMulti", L"Multi Saves" }, + { "NinMCdebug", L"Debug" }, +}; + +const CMenu::SOption CMenu::_GlobalGCLoaders[2] = { + { "GC_Devo", L"Devolution" }, + { "GC_Nindnt", L"Nintendont" }, +}; + +const CMenu::SOption CMenu::_GCLoader[3] = { + { "GC_Def", L"Default" }, + { "GC_Devo", L"Devolution" }, + { "GC_Nindnt", L"Nintendont" }, +}; + +const CMenu::SOption CMenu::_vidModePatch[4] = { + { "vmpnone", L"None" }, + { "vmpnormal", L"Normal" }, + { "vmpmore", L"More" }, + { "vmpall", L"All" } +}; + +const CMenu::SOption CMenu::_hooktype[8] = { + { "hook_auto", L"AUTO" }, + { "hooktype1", L"VBI" }, + { "hooktype2", L"KPAD read" }, + { "hooktype3", L"Joypad" }, + { "hooktype4", L"GXDraw" }, + { "hooktype5", L"GXFlush" }, + { "hooktype6", L"OSSleepThread" }, + { "hooktype7", L"AXNextFrame" }, +}; + +const CMenu::SOption CMenu::_debugger[3] = { + { "disabled", L"Disabled" }, + { "dbg_gecko", L"Gecko" }, + { "dbgfwrite", L"OSReport" }, +}; + +const CMenu::SOption CMenu::_privateServer[3] = { + { "off", L"Off" }, + { "ps_nossl", L"No SSL only" }, + { "ps_wiimmfi", L"wiimmfi" }, +}; + template static inline T loopNum(T i, T s) { return (i + s) % s; @@ -77,7 +229,9 @@ void CMenu::_hideGameSettingsPg(bool instant) m_btnMgr.hide(m_gameSettingsLblFlashSave, instant); m_btnMgr.hide(m_gameSettingsBtnFlashSave, instant); m_btnMgr.hide(m_gameSettingsLblPrivateServer, instant); - m_btnMgr.hide(m_gameSettingsBtnPrivateServer, instant); + m_btnMgr.hide(m_gameSettingsLblPrivateServerVal, instant); + m_btnMgr.hide(m_gameSettingsBtnPrivateServerP, instant); + m_btnMgr.hide(m_gameSettingsBtnPrivateServerM, instant); m_btnMgr.hide(m_gameSettingsLblFix480p, instant); m_btnMgr.hide(m_gameSettingsBtnFix480p, instant); //All @@ -406,14 +560,16 @@ void CMenu::_showGameSettings() m_btnMgr.show(m_gameSettingsLblLED); m_btnMgr.show(m_gameSettingsBtnLED); - if(GameHdr->type == TYPE_WII_GAME) - { + //if(GameHdr->type == TYPE_WII_GAME) + //{ m_btnMgr.show(m_gameSettingsLblPrivateServer); - m_btnMgr.show(m_gameSettingsBtnPrivateServer); + m_btnMgr.show(m_gameSettingsLblPrivateServerVal); + m_btnMgr.show(m_gameSettingsBtnPrivateServerP); + m_btnMgr.show(m_gameSettingsBtnPrivateServerM); m_btnMgr.show(m_gameSettingsLblFix480p); m_btnMgr.show(m_gameSettingsBtnFix480p); - } + //} } } if(m_gameSettingsPage == 6) @@ -482,7 +638,9 @@ void CMenu::_showGameSettings() { m_btnMgr.setText(m_gameSettingsBtnVipatch, _optBoolToString(m_gcfg2.getOptBool(id, "vipatch", 0))); m_btnMgr.setText(m_gameSettingsBtnCountryPatch, _optBoolToString(m_gcfg2.getOptBool(id, "country_patch", 0))); - m_btnMgr.setText(m_gameSettingsBtnPrivateServer, _optBoolToString(m_gcfg2.getOptBool(id, "private_server", 0))); + i = min(m_gcfg2.getUInt(id, "private_server", 0), ARRAY_SIZE(CMenu::_privateServer) - 1u); + m_btnMgr.setText(m_gameSettingsLblPrivateServerVal, _t(CMenu::_privateServer[i].id, CMenu::_privateServer[i].text)); + m_btnMgr.setText(m_gameSettingsBtnFix480p, _optBoolToString(m_gcfg2.getOptBool(id, "fix480p", 2))); m_btnMgr.setText(m_gameSettingsBtnCustom, _optBoolToString(m_gcfg2.getOptBool(id, "custom", 0))); m_btnMgr.setText(m_gameSettingsBtnLaunchNK, _optBoolToString(m_gcfg2.getOptBool(id, "useneek", 0))); @@ -828,9 +986,10 @@ void CMenu::_gameSettings(const dir_discHdr *hdr, bool disc) m_gcfg2.setInt(id, "net_profile", loopNum(m_gcfg2.getInt(id, "net_profile") + direction, 4)); _showGameSettings(); } - else if(m_btnMgr.selected(m_gameSettingsBtnPrivateServer)) + else if(m_btnMgr.selected(m_gameSettingsBtnPrivateServerP) || m_btnMgr.selected(m_gameSettingsBtnPrivateServerM)) { - m_gcfg2.setBool(id, "private_server", !m_gcfg2.getBool(id, "private_server", 0)); + s8 direction = m_btnMgr.selected(m_gameSettingsBtnPrivateServerP) ? 1 : -1; + m_gcfg2.setInt(id, "private_server", loopNum(m_gcfg2.getUInt(id, "private_server") + direction, ARRAY_SIZE(CMenu::_privateServer))); _showGameSettings(); } else if(m_btnMgr.selected(m_gameSettingsBtnFix480p)) @@ -1005,7 +1164,9 @@ void CMenu::_initGameSettingsMenu() m_gameSettingsBtnLED = _addButton("GAME_SETTINGS/LED_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor); m_gameSettingsLblPrivateServer = _addLabel("GAME_SETTINGS/PRIVATE_SERVER", theme.lblFont, L"", 20, 185, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); - m_gameSettingsBtnPrivateServer = _addButton("GAME_SETTINGS/PRIVATE_SERVER_BTN", theme.btnFont, L"", 420, 190, 200, 48, theme.btnFontColor); + m_gameSettingsLblPrivateServerVal = _addLabel("GAME_SETTINGS/PRIVATE_SERVER_BTN", theme.btnFont, L"", 468, 190, 104, 48, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC); + m_gameSettingsBtnPrivateServerM = _addPicButton("GAME_SETTINGS/PRIVATE_SERVER_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 420, 190, 48, 48); + m_gameSettingsBtnPrivateServerP = _addPicButton("GAME_SETTINGS/PRIVATE_SERVER_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 572, 190, 48, 48); m_gameSettingsLblFix480p = _addLabel("GAME_SETTINGS/FIX480P", theme.lblFont, L"", 20, 245, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_gameSettingsBtnFix480p = _addButton("GAME_SETTINGS/FIX480P_BTN", theme.btnFont, L"", 420, 250, 200, 48, theme.btnFontColor); @@ -1067,7 +1228,9 @@ void CMenu::_initGameSettingsMenu() _setHideAnim(m_gameSettingsBtnCountryPatch, "GAME_SETTINGS/COUNTRY_PATCH_BTN", -50, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblPrivateServer, "GAME_SETTINGS/PRIVATE_SERVER", 50, 0, -2.f, 0.f); - _setHideAnim(m_gameSettingsBtnPrivateServer, "GAME_SETTINGS/PRIVATE_SERVER_BTN", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsLblPrivateServerVal, "GAME_SETTINGS/PRIVATE_SERVER_BTN", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsBtnPrivateServerM, "GAME_SETTINGS/PRIVATE_SERVER_MINUS", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsBtnPrivateServerP, "GAME_SETTINGS/PRIVATE_SERVER_PLUS", -50, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblFix480p, "GAME_SETTINGS/FIX480P", 50, 0, -2.f, 0.f); _setHideAnim(m_gameSettingsBtnFix480p, "GAME_SETTINGS/FIX480P_BTN", -50, 0, 1.f, 0.f); @@ -1233,7 +1396,7 @@ void CMenu::_textGameSettings(void) m_btnMgr.setText(m_gameSettingsLblFlashSave, _t("cfgg32", L"Flash Save to NAND")); m_btnMgr.setText(m_gameSettingsBtnFlashSave, _t("cfgg33", L"Flash")); - m_btnMgr.setText(m_gameSettingsLblPrivateServer, _t("cfgg45", L"Private Server (Wiimmfi)")); + m_btnMgr.setText(m_gameSettingsLblPrivateServer, _t("cfgg45", L"Private Server")); m_btnMgr.setText(m_gameSettingsLblFix480p, _t("cfgg49", L"480p Pixel Patch")); m_btnMgr.setText(m_gameSettingsLblWidth, _t("cfgg54", L"Video Width")); m_btnMgr.setText(m_gameSettingsLblPos, _t("cfgg55", L"Video Position")); diff --git a/source/menu/menu_game.cpp b/source/menu/menu_game.cpp index 1c1f1a3f..08ce49b1 100644 --- a/source/menu/menu_game.cpp +++ b/source/menu/menu_game.cpp @@ -18,152 +18,6 @@ s16 m_gameLblSnapBg; s16 m_gameLblSnapFrame; s16 m_gameLblBannerFrame; -const CMenu::SOption CMenu::_GlobalVideoModes[6] = { - { "vidgame", L"Game" }, - { "vidsys", L"System" }, - { "vidp50", L"PAL 50Hz" }, - { "vidp60", L"PAL 60Hz" }, - { "vidntsc", L"NTSC" }, - { "vidprog", L"Progressive" }, -}; - -const CMenu::SOption CMenu::_VideoModes[7] = { - { "viddef", L"Default" }, - { "vidgame", L"Game" }, - { "vidsys", L"System" }, - { "vidp50", L"PAL 50Hz" }, - { "vidp60", L"PAL 60Hz" }, - { "vidntsc", L"NTSC" }, - { "vidprog", L"Progressive" }, -}; - -const CMenu::SOption CMenu::_GlobalGCvideoModes[6] = { - { "vidgame", L"Game" }, - { "vidp50", L"PAL 50Hz" }, - { "vidp60", L"PAL 60Hz" }, - { "vidntsc", L"NTSC" }, - { "DMLmpal", L"MPAL" }, - { "vidprog", L"Progressive" }, -}; - -const CMenu::SOption CMenu::_GCvideoModes[7] = { - { "viddef", L"Default" }, - { "vidgame", L"Game" }, - { "vidp50", L"PAL 50Hz" }, - { "vidp60", L"PAL 60Hz" }, - { "vidntsc", L"NTSC" }, - { "DMLmpal", L"MPAL" }, - { "vidprog", L"Progressive" }, -}; - -const CMenu::SOption CMenu::_languages[11] = { - { "lngdef", L"Default" },// next should be console - { "lngjap", L"Japanese" }, - { "lngeng", L"English" }, - { "lngger", L"German" }, - { "lngfre", L"French" }, - { "lngspa", L"Spanish" }, - { "lngita", L"Italian" }, - { "lngdut", L"Dutch" }, - { "lngsch", L"S. Chinese" }, - { "lngtch", L"T. Chinese" }, - { "lngkor", L"Korean" } -}; - -const CMenu::SOption CMenu::_GlobalGClanguages[7] = { - { "lngsys", L"System" }, - { "lngeng", L"English" }, - { "lngger", L"German" }, - { "lngfre", L"French" }, - { "lngspa", L"Spanish" }, - { "lngita", L"Italian" }, - { "lngdut", L"Dutch" } -}; - -const CMenu::SOption CMenu::_GClanguages[8] = { - { "lngdef", L"Default" }, - { "lngsys", L"System" }, - { "lngeng", L"English" }, - { "lngger", L"German" }, - { "lngfre", L"French" }, - { "lngspa", L"Spanish" }, - { "lngita", L"Italian" }, - { "lngdut", L"Dutch" } -}; - -const CMenu::SOption CMenu::_ChannelsType[3] = { - { "ChanReal", L"Real NAND" }, - { "ChanEmu", L"Emu NAND" }, - { "ChanBoth", L"Both" }, -}; - -const CMenu::SOption CMenu::_NandEmu[2] = { - { "NANDpart", L"Partial" }, - { "NANDfull", L"Full" }, -}; - -const CMenu::SOption CMenu::_GlobalSaveEmu[3] = { - { "SaveOffG", L"Off" }, - { "SavePartG", L"Game save" }, - { "SaveFullG", L"Full" }, -}; - -const CMenu::SOption CMenu::_SaveEmu[4] = { - { "SaveDef", L"Default" }, - { "SaveOff", L"Off" }, - { "SavePart", L"Game save" }, - { "SaveFull", L"Full" }, -}; - -const CMenu::SOption CMenu::_AspectRatio[3] = { - { "aspectDef", L"Default" }, - { "aspect43", L"Force 4:3" }, - { "aspect169", L"Force 16:9" }, -}; - -const CMenu::SOption CMenu::_NinEmuCard[5] = { - { "NinMCDef", L"Default" }, - { "NinMCOff", L"Disabled" }, - { "NinMCon", L"Enabled" }, - { "NinMCMulti", L"Multi Saves" }, - { "NinMCdebug", L"Debug" }, -}; - -const CMenu::SOption CMenu::_GlobalGCLoaders[2] = { - { "GC_Devo", L"Devolution" }, - { "GC_Nindnt", L"Nintendont" }, -}; - -const CMenu::SOption CMenu::_GCLoader[3] = { - { "GC_Def", L"Default" }, - { "GC_Devo", L"Devolution" }, - { "GC_Nindnt", L"Nintendont" }, -}; - -const CMenu::SOption CMenu::_vidModePatch[4] = { - { "vmpnone", L"None" }, - { "vmpnormal", L"Normal" }, - { "vmpmore", L"More" }, - { "vmpall", L"All" } -}; - -const CMenu::SOption CMenu::_hooktype[8] = { - { "hook_auto", L"AUTO" }, - { "hooktype1", L"VBI" }, - { "hooktype2", L"KPAD read" }, - { "hooktype3", L"Joypad" }, - { "hooktype4", L"GXDraw" }, - { "hooktype5", L"GXFlush" }, - { "hooktype6", L"OSSleepThread" }, - { "hooktype7", L"AXNextFrame" }, -}; - -const CMenu::SOption CMenu::_debugger[3] = { - { "disabled", L"Disabled" }, - { "dbg_gecko", L"Gecko" }, - { "dbgfwrite", L"OSReport" }, -}; - static inline int loopNum(int i, int s) { return (i + s) % s; diff --git a/source/menu/menu_game_boot.cpp b/source/menu/menu_game_boot.cpp index 1bf71f1f..654053fa 100644 --- a/source/menu/menu_game_boot.cpp +++ b/source/menu/menu_game_boot.cpp @@ -777,7 +777,10 @@ void CMenu::_launchChannel(dir_discHdr *hdr) language = (language == 0) ? min(m_cfg.getUInt("GENERAL", "game_language", 0), ARRAY_SIZE(CMenu::_languages) - 1u) : language; u8 patchVidMode = min(m_gcfg2.getUInt(id, "patch_video_modes", 0), ARRAY_SIZE(CMenu::_vidModePatch) - 1u); - int aspectRatio = min(m_gcfg2.getUInt(id, "aspect_ratio", 0), ARRAY_SIZE(CMenu::_AspectRatio) - 1) - 1;// -1,0,1 + s8 aspectRatio = min(m_gcfg2.getUInt(id, "aspect_ratio", 0), ARRAY_SIZE(CMenu::_AspectRatio) - 1) - 1;// -1,0,1 + u8 private_server = m_gcfg2.getUInt(id, "private_server", 0); + int fix480pVal = m_gcfg2.getOptBool(id, "fix480p", 2); + bool fix480p = fix480pVal == 0 ? false : (fix480pVal == 1 ? true : m_cfg.getBool(WII_DOMAIN, "fix480p", false)); u32 returnTo = 0; const char *rtrn = m_cfg.getString("GENERAL", "returnto").c_str(); @@ -906,7 +909,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr) Identify(gameTitle); ExternalBooter_ChannelSetup(gameTitle, use_dol); - WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, 0, TYPE_CHANNEL, use_led); + WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, fix480p, 0, TYPE_CHANNEL, use_led); } Sys_Exit(); } @@ -979,7 +982,7 @@ void CMenu::_launchWii(dir_discHdr *hdr, bool dvd, bool disc_cfg) _launchShutdown(); bool vipatch = m_gcfg2.getBool(id, "vipatch", false); bool countryPatch = m_gcfg2.getBool(id, "country_patch", false); - bool private_server = m_gcfg2.getBool(id, "private_server", false); + u8 private_server = m_gcfg2.getUInt(id, "private_server", 0); int fix480pVal = m_gcfg2.getOptBool(id, "fix480p", 2); bool fix480p = fix480pVal == 0 ? false : (fix480pVal == 1 ? true : m_cfg.getBool(WII_DOMAIN, "fix480p", false)); @@ -995,7 +998,7 @@ void CMenu::_launchWii(dir_discHdr *hdr, bool dvd, bool disc_cfg) if(strlen(rtrn) == 4) returnTo = rtrn[0] << 24 | rtrn[1] << 16 | rtrn[2] << 8 | rtrn[3]; - int aspectRatio = min(m_gcfg2.getUInt(id, "aspect_ratio", 0), ARRAY_SIZE(CMenu::_AspectRatio) - 1u) - 1; + s8 aspectRatio = min(m_gcfg2.getUInt(id, "aspect_ratio", 0), ARRAY_SIZE(CMenu::_AspectRatio) - 1u) - 1; u8 patchVidMode = min(m_gcfg2.getUInt(id, "patch_video_modes", 0), ARRAY_SIZE(CMenu::_vidModePatch) - 1u); u8 emulate_mode = min(m_gcfg2.getUInt(id, "emulate_save", 0), ARRAY_SIZE(CMenu::_SaveEmu) - 1u); @@ -1167,8 +1170,8 @@ void CMenu::_launchWii(dir_discHdr *hdr, bool dvd, bool disc_cfg) MEM2_free(gameconfig); } - ExternalBooter_WiiGameSetup(wbfs_partition, dvd, patchregion, private_server, fix480p, id.c_str()); - WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, returnTo, TYPE_WII_GAME, use_led); + ExternalBooter_WiiGameSetup(wbfs_partition, dvd, patchregion, id.c_str()); + WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, fix480p, returnTo, TYPE_WII_GAME, use_led); Sys_Exit(); } diff --git a/wii/wiiflow/Languages/brazilian.ini b/wii/wiiflow/Languages/brazilian.ini index 358e649c..6ec78926 100644 --- a/wii/wiiflow/Languages/brazilian.ini +++ b/wii/wiiflow/Languages/brazilian.ini @@ -148,7 +148,7 @@ cfgg41=Gerenciar cfgg42=Controle USB cfgg43=Controle nativo cfgg44=Deflicker de vídeo -cfgg45=Servidor privado (Wiimmfi) +cfgg45=Servidor privado cfgg46=Tela estendida WiiU cfgg47=MemCard emulado cfgg48=Modo Arcade Triforce diff --git a/wii/wiiflow/Languages/english.ini b/wii/wiiflow/Languages/english.ini index f84f1f5b..c419caed 100644 --- a/wii/wiiflow/Languages/english.ini +++ b/wii/wiiflow/Languages/english.ini @@ -151,7 +151,7 @@ cfgg41=Manage cfgg42=USB-HID Controller cfgg43=Native Control cfgg44=Video Deflicker -cfgg45=Private Server (Wiimmfi) +cfgg45=Private Server cfgg46=WiiU Widescreen cfgg47=Emulated MemCard cfgg48=Triforce Arcade Mode @@ -439,6 +439,8 @@ part4=Plugins Default Partition part5=Partitions Settings players=Players prii=Priiloader +ps_nossl=No SSL only +ps_wiimmfi real=Real Nand SaveDef=Default SaveFull=Full diff --git a/wii/wiiflow/Languages/french.ini b/wii/wiiflow/Languages/french.ini index d0bc9341..2076edff 100644 --- a/wii/wiiflow/Languages/french.ini +++ b/wii/wiiflow/Languages/french.ini @@ -148,7 +148,7 @@ cfgg41=Gérer cfgg42=Manette USB-HID cfgg43=Controle Natif cfgg44=Lissage Vidéo -cfgg45=Serveur Privé(Wiimmfi) +cfgg45=Serveur Privé cfgg46=Plein écran WiiU cfgg47=Carte Mémoire emulée cfgg48=Mode Arcade TriForce diff --git a/wii/wiiflow/Languages/german.ini b/wii/wiiflow/Languages/german.ini index 039e4360..9233e55c 100644 --- a/wii/wiiflow/Languages/german.ini +++ b/wii/wiiflow/Languages/german.ini @@ -151,7 +151,7 @@ cfgg41=Einstellen cfgg42=USB-HID-Controller cfgg43=Native Control cfgg44=Video-Deflicker -cfgg45=Privater Server (Wiimmfi) +cfgg45=Privater Server cfgg46=Wii U Widescreen cfgg47=Emulierte MemCard cfgg48=Triforce Arcade Modus diff --git a/wii/wiiflow/Languages/korean.ini b/wii/wiiflow/Languages/korean.ini index 207a16e1..b57dd771 100644 --- a/wii/wiiflow/Languages/korean.ini +++ b/wii/wiiflow/Languages/korean.ini @@ -151,7 +151,7 @@ cfgg41=관리 cfgg42=USB-HID 컨트롤러 cfgg43=네이티브 컨트롤 cfgg44=비디오 디플리커 -cfgg45=사설 서버 (Wiimmfi) +cfgg45=사설 서버 cfgg46=WiiU 와이드스크린 cfgg47=에뮬레이트 된 메모리카드 cfgg48=트라이포스 아케이드 모드 diff --git a/wii/wiiflow/Languages/polish.ini b/wii/wiiflow/Languages/polish.ini index fffe1515..22a6ad8b 100644 --- a/wii/wiiflow/Languages/polish.ini +++ b/wii/wiiflow/Languages/polish.ini @@ -151,7 +151,7 @@ cfgg41=Zarządzaj cfgg42=Kontroler USB-HID cfgg43=Natywna kontrola cfgg44=Deflicker Video -cfgg45=Prywatny serwer (Wiimmfi) +cfgg45=Prywatny serwer cfgg46=WiiU Widescreen cfgg47=Emulowany MemCard cfgg48=Tryb Triforce Arcade diff --git a/wii/wiiflow/Languages/spanish.ini b/wii/wiiflow/Languages/spanish.ini index f32f85ac..11dd064c 100644 --- a/wii/wiiflow/Languages/spanish.ini +++ b/wii/wiiflow/Languages/spanish.ini @@ -151,7 +151,7 @@ cfgg41=Gestionar cfgg42=Control USB-HID cfgg43=Control nativo cfgg44=Antiparpadeo de video -cfgg45=Servidor privado (Wiimmfi) +cfgg45=Servidor privado cfgg46=Pantalla ancha en Wii U cfgg47=Tarjeta de memoria emulada cfgg48=Modo arcade Triforce