-Savegame Emulation can now be set to Default, Partial and Full for each game in the game settings

-Temporary hiding the USB Saves Emulation option from global settings (will remove it later on)
This commit is contained in:
fix94.1 2012-01-23 21:15:14 +00:00
parent 7d07abdb16
commit a01941ff5e
4 changed files with 43 additions and 23 deletions

View File

@ -345,7 +345,9 @@ private:
u32 m_gameSettingsLblHooktypeVal; u32 m_gameSettingsLblHooktypeVal;
u32 m_gameSettingsBtnHooktypeM; u32 m_gameSettingsBtnHooktypeM;
u32 m_gameSettingsBtnHooktypeP; u32 m_gameSettingsBtnHooktypeP;
u32 m_gameSettingsBtnEmulation; u32 m_gameSettingsLblEmulationVal;
u32 m_gameSettingsBtnEmulationP;
u32 m_gameSettingsBtnEmulationM;
u32 m_gameSettingsLblEmulation; u32 m_gameSettingsLblEmulation;
u32 m_gameSettingsLblDebugger; u32 m_gameSettingsLblDebugger;
u32 m_gameSettingsLblDebuggerV; u32 m_gameSettingsLblDebuggerV;
@ -772,6 +774,7 @@ private:
static const SOption _languages[11]; static const SOption _languages[11];
static const SOption _videoModes[7]; static const SOption _videoModes[7];
static const SOption _DMLvideoModes[3]; static const SOption _DMLvideoModes[3];
static const SOption _SaveEmu[3];
static const SOption _vidModePatch[4]; static const SOption _vidModePatch[4];
static const SOption _hooktype[8]; static const SOption _hooktype[8];
static const SOption _exitTo[5]; static const SOption _exitTo[5];

View File

