Do not reset PS3_GAME when booting disc patches

This commit is contained in:
Megamouse 2020-02-20 00:12:00 +01:00
parent 24d3e2b2b8
commit c4a1c6f845
2 changed files with 10 additions and 7 deletions

View file

@ -696,7 +696,7 @@ void Emulator::SetForceBoot(bool force_boot)
m_force_boot = force_boot; m_force_boot = force_boot;
} }
void Emulator::Load(const std::string& title_id, bool add_only, bool force_global_config) void Emulator::Load(const std::string& title_id, bool add_only, bool force_global_config, bool is_disc_patch)
{ {
m_force_global_config = force_global_config; m_force_global_config = force_global_config;
@ -987,7 +987,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
const std::string hdd0_disc = vfs::get("/dev_hdd0/disc/"); const std::string hdd0_disc = vfs::get("/dev_hdd0/disc/");
const std::size_t game_dir_size = 8; // size of PS3_GAME and PS3_GMXX const std::size_t game_dir_size = 8; // size of PS3_GAME and PS3_GMXX
const std::size_t bdvd_pos = m_cat == "DG" && bdvd_dir.empty() && disc.empty() ? elf_dir.rfind("/USRDIR") - game_dir_size : 0; const std::size_t bdvd_pos = m_cat == "DG" && bdvd_dir.empty() && disc.empty() ? elf_dir.rfind("/USRDIR") - game_dir_size : 0;
const bool from_hdd0_game = m_path.find(hdd0_game) != umax; const bool from_hdd0_game = m_path.find(hdd0_game) != std::string::npos;
if (bdvd_pos && from_hdd0_game) if (bdvd_pos && from_hdd0_game)
{ {
@ -1014,9 +1014,10 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
bdvd_dir = elf_dir.substr(0, bdvd_pos); bdvd_dir = elf_dir.substr(0, bdvd_pos);
m_game_dir = elf_dir.substr(bdvd_pos, game_dir_size); m_game_dir = elf_dir.substr(bdvd_pos, game_dir_size);
} }
else else if (!is_disc_patch)
{ {
m_game_dir = "PS3_GAME"; // reset // Reset original disc game dir if this is neither disc nor disc patch
m_game_dir = "PS3_GAME";
} }
// Booting patch data // Booting patch data
@ -1066,7 +1067,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
} }
else if (m_cat == "1P" && from_hdd0_game) else if (m_cat == "1P" && from_hdd0_game)
{ {
//PS1 Classics // PS1 Classic located in dev_hdd0/game
sys_log.notice("PS1 Game: %s, %s", m_title_id, m_title); sys_log.notice("PS1 Game: %s, %s", m_title_id, m_title);
std::string gamePath = m_path.substr(m_path.find("/dev_hdd0/game/"), 24); std::string gamePath = m_path.substr(m_path.find("/dev_hdd0/game/"), 24);
@ -1100,6 +1101,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
} }
else if (m_cat == "DG" && from_hdd0_game) else if (m_cat == "DG" && from_hdd0_game)
{ {
// Disc game located in dev_hdd0/game
vfs::mount("/dev_bdvd/PS3_GAME", hdd0_game + m_path.substr(hdd0_game.size(), 10)); vfs::mount("/dev_bdvd/PS3_GAME", hdd0_game + m_path.substr(hdd0_game.size(), 10));
sys_log.notice("Game: %s", vfs::get("/dev_bdvd/PS3_GAME")); sys_log.notice("Game: %s", vfs::get("/dev_bdvd/PS3_GAME"));
} }
@ -1110,6 +1112,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
} }
else else
{ {
// Disc game
bdvd_dir = disc; bdvd_dir = disc;
vfs::mount("/dev_bdvd", bdvd_dir); vfs::mount("/dev_bdvd", bdvd_dir);
sys_log.notice("Disk: %s", vfs::get("/dev_bdvd")); sys_log.notice("Disk: %s", vfs::get("/dev_bdvd"));
@ -1197,7 +1200,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
{ {
// Booting game update // Booting game update
sys_log.success("Updates found at /dev_hdd0/game/%s/!", m_title_id); sys_log.success("Updates found at /dev_hdd0/game/%s/!", m_title_id);
return m_path = hdd0_boot, Load(m_title_id, false, force_global_config); return m_path = hdd0_boot, Load(m_title_id, false, force_global_config, true);
} }
// Set title to actual disc title if necessary // Set title to actual disc title if necessary

View file

@ -173,7 +173,7 @@ public:
void SetForceBoot(bool force_boot); void SetForceBoot(bool force_boot);
void Load(const std::string& title_id = "", bool add_only = false, bool force_global_config = false); void Load(const std::string& title_id = "", bool add_only = false, bool force_global_config = false, bool is_disc_patch = false);
void Run(bool start_playtime); void Run(bool start_playtime);
bool Pause(); bool Pause();
void Resume(); void Resume();