- added Nintendont BBA emulation and Net Profile options to Game Settings.

This commit is contained in:
Fledge68 2019-10-31 19:00:58 -05:00
parent 4761d0ce84
commit e29894d629
8 changed files with 92 additions and 10 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

@ -79,7 +79,7 @@ since wiiflow lite doesn't support versions less than v3.358
we will use argsboot and version detection every time. */
void Nintendont_SetOptions(const char *gamePath, const char *gameID, const char *CheatPath, u8 lang,
u32 n_cfg, u32 n_vm, s8 vidscale, s8 vidoffset)
u32 n_cfg, u32 n_vm, s8 vidscale, s8 vidoffset, u8 netprofile)
{
memset(&NinCfg, 0, sizeof(NIN_CFG));
NinCfg.Magicbytes = 0x01070CF6;
@ -123,6 +123,8 @@ void Nintendont_SetOptions(const char *gamePath, const char *gameID, const char
NIN_cfg_version = 6;
else if(NINRev >= 424 && NINRev < 431)
NIN_cfg_version = 7;
else if(NINRev >= 431 && NINRev < 487)
NIN_cfg_version = 8;
NinCfg.Version = NIN_cfg_version;
@ -134,6 +136,9 @@ void Nintendont_SetOptions(const char *gamePath, const char *gameID, const char
NinCfg.VideoScale = vidscale;
NinCfg.VideoOffset = vidoffset;
/* bba network profile */
NinCfg.NetworkProfile = netprofile;
/* language setup */
if(lang == 0)

View File

@ -26,7 +26,7 @@
bool Nintendont_Installed();
bool Nintendont_GetLoader();
void Nintendont_SetOptions(const char *gamePath, const char *gameID, const char *CheatPath, u8 lang, u32 n_cfg,
u32 n_vm, s8 vidscale, s8 vidoffset);
u32 n_vm, s8 vidscale, s8 vidoffset, u8 netprofile);
// Devolution
#define DEVO_LOADER_PATH "%s/loader.bin"

View File

@ -2,7 +2,7 @@
#ifndef __COMMON_CONFIG_H__
#define __COMMON_CONFIG_H__
#define NIN_CFG_VERSION 0x00000008
#define NIN_CFG_VERSION 0x00000009
#define NIN_CFG_MAXPAD 4
#define MEM_CARD_MAX (5)
#define MEM_CARD_CODE(x) (1<<(x+2))
@ -13,7 +13,7 @@
typedef struct NIN_CFG
{
unsigned int Magicbytes; // 0x01070CF6
unsigned int Version; // v3 since rev135, v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since v4.424, v8 since v4.431
unsigned int Version; // v3 since rev135, v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since v4.424, v8 since v4.431, v9 since v6.487
unsigned int Config;
unsigned int VideoMode;
unsigned int Language;
@ -24,7 +24,7 @@ typedef struct NIN_CFG
unsigned char MemCardBlocks;
signed char VideoScale; // 40 to 120 or 0 for auto, is added to 600 for 640 to 720
signed char VideoOffset;// -20 to 20 or 0 for center
unsigned char Unused;
unsigned char NetworkProfile;
} NIN_CFG;
// NIN_CFG_REMLIMIT is disc read speed limt enabled by default. It keeps loading speed at GC speed.
@ -51,6 +51,7 @@ enum ninconfig
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
NIN_CFG_BBA_EMU = (1<<19), // v6.487 cfg version 9
};
enum ninvideomode

View File

@ -531,6 +531,14 @@ private:
s16 m_gameSettingsLblPosVal;
s16 m_gameSettingsBtnPosP;
s16 m_gameSettingsBtnPosM;
s16 m_gameSettingsLblBBA;
s16 m_gameSettingsBtnBBA;
s16 m_gameSettingsLblNetProf;
s16 m_gameSettingsLblNetProfVal;
s16 m_gameSettingsBtnNetProfP;
s16 m_gameSettingsBtnNetProfM;
s16 m_gameSettingsLblGCLoader;
s16 m_gameSettingsLblGCLoader_Val;

View File

@ -138,6 +138,12 @@ void CMenu::_hideGameSettingsPg(bool instant)
m_btnMgr.hide(m_gameSettingsLblPos, instant);
m_btnMgr.hide(m_gameSettingsBtnPosP, instant);
m_btnMgr.hide(m_gameSettingsBtnPosM, instant);
m_btnMgr.hide(m_gameSettingsLblBBA, instant);
m_btnMgr.hide(m_gameSettingsBtnBBA, instant);
m_btnMgr.hide(m_gameSettingsLblNetProfVal, instant);
m_btnMgr.hide(m_gameSettingsLblNetProf, instant);
m_btnMgr.hide(m_gameSettingsBtnNetProfP, instant);
m_btnMgr.hide(m_gameSettingsBtnNetProfM, instant);
// Channels only
m_btnMgr.hide(m_gameSettingsLblApploader, instant);
m_btnMgr.hide(m_gameSettingsBtnApploader, instant);
@ -206,8 +212,13 @@ void CMenu::_showGameSettings()
}
m_gameSettingsMaxPgs = 5;
if(GameHdr->type == TYPE_GC_GAME && GCLoader == DEVOLUTION)
m_gameSettingsMaxPgs = 2;
if(GameHdr->type == TYPE_GC_GAME)
{
if(GCLoader == DEVOLUTION)
m_gameSettingsMaxPgs = 2;
else
m_gameSettingsMaxPgs = 6;
}
m_btnMgr.setText(m_gameSettingsLblPage, wfmt(L"%i / %i", m_gameSettingsPage, m_gameSettingsMaxPgs));
m_btnMgr.show(m_gameSettingsLblPage);
@ -401,11 +412,22 @@ void CMenu::_showGameSettings()
{
m_btnMgr.show(m_gameSettingsLblPrivateServer);
m_btnMgr.show(m_gameSettingsBtnPrivateServer);
m_btnMgr.show(m_gameSettingsLblFix480p);
m_btnMgr.show(m_gameSettingsBtnFix480p);
}
}
}
if(m_gameSettingsPage == 6)
{
m_btnMgr.show(m_gameSettingsLblBBA);
m_btnMgr.show(m_gameSettingsBtnBBA);
m_btnMgr.show(m_gameSettingsLblNetProfVal);
m_btnMgr.show(m_gameSettingsLblNetProf);
m_btnMgr.show(m_gameSettingsBtnNetProfP);
m_btnMgr.show(m_gameSettingsBtnNetProfM);
}
m_btnMgr.setText(m_gameSettingsBtnAdultOnly, m_gcfg1.getBool("ADULTONLY", id, false) ? _t("yes", L"Yes") : _t("no", L"No"));
m_btnMgr.setText(m_gameSettingsBtnOcarina, _optBoolToString(m_gcfg2.getOptBool(id, "cheat", 0)));
@ -426,6 +448,13 @@ void CMenu::_showGameSettings()
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)));
m_btnMgr.setText(m_gameSettingsBtnPatch50, _optBoolToString(m_gcfg2.getOptBool(id, "patch_pal50", 0)));
m_btnMgr.setText(m_gameSettingsBtnBBA, _optBoolToString(m_gcfg2.getOptBool(id, "bba_emu", 0)));
u8 netprofile = m_gcfg2.getUInt(id, "net_profile", 0);
if(netprofile == 0)
m_btnMgr.setText(m_gameSettingsLblNetProfVal, _t("GC_Auto", L"Auto"));
else
m_btnMgr.setText(m_gameSettingsLblNetProfVal, wfmt(L"%i", netprofile));
if(videoScale == 0)
m_btnMgr.setText(m_gameSettingsLblWidthVal, _t("GC_Auto", L"Auto"));
@ -788,6 +817,17 @@ void CMenu::_gameSettings(const dir_discHdr *hdr, bool disc)
m_gcfg2.setBool(id, "patch_pal50", !m_gcfg2.getBool(id, "patch_pal50", 0));
_showGameSettings();
}
else if(m_btnMgr.selected(m_gameSettingsBtnBBA))
{
m_gcfg2.setBool(id, "bba_emu", !m_gcfg2.getBool(id, "bba_emu", 0));
_showGameSettings();
}
else if(m_btnMgr.selected(m_gameSettingsBtnNetProfP) || m_btnMgr.selected(m_gameSettingsBtnNetProfM))
{
s8 direction = m_btnMgr.selected(m_gameSettingsBtnNetProfP) ? 1 : -1;
m_gcfg2.setInt(id, "net_profile", loopNum(m_gcfg2.getInt(id, "net_profile") + direction, 4));
_showGameSettings();
}
else if(m_btnMgr.selected(m_gameSettingsBtnPrivateServer))
{
m_gcfg2.setBool(id, "private_server", !m_gcfg2.getBool(id, "private_server", 0));
@ -983,6 +1023,15 @@ void CMenu::_initGameSettingsMenu()
m_gameSettingsLblPatch50 = _addLabel("GAME_SETTINGS/PATCH_PAL50", theme.lblFont, L"", 20, 305, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsBtnPatch50 = _addButton("GAME_SETTINGS/PATCH_PAL50_BTN", theme.btnFont, L"", 420, 310, 200, 48, theme.btnFontColor);
//Page 6 GC only
m_gameSettingsLblBBA = _addLabel("GAME_SETTINGS/BBA", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsBtnBBA = _addButton("GAME_SETTINGS/BBA_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor);
m_gameSettingsLblNetProf = _addLabel("GAME_SETTINGS/NET_PROFILE", theme.lblFont, L"", 20, 185, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsLblNetProfVal = _addLabel("GAME_SETTINGS/NET_PROFILE_BTN", theme.btnFont, L"", 468, 190, 104, 48, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
m_gameSettingsBtnNetProfM = _addPicButton("GAME_SETTINGS/NET_PROFILE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 420, 190, 48, 48);
m_gameSettingsBtnNetProfP = _addPicButton("GAME_SETTINGS/NET_PROFILE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 572, 190, 48, 48);
//Footer
m_gameSettingsLblPage = _addLabel("GAME_SETTINGS/PAGE_BTN", theme.btnFont, L"", 68, 400, 104, 48, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
m_gameSettingsBtnPageM = _addPicButton("GAME_SETTINGS/PAGE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 20, 400, 48, 48);
@ -1092,6 +1141,14 @@ void CMenu::_initGameSettingsMenu()
_setHideAnim(m_gameSettingsBtnPosM, "GAME_SETTINGS/NIN_POS_MINUS", -50, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnPosP, "GAME_SETTINGS/NIN_POS_PLUS", -50, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblBBA, "GAME_SETTINGS/BBA", 50, 0, -2.f, 0.f);
_setHideAnim(m_gameSettingsBtnBBA, "GAME_SETTINGS/BBA_BTN", -50, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblNetProf, "GAME_SETTINGS/NET_PROFILE", 50, 0, -2.f, 0.f);
_setHideAnim(m_gameSettingsLblNetProfVal, "GAME_SETTINGS/NET_PROFILE_BTN", -50, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnNetProfM, "GAME_SETTINGS/NET_PROFILE_MINUS", -50, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnNetProfP, "GAME_SETTINGS/NET_PROFILE_PLUS", -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);
@ -1162,6 +1219,8 @@ void CMenu::_textGameSettings(void)
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_gameSettingsLblPatch50, _t("cfgg56", L"Patch PAL50"));
m_btnMgr.setText(m_gameSettingsLblBBA, _t("cfgg59", L"BBA Emulation"));
m_btnMgr.setText(m_gameSettingsLblNetProf, _t("cfgg60", L"BBA Net Profile"));
m_btnMgr.setText(m_gameSettingsLblArcade, _t("cfgg48", L"Triforce Arcade Mode"));
m_btnMgr.setText(m_gameSettingsLblEmulation, _t("cfgg24", L"NAND Emulation"));

View File

@ -338,7 +338,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
u8 GClanguage = min(m_gcfg2.getUInt(id, "language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u);
GClanguage = (GClanguage == 0) ? min(m_cfg.getUInt(GC_DOMAIN, "game_language", 0), ARRAY_SIZE(CMenu::_GlobalGClanguages) - 1u) : GClanguage-1;
// language selection only works for PAL games
// language selection only works for PAL games. E and J are always set to english.
if(id[3] == 'E' || id[3] == 'J')
GClanguage = 1; //=english
@ -362,6 +362,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
bool deflicker = m_gcfg2.getBool(id, "deflicker", false);
bool tri_arcade = m_gcfg2.getBool(id, "triforce_arcade", false);
bool ipl = m_gcfg2.getBool(id, "skip_ipl", false);
bool bba = m_gcfg2.getBool(id, "bba_emu", false);
bool patch_pal50 = m_gcfg2.getBool(id, "patch_pal50", false);
bool NIN_Debugger = (m_gcfg2.getInt(id, "debugger", 0) == 2);
bool cheats = m_gcfg2.getBool(id, "cheat", false);
@ -372,6 +373,9 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
s8 vidoffset = m_gcfg2.getInt(id, "nin_pos", 127);
if(vidoffset == 127)
vidoffset = m_cfg.getInt(GC_DOMAIN, "nin_pos", 0);
u8 netprofile = 0;
if(!IsOnWiiU())
netprofile = m_gcfg2.getUInt(id, "net_profile", 0);
/* configs no longer needed */
m_gcfg1.save(true);
@ -458,7 +462,10 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
if(ipl)
n_config |= NIN_CFG_SKIP_IPL;
if(bba)
n_config |= NIN_CFG_BBA_EMU;
/* set memcard options */
if(emuMC > 0 || IsOnWiiU() == true) //force memcardemu for wii u vwii
n_config |= NIN_CFG_MEMCARDEMU;
@ -518,7 +525,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
break;
}
Nintendont_SetOptions(path, id, CheatPath, GClanguage, n_config, n_videomode, vidscale, vidoffset);
Nintendont_SetOptions(path, id, CheatPath, GClanguage, n_config, n_videomode, vidscale, vidoffset, netprofile);
loadIOS(58, false); //nintendont NEEDS ios58 and AHBPROT disabled
/* should be a check for error loading IOS58 and AHBPROT disabled */

View File

@ -160,6 +160,8 @@ cfgg55=Video Position
cfgg56=Patch PAL50
cfgg57=Not allowed for disc!
cfgg58=Adult only
cfgg59=BBA Emulation
cfgg60=BBA Net Profile
cfgg4=Patch country strings
cfgg5=Ocarina
cfgg6=