[Project64] Make sure each game has a unique save dir

This commit is contained in:
zilmar 2016-04-22 06:29:55 +10:00
parent 4e0103b897
commit 02d7ac014e
16 changed files with 50 additions and 9 deletions

View File

@ -234,6 +234,7 @@
#465# "Display speed" #465# "Display speed"
#466# "Speed display:" #466# "Speed display:"
#467# "Check if Project64 is already running" #467# "Check if Project64 is already running"
#468# "Unique Game Save Directory"
//ROM Browser Tab //ROM Browser Tab
#480# "Max # of ROMs remembered (0-10):" #480# "Max # of ROMs remembered (0-10):"

View File

@ -210,6 +210,7 @@
#465# "&Display speed" #465# "&Display speed"
#466# "Speed display:" #466# "Speed display:"
#467# "&Check if Project64 is already running" #467# "&Check if Project64 is already running"
#468# "&Unique Game Save Directory"
//ROM Browser Tab //ROM Browser Tab
#480# "&Number of ROMs to remember (0-10)" #480# "&Number of ROMs to remember (0-10)"

View File

@ -264,6 +264,7 @@ enum LanguageStringID
OPTION_DISPLAY_FR = 465, OPTION_DISPLAY_FR = 465,
OPTION_CHANGE_FR = 466, OPTION_CHANGE_FR = 466,
OPTION_CHECK_RUNNING = 467, OPTION_CHECK_RUNNING = 467,
OPTION_UNIQUE_GAME_DIR = 468,
//Rom Browser Tab //Rom Browser Tab
RB_MAX_ROMS = 480, RB_MAX_ROMS = 480,

View File

@ -231,6 +231,7 @@ void CLanguage::LoadDefaultStrings(void)
DEF_STR(OPTION_DISABLE_SS, "Disable screen saver when running a ROM"); DEF_STR(OPTION_DISABLE_SS, "Disable screen saver when running a ROM");
DEF_STR(OPTION_DISPLAY_FR, "Display speed"); DEF_STR(OPTION_DISPLAY_FR, "Display speed");
DEF_STR(OPTION_CHECK_RUNNING, "Check if Project64 is already running"); DEF_STR(OPTION_CHECK_RUNNING, "Check if Project64 is already running");
DEF_STR(OPTION_UNIQUE_GAME_DIR, "Unique Game Save Directory");
DEF_STR(OPTION_CHANGE_FR, "Speed display:"); DEF_STR(OPTION_CHANGE_FR, "Speed display:");
//ROM Browser Tab //ROM Browser Tab

View File

@ -144,6 +144,10 @@ void CEeprom::LoadEeprom()
memset(m_EEPROM, 0xFF, sizeof(m_EEPROM)); memset(m_EEPROM, 0xFF, sizeof(m_EEPROM));
CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), ""); CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), "");
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str()); FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str());
FileName.SetExtension("eep"); FileName.SetExtension("eep");

View File

@ -121,6 +121,10 @@ uint32_t CFlashram::ReadFromFlashStatus(uint32_t PAddr)
bool CFlashram::LoadFlashram() bool CFlashram::LoadFlashram()
{ {
CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str()); CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str());
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str()); FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str());
FileName.SetExtension("fla"); FileName.SetExtension("fla");

View File

