Add Nintendont BBA emulation and net profile options

This commit is contained in:
wiidev 2019-11-11 20:00:00 +00:00
parent a78a615b55
commit 7d01cc0359
32 changed files with 247 additions and 4 deletions

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "Fouten overslaan"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "Omettre les erreurs"
msgid "Skip IPL"
msgstr "Omettre le BIOS"
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Patch vidéo Sneek"

View File

@ -1950,6 +1950,12 @@ msgstr "Fehler überspringen"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Sneek Video Patch"

View File

@ -1949,6 +1949,12 @@ msgstr "Áãíüçóç óöáëìÜôùí"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Patch åéêüíáò ãéá sneek"

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "Salta errori"
msgid "Skip IPL"
msgstr "Salta IPL"
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Patch video sneek"

View File

@ -1950,6 +1950,12 @@ msgstr "エラーをスキップ"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "SNEEK映像パッチ"

View File

@ -1947,6 +1947,12 @@ msgstr "오류 건너뛰기"
msgid "Skip IPL"
msgstr "IPL 건너뛰기"
msgid "BBA Emulation"
msgstr "BBA 에뮬레이션"
msgid "BBA Net Profile"
msgstr "BBA 넷 프로파일"
msgid "Sneek Video Patch"
msgstr "Sneek 비디오 경로"

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "Pular Erros"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Patch Vídeo Sneek"

View File

@ -1950,6 +1950,12 @@ msgstr "Saltar Erros"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Patch Vídeo Sneek"

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "跳过错误"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Sneek 视频补丁"

View File

@ -1950,6 +1950,12 @@ msgstr "Saltar errores"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Parche vídeo Sneek"

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr "略過錯誤"
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr "Sneek視訊修正"

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -1950,6 +1950,12 @@ msgstr ""
msgid "Skip IPL"
msgstr ""
msgid "BBA Emulation"
msgstr ""
msgid "BBA Net Profile"
msgstr ""
msgid "Sneek Video Patch"
msgstr ""

View File

@ -20,12 +20,12 @@
#include <gctypes.h>
#define NIN_MAGIC 0x01070CF6
#define NIN_CFG_VERSION 0x00000008
#define NIN_CFG_VERSION 0x00000009
typedef struct NIN_CFG
{
u32 Magicbytes; // 0x01070CF6
u32 Version; // v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since 4.424, v8 since 4.431
u32 Version; // v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since v4.424, v8 since v4.431, v9 since v6.487
u32 Config;
u32 VideoMode;
u32 Language;
@ -41,7 +41,7 @@ typedef struct NIN_CFG
char MemCardBlocksV4;// replaced in v3.354 - cfg version 4 - from u32 in v3 to Char in v4
char VideoScale; // added in v3.354 - cfg version 4
char VideoOffset; // added in v3.354 - cfg version 4
char Unused; // added in v3.354 - cfg version 4
char NetworkProfile; // added in v6.487 - cfg version 9
};
};
} NIN_CFG;
@ -68,6 +68,7 @@ enum ninconfig
NIN_CFG_ARCADE_MODE = (1<<16), // v4.424
NIN_CFG_CC_RUMBLE = (1 << 17),// v4.431 cfg version 8
NIN_CFG_SKIP_IPL = (1 << 18),// v4.435
NIN_CFG_BBA_EMU = (1 << 19),// v6.487 cfg version 9
};
enum ninvideomode

View File

