[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"
#466# "Speed display:"
#467# "Check if Project64 is already running"
#468# "Unique Game Save Directory"
//ROM Browser Tab
#480# "Max # of ROMs remembered (0-10):"

View File

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

View File

@ -264,6 +264,7 @@ enum LanguageStringID
OPTION_DISPLAY_FR = 465,
OPTION_CHANGE_FR = 466,
OPTION_CHECK_RUNNING = 467,
OPTION_UNIQUE_GAME_DIR = 468,
//Rom Browser Tab
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_DISPLAY_FR, "Display speed");
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:");
//ROM Browser Tab

View File

@ -144,6 +144,10 @@ void CEeprom::LoadEeprom()
memset(m_EEPROM, 0xFF, sizeof(m_EEPROM));
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.SetExtension("eep");

View File

@ -121,6 +121,10 @@ uint32_t CFlashram::ReadFromFlashStatus(uint32_t PAddr)
bool CFlashram::LoadFlashram()
{
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.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);
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())
{
MempakNames[Control].DirectoryCreate();

View File

@ -23,8 +23,11 @@ CSram::~CSram()
bool CSram::LoadSram()
{
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.SetExtension("sra");

View File

@ -1405,6 +1405,10 @@ bool CN64System::SaveState()
{
Slot = g_Settings->LoadDword(Game_CurrentSaveState);
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());
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(), "");
if (g_Settings->LoadBool(Setting_UniqueSaveDir))
{
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
}
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());

View File

@ -757,6 +757,7 @@ void CN64Rom::SaveRomSettingID(bool temp)
g_Settings->SaveBool(Game_TempLoaded, temp);
g_Settings->SaveString(Game_GameName, m_RomName.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())
{

View File

@ -51,6 +51,7 @@ enum SettingID
Setting_AutoZipInstantSave,
Setting_RememberCheats,
Setting_UniqueSaveDir,
Setting_LanguageDir,
Setting_LanguageDirDefault,
Setting_CurrentLanguage,
@ -97,6 +98,7 @@ enum SettingID
//Individual Game Settings
Game_IniKey,
Game_File,
Game_UniqueSaveDir,
Game_GameName,
Game_GoodName,
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_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_EnableDisk, new CSettingTypeApplication("", "Enable Disk", (uint32_t)true));
AddHandler(Setting_LanguageDirDefault, new CSettingTypeRelativePath("Lang", ""));
@ -168,6 +173,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Game_IniKey, new CSettingTypeTempString(""));
AddHandler(Game_File, new CSettingTypeTempString(""));
AddHandler(Game_UniqueSaveDir, new CSettingTypeTempString(""));
AddHandler(Game_GameName, new CSettingTypeTempString(""));
AddHandler(Game_GoodName, new CSettingTypeGame("Good Name", Rdb_GoodName));
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_DEBUGGER, wGS(ADVANCE_DEBUGGER).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_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_DEBUGGER), Debugger_Enabled);
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_DISPLAY_FRAMERATE), UserInterface_DisplayFrameRate);

View File

@ -20,8 +20,9 @@ class CAdvancedOptionsPage :
COMMAND_ID_HANDLER_EX(IDC_ZIP,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_DEBUGGER,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_REMEMBER_CHEAT,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_CHECK_RUNNING,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_DISPLAY_FRAMERATE,CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_CHECK_RUNNING, 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)
END_MSG_MAP()

View File

@ -327,13 +327,14 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "Start Emulation when rom is opened?",IDC_START_ON_ROM_OPEN,
"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 "Enable Debugger",IDC_DEBUGGER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,41,191,10
CONTROL "Remember selected cheats",IDC_REMEMBER_CHEAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,57,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,38,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,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,73,189,10
CONTROL "Frame rate display",IDC_DISPLAY_FRAMERATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,88,86,10
COMBOBOX IDC_FRAME_DISPLAY_TYPE,101,87,99,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,68,189,10
CONTROL "Frame rate display",IDC_DISPLAY_FRAMERATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,98,86,10
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
IDD_Settings_ShellInt DIALOGEX 0, 0, 231, 206

View File

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