@ -24,6 +24,10 @@ void Mempak::Load(int32_t Control)
MempakName.Format("%s_Cont_%d", g_Settings->LoadStringVal(Game_GameName).c_str(), Control + 1); MempakName.Format("%s_Cont_%d", g_Settings->LoadStringVal(Game_GameName).c_str(), Control + 1);
MempakNames[Control] = CPath(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), stdstr_f("%s.mpk",MempakName.c_str()).c_str()); MempakNames[Control] = CPath(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), stdstr_f("%s.mpk",MempakName.c_str()).c_str());
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
MempakNames[Control].AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
if (!MempakNames[Control].DirectoryExists()) if (!MempakNames[Control].DirectoryExists())
{ {
MempakNames[Control].DirectoryCreate(); MempakNames[Control].DirectoryCreate();

View File

@ -23,8 +23,11 @@ CSram::~CSram()
bool CSram::LoadSram() bool CSram::LoadSram()
{ {
CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), ""); CPath FileName(g_Settings->LoadStringVal(Directory_NativeSave).c_str(), "");
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str()); FileName.SetName(g_Settings->LoadStringVal(Game_GameName).c_str());
FileName.SetExtension("sra"); FileName.SetExtension("sra");

View File

@ -1405,6 +1405,10 @@ bool CN64System::SaveState()
{ {
Slot = g_Settings->LoadDword(Game_CurrentSaveState); Slot = g_Settings->LoadDword(Game_CurrentSaveState);
SaveFile = CPath(g_Settings->LoadStringVal(Directory_InstantSave).c_str(), ""); SaveFile = CPath(g_Settings->LoadStringVal(Directory_InstantSave).c_str(), "");
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
SaveFile.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
SaveFile.SetName(g_Settings->LoadStringVal(Game_GoodName).c_str()); SaveFile.SetName(g_Settings->LoadStringVal(Game_GoodName).c_str());
g_Settings->SaveDword(Game_LastSaveSlot, g_Settings->LoadDword(Game_CurrentSaveState)); g_Settings->SaveDword(Game_LastSaveSlot, g_Settings->LoadDword(Game_CurrentSaveState));
} }
@ -1547,6 +1551,10 @@ bool CN64System::LoadState()
} }
CPath FileName(g_Settings->LoadStringVal(Directory_InstantSave).c_str(), ""); CPath FileName(g_Settings->LoadStringVal(Directory_InstantSave).c_str(), "");
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
if (g_Settings->LoadDword(Game_CurrentSaveState) != 0) if (g_Settings->LoadDword(Game_CurrentSaveState) != 0)
{ {
FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Game_GoodName).c_str(), g_Settings->LoadDword(Game_CurrentSaveState)).c_str()); FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Game_GoodName).c_str(), g_Settings->LoadDword(Game_CurrentSaveState)).c_str());

View File

@ -757,6 +757,7 @@ void CN64Rom::SaveRomSettingID(bool temp)
g_Settings->SaveBool(Game_TempLoaded, temp); g_Settings->SaveBool(Game_TempLoaded, temp);
g_Settings->SaveString(Game_GameName, m_RomName.c_str()); g_Settings->SaveString(Game_GameName, m_RomName.c_str());
g_Settings->SaveString(Game_IniKey, m_RomIdent.c_str()); g_Settings->SaveString(Game_IniKey, m_RomIdent.c_str());
g_Settings->SaveString(Game_UniqueSaveDir, stdstr_f("%s-%s", m_RomName.c_str(), m_MD5.c_str() ).c_str());
switch (GetCountry()) switch (GetCountry())
{ {

View File

@ -51,6 +51,7 @@ enum SettingID
Setting_AutoZipInstantSave, Setting_AutoZipInstantSave,
Setting_RememberCheats, Setting_RememberCheats,
Setting_UniqueSaveDir,
Setting_LanguageDir, Setting_LanguageDir,
Setting_LanguageDirDefault, Setting_LanguageDirDefault,
Setting_CurrentLanguage, Setting_CurrentLanguage,
@ -97,6 +98,7 @@ enum SettingID
//Individual Game Settings //Individual Game Settings
Game_IniKey, Game_IniKey,
Game_File, Game_File,
Game_UniqueSaveDir,
Game_GameName, Game_GameName,
Game_GoodName, Game_GoodName,
Game_TempLoaded, Game_TempLoaded,

View File

@ -116,6 +116,11 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Setting_CheckEmuRunning, new CSettingTypeApplication("", "Check Running", (uint32_t)true)); AddHandler(Setting_CheckEmuRunning, new CSettingTypeApplication("", "Check Running", (uint32_t)true));
AddHandler(Setting_RememberCheats, new CSettingTypeApplication("", "Remember Cheats", (uint32_t)false)); AddHandler(Setting_RememberCheats, new CSettingTypeApplication("", "Remember Cheats", (uint32_t)false));
#ifdef ANDROID
AddHandler(Setting_UniqueSaveDir, new CSettingTypeTempBool(true));
#else
AddHandler(Setting_UniqueSaveDir, new CSettingTypeApplication("", "Unique Game Dir", (uint32_t)false));
#endif
AddHandler(Setting_CurrentLanguage, new CSettingTypeApplication("", "Current Language", "")); AddHandler(Setting_CurrentLanguage, new CSettingTypeApplication("", "Current Language", ""));
AddHandler(Setting_EnableDisk, new CSettingTypeApplication("", "Enable Disk", (uint32_t)true)); AddHandler(Setting_EnableDisk, new CSettingTypeApplication("", "Enable Disk", (uint32_t)true));
AddHandler(Setting_LanguageDirDefault, new CSettingTypeRelativePath("Lang", "")); AddHandler(Setting_LanguageDirDefault, new CSettingTypeRelativePath("Lang", ""));
@ -168,6 +173,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Game_IniKey, new CSettingTypeTempString("")); AddHandler(Game_IniKey, new CSettingTypeTempString(""));
AddHandler(Game_File, new CSettingTypeTempString("")); AddHandler(Game_File, new CSettingTypeTempString(""));
AddHandler(Game_UniqueSaveDir, new CSettingTypeTempString(""));
AddHandler(Game_GameName, new CSettingTypeTempString("")); AddHandler(Game_GameName, new CSettingTypeTempString(""));
AddHandler(Game_GoodName, new CSettingTypeGame("Good Name", Rdb_GoodName)); AddHandler(Game_GoodName, new CSettingTypeGame("Good Name", Rdb_GoodName));
AddHandler(Game_TempLoaded, new CSettingTypeTempBool(false)); AddHandler(Game_TempLoaded, new CSettingTypeTempBool(false));