@ -58,7 +58,7 @@ void CMenu::_showConfig(void)
m_btnMgr.show(m_configBtnPageM); m_btnMgr.show(m_configBtnPageM);
m_btnMgr.show(m_configBtnPageP); m_btnMgr.show(m_configBtnPageP);
if(m_current_view != COVERFLOW_HOMEBREW && m_current_view != COVERFLOW_DML) if(m_current_view != COVERFLOW_HOMEBREW && m_current_view != COVERFLOW_DML && m_current_view != COVERFLOW_USB)
{ {
m_btnMgr.show(m_configBtnEmulation); m_btnMgr.show(m_configBtnEmulation);
m_btnMgr.show(m_configLblEmulation); m_btnMgr.show(m_configLblEmulation);

View File

@ -56,8 +56,10 @@ void CMenu::_hideGameSettings(bool instant)
m_btnMgr.hide(m_gameSettingsBtnHooktypeP, instant); m_btnMgr.hide(m_gameSettingsBtnHooktypeP, instant);
m_btnMgr.hide(m_gameSettingsBtnCategoryMain, instant); m_btnMgr.hide(m_gameSettingsBtnCategoryMain, instant);
m_btnMgr.hide(m_gameSettingsLblCategoryMain, instant); m_btnMgr.hide(m_gameSettingsLblCategoryMain, instant);
m_btnMgr.hide(m_gameSettingsBtnEmulation, instant); m_btnMgr.hide(m_gameSettingsLblEmulationVal, instant);
m_btnMgr.hide(m_gameSettingsLblEmulation, instant); m_btnMgr.hide(m_gameSettingsLblEmulation, instant);
m_btnMgr.hide(m_gameSettingsBtnEmulationP, instant);
m_btnMgr.hide(m_gameSettingsBtnEmulationM, instant);
m_btnMgr.hide(m_gameSettingsLblDebugger, instant); m_btnMgr.hide(m_gameSettingsLblDebugger, instant);
m_btnMgr.hide(m_gameSettingsLblDebuggerV, instant); m_btnMgr.hide(m_gameSettingsLblDebuggerV, instant);
m_btnMgr.hide(m_gameSettingsBtnDebuggerP, instant); m_btnMgr.hide(m_gameSettingsBtnDebuggerP, instant);
@ -191,10 +193,12 @@ void CMenu::_showGameSettings(void)
m_btnMgr.show(m_gameSettingsLblCountryPatch); m_btnMgr.show(m_gameSettingsLblCountryPatch);
m_btnMgr.show(m_gameSettingsBtnCountryPatch); m_btnMgr.show(m_gameSettingsBtnCountryPatch);
if(!m_cfg.getBool("NAND", "disable", true) && m_current_view == COVERFLOW_USB) if(m_current_view == COVERFLOW_USB)
{ {
m_btnMgr.show(m_gameSettingsBtnEmulation); m_btnMgr.show(m_gameSettingsLblEmulationVal);
m_btnMgr.show(m_gameSettingsLblEmulation); m_btnMgr.show(m_gameSettingsLblEmulation);
m_btnMgr.show(m_gameSettingsBtnEmulationP);
m_btnMgr.show(m_gameSettingsBtnEmulationM);
} }
} }
else else
@ -211,8 +215,10 @@ void CMenu::_showGameSettings(void)
m_btnMgr.hide(m_gameSettingsBtnCountryPatch); m_btnMgr.hide(m_gameSettingsBtnCountryPatch);
m_btnMgr.hide(m_gameSettingsBtnEmulation); m_btnMgr.hide(m_gameSettingsLblEmulationVal);
m_btnMgr.hide(m_gameSettingsLblEmulation); m_btnMgr.hide(m_gameSettingsLblEmulation);
m_btnMgr.hide(m_gameSettingsBtnEmulationP);
m_btnMgr.hide(m_gameSettingsBtnEmulationM);
} }
if (m_gameSettingsPage == 4) if (m_gameSettingsPage == 4)
{ {
@ -353,7 +359,9 @@ void CMenu::_showGameSettings(void)
for (int i=0; i<12; ++i) for (int i=0; i<12; ++i)
m_btnMgr.setText(m_gameSettingsBtnCategory[i], _optBoolToString(m_gameSettingCategories[i] == '1')); m_btnMgr.setText(m_gameSettingsBtnCategory[i], _optBoolToString(m_gameSettingCategories[i] == '1'));
m_btnMgr.setText(m_gameSettingsBtnEmulation, _optBoolToString(m_gcfg2.getBool(id, "emulate_save"))); i = min((u32)m_gcfg2.getInt(id, "emulate_save", 0), ARRAY_SIZE(CMenu::_SaveEmu) - 1u);
m_btnMgr.setText(m_gameSettingsLblEmulationVal, _t(CMenu::_SaveEmu[i].id, CMenu::_SaveEmu[i].text));
m_btnMgr.setText(m_gameSettingsLblDebuggerV, m_gcfg2.getBool(id, "debugger", false) ? _t("gecko", L"Gecko") : _t("def", L"Default")); m_btnMgr.setText(m_gameSettingsLblDebuggerV, m_gcfg2.getBool(id, "debugger", false) ? _t("gecko", L"Gecko") : _t("def", L"Default"));
} }
@ -497,14 +505,10 @@ void CMenu::_gameSettings(void)
m_gcfg2.setInt(id, "hooktype", (int)loopNum((u32)m_gcfg2.getInt(id, "hooktype", 1) + direction, ARRAY_SIZE(CMenu::_hooktype))); m_gcfg2.setInt(id, "hooktype", (int)loopNum((u32)m_gcfg2.getInt(id, "hooktype", 1) + direction, ARRAY_SIZE(CMenu::_hooktype)));
_showGameSettings(); _showGameSettings();
} }
else if (m_btnMgr.selected(m_gameSettingsBtnEmulation)) else if (m_btnMgr.selected(m_gameSettingsBtnEmulationP) || m_btnMgr.selected(m_gameSettingsBtnEmulationM))
{ {
_hideGameSettings(); s8 direction = m_btnMgr.selected(m_gameSettingsBtnEmulationP) ? 1 : -1;
int intoption = loopNum(m_gcfg2.getOptBool(id, "emulate_save") + 1, 3); m_gcfg2.setInt(id, "emulate_save", (int)loopNum((u32)m_gcfg2.getInt(id, "emulate_save", 0) + direction, ARRAY_SIZE(CMenu::_SaveEmu)));
if (intoption > 1)
m_gcfg2.remove(id, "emulate_save");
else
m_gcfg2.setOptBool(id, "emulate_save", intoption);
_showGameSettings(); _showGameSettings();
} }
else if (m_btnMgr.selected(m_gameSettingsBtnDebuggerP) || m_btnMgr.selected(m_gameSettingsBtnDebuggerM)) else if (m_btnMgr.selected(m_gameSettingsBtnDebuggerP) || m_btnMgr.selected(m_gameSettingsBtnDebuggerM))
@ -600,8 +604,11 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
m_gameSettingsLblPatchVidModesVal = _addLabel(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_BTN", theme.btnFont, L"", 386, 250, 158, 56, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC); m_gameSettingsLblPatchVidModesVal = _addLabel(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_BTN", theme.btnFont, L"", 386, 250, 158, 56, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
m_gameSettingsBtnPatchVidModesM = _addPicButton(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 250, 56, 56); m_gameSettingsBtnPatchVidModesM = _addPicButton(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 250, 56, 56);
m_gameSettingsBtnPatchVidModesP = _addPicButton(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 250, 56, 56); m_gameSettingsBtnPatchVidModesP = _addPicButton(theme, "GAME_SETTINGS/PATCH_VIDEO_MODE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 250, 56, 56);
m_gameSettingsLblEmulation = _addLabel(theme, "GAME_SETTINGS/EMU_SAVE", theme.lblFont, L"", 40, 310, 270, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsBtnEmulation = _addButton(theme, "GAME_SETTINGS/EMU_SAVE_BTN", theme.btnFont, L"", 330, 310, 270, 56, theme.btnFontColor); m_gameSettingsLblEmulation = _addLabel(theme, "GAME_SETTINGS/EMU_SAVE", theme.lblFont, L"", 40, 310, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsLblEmulationVal = _addLabel(theme, "GAME_SETTINGS/EMU_SAVE_BTN", theme.btnFont, L"", 386, 310, 158, 56, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
m_gameSettingsBtnEmulationM = _addPicButton(theme, "GAME_SETTINGS/EMU_SAVE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 310, 56, 56);
m_gameSettingsBtnEmulationP = _addPicButton(theme, "GAME_SETTINGS/EMU_SAVE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 310, 56, 56);
//Page 4 //Page 4
m_gameSettingsLblGameIOS = _addLabel(theme, "GAME_SETTINGS/IOS", theme.lblFont, L"", 40, 130, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_gameSettingsLblGameIOS = _addLabel(theme, "GAME_SETTINGS/IOS", theme.lblFont, L"", 40, 130, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
@ -686,7 +693,9 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
_setHideAnim(m_gameSettingsBtnHooktypeM, "GAME_SETTINGS/HOOKTYPE_MINUS", 200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsBtnHooktypeM, "GAME_SETTINGS/HOOKTYPE_MINUS", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnHooktypeP, "GAME_SETTINGS/HOOKTYPE_PLUS", 200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsBtnHooktypeP, "GAME_SETTINGS/HOOKTYPE_PLUS", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblEmulation, "GAME_SETTINGS/EMU_SAVE", -200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblEmulation, "GAME_SETTINGS/EMU_SAVE", -200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnEmulation, "GAME_SETTINGS/EMU_SAVE_BTN", 200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblEmulationVal, "GAME_SETTINGS/EMU_SAVE_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnEmulationP, "GAME_SETTINGS/EMU_SAVE_PLUS", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnEmulationM, "GAME_SETTINGS/EMU_SAVE_MINUS", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblDebugger, "GAME_SETTINGS/GAME_DEBUGGER", -200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblDebugger, "GAME_SETTINGS/GAME_DEBUGGER", -200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblDebuggerV, "GAME_SETTINGS/GAME_DEBUGGER_BTN", 200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsLblDebuggerV, "GAME_SETTINGS/GAME_DEBUGGER_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnDebuggerM, "GAME_SETTINGS/GAME_DEBUGGER_MINUS", 200, 0, 1.f, 0.f); _setHideAnim(m_gameSettingsBtnDebuggerM, "GAME_SETTINGS/GAME_DEBUGGER_MINUS", 200, 0, 1.f, 0.f);

View File

@ -105,6 +105,12 @@ const CMenu::SOption CMenu::_DMLvideoModes[3] = {
{ "2", L"NTSC 480i" }, { "2", L"NTSC 480i" },
}; };
const CMenu::SOption CMenu::_SaveEmu[3] = {
{ "0", L"Default" },
{ "1", L"Partial" },
{ "2", L"Full" },
};
const CMenu::SOption CMenu::_vidModePatch[4] = { const CMenu::SOption CMenu::_vidModePatch[4] = {
{ "vmpnone", L"None" }, { "vmpnone", L"None" },
{ "vmpnormal", L"Normal" }, { "vmpnormal", L"Normal" },
@ -861,13 +867,12 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
string emuPath = m_cfg.getString("GAMES", "savepath", m_cfg.getString("NAND", "path", "")); string emuPath = m_cfg.getString("GAMES", "savepath", m_cfg.getString("NAND", "path", ""));
bool emulate_save = emuPartition != 255 && m_gcfg2.testOptBool(id, "emulate_save", m_cfg.getBool("GAMES", "save_emulation", false)); u8 emuSave = min((u32)m_gcfg2.getInt(id, "emulate_save", 0), ARRAY_SIZE(CMenu::_SaveEmu) - 1u);
bool emulate_mode = m_gcfg2.testOptBool(id, "full_emulation", m_cfg.getBool("GAMES", "full_emulation", false));
if (!dvd && get_frag_list((u8 *) hdr->hdr.id, (char *) hdr->path, currentPartition == 0 ? 0x200 : sector_size) < 0) if (!dvd && get_frag_list((u8 *) hdr->hdr.id, (char *) hdr->path, currentPartition == 0 ? 0x200 : sector_size) < 0)
return; return;
if(!dvd && emulate_save) if(!dvd && emuSave)
{ {
char basepath[64]; char basepath[64];
snprintf(basepath, 64, "%s:%s", DeviceName[emuPartition], emuPath.c_str()); snprintf(basepath, 64, "%s:%s", DeviceName[emuPartition], emuPath.c_str());
@ -978,7 +983,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
} }
} }
if(emulate_save) if(emuSave)
{ {
if(iosLoaded) ISFS_Deinitialize(); if(iosLoaded) ISFS_Deinitialize();
ISFS_Initialize(); ISFS_Initialize();
@ -986,7 +991,10 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false); Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
DeviceHandler::Instance()->UnMount(emuPartition); DeviceHandler::Instance()->UnMount(emuPartition);
Nand::Instance()->Set_FullMode(emulate_mode); if (emuSave == 2)
Nand::Instance()->Set_FullMode(true);
else
Nand::Instance()->Set_FullMode(false);
if(Nand::Instance()->Enable_Emu() < 0) if(Nand::Instance()->Enable_Emu() < 0)
{ {