From 83209b4afc7c6d968f4a8d5e318cb039a9e3a56b Mon Sep 17 00:00:00 2001 From: LPFaint99 Date: Thu, 10 Mar 2011 00:16:40 +0000 Subject: [PATCH] add an option to not eject/reinsert memcards on save/load state when off certain games like ZTP ZWW maybe other cannot save to a different memory card after loading from a savestate, but for TAS the game will no longer think that the card was ejected to use add ReloadMemcardOnState = false to dolphin.ini git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7323 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/ConfigManager.cpp | 2 ++ Source/Core/Core/Src/ConfigManager.h | 4 ++++ Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp | 12 ++++++++---- Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h | 1 + 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index 6e1404abc5..8d03ba456d 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -209,6 +209,7 @@ void SConfig::SaveSettings() ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage); ini.Set("Core", "MemcardA", m_strMemoryCardA); ini.Set("Core", "MemcardB", m_strMemoryCardB); + ini.Set("Core", "ReloadMemcardOnState", b_reloadMCOnState); ini.Set("Core", "SlotA", m_EXIDevice[0]); ini.Set("Core", "SlotB", m_EXIDevice[1]); ini.Set("Core", "SerialPort1", m_EXIDevice[2]); @@ -333,6 +334,7 @@ void SConfig::LoadSettings() ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); ini.Get("Core", "MemcardA", &m_strMemoryCardA); ini.Get("Core", "MemcardB", &m_strMemoryCardB); + ini.Get("Core", "ReloadMemcardOnState", &b_reloadMCOnState, true); ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD_A); ini.Get("Core", "SlotB", (int*)&m_EXIDevice[1], EXIDEVICE_NONE); ini.Get("Core", "SerialPort1", (int*)&m_EXIDevice[2], EXIDEVICE_NONE); diff --git a/Source/Core/Core/Src/ConfigManager.h b/Source/Core/Core/Src/ConfigManager.h index a3d66bde9c..25410a5d2e 100644 --- a/Source/Core/Core/Src/ConfigManager.h +++ b/Source/Core/Core/Src/ConfigManager.h @@ -46,6 +46,10 @@ struct SConfig : NonCopyable std::string m_strMemoryCardA; std::string m_strMemoryCardB; + // eject and reload the memory card on state + // in ZTP and other games if the save file has been deleted from the memory card + //this is necessary to save after loading a savestate + bool b_reloadMCOnState; TEXIDevices m_EXIDevice[3]; TSIDevices m_SIDevice[4]; std::string m_bba_mac; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp index ace6bb2681..18fa3ec4cf 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp @@ -50,6 +50,7 @@ CEXIMemoryCard::CEXIMemoryCard(const std::string& _rName, const std::string& _rF { cards[_card_index] = this; et_this_card = CoreTiming::RegisterEvent(_rName.c_str(), FlushCallback); + reloadOnState = SConfig::GetInstance().b_reloadMCOnState; interruptSwitch = 0; m_bInterruptSet = 0; @@ -432,8 +433,11 @@ void CEXIMemoryCard::TransferByte(u8 &byte) void CEXIMemoryCard::DoState(PointerWrap &p) { - int slot = 0; - if (GetFileName() == SConfig::GetInstance().m_strMemoryCardA) - slot = 1; - ExpansionInterface::ChangeDevice(slot, slot ? EXIDEVICE_MEMORYCARD_B : EXIDEVICE_MEMORYCARD_A, 0); + if (reloadOnState) + { + int slot = 0; + if (GetFileName() == SConfig::GetInstance().m_strMemoryCardA) + slot = 1; + ExpansionInterface::ChangeDevice(slot, slot ? EXIDEVICE_MEMORYCARD_B : EXIDEVICE_MEMORYCARD_A, 0); + } } diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h index 127dfa2b15..4f0527d47d 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h @@ -72,6 +72,7 @@ private: std::string m_strFilename; int card_index; int et_this_card; + bool reloadOnState; //! memory card state // STATE_TO_SAVE