View File

@ -24,6 +24,7 @@ CAdvancedOptionsPage::CAdvancedOptionsPage(HWND hParent, const RECT & rcDispay)
SetDlgItemTextW(m_hWnd, IDC_ZIP, wGS(ADVANCE_COMPRESS).c_str()); SetDlgItemTextW(m_hWnd, IDC_ZIP, wGS(ADVANCE_COMPRESS).c_str());
SetDlgItemTextW(m_hWnd, IDC_DEBUGGER, wGS(ADVANCE_DEBUGGER).c_str()); SetDlgItemTextW(m_hWnd, IDC_DEBUGGER, wGS(ADVANCE_DEBUGGER).c_str());
SetDlgItemTextW(m_hWnd, IDC_REMEMBER_CHEAT, wGS(OPTION_REMEMBER_CHEAT).c_str()); SetDlgItemTextW(m_hWnd, IDC_REMEMBER_CHEAT, wGS(OPTION_REMEMBER_CHEAT).c_str());
SetDlgItemTextW(m_hWnd, IDC_UNIQUE_GAME_DIR, wGS(OPTION_UNIQUE_GAME_DIR).c_str());
SetDlgItemTextW(m_hWnd, IDC_CHECK_RUNNING, wGS(OPTION_CHECK_RUNNING).c_str()); SetDlgItemTextW(m_hWnd, IDC_CHECK_RUNNING, wGS(OPTION_CHECK_RUNNING).c_str());
SetDlgItemTextW(m_hWnd, IDC_DISPLAY_FRAMERATE, wGS(OPTION_CHANGE_FR).c_str()); SetDlgItemTextW(m_hWnd, IDC_DISPLAY_FRAMERATE, wGS(OPTION_CHANGE_FR).c_str());
@ -31,6 +32,7 @@ CAdvancedOptionsPage::CAdvancedOptionsPage(HWND hParent, const RECT & rcDispay)
AddModCheckBox(GetDlgItem(IDC_ZIP), Setting_AutoZipInstantSave); AddModCheckBox(GetDlgItem(IDC_ZIP), Setting_AutoZipInstantSave);
AddModCheckBox(GetDlgItem(IDC_DEBUGGER), Debugger_Enabled); AddModCheckBox(GetDlgItem(IDC_DEBUGGER), Debugger_Enabled);
AddModCheckBox(GetDlgItem(IDC_REMEMBER_CHEAT), Setting_RememberCheats); AddModCheckBox(GetDlgItem(IDC_REMEMBER_CHEAT), Setting_RememberCheats);
AddModCheckBox(GetDlgItem(IDC_UNIQUE_SAVE_DIR), Setting_UniqueSaveDir);
AddModCheckBox(GetDlgItem(IDC_CHECK_RUNNING), Setting_CheckEmuRunning); AddModCheckBox(GetDlgItem(IDC_CHECK_RUNNING), Setting_CheckEmuRunning);
AddModCheckBox(GetDlgItem(IDC_DISPLAY_FRAMERATE), UserInterface_DisplayFrameRate); AddModCheckBox(GetDlgItem(IDC_DISPLAY_FRAMERATE), UserInterface_DisplayFrameRate);