@ -226,6 +226,8 @@ bool CGameSettings::Save()
fprintf(f, "NINArcadeMode:%d; ", GameList[i].NINArcadeMode);
fprintf(f, "NINCCRumble:%d; ", GameList[i].NINCCRumble);
fprintf(f, "NINSkipIPL:%d; ", GameList[i].NINSkipIPL);
fprintf(f, "NINBBA:%d; ", GameList[i].NINBBA);
fprintf(f, "NINBBAProfile:%d; ", GameList[i].NINBBAProfile);
fprintf(f, "NINMCEmulation:%d; ", GameList[i].NINMCEmulation);
fprintf(f, "NINMCSize:%d; ", GameList[i].NINMCSize);
fprintf(f, "NINUSBHID:%d; ", GameList[i].NINUSBHID);
@ -459,6 +461,16 @@ bool CGameSettings::SetSetting(GameCFG & game, const char *name, const char *val
game.NINSkipIPL = atoi(value);
return true;
}
else if (strcmp(name, "NINBBA") == 0)
{
game.NINBBA = atoi(value);
return true;
}
else if (strcmp(name, "NINBBAProfile") == 0)
{
game.NINBBAProfile = atoi(value);
return true;
}
else if(strcmp(name, "NINMCEmulation") == 0)
{
game.NINMCEmulation = atoi(value);
@ -690,6 +702,8 @@ void CGameSettings::SetDefault(GameCFG &game)
game.NINArcadeMode = INHERIT;
game.NINCCRumble = INHERIT;
game.NINSkipIPL = INHERIT;
game.NINBBA = INHERIT;
game.NINBBAProfile = INHERIT;
game.NINMCEmulation = INHERIT;
game.NINMCSize = INHERIT;
game.NINUSBHID = INHERIT;

View File

@ -50,6 +50,8 @@ typedef struct _GameCFG
short NINArcadeMode;
short NINCCRumble;
short NINSkipIPL;
short NINBBA;
short NINBBAProfile;
short NINMCEmulation;
short NINMCSize;
short NINUSBHID;
@ -113,6 +115,8 @@ typedef struct _GameCFG
this->NINArcadeMode = game.NINArcadeMode;
this->NINCCRumble = game.NINCCRumble;
this->NINSkipIPL = game.NINSkipIPL;
this->NINBBA = game.NINBBA;
this->NINBBAProfile = game.NINBBAProfile;
this->NINMCEmulation = game.NINMCEmulation;
this->NINMCSize = game.NINMCSize;
this->NINUSBHID = game.NINUSBHID;

View File

@ -194,6 +194,8 @@ void CSettings::SetDefault()
NINArcadeMode = OFF;
NINCCRumble = OFF;
NINSkipIPL = OFF;
NINBBA = OFF;
NINBBAProfile = 0;
NINMCEmulation = ON;
NINMCSize = 2;
NINAutoboot = ON;
@ -454,6 +456,8 @@ bool CSettings::Save()
fprintf(file, "NINArcadeMode = %d\n", NINArcadeMode);
fprintf(file, "NINCCRumble = %d\n", NINCCRumble);
fprintf(file, "NINSkipIPL = %d\n", NINSkipIPL);
fprintf(file, "NINBBA = %d\n", NINBBA);
fprintf(file, "NINBBAProfile = %d\n", NINBBAProfile);
fprintf(file, "NINMCEmulation = %d\n", NINMCEmulation);
fprintf(file, "NINMCSize = %d\n", NINMCSize);
fprintf(file, "NINAutoboot = %d\n", NINAutoboot);
@ -993,6 +997,16 @@ bool CSettings::SetSetting(char *name, char *value)
NINSkipIPL = atoi(value);
return true;
}
else if (strcmp(name, "NINBBA") == 0)
{
NINBBA = atoi(value);
return true;
}
else if (strcmp(name, "NINBBAProfile") == 0)
{
NINBBAProfile = atoi(value);
return true;
}
else if (strcmp(name, "NINMCEmulation") == 0)
{
NINMCEmulation = atoi(value);

View File

@ -198,6 +198,8 @@ class CSettings
short NINArcadeMode;
short NINCCRumble;
short NINSkipIPL;
short NINBBA;
short NINBBAProfile;
s8 NINMCEmulation;
short NINMCSize;
short NINAutoboot;

View File

@ -340,6 +340,16 @@ enum
};
enum
{
NIN_BBA_AUTO,
NIN_BBA_1,
NIN_BBA_2,
NIN_BBA_3,
NIN_BBA_MAX_CHOICE
};
enum
{
DML_VIDEO_AUTO,

View File

@ -202,6 +202,8 @@ void GCGameLoadSM::SetOptionNames()
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
Options->SetName(Idx++, "%s", tr("CC Rumble"));
Options->SetName(Idx++, "%s", tr("Skip IPL"));
Options->SetName(Idx++, "%s", tr( "BBA Emulation" ));
Options->SetName(Idx++, "%s", tr( "BBA Net Profile" ));
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
@ -423,6 +425,20 @@ void GCGameLoadSM::SetOptionValues()
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINSkipIPL]));
//! Settings: NIN BBA Emulation
if (GameConfig.NINBBA == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINBBA]));
//! Settings: NIN BBA Net Profile
if(GameConfig.NINBBAProfile == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
else if(GameConfig.NINBBAProfile == 0)
Options->SetValue(Idx++, tr("Auto"));
else
Options->SetValue(Idx++, "%i", GameConfig.NINBBAProfile);
//! Settings: NIN Memory Card Emulation
if(GameConfig.NINMCEmulation == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
@ -783,6 +799,18 @@ int GCGameLoadSM::GetMenuInternal()
if (++GameConfig.NINSkipIPL >= MAX_ON_OFF) GameConfig.NINSkipIPL = INHERIT;
}
//! Settings: NIN BBA Emulation
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
{
if (++GameConfig.NINBBA >= MAX_ON_OFF) GameConfig.NINBBA = INHERIT;
}
//! Settings: NIN BBA Net Profile
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
{
if (++GameConfig.NINBBAProfile >= NIN_BBA_MAX_CHOICE) GameConfig.NINBBAProfile = INHERIT;
}
//! Settings: NIN Memory Card Emulation
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
{

View File

@ -280,6 +280,8 @@ void LoaderSettings::SetOptionNames()
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
Options->SetName(Idx++, "%s", tr("CC Rumble"));
Options->SetName(Idx++, "%s", tr("Skip IPL"));
Options->SetName(Idx++, "%s", tr( "BBA Emulation" ));
Options->SetName(Idx++, "%s", tr( "BBA Net Profile" ));
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
@ -452,7 +454,6 @@ void LoaderSettings::SetOptionValues()
{
Options->SetValue(Idx++, "%s", tr("Manual (40~120)"));
Options->SetValue(Idx++, "%d", Settings.NINVideoScale);
}
//! Settings: NIN VideoOffset
@ -470,6 +471,15 @@ void LoaderSettings::SetOptionValues()
//! Settings: NIN Skip IPL
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINSkipIPL]));
//! Settings: NIN BBA Emulation
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINBBA]));
//! Settings: NIN BBA Net Profile
if(Settings.NINBBAProfile == 0)
Options->SetValue(Idx++, "%s", tr("Auto"));
else
Options->SetValue(Idx++, "%i", Settings.NINBBAProfile);
//! Settings: NIN Memory Card Emulation
Options->SetValue(Idx++, "%s", tr(NINMCText[Settings.NINMCEmulation]));
@ -889,6 +899,18 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.NINSkipIPL >= MAX_ON_OFF) Settings.NINSkipIPL = 0;
}
//! Settings: NIN BBA Emulation
else if (ret == ++Idx)
{
if (++Settings.NINBBA >= MAX_ON_OFF) Settings.NINBBA = 0;
}
//! Settings: NIN BBA Net Profile
else if (ret == ++Idx)
{
if (++Settings.NINBBAProfile >= NIN_BBA_MAX_CHOICE) Settings.NINBBAProfile = 0;
}
//! Settings: NIN Memory Card Emulation
else if (ret == ++Idx)
{

View File

@ -1023,6 +1023,8 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr)
u8 ninArcadeModeChoice = game_cfg->NINArcadeMode == INHERIT ? Settings.NINArcadeMode : game_cfg->NINArcadeMode;
u8 ninCCRumbleChoice = game_cfg->NINCCRumble == INHERIT ? Settings.NINCCRumble : game_cfg->NINCCRumble;
u8 ninSkipIPLChoice = game_cfg->NINSkipIPL == INHERIT ? Settings.NINSkipIPL : game_cfg->NINSkipIPL;
u8 ninBBAChoice = game_cfg->NINBBA == INHERIT ? Settings.NINBBA : game_cfg->NINBBA;
u8 ninBBAProfileChoice = game_cfg->NINBBAProfile == INHERIT ? Settings.NINBBAProfile : game_cfg->NINBBAProfile;
const char *ninLoaderPath = game_cfg->NINLoaderPath.size() == 0 ? Settings.NINLoaderPath : game_cfg->NINLoaderPath.c_str();
@ -1499,6 +1501,14 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr)
if(NIN_cfg_version >= 5 && ninRemlimitChoice)
nin_config->Config |= NIN_CFG_REMLIMIT;
// BBA emulation
if (NIN_cfg_version >= 9 && ninBBAChoice)
nin_config->Config |= NIN_CFG_BBA_EMU; // v6.487+
// BBA network profile
if(NIN_cfg_version >= 9 && ninBBAChoice && !isWiiU())
nin_config->NetworkProfile = ninBBAProfileChoice; // v6.487+
// Setup Video Mode
if(ninVideoChoice == DML_VIDEO_NONE) // No video mode changes
{