diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index ead5bf62a0..36351a896c 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -431,10 +431,19 @@ void VFS::Init(const std::string& path) std::string mpath = entry.path; // TODO: This shouldn't use current dir // If no value assigned to SysEmulationDirPath in INI, use the path that with executable. - if (Ini.SysEmulationDirPath.GetValue().empty()) - Ini.SysEmulationDirPath.SetValue(Emu.GetEmulatorPath()); - LOG_NOTICE(GENERAL, "$(EmulatorDir) binded to %s.", Ini.SysEmulationDirPath.GetValue()); - fmt::Replace(mpath, "$(EmulatorDir)", Ini.SysEmulationDirPath.GetValue()); + if (Ini.SysEmulationDirPathEnable.GetValue()) + { + if (Ini.SysEmulationDirPath.GetValue().empty()) + Ini.SysEmulationDirPath.SetValue(Emu.GetEmulatorPath()); + LOG_NOTICE(GENERAL, "EmualtionDir: Custom EmulationDir is On, Binded $(EmulatorDir) to %s.", + Ini.SysEmulationDirPath.GetValue()); + fmt::Replace(mpath, "$(EmulatorDir)", Ini.SysEmulationDirPath.GetValue()); + } + else + { + LOG_NOTICE(GENERAL, "EmualtionDir: Custom EmulationDir is Off, Binded $(EmulatorDir) to %s.", Emu.GetEmulatorPath()); + fmt::Replace(mpath, "$(EmulatorDir)", Emu.GetEmulatorPath()); + } fmt::Replace(mpath, "$(GameDir)", cwd); Mount(entry.mount, mpath, dev); } diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index dd0298777e..c20dbbc466 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -436,6 +436,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_dbg_ap_systemcall = new wxCheckBox(p_hle, wxID_ANY, "Auto Pause at System Call"); wxCheckBox* chbox_dbg_ap_functioncall = new wxCheckBox(p_hle, wxID_ANY, "Auto Pause at Function Call"); + //Custom EmulationDir + wxCheckBox* chbox_emulationdir_enable = new wxCheckBox(p_system, wxID_ANY, "Use Custom EmulationDir Path?"); + wxTextCtrl* txt_emulationdir_path = new wxTextCtrl(p_system, wxID_ANY, "EmulationDir Path, Need Restart"); + cbox_cpu_decoder->Append("PPU Interpreter"); cbox_cpu_decoder->Append("PPU Interpreter 2"); cbox_cpu_decoder->Append("PPU JIT (LLVM)"); @@ -533,6 +537,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_dbg_ap_systemcall ->SetValue(Ini.DBGAutoPauseSystemCall.GetValue()); chbox_dbg_ap_functioncall->SetValue(Ini.DBGAutoPauseFunctionCall.GetValue()); + //Custom EmulationDir + chbox_emulationdir_enable->SetValue(Ini.SysEmulationDirPathEnable.GetValue()); + txt_emulationdir_path ->SetValue(Ini.SysEmulationDirPath.GetValue()); + cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() : 0); cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() : 0); cbox_gs_render ->SetSelection(Ini.GSRenderMode.GetValue()); @@ -614,6 +622,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) // System s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); + + //Custom EmulationDir + s_subpanel_system->Add(chbox_emulationdir_enable, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_system->Add(txt_emulationdir_path, wxSizerFlags().Border(wxALL, 5).Expand()); // Buttons wxBoxSizer* s_b_panel(new wxBoxSizer(wxHORIZONTAL)); @@ -667,6 +679,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.DBGAutoPauseFunctionCall.SetValue(chbox_dbg_ap_functioncall->GetValue()); Ini.DBGAutoPauseSystemCall.SetValue(chbox_dbg_ap_systemcall->GetValue()); + //Custom EmulationDir + Ini.SysEmulationDirPathEnable.SetValue(chbox_emulationdir_enable->GetValue()); + Ini.SysEmulationDirPath.SetValue(txt_emulationdir_path->GetValue().ToStdString()); + Ini.Save(); } diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 2d20b42f28..69f0e6fe63 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -165,6 +165,7 @@ public: //Customed EmulationDir IniEntry SysEmulationDirPath; + IniEntry SysEmulationDirPathEnable; // Language IniEntry SysLanguage; @@ -245,6 +246,7 @@ public: // Customed EmulationDir SysEmulationDirPath.Init("System_EmulationDir", path); + SysEmulationDirPathEnable.Init("System_EmulationDirEnable", path); // Language SysLanguage.Init("Sytem_SysLanguage", path); @@ -324,6 +326,7 @@ public: // Customed EmulationDir SysEmulationDirPath.Load(""); + SysEmulationDirPathEnable.Load(false); } void Save()