View File

@ -20,8 +20,9 @@ class CAdvancedOptionsPage :
COMMAND_ID_HANDLER_EX(IDC_ZIP,CheckBoxChanged) COMMAND_ID_HANDLER_EX(IDC_ZIP,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_DEBUGGER,CheckBoxChanged) COMMAND_ID_HANDLER_EX(IDC_DEBUGGER,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_REMEMBER_CHEAT,CheckBoxChanged) COMMAND_ID_HANDLER_EX(IDC_REMEMBER_CHEAT,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_CHECK_RUNNING,CheckBoxChanged) COMMAND_ID_HANDLER_EX(IDC_CHECK_RUNNING, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_DISPLAY_FRAMERATE,CheckBoxChanged) COMMAND_ID_HANDLER_EX(IDC_UNIQUE_SAVE_DIR, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_DISPLAY_FRAMERATE, CheckBoxChanged)
COMMAND_HANDLER_EX(IDC_FRAME_DISPLAY_TYPE,LBN_SELCHANGE,ComboBoxChanged) COMMAND_HANDLER_EX(IDC_FRAME_DISPLAY_TYPE,LBN_SELCHANGE,ComboBoxChanged)
END_MSG_MAP() END_MSG_MAP()

View File

@ -327,13 +327,14 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
CONTROL "Start Emulation when rom is opened?",IDC_START_ON_ROM_OPEN, CONTROL "Start Emulation when rom is opened?",IDC_START_ON_ROM_OPEN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,191,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,191,10
CONTROL "Automatically compress instant saves",IDC_ZIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,24,191,10 CONTROL "Automatically compress instant saves",IDC_ZIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,23,191,10
CONTROL "Enable Debugger",IDC_DEBUGGER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,41,191,10 CONTROL "Enable Debugger",IDC_DEBUGGER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,38,191,10
CONTROL "Remember selected cheats",IDC_REMEMBER_CHEAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,57,191,10 CONTROL "Remember selected cheats",IDC_REMEMBER_CHEAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,53,191,10
CONTROL "Check if project64 is already running",IDC_CHECK_RUNNING, CONTROL "Check if project64 is already running",IDC_CHECK_RUNNING,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,73,189,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,189,10
CONTROL "Frame rate display",IDC_DISPLAY_FRAMERATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,88,86,10 CONTROL "Frame rate display",IDC_DISPLAY_FRAMERATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,98,86,10
COMBOBOX IDC_FRAME_DISPLAY_TYPE,101,87,99,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_FRAME_DISPLAY_TYPE,101,97,99,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "Unique Game Save Directory",IDC_UNIQUE_SAVE_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,83,189,10
END END
IDD_Settings_ShellInt DIALOGEX 0, 0, 231, 206 IDD_Settings_ShellInt DIALOGEX 0, 0, 231, 206

View File

@ -275,6 +275,7 @@
#define IDC_CHECK_RUNNING 1144 #define IDC_CHECK_RUNNING 1144
#define IDC_BASIC_MODE 1145 #define IDC_BASIC_MODE 1145
#define IDC_JAP 1145 #define IDC_JAP 1145
#define IDC_UNIQUE_SAVE_DIR 1145
#define IDC_PAL 1146 #define IDC_PAL 1146
#define IDC_USA 1147 #define IDC_USA 1147
#define IDC_SHELL_INT_TEXT 1149 #define IDC_SHELL_INT_TEXT 1149