diff --git a/out/boot.dol b/out/boot.dol index d8b438d5..b925268b 100644 Binary files a/out/boot.dol and b/out/boot.dol differ diff --git a/source/gc/gc.cpp b/source/gc/gc.cpp index 1cdc2eca..b9e470f1 100644 --- a/source/gc/gc.cpp +++ b/source/gc/gc.cpp @@ -38,19 +38,21 @@ #include "memory/memory.h" #include "memory/mem2.hpp" +/* since Nintendont v1.98 argsboot is supported. and since wiiflow lite doesn't support versions less than v3.358 +we will use argsboot every time. */ + // Nintendont NIN_CFG NinCfg; u8 NinDevice = 0; bool NinArgsboot = false; -void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath,char *NewCheatPath, const char *partition, - bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker, - bool wiiu_widescreen, bool NIN_Debugger, bool tri_arcade) +void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath, char *NewCheatPath, const char *partition, + bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool led, bool native_ctl, bool deflicker, bool wiiu_widescreen, + bool NIN_Debugger, bool tri_arcade, bool cc_rumble, bool ipl) { - NinDevice = DeviceHandle.PathToDriveType(game); + //clear nincfg and set magicbytes now in case of return when NINRev=0 below memset(&NinCfg, 0, sizeof(NIN_CFG)); NinCfg.Magicbytes = 0x01070CF6; - NinCfg.MemCardBlocks = 0x2;//251 blocks //check version u32 NIN_cfg_version = NIN_CFG_VERSION; @@ -61,123 +63,95 @@ void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath const char *dol_path = fmt(NIN_LOADER_PATH, DeviceName[i]); if(!fsop_FileExist(dol_path)) continue; - //u8 *buffer = NULL; + u8 *buffer = NULL; u32 filesize = 0; const char *str = "$$Version:"; - u8 *buffer = fsop_ReadFile(dol_path, &filesize); + buffer = fsop_ReadFile(dol_path, &filesize); + // if buffer is NULL then out of memory - hopefully that doesn't happen and shouldn't for(u32 i = 0; i < filesize; i += 32) { if(memcmp(buffer+i, str, strlen(str)) == 0) { - // Write buffer in NINVersion + // get nintendont version (NINVersion) from current position in nintendont boot.dol (buffer) snprintf(NINVersion, sizeof(NINVersion), "%s", buffer+i+strlen(str)); + // get revision from version and use it to get NinCfg version NINRev = atoi(strchr(NINVersion, '.')+1); break; } } free(buffer); break; - /*u32 filesize = 0; - u8 *buffer = fsop_ReadFile(dol_path, &filesize); - char NINversion[21]; - for(u32 i = 0; i < filesize-60; ++i) - { - // Nintendont Loader..Built : %s %s..Jan 10 2014.11:21:01 - if((*(vu32*)(buffer+i+2)) == 0x6e74656e && (*(vu32*)(buffer+i+6)) == 0x646f6e74 - && (*(vu32*)(buffer+i+11)) == 0x4c6f6164) //'nten' 'dont' 'Load' - { - for(int k= 30; k <50; ++k) - { - if((*(vu32*)(buffer+i+k)) == 0x4A616E20 || (*(vu32*)(buffer+i+k)) == 0x46656220 || - (*(vu32*)(buffer+i+k)) == 0x4D617220 || (*(vu32*)(buffer+i+k)) == 0x41707220 || - (*(vu32*)(buffer+i+k)) == 0x4D617920 || (*(vu32*)(buffer+i+k)) == 0x4A756E20 || - (*(vu32*)(buffer+i+k)) == 0x4A756C20 || (*(vu32*)(buffer+i+k)) == 0x41756720 || - (*(vu32*)(buffer+i+k)) == 0x53657020 || (*(vu32*)(buffer+i+k)) == 0x4F637420 || - (*(vu32*)(buffer+i+k)) == 0x4E6F7620 || (*(vu32*)(buffer+i+k)) == 0x44656320 ) // find Month - { - for(int j = 0 ; j < 20 ; j++) - NINversion[j] = *(u8*)(buffer+i+k+j); - - NINversion[11] = ' '; // replace \0 between year and time with a space. - NINversion[20] = 0; - struct tm time; - strptime(NINversion, "%b %d %Y %H:%M:%S", &time); - - const time_t NINLoaderTime = mktime(&time); - const time_t v135time = 1407167999;// v1.135 - - if(difftime(NINLoaderTime,v135time) > 0) - NIN_cfg_version = 3; - else - NIN_cfg_version = 2; - break; - } - } - break; - } - } - free(buffer); - break;*/ } - if(NINRev == 0) - return; - if(NINRev >= 135 && NINRev < 354) + if(NINRev == 0 || NINRev < 358) + return;// nintendont not found or revision is less than 358(was 135) thus too old for wiiflow lite + /*if(NINRev >= 135 && NINRev < 354) NIN_cfg_version = 3; else if(NINRev >= 354 && NINRev < 358) - NIN_cfg_version = 4; + NIN_cfg_version = 4;*/ else if(NINRev >= 358 && NINRev < 368) NIN_cfg_version = 5; else if(NINRev >= 368 && NINRev < 424) NIN_cfg_version = 6; - + else if(NINRev >= 424 && NINRev < 431) + NIN_cfg_version = 7; + NinCfg.Version = NIN_cfg_version; - /*if(memcmp("0x474851",gameID,3)==0) + /*if(memcmp("0x474851",gameID,3)==0) // old fix for simpsons hit & run - r155 fixed this NinCfg.MaxPads = 1; else*/ - NinCfg.MaxPads = 4; + NinCfg.MaxPads = 4; + + NinCfg.VideoMode |= NIN_VID_FORCE;// always force video? + + if((videomode > 3) && (videomode != 6)) + { + NinCfg.Config |= NIN_CFG_FORCE_PROG; + NinCfg.VideoMode |= NIN_VID_PROG; + } NinCfg.Config |= NIN_CFG_AUTO_BOOT; + NinDevice = DeviceHandle.PathToDriveType(game); if(NinDevice != SD) NinCfg.Config |= NIN_CFG_USB; - if(IsOnWiiU() == true) - NinCfg.Config |= NIN_CFG_MEMCARDEMU; - - NinCfg.VideoMode |= NIN_VID_FORCE; - - if((videomode > 3) && (videomode != 6)) - NinCfg.Config |= NIN_CFG_FORCE_PROG; - - if(usb_hid) - NinCfg.Config |= NIN_CFG_HID; - - if(NIN_Debugger) + if(NIN_Debugger && IsOnWiiU() == false) //wii only NinCfg.Config |= NIN_CFG_OSREPORT; - if(native_ctl) + if(native_ctl && IsOnWiiU() == false) //wii only NinCfg.Config |= NIN_CFG_NATIVE_SI; if(deflicker) NinCfg.VideoMode |= NIN_VID_FORCE_DF; - if(wiiu_widescreen) + if(wiiu_widescreen && IsOnWiiU() == true) //wii u vwii only NinCfg.Config |= NIN_CFG_WIIU_WIDE; if(widescreen) NinCfg.Config |= NIN_CFG_FORCE_WIDE; + if(led) + NinCfg.Config |= NIN_CFG_LED; + if(tri_arcade) NinCfg.Config |= NIN_CFG_ARCADE_MODE; - if(emuMC > 0) + if(cc_rumble) + NinCfg.Config |= NIN_CFG_BIT_CC_RUMBLE; + + if(ipl) + NinCfg.Config |= NIN_CFG_SKIP_IPL; + + NinCfg.MemCardBlocks = 0x2; //251 blocks + + if(emuMC > 0 || IsOnWiiU() == true) //force memcardemu for wii u vwii NinCfg.Config |= NIN_CFG_MEMCARDEMU; if(emuMC > 1) { NinCfg.Config |= NIN_CFG_MC_MULTI; - NinCfg.MemCardBlocks = 0x4;//1019 blocks (8MB) + NinCfg.MemCardBlocks = 0x4; //1019 blocks (8MB) } if(CheatPath != NULL && NewCheatPath != NULL && cheats) { @@ -205,23 +179,23 @@ void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath gprintf("Nintendont Game Path: %s, ID: %08x\n", NinCfg.GamePath, NinCfg.GameID); } -void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker) +void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool cc_rumble, bool native_ctl, bool deflicker) { memset(&NinCfg, 0, sizeof(NIN_CFG)); NinCfg.Magicbytes = 0x01070CF6; FILE * location = fopen("sd:/nincfg.bin", "r"); if(location == NULL) - { NinCfg.Config |= NIN_CFG_USB; - fclose(location); - location = NULL; - } + + fclose(location); + location = NULL; + NinCfg.Version = NIN_CFG_VERSION; NinCfg.Config |= NIN_CFG_AUTO_BOOT; NinCfg.VideoMode |= NIN_VID_AUTO; - if(usb_hid) - NinCfg.Config |= NIN_CFG_HID; + if(cc_rumble) + NinCfg.Config |= NIN_CFG_BIT_CC_RUMBLE; if(emuMC == 1) { NinCfg.Config |= NIN_CFG_MEMCARDEMU; @@ -245,26 +219,32 @@ void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ct void Nintendont_WriteOptions() { - /* Newer Nintendont versions */ + gprintf("Writing Arguments\n"); + AddBootArgument((char*)&NinCfg, sizeof(NIN_CFG)); +} + +/*void Nintendont_WriteOptions() +{ + // Newer Nintendont versions if(NinArgsboot == true) { gprintf("Writing Arguments\n"); AddBootArgument((char*)&NinCfg, sizeof(NIN_CFG)); return; } - /* general loader */ + // general loader if(DeviceHandle.SD_Inserted()) { gprintf("Writing Nintendont CFG: sd:/%s\n", NIN_CFG_PATH); fsop_WriteFile(fmt("sd:/%s", NIN_CFG_PATH), &NinCfg, sizeof(NIN_CFG)); } - /* for kernel */ + // for kernel if(NinDevice != SD) { gprintf("Writing Nintendont USB Kernel CFG: %s:/%s\n", DeviceName[NinDevice], NIN_CFG_PATH); fsop_WriteFile(fmt("%s:/%s", DeviceName[NinDevice], NIN_CFG_PATH), &NinCfg, sizeof(NIN_CFG)); } -} +}*/ bool Nintendont_Installed() { @@ -291,7 +271,8 @@ bool Nintendont_GetLoader() { gprintf("Nintendont loaded: %s\n", dol_path); AddBootArgument(dol_path); - //search for argsboot + break; + //search for argsboot not needed u32 size; const char *dol_ptr = GetHomebrew(&size); for(u32 i = 0; i < size; i += 0x10) @@ -483,7 +464,7 @@ void GC_SetVideoMode(u8 videomode, u8 loader) syssram *sram; sram = __SYS_LockSram(); GXRModeObj *vmode = VIDEO_GetPreferredMode(0); - int vmode_reg = 0; + int vmode_reg = 0;// VI_NTSC if((VIDEO_HaveComponentCable() && (CONF_GetProgressiveScan() > 0)) || ((videomode > 3) && (videomode != 6))) sram->flags |= 0x80; //set progressive flag @@ -492,7 +473,7 @@ void GC_SetVideoMode(u8 videomode, u8 loader) if(videomode == 1 || videomode == 3 || videomode == 5 || videomode == 6 || videomode == 7) { - vmode_reg = 1; + vmode_reg = 1;// VI_PAL sram->flags |= 0x01; // Set bit 0 to set the video mode to PAL sram->ntd |= 0x40; //set pal60 flag } @@ -501,52 +482,52 @@ void GC_SetVideoMode(u8 videomode, u8 loader) sram->flags &= 0xFE; // Clear bit 0 to set the video mode to NTSC sram->ntd &= 0xBF; //clear pal60 flag } - - if(videomode == 1) + /* should the sram pal60 flag be cleared for PAL50? */ + if(videomode == 1)// PAL50 { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_PAL50; vmode = &TVPal528IntDf; } - else if(videomode == 2) + else if(videomode == 2)// NTSC { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_NTSC; vmode = &TVNtsc480IntDf; } - else if(videomode == 3) + else if(videomode == 3)// PAL60 { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_PAL60; vmode = &TVEurgb60Hz480IntDf; - vmode_reg = 5; + vmode_reg = 5;// VI_EURGB60 } - else if(videomode == 4) + else if(videomode == 4)// NTSC 480P { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_NTSC; - vmode = &TVNtsc480IntDf;// shouldn't this be vmode = &TVNtsc480Prog + vmode = &TVNtsc480Prog; } - else if(videomode == 5) + else if(videomode == 5)// PAL 480P { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_PAL60; - vmode = &TVEurgb60Hz480IntDf; + vmode = &TVEurgb60Hz480Prog; vmode_reg = 5; } - else if(videomode == 6) + else if(videomode == 6)// MPAL { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_MPAL; vmode = &TVEurgb60Hz480IntDf; - vmode_reg = 5;// not sure about this + vmode_reg = 2;// VI_MPAL } - else if(videomode == 7) + else if(videomode == 7)// MPAL Prog { if(loader == 1) NinCfg.VideoMode |= NIN_VID_FORCE_MPAL; - vmode = &TVEurgb60Hz480IntDf; - vmode_reg = 5; + vmode = &TVEurgb60Hz480Prog; + vmode_reg = 2; } __SYS_UnlockSram(1); // 1 -> write changes @@ -560,14 +541,14 @@ void GC_SetVideoMode(u8 videomode, u8 loader) if(vmode != 0) VIDEO_Configure(vmode); - /* Setup video */ + /* Setup video VIDEO_SetBlack(FALSE); VIDEO_Flush(); VIDEO_WaitVSync(); if(vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); else while(VIDEO_GetNextField()) - VIDEO_WaitVSync(); + VIDEO_WaitVSync(); */ /* Set black and flush */ VIDEO_SetBlack(TRUE); diff --git a/source/gc/gc.hpp b/source/gc/gc.hpp index b97b572a..7aa0c86b 100644 --- a/source/gc/gc.hpp +++ b/source/gc/gc.hpp @@ -27,10 +27,10 @@ bool Nintendont_Installed(); bool Nintendont_GetLoader(); -void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker); +void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool cc_rumble, bool native_ctl, bool deflicker); void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath, char *NewCheatPath, const char *partition, - bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker, - bool wiiu_widescreen, bool NIN_Debugger, bool tri_arcade); + bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool led, bool native_ctl, bool deflicker, bool wiiu_widescreen, + bool NIN_Debugger, bool tri_arcade, bool cc_rumble, bool ipl); void Nintendont_WriteOptions(); // Devolution diff --git a/source/gc/nin_cfg.h b/source/gc/nin_cfg.h index 27561a91..32b2a213 100644 --- a/source/gc/nin_cfg.h +++ b/source/gc/nin_cfg.h @@ -2,17 +2,18 @@ #ifndef __COMMON_CONFIG_H__ #define __COMMON_CONFIG_H__ -#define NIN_CFG_VERSION 0x00000007 +#define NIN_CFG_VERSION 0x00000008 #define NIN_CFG_MAXPAD 4 #define MEM_CARD_MAX (5) #define MEM_CARD_CODE(x) (1<<(x+2)) #define MEM_CARD_SIZE(x) (1<<(x+19)) #define MEM_CARD_BLOCKS(x) ((1<<(x+6))-5) +// nin_cfg version does not match nintendont version typedef struct NIN_CFG { unsigned int Magicbytes; // 0x01070CF6 - unsigned int Version; + unsigned int Version; // v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since v4.424, v8 since v4.431 unsigned int Config; unsigned int VideoMode; unsigned int Language; @@ -23,25 +24,30 @@ typedef struct NIN_CFG unsigned int MemCardBlocks; } NIN_CFG; +// NIN_CFG_REMLIMIT is disc read speed limt enabled by default. It keeps loading speed at GC speed. +// disabling it may speed up loading times but cause other game issues. enum ninconfig { - NIN_CFG_CHEATS = (1<<0), - NIN_CFG_DEBUGGER = (1<<1), // Only for Wii Version - NIN_CFG_DEBUGWAIT = (1<<2), // Only for Wii Version - NIN_CFG_MEMCARDEMU = (1<<3), - NIN_CFG_CHEAT_PATH = (1<<4), - NIN_CFG_FORCE_WIDE = (1<<5), - NIN_CFG_FORCE_PROG = (1<<6), - NIN_CFG_AUTO_BOOT = (1<<7), - NIN_CFG_HID = (1<<8), - NIN_CFG_OSREPORT = (1<<9), - NIN_CFG_USB = (1<<10), - NIN_CFG_LED = (1<<11), - NIN_CFG_LOG = (1<<12), - NIN_CFG_MC_MULTI = (1<<13), - NIN_CFG_NATIVE_SI = (1<<14), - NIN_CFG_WIIU_WIDE = (1<<15), - NIN_CFG_ARCADE_MODE = (1<<16), + NIN_CFG_CHEATS = (1<<0), + NIN_CFG_DEBUGGER = (1<<1), // Only for Wii Version + NIN_CFG_DEBUGWAIT = (1<<2), // Only for Wii Version + NIN_CFG_MEMCARDEMU = (1<<3), + NIN_CFG_CHEAT_PATH = (1<<4), + NIN_CFG_FORCE_WIDE = (1<<5), + NIN_CFG_FORCE_PROG = (1<<6), + NIN_CFG_AUTO_BOOT = (1<<7), + NIN_CFG_HID = (1<<8), // Unused since v3.304 + NIN_CFG_REMLIMIT = (1<<8), // v3.358 cfg version 5 + NIN_CFG_OSREPORT = (1<<9), + NIN_CFG_USB = (1<<10), // r40 + NIN_CFG_LED = (1<<11), // v1.45 + NIN_CFG_LOG = (1<<12), // v1.109 + NIN_CFG_MC_MULTI = (1<<13), // v1.135 + NIN_CFG_NATIVE_SI = (1<<14), // v2.189 - only for Wii + NIN_CFG_WIIU_WIDE = (1<<15), // v2.258 - only for Wii U + NIN_CFG_ARCADE_MODE = (1<<16), // v4.424 cfg version 7 + NIN_CFG_BIT_CC_RUMBLE = (1<<17), // v4.431 cfg version 8 + NIN_CFG_SKIP_IPL = (1<<18), // v4.435 cfg version 8 }; enum ninvideomode @@ -60,7 +66,8 @@ enum ninvideomode NIN_VID_FORCE_MASK = NIN_VID_FORCE_PAL50|NIN_VID_FORCE_PAL60|NIN_VID_FORCE_NTSC|NIN_VID_FORCE_MPAL, - NIN_VID_PROG = (1<<4), //important to prevent blackscreens + NIN_VID_PROG = (1<<4), + NIN_VID_PATCH_PAL50 = (1<<5), // v3.368 cfg version 6 }; enum ninlanguage @@ -78,12 +85,5 @@ enum ninlanguage NIN_LAN_AUTO = -1, }; -enum VideoModes -{ - GCVideoModeNone = 0, - GCVideoModePAL60 = 1, - GCVideoModeNTSC = 2, - GCVideoModePROG = 3, -}; #endif diff --git a/source/menu/menu.hpp b/source/menu/menu.hpp index ffe0f9d2..23c65b15 100644 --- a/source/menu/menu.hpp +++ b/source/menu/menu.hpp @@ -482,8 +482,8 @@ private: s16 m_gameSettingsLblWidescreen; s16 m_gameSettingsBtnWidescreen; - s16 m_gameSettingsLblUSB_HID; - s16 m_gameSettingsBtnUSB_HID; + s16 m_gameSettingsLblCC_Rumble; + s16 m_gameSettingsBtnCC_Rumble; s16 m_gameSettingsLblNATIVE_CTL; s16 m_gameSettingsBtnNATIVE_CTL; @@ -494,6 +494,9 @@ private: s16 m_gameSettingsLblArcade; s16 m_gameSettingsBtnArcade; + s16 m_gameSettingsLblSkip_IPL; + s16 m_gameSettingsBtnSkip_IPL; + s16 m_gameSettingsLblGCLoader; s16 m_gameSettingsLblGCLoader_Val; s16 m_gameSettingsBtnGCLoader_P; diff --git a/source/menu/menu_config_game.cpp b/source/menu/menu_config_game.cpp index 14f67b91..ba3620a0 100644 --- a/source/menu/menu_config_game.cpp +++ b/source/menu/menu_config_game.cpp @@ -112,14 +112,16 @@ void CMenu::_hideGameSettingsPg(bool instant) m_btnMgr.hide(m_gameSettingsLblGCLoader_Val, instant); m_btnMgr.hide(m_gameSettingsBtnGCLoader_P, instant); m_btnMgr.hide(m_gameSettingsBtnGCLoader_M, instant); - m_btnMgr.hide(m_gameSettingsLblUSB_HID, instant); - m_btnMgr.hide(m_gameSettingsBtnUSB_HID, instant); + m_btnMgr.hide(m_gameSettingsLblCC_Rumble, instant); + m_btnMgr.hide(m_gameSettingsBtnCC_Rumble, instant); m_btnMgr.hide(m_gameSettingsLblNATIVE_CTL, instant); m_btnMgr.hide(m_gameSettingsBtnNATIVE_CTL, instant); m_btnMgr.hide(m_gameSettingsLblDeflicker, instant); m_btnMgr.hide(m_gameSettingsBtnDeflicker, instant); m_btnMgr.hide(m_gameSettingsLblArcade, instant); m_btnMgr.hide(m_gameSettingsBtnArcade, instant); + m_btnMgr.hide(m_gameSettingsLblSkip_IPL, instant); + m_btnMgr.hide(m_gameSettingsBtnSkip_IPL, instant); // Channels only m_btnMgr.hide(m_gameSettingsLblApploader, instant); m_btnMgr.hide(m_gameSettingsBtnApploader, instant); @@ -285,14 +287,18 @@ void CMenu::_showGameSettings(void) { if(GameHdr->type == TYPE_GC_GAME) { - m_btnMgr.show(m_gameSettingsLblUSB_HID); - m_btnMgr.show(m_gameSettingsBtnUSB_HID); + m_btnMgr.show(m_gameSettingsLblCC_Rumble); + m_btnMgr.show(m_gameSettingsBtnCC_Rumble); m_btnMgr.show(m_gameSettingsLblNATIVE_CTL); m_btnMgr.show(m_gameSettingsBtnNATIVE_CTL); m_btnMgr.show(m_gameSettingsBtnArcade); m_btnMgr.show(m_gameSettingsLblArcade); + + m_btnMgr.show(m_gameSettingsBtnSkip_IPL); + m_btnMgr.show(m_gameSettingsLblSkip_IPL); + } else { @@ -349,10 +355,11 @@ void CMenu::_showGameSettings(void) m_btnMgr.setText(m_gameSettingsLblWidescreen, _t("cfgg36", L"Widescreen Patch")); m_btnMgr.setText(m_gameSettingsBtnWidescreen, _optBoolToString(m_gcfg2.getOptBool(id, "widescreen", 0))); m_btnMgr.setText(m_gameSettingsBtnDevoMemcardEmu, _optBoolToString(m_gcfg2.getOptBool(id, "devo_memcard_emu", 2))); - m_btnMgr.setText(m_gameSettingsBtnUSB_HID, _optBoolToString(m_gcfg2.getOptBool(id, "usb_hid", 2))); + m_btnMgr.setText(m_gameSettingsBtnCC_Rumble, _optBoolToString(m_gcfg2.getOptBool(id, "cc_rumble", 2))); m_btnMgr.setText(m_gameSettingsBtnNATIVE_CTL, _optBoolToString(m_gcfg2.getOptBool(id, "native_ctl", 2))); - m_btnMgr.setText(m_gameSettingsBtnDeflicker, _optBoolToString(m_gcfg2.getOptBool(id, "Deflicker", 0))); + m_btnMgr.setText(m_gameSettingsBtnDeflicker, _optBoolToString(m_gcfg2.getOptBool(id, "deflicker", 0))); m_btnMgr.setText(m_gameSettingsBtnArcade, _optBoolToString(m_gcfg2.getOptBool(id, "triforce_arcade", 0))); + m_btnMgr.setText(m_gameSettingsBtnSkip_IPL, _optBoolToString(m_gcfg2.getOptBool(id, "skip_ipl", 0))); i = min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u); m_btnMgr.setText(m_gameSettingsLblVideo, _t(CMenu::_GCvideoModes[i].id, CMenu::_GCvideoModes[i].text)); @@ -362,7 +369,7 @@ void CMenu::_showGameSettings(void) if(GCLoader == NINTENDONT) { - m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard")); + //m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard")); i = min((u32)m_gcfg2.getInt(id, "emu_memcard", 0), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u); m_btnMgr.setText(m_gameSettingsLblEmuMemCard_Val, _t(CMenu::_NinEmuCard[i].id, CMenu::_NinEmuCard[i].text)); if(IsOnWiiU()) @@ -616,12 +623,12 @@ void CMenu::_gameSettings(void) } else if(m_btnMgr.selected(m_gameSettingsBtnDeflicker)) { - m_gcfg2.setBool(id, "Deflicker", !m_gcfg2.getBool(id, "Deflicker", 0)); + m_gcfg2.setBool(id, "deflicker", !m_gcfg2.getBool(id, "deflicker", 0)); _showGameSettings(); } - else if(m_btnMgr.selected(m_gameSettingsBtnUSB_HID)) + else if(m_btnMgr.selected(m_gameSettingsBtnCC_Rumble)) { - m_gcfg2.setOptBool(id, "usb_hid", loopNum(m_gcfg2.getOptBool(id, "usb_hid") + 1, 3)); + m_gcfg2.setOptBool(id, "cc_rumble", loopNum(m_gcfg2.getOptBool(id, "cc_rumble") + 1, 3)); _showGameSettings(); } else if(m_btnMgr.selected(m_gameSettingsBtnArcade)) @@ -629,6 +636,11 @@ void CMenu::_gameSettings(void) m_gcfg2.setBool(id, "triforce_arcade", !m_gcfg2.getBool(id, "triforce_arcade", 0)); _showGameSettings(); } + else if(m_btnMgr.selected(m_gameSettingsBtnSkip_IPL)) + { + m_gcfg2.setBool(id, "skip_ipl", !m_gcfg2.getBool(id, "skip_ipl", 0)); + _showGameSettings(); + } else if(m_btnMgr.selected(m_gameSettingsBtnPrivateServer)) { m_gcfg2.setBool(id, "private_server", !m_gcfg2.getBool(id, "private_server", 0)); @@ -773,8 +785,11 @@ void CMenu::_initGameSettingsMenu() m_gameSettingsBtnLaunchNK = _addButton("GAME_SETTINGS/LAUNCHNEEK_BTN", theme.btnFont, L"", 420, 250, 200, 48, theme.btnFontColor); //GC Nintendont Page 4 - m_gameSettingsLblUSB_HID = _addLabel("GAME_SETTINGS/USB_HID", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); - m_gameSettingsBtnUSB_HID = _addButton("GAME_SETTINGS/USB_HID_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor); + //m_gameSettingsLblUSB_HID = _addLabel("GAME_SETTINGS/USB_HID", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); + //m_gameSettingsBtnUSB_HID = _addButton("GAME_SETTINGS/USB_HID_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor); + + m_gameSettingsLblCC_Rumble = _addLabel("GAME_SETTINGS/CC_RUMBLE", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); + m_gameSettingsBtnCC_Rumble = _addButton("GAME_SETTINGS/CC_RUMBLE_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor); m_gameSettingsLblNATIVE_CTL = _addLabel("GAME_SETTINGS/NATIVE_CTL", theme.lblFont, L"", 20, 185, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_gameSettingsBtnNATIVE_CTL = _addButton("GAME_SETTINGS/NATIVE_CTL_BTN", theme.btnFont, L"", 420, 190, 200, 48, theme.btnFontColor); @@ -782,6 +797,9 @@ void CMenu::_initGameSettingsMenu() m_gameSettingsLblArcade = _addLabel("GAME_SETTINGS/ARCADE", theme.lblFont, L"", 20, 245, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_gameSettingsBtnArcade = _addButton("GAME_SETTINGS/ARCADE_BTN", theme.btnFont, L"", 420, 250, 200, 48, theme.btnFontColor); + m_gameSettingsLblSkip_IPL = _addLabel("GAME_SETTINGS/SKIP_IPL", theme.lblFont, L"", 20, 305, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); + m_gameSettingsBtnSkip_IPL = _addButton("GAME_SETTINGS/SKIP_IPL_BTN", theme.btnFont, L"", 420, 310, 200, 48, theme.btnFontColor); + //Page 5 m_gameSettingsLblLED = _addLabel("GAME_SETTINGS/LED", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_gameSettingsBtnLED = _addButton("GAME_SETTINGS/LED_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor); @@ -854,8 +872,8 @@ void CMenu::_initGameSettingsMenu() _setHideAnim(m_gameSettingsLblLED, "GAME_SETTINGS/LED", 50, 0, -2.f, 0.f); _setHideAnim(m_gameSettingsBtnLED, "GAME_SETTINGS/LED_BTN", -50, 0, 1.f, 0.f); - _setHideAnim(m_gameSettingsLblUSB_HID, "GAME_SETTINGS/USB_HID", 50, 0, -2.f, 0.f); - _setHideAnim(m_gameSettingsBtnUSB_HID, "GAME_SETTINGS/USB_HID_BTN", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsLblCC_Rumble, "GAME_SETTINGS/CC_RUMBLE", 50, 0, -2.f, 0.f); + _setHideAnim(m_gameSettingsBtnCC_Rumble, "GAME_SETTINGS/CC_RUMBLE_BTN", -50, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblNATIVE_CTL, "GAME_SETTINGS/NATIVE_CTL", 50, 0, -2.f, 0.f); _setHideAnim(m_gameSettingsBtnNATIVE_CTL, "GAME_SETTINGS/NATIVE_CTL_BTN", -50, 0, 1.f, 0.f); @@ -877,6 +895,9 @@ void CMenu::_initGameSettingsMenu() _setHideAnim(m_gameSettingsLblArcade, "GAME_SETTINGS/ARCADE", 50, 0, -2.f, 0.f); _setHideAnim(m_gameSettingsBtnArcade, "GAME_SETTINGS/ARCADE_BTN", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsLblSkip_IPL, "GAME_SETTINGS/SKIP_IPL", 50, 0, -2.f, 0.f); + _setHideAnim(m_gameSettingsBtnSkip_IPL, "GAME_SETTINGS/SKIP_IPL_BTN", -50, 0, 1.f, 0.f); + _setHideAnim(m_gameSettingsLblGCLoader, "GAME_SETTINGS/GC_LOADER", 50, 0, -2.f, 0.f); _setHideAnim(m_gameSettingsLblGCLoader_Val, "GAME_SETTINGS/GC_LOADER_BTN", -50, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsBtnGCLoader_P, "GAME_SETTINGS/GC_LOADER_PLUS", -50, 0, 1.f, 0.f); @@ -943,8 +964,9 @@ void CMenu::_textGameSettings(void) m_btnMgr.setText(m_gameSettingsLblAspectRatio, _t("cfgg27", L"Aspect Ratio")); m_btnMgr.setText(m_gameSettingsLblApploader, _t("cfgg37", L"Boot Apploader")); m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard")); - m_btnMgr.setText(m_gameSettingsLblUSB_HID, _t("cfgg42", L"USB-HID Controller")); + m_btnMgr.setText(m_gameSettingsLblCC_Rumble, _t("cfgg52", L"Wiimote CC Rumble")); m_btnMgr.setText(m_gameSettingsLblNATIVE_CTL, _t("cfgg43", L"Native Control")); + m_btnMgr.setText(m_gameSettingsLblSkip_IPL, _t("cfgg53", L"Skip IPL BIOS")); m_btnMgr.setText(m_gameSettingsLblArcade, _t("cfgg48", L"Triforce Arcade Mode")); m_btnMgr.setText(m_gameSettingsLblEmulation, _t("cfgg24", L"NAND Emulation")); diff --git a/source/menu/menu_game.cpp b/source/menu/menu_game.cpp index fc341f56..6607ede3 100644 --- a/source/menu/menu_game.cpp +++ b/source/menu/menu_game.cpp @@ -1030,12 +1030,12 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc) if(has_enabled_providers() && _initNetwork() == 0) add_game_to_card(id); - u8 GClanguage = min((u32)m_gcfg2.getInt(id, "gc_language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u); + u8 GClanguage = min((u32)m_gcfg2.getInt(id, "language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u); GClanguage = (GClanguage == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "game_language", 0), ARRAY_SIZE(CMenu::_GlobalGClanguages) - 1u) : GClanguage-1; if(id[3] == 'E' || id[3] == 'J') GClanguage = 1; //=english - u8 videoMode = min((u32)m_gcfg2.getInt(id, "gc_video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u); + u8 videoMode = min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u); videoMode = (videoMode == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "video_mode", 0), ARRAY_SIZE(CMenu::_GlobalGCvideoModes) - 1u) : videoMode-1; if(disc || videoMode == 0) { @@ -1056,16 +1056,27 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc) } else if(loader == NINTENDONT) { - u8 emuMC = min((u32)m_gcfg2.getInt(id, "emu_memcard", m_cfg.getInt(GC_DOMAIN, "emu_memcard", 2)), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u); - emuMC = (emuMC == 0) ? m_cfg.getInt(GC_DOMAIN, "emu_memcard", 2) : emuMC-1; - bool usb_hid = m_gcfg2.testOptBool(id, "usb_hid", m_cfg.getBool(GC_DOMAIN, "usb_hid", false)); + u8 emuMC = min((u32)m_gcfg2.getInt(id, "emu_memcard", 0), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u); + emuMC = (emuMC == 0) ? m_cfg.getInt(GC_DOMAIN, "emu_memcard", 1) : emuMC - 1; + + // these 2 settings have global defaults in wfl main config + bool cc_rumble = m_gcfg2.testOptBool(id, "cc_rumble", m_cfg.getBool(GC_DOMAIN, "cc_rumble", false)); bool native_ctl = m_gcfg2.testOptBool(id, "native_ctl", m_cfg.getBool(GC_DOMAIN, "native_ctl", false)); - bool deflicker = m_gcfg2.getBool(id, "Deflicker", false); + + bool deflicker = m_gcfg2.getBool(id, "deflicker", false); bool tri_arcade = m_gcfg2.getBool(id, "triforce_arcade", false); + bool activity_led = m_gcfg2.getBool(id, "led", false); + bool ipl = m_gcfg2.getBool(id, "skip_ipl", false); + if(IsOnWiiU()) + { + native_ctl = false; + activity_led = false; + } if(disc == true) { - //emuMC = m_cfg.getInt(GC_DOMAIN, "emu_memcard", 1); - Nintendont_BootDisc(emuMC, widescreen, usb_hid, native_ctl, deflicker); + /*funny, in order for these settings to work they would have to be entered in gameconfig2 manually under the gameID + or the game will have to already be on USB or SD but then why launch via disc?*/ + Nintendont_BootDisc(emuMC, widescreen, cc_rumble, native_ctl, deflicker); } else { @@ -1089,7 +1100,8 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc) snprintf(NewCheatPath, sizeof(NewCheatPath), "%s%s.gct",GC_Path,id); Nintendont_SetOptions(path, id, CheatPath, NewCheatPath, DeviceName[currentPartition], - cheats, emuMC, videoMode, widescreen, usb_hid, native_ctl, deflicker, wiiu_widescreen, NIN_Debugger, tri_arcade); + cheats, emuMC, videoMode, widescreen, activity_led, native_ctl, deflicker, wiiu_widescreen, + NIN_Debugger, tri_arcade, cc_rumble, ipl); } } /* configs no longer needed */ diff --git a/wii/wiiflow/Languages/english.ini b/wii/wiiflow/Languages/english.ini index 7259f8f0..d9ba8fed 100644 --- a/wii/wiiflow/Languages/english.ini +++ b/wii/wiiflow/Languages/english.ini @@ -123,6 +123,8 @@ cfgg48=EmuNAND not on USB1! cfgg49=Neek2o Not Found! cfgg50=No save to extract! cfgg51=No save to flash to real NAND! +cfgg52=Wiimote CC Rumble +cfgg53=Skip IPL BIOS cfgg4=Patch country strings cfgg5=Ocarina cfgg6=