mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-23 19:59:16 +01:00
-added devolution memory card emulator as game option (disabled
by default)
This commit is contained in:
parent
cd156d17b7
commit
5a5fab8579
Binary file not shown.
Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 78 B |
@ -144,7 +144,7 @@ bool DEVO_Installed(const char* path)
|
|||||||
return devo;
|
return devo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DEVO_SetOptions(const char *path, const char *partition, const char* loader)
|
void DEVO_SetOptions(const char *path, const char *partition, const char* loader, bool memcard_emu)
|
||||||
{
|
{
|
||||||
//Read in loader.bin
|
//Read in loader.bin
|
||||||
char loader_path[256];
|
char loader_path[256];
|
||||||
@ -184,34 +184,39 @@ void DEVO_SetOptions(const char *path, const char *partition, const char* loader
|
|||||||
snprintf(full_path, sizeof(full_path), "%s:/apps/gc_devo", partition);
|
snprintf(full_path, sizeof(full_path), "%s:/apps/gc_devo", partition);
|
||||||
fsop_MakeFolder(full_path);
|
fsop_MakeFolder(full_path);
|
||||||
|
|
||||||
// find or create a 16MB memcard file for emulation
|
if(memcard_emu)
|
||||||
// this file can be located anywhere since it's passed by cluster, not name
|
|
||||||
// it must be at least 16MB though
|
|
||||||
snprintf(full_path, sizeof(full_path), "%s:/apps/gc_devo/memcard.bin", partition);
|
|
||||||
|
|
||||||
// check if file doesn't exist or is less than 16MB
|
|
||||||
if(stat(full_path, &st) == -1 || st.st_size < 16<<20)
|
|
||||||
{
|
{
|
||||||
// need to enlarge or create it
|
// find or create a 16MB memcard file for emulation
|
||||||
data_fd = open(full_path, O_WRONLY|O_CREAT);
|
// this file can be located anywhere since it's passed by cluster, not name
|
||||||
if (data_fd>=0)
|
// it must be at least 16MB though
|
||||||
|
snprintf(full_path, sizeof(full_path), "%s:/apps/gc_devo/memcard.bin", partition);
|
||||||
|
|
||||||
|
// check if file doesn't exist or is less than 16MB
|
||||||
|
if(stat(full_path, &st) == -1 || st.st_size < 16<<20)
|
||||||
{
|
{
|
||||||
// make it 16MB
|
// need to enlarge or create it
|
||||||
printf("Resizing memcard file...\n");
|
data_fd = open(full_path, O_WRONLY|O_CREAT);
|
||||||
ftruncate(data_fd, 16<<20);
|
if(data_fd >= 0)
|
||||||
if (fstat(data_fd, &st)==-1 || st.st_size < 16<<20)
|
|
||||||
{
|
{
|
||||||
// it still isn't big enough. Give up.
|
// make it 16MB
|
||||||
|
gprintf("Resizing memcard file...\n");
|
||||||
|
ftruncate(data_fd, 16<<20);
|
||||||
|
if(fstat(data_fd, &st) == -1 || st.st_size < 16<<20)
|
||||||
|
{
|
||||||
|
// it still isn't big enough. Give up.
|
||||||
|
st.st_ino = 0;
|
||||||
|
}
|
||||||
|
close(data_fd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// couldn't open or create the memory card file
|
||||||
st.st_ino = 0;
|
st.st_ino = 0;
|
||||||
}
|
}
|
||||||
close(data_fd);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// couldn't open or create the memory card file
|
|
||||||
st.st_ino = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
st.st_ino = 0;
|
||||||
|
|
||||||
// set FAT cluster for start of memory card file
|
// set FAT cluster for start of memory card file
|
||||||
// if this is zero memory card emulation will not be used
|
// if this is zero memory card emulation will not be used
|
||||||
|
@ -64,7 +64,7 @@ typedef struct global_config
|
|||||||
} gconfig;
|
} gconfig;
|
||||||
|
|
||||||
bool DEVO_Installed(const char* path);
|
bool DEVO_Installed(const char* path);
|
||||||
void DEVO_SetOptions(const char* path, const char *partition, const char *loader);
|
void DEVO_SetOptions(const char* path, const char *partition, const char *loader, bool memcard_emu);
|
||||||
void DEVO_Boot();
|
void DEVO_Boot();
|
||||||
|
|
||||||
|
|
||||||
|
@ -463,6 +463,9 @@ private:
|
|||||||
u16 m_gameSettingsBtnNoDVD_P;
|
u16 m_gameSettingsBtnNoDVD_P;
|
||||||
u16 m_gameSettingsBtnNoDVD_M;
|
u16 m_gameSettingsBtnNoDVD_M;
|
||||||
|
|
||||||
|
u16 m_gameSettingsLblDevoMemcardEmu;
|
||||||
|
u16 m_gameSettingsBtnDevoMemcardEmu;
|
||||||
|
|
||||||
u16 m_gameSettingsLblCustom;
|
u16 m_gameSettingsLblCustom;
|
||||||
u16 m_gameSettingsBtnCustom;
|
u16 m_gameSettingsBtnCustom;
|
||||||
|
|
||||||
|
@ -50,6 +50,8 @@ void CMenu::_hideGameSettings(bool instant)
|
|||||||
m_btnMgr.hide(m_gameSettingsLblNoDVD_Val, instant);
|
m_btnMgr.hide(m_gameSettingsLblNoDVD_Val, instant);
|
||||||
m_btnMgr.hide(m_gameSettingsBtnNoDVD_P, instant);
|
m_btnMgr.hide(m_gameSettingsBtnNoDVD_P, instant);
|
||||||
m_btnMgr.hide(m_gameSettingsBtnNoDVD_M, instant);
|
m_btnMgr.hide(m_gameSettingsBtnNoDVD_M, instant);
|
||||||
|
m_btnMgr.hide(m_gameSettingsLblDevoMemcardEmu, instant);
|
||||||
|
m_btnMgr.hide(m_gameSettingsBtnDevoMemcardEmu, instant);
|
||||||
m_btnMgr.hide(m_gameSettingsLblCustom, instant);
|
m_btnMgr.hide(m_gameSettingsLblCustom, instant);
|
||||||
m_btnMgr.hide(m_gameSettingsBtnCustom, instant);
|
m_btnMgr.hide(m_gameSettingsBtnCustom, instant);
|
||||||
m_btnMgr.hide(m_gameSettingsLblOcarina, instant);
|
m_btnMgr.hide(m_gameSettingsLblOcarina, instant);
|
||||||
@ -274,6 +276,9 @@ void CMenu::_showGameSettings(void)
|
|||||||
m_btnMgr.show(m_gameSettingsLblNoDVD_Val);
|
m_btnMgr.show(m_gameSettingsLblNoDVD_Val);
|
||||||
m_btnMgr.show(m_gameSettingsBtnNoDVD_P);
|
m_btnMgr.show(m_gameSettingsBtnNoDVD_P);
|
||||||
m_btnMgr.show(m_gameSettingsBtnNoDVD_M);
|
m_btnMgr.show(m_gameSettingsBtnNoDVD_M);
|
||||||
|
|
||||||
|
m_btnMgr.show(m_gameSettingsLblDevoMemcardEmu);
|
||||||
|
m_btnMgr.show(m_gameSettingsBtnDevoMemcardEmu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -307,6 +312,9 @@ void CMenu::_showGameSettings(void)
|
|||||||
m_btnMgr.hide(m_gameSettingsLblNoDVD_Val);
|
m_btnMgr.hide(m_gameSettingsLblNoDVD_Val);
|
||||||
m_btnMgr.hide(m_gameSettingsBtnNoDVD_P);
|
m_btnMgr.hide(m_gameSettingsBtnNoDVD_P);
|
||||||
m_btnMgr.hide(m_gameSettingsBtnNoDVD_M);
|
m_btnMgr.hide(m_gameSettingsBtnNoDVD_M);
|
||||||
|
|
||||||
|
m_btnMgr.hide(m_gameSettingsLblDevoMemcardEmu);
|
||||||
|
m_btnMgr.hide(m_gameSettingsBtnDevoMemcardEmu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_gameSettingsPage == 4)
|
if (m_gameSettingsPage == 4)
|
||||||
@ -375,6 +383,7 @@ void CMenu::_showGameSettings(void)
|
|||||||
m_btnMgr.setText(m_gameSettingsBtnOcarina, _optBoolToString(m_gcfg2.getOptBool(id, "cheat")));
|
m_btnMgr.setText(m_gameSettingsBtnOcarina, _optBoolToString(m_gcfg2.getOptBool(id, "cheat")));
|
||||||
if(m_cf.getHdr()->type == TYPE_GC_GAME)
|
if(m_cf.getHdr()->type == TYPE_GC_GAME)
|
||||||
{
|
{
|
||||||
|
m_btnMgr.setText(m_gameSettingsBtnDevoMemcardEmu, _optBoolToString(m_gcfg2.getOptBool(id, "devo_memcard_emu", 0)));
|
||||||
i = min((u32)m_gcfg2.getInt(id, "dml_video_mode", 0), ARRAY_SIZE(CMenu::_DMLvideoModes) - 1u);
|
i = min((u32)m_gcfg2.getInt(id, "dml_video_mode", 0), ARRAY_SIZE(CMenu::_DMLvideoModes) - 1u);
|
||||||
m_btnMgr.setText(m_gameSettingsLblDMLVideo, _t(CMenu::_DMLvideoModes[i].id, CMenu::_DMLvideoModes[i].text));
|
m_btnMgr.setText(m_gameSettingsLblDMLVideo, _t(CMenu::_DMLvideoModes[i].id, CMenu::_DMLvideoModes[i].text));
|
||||||
i = min((u32)m_gcfg2.getInt(id, "gc_language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u);
|
i = min((u32)m_gcfg2.getInt(id, "gc_language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u);
|
||||||
@ -508,6 +517,15 @@ void CMenu::_gameSettings(void)
|
|||||||
m_gcfg2.setBool(id, "custom", true);
|
m_gcfg2.setBool(id, "custom", true);
|
||||||
_showGameSettings();
|
_showGameSettings();
|
||||||
}
|
}
|
||||||
|
else if(m_btnMgr.selected(m_gameSettingsBtnDevoMemcardEmu))
|
||||||
|
{
|
||||||
|
bool booloption = m_gcfg2.getBool(id, "devo_memcard_emu");
|
||||||
|
if(booloption != false)
|
||||||
|
m_gcfg2.remove(id, "devo_memcard_emu");
|
||||||
|
else
|
||||||
|
m_gcfg2.setBool(id, "devo_memcard_emu", true);
|
||||||
|
_showGameSettings();
|
||||||
|
}
|
||||||
else if (m_btnMgr.selected(m_gameSettingsBtnLanguageP) || m_btnMgr.selected(m_gameSettingsBtnLanguageM))
|
else if (m_btnMgr.selected(m_gameSettingsBtnLanguageP) || m_btnMgr.selected(m_gameSettingsBtnLanguageM))
|
||||||
{
|
{
|
||||||
s8 direction = m_btnMgr.selected(m_gameSettingsBtnLanguageP) ? 1 : -1;
|
s8 direction = m_btnMgr.selected(m_gameSettingsBtnLanguageP) ? 1 : -1;
|
||||||
@ -733,6 +751,9 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
|||||||
m_gameSettingsBtnNoDVD_M = _addPicButton(theme, "GAME_SETTINGS/NO_DVD_PATCH_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 190, 56, 56);
|
m_gameSettingsBtnNoDVD_M = _addPicButton(theme, "GAME_SETTINGS/NO_DVD_PATCH_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 190, 56, 56);
|
||||||
m_gameSettingsBtnNoDVD_P = _addPicButton(theme, "GAME_SETTINGS/NO_DVD_PATCH_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 190, 56, 56);
|
m_gameSettingsBtnNoDVD_P = _addPicButton(theme, "GAME_SETTINGS/NO_DVD_PATCH_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 190, 56, 56);
|
||||||
|
|
||||||
|
m_gameSettingsLblDevoMemcardEmu = _addLabel(theme, "GAME_SETTINGS/DEVO_MEMCARD_EMU", theme.lblFont, L"", 40, 250, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||||
|
m_gameSettingsBtnDevoMemcardEmu = _addButton(theme, "GAME_SETTINGS/DEVO_MEMCARD_EMU_BTN", theme.btnFont, L"", 330, 250, 270, 56, theme.btnFontColor);
|
||||||
|
|
||||||
//Page 4
|
//Page 4
|
||||||
m_gameSettingsLblCustom = _addLabel(theme, "GAME_SETTINGS/CUSTOM", theme.lblFont, L"", 40, 130, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
m_gameSettingsLblCustom = _addLabel(theme, "GAME_SETTINGS/CUSTOM", theme.lblFont, L"", 40, 130, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||||
m_gameSettingsBtnCustom = _addButton(theme, "GAME_SETTINGS/CUSTOM_BTN", theme.btnFont, L"", 330, 130, 240, 56, theme.btnFontColor);
|
m_gameSettingsBtnCustom = _addButton(theme, "GAME_SETTINGS/CUSTOM_BTN", theme.btnFont, L"", 330, 130, 240, 56, theme.btnFontColor);
|
||||||
@ -813,6 +834,8 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
|||||||
_setHideAnim(m_gameSettingsLblNoDVD_Val, "GAME_SETTINGS/NO_DVD_PATCH_BTN", 200, 0, 1.f, 0.f);
|
_setHideAnim(m_gameSettingsLblNoDVD_Val, "GAME_SETTINGS/NO_DVD_PATCH_BTN", 200, 0, 1.f, 0.f);
|
||||||
_setHideAnim(m_gameSettingsBtnNoDVD_P, "GAME_SETTINGS/NO_DVD_PATCH_PLUS", 200, 0, 1.f, 0.f);
|
_setHideAnim(m_gameSettingsBtnNoDVD_P, "GAME_SETTINGS/NO_DVD_PATCH_PLUS", 200, 0, 1.f, 0.f);
|
||||||
_setHideAnim(m_gameSettingsBtnNoDVD_M, "GAME_SETTINGS/NO_DVD_PATCH_MINUS", 200, 0, 1.f, 0.f);
|
_setHideAnim(m_gameSettingsBtnNoDVD_M, "GAME_SETTINGS/NO_DVD_PATCH_MINUS", 200, 0, 1.f, 0.f);
|
||||||
|
_setHideAnim(m_gameSettingsLblDevoMemcardEmu, "GAME_SETTINGS/DEVO_MEMCARD_EMU", -200, 0, 1.f, 0.f);
|
||||||
|
_setHideAnim(m_gameSettingsBtnDevoMemcardEmu, "GAME_SETTINGS/DEVO_MEMCARD_EMU_BTN", 200, 0, 1.f, 0.f);
|
||||||
_setHideAnim(m_gameSettingsLblHooktype, "GAME_SETTINGS/HOOKTYPE", -200, 0, 1.f, 0.f);
|
_setHideAnim(m_gameSettingsLblHooktype, "GAME_SETTINGS/HOOKTYPE", -200, 0, 1.f, 0.f);
|
||||||
_setHideAnim(m_gameSettingsLblHooktypeVal, "GAME_SETTINGS/HOOKTYPE_BTN", 200, 0, 1.f, 0.f);
|
_setHideAnim(m_gameSettingsLblHooktypeVal, "GAME_SETTINGS/HOOKTYPE_BTN", 200, 0, 1.f, 0.f);
|
||||||
_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);
|
||||||
@ -867,4 +890,5 @@ void CMenu::_textGameSettings(void)
|
|||||||
m_btnMgr.setText(m_gameSettingsBtnExtractSave, _t("cfgg31", L"Extract"));
|
m_btnMgr.setText(m_gameSettingsBtnExtractSave, _t("cfgg31", L"Extract"));
|
||||||
m_btnMgr.setText(m_gameSettingsLblFlashSave, _t("cfgg32", L"Flash Save to NAND"));
|
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_gameSettingsBtnFlashSave, _t("cfgg33", L"Flash"));
|
||||||
|
m_btnMgr.setText(m_gameSettingsLblDevoMemcardEmu, _t("cfgg34", L"Devolution Memcard Emulator"));
|
||||||
}
|
}
|
||||||
|
@ -803,7 +803,10 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool DML)
|
|||||||
DMLvideoMode = 2;
|
DMLvideoMode = 2;
|
||||||
|
|
||||||
if(m_devo_installed && strcasestr(path.c_str(), "boot.bin") == NULL)
|
if(m_devo_installed && strcasestr(path.c_str(), "boot.bin") == NULL)
|
||||||
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition], m_dataDir.c_str());
|
{
|
||||||
|
bool memcard_emu = m_gcfg2.getBool(id, "devo_memcard_emu", false);
|
||||||
|
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition], m_dataDir.c_str(), memcard_emu);
|
||||||
|
}
|
||||||
else if(DML)
|
else if(DML)
|
||||||
{
|
{
|
||||||
m_cfg.setString("DML", "current_item", id);
|
m_cfg.setString("DML", "current_item", id);
|
||||||
|
Loading…
Reference in New Issue
Block a user