mirror of https://github.com/PCSX2/pcsx2.git
VMManager: Auto switch to 16:9 when ws patches are enabled/found
This commit is contained in:
parent
470365644f
commit
fbf9585b5a
|
@ -129,6 +129,7 @@ static std::vector<u8> s_widescreen_cheats_data;
|
||||||
static bool s_widescreen_cheats_loaded = false;
|
static bool s_widescreen_cheats_loaded = false;
|
||||||
static std::vector<u8> s_no_interlacing_cheats_data;
|
static std::vector<u8> s_no_interlacing_cheats_data;
|
||||||
static bool s_no_interlacing_cheats_loaded = false;
|
static bool s_no_interlacing_cheats_loaded = false;
|
||||||
|
static s32 s_active_widescreen_patches = 0;
|
||||||
static u32 s_active_no_interlacing_patches = 0;
|
static u32 s_active_no_interlacing_patches = 0;
|
||||||
static s32 s_current_save_slot = 1;
|
static s32 s_current_save_slot = 1;
|
||||||
static u32 s_frame_advance_count = 0;
|
static u32 s_frame_advance_count = 0;
|
||||||
|
@ -315,6 +316,16 @@ void VMManager::LoadSettings()
|
||||||
if (s_active_no_interlacing_patches > 0 && EmuConfig.GS.InterlaceMode == GSInterlaceMode::Automatic)
|
if (s_active_no_interlacing_patches > 0 && EmuConfig.GS.InterlaceMode == GSInterlaceMode::Automatic)
|
||||||
EmuConfig.GS.InterlaceMode = GSInterlaceMode::Off;
|
EmuConfig.GS.InterlaceMode = GSInterlaceMode::Off;
|
||||||
|
|
||||||
|
// Switch to 16:9 if widescreen patches are enabled, and AR is auto.
|
||||||
|
if (s_active_widescreen_patches > 0 && EmuConfig.GS.AspectRatio == AspectRatioType::RAuto4_3_3_2)
|
||||||
|
{
|
||||||
|
// Don't change when reloading settings in the middle of a FMV with switch.
|
||||||
|
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
|
||||||
|
EmuConfig.CurrentAspectRatio = AspectRatioType::R16_9;
|
||||||
|
|
||||||
|
EmuConfig.GS.AspectRatio = AspectRatioType::R16_9;
|
||||||
|
}
|
||||||
|
|
||||||
// Force MTVU off when playing back GS dumps, it doesn't get used.
|
// Force MTVU off when playing back GS dumps, it doesn't get used.
|
||||||
if (GSDumpReplayer::IsReplayingDump())
|
if (GSDumpReplayer::IsReplayingDump())
|
||||||
EmuConfig.Speedhacks.vuThread = false;
|
EmuConfig.Speedhacks.vuThread = false;
|
||||||
|
@ -468,6 +479,8 @@ void VMManager::LoadPatches(const std::string& serial, u32 crc, bool show_messag
|
||||||
{
|
{
|
||||||
const std::string crc_string(fmt::format("{:08X}", crc));
|
const std::string crc_string(fmt::format("{:08X}", crc));
|
||||||
s_patches_crc = crc;
|
s_patches_crc = crc;
|
||||||
|
s_active_widescreen_patches = 0;
|
||||||
|
s_active_no_interlacing_patches = 0;
|
||||||
ForgetLoadedPatches();
|
ForgetLoadedPatches();
|
||||||
|
|
||||||
std::string message;
|
std::string message;
|
||||||
|
@ -497,10 +510,9 @@ void VMManager::LoadPatches(const std::string& serial, u32 crc, bool show_messag
|
||||||
}
|
}
|
||||||
|
|
||||||
// wide screen patches
|
// wide screen patches
|
||||||
int ws_patch_count = 0;
|
|
||||||
if (EmuConfig.EnableWideScreenPatches && crc != 0)
|
if (EmuConfig.EnableWideScreenPatches && crc != 0)
|
||||||
{
|
{
|
||||||
if (ws_patch_count = LoadPatchesFromDir(crc_string, EmuFolders::CheatsWS, "Widescreen hacks", false))
|
if (s_active_widescreen_patches = LoadPatchesFromDir(crc_string, EmuFolders::CheatsWS, "Widescreen hacks", false))
|
||||||
{
|
{
|
||||||
Console.WriteLn(Color_Gray, "Found widescreen patches in the cheats_ws folder --> skipping cheats_ws.zip");
|
Console.WriteLn(Color_Gray, "Found widescreen patches in the cheats_ws folder --> skipping cheats_ws.zip");
|
||||||
}
|
}
|
||||||
|
@ -518,13 +530,25 @@ void VMManager::LoadPatches(const std::string& serial, u32 crc, bool show_messag
|
||||||
|
|
||||||
if (!s_widescreen_cheats_data.empty())
|
if (!s_widescreen_cheats_data.empty())
|
||||||
{
|
{
|
||||||
ws_patch_count = LoadPatchesFromZip(crc_string, s_widescreen_cheats_data.data(), s_widescreen_cheats_data.size());
|
s_active_widescreen_patches = LoadPatchesFromZip(crc_string, s_widescreen_cheats_data.data(), s_widescreen_cheats_data.size());
|
||||||
PatchesCon->WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", ws_patch_count);
|
PatchesCon->WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", s_active_widescreen_patches);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ws_patch_count > 0)
|
if (s_active_widescreen_patches > 0)
|
||||||
fmt::format_to(std::back_inserter(message), "{}{} widescreen patches", (patch_count > 0 || cheat_count > 0) ? " and " : "", ws_patch_count);
|
{
|
||||||
|
fmt::format_to(std::back_inserter(message), "{}{} widescreen patches", (patch_count > 0 || cheat_count > 0) ? " and " : "", s_active_widescreen_patches);
|
||||||
|
|
||||||
|
// Switch to 16:9 if widescreen patches are enabled, and AR is auto.
|
||||||
|
if (EmuConfig.GS.AspectRatio == AspectRatioType::RAuto4_3_3_2)
|
||||||
|
{
|
||||||
|
// Don't change when reloading settings in the middle of a FMV with switch.
|
||||||
|
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
|
||||||
|
EmuConfig.CurrentAspectRatio = AspectRatioType::R16_9;
|
||||||
|
|
||||||
|
EmuConfig.GS.AspectRatio = AspectRatioType::R16_9;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// no-interlacing patches
|
// no-interlacing patches
|
||||||
|
@ -555,7 +579,7 @@ void VMManager::LoadPatches(const std::string& serial, u32 crc, bool show_messag
|
||||||
|
|
||||||
if (s_active_no_interlacing_patches > 0)
|
if (s_active_no_interlacing_patches > 0)
|
||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(message), "{}{} no-interlacing patches", (patch_count > 0 || cheat_count > 0 || ws_patch_count > 0) ? " and " : "", s_active_no_interlacing_patches);
|
fmt::format_to(std::back_inserter(message), "{}{} no-interlacing patches", (patch_count > 0 || cheat_count > 0 || s_active_widescreen_patches > 0) ? " and " : "", s_active_no_interlacing_patches);
|
||||||
|
|
||||||
// Disable interlacing in GS if active.
|
// Disable interlacing in GS if active.
|
||||||
if (EmuConfig.GS.InterlaceMode == GSInterlaceMode::Automatic)
|
if (EmuConfig.GS.InterlaceMode == GSInterlaceMode::Automatic)
|
||||||
|
@ -572,7 +596,7 @@ void VMManager::LoadPatches(const std::string& serial, u32 crc, bool show_messag
|
||||||
|
|
||||||
if (show_messages)
|
if (show_messages)
|
||||||
{
|
{
|
||||||
if (cheat_count > 0 || ws_patch_count > 0 || s_active_no_interlacing_patches > 0)
|
if (cheat_count > 0 || s_active_widescreen_patches > 0 || s_active_no_interlacing_patches > 0)
|
||||||
{
|
{
|
||||||
message += " are active.";
|
message += " are active.";
|
||||||
Host::AddKeyedOSDMessage("LoadPatches", std::move(message), 5.0f);
|
Host::AddKeyedOSDMessage("LoadPatches", std::move(message), 5.0f);
|
||||||
|
@ -979,6 +1003,7 @@ void VMManager::Shutdown(bool save_resume_state)
|
||||||
Host::OnGameChanged(s_disc_path, s_game_serial, s_game_name, 0);
|
Host::OnGameChanged(s_disc_path, s_game_serial, s_game_name, 0);
|
||||||
}
|
}
|
||||||
s_active_game_fixes = 0;
|
s_active_game_fixes = 0;
|
||||||
|
s_active_widescreen_patches = 0;
|
||||||
s_active_no_interlacing_patches = 0;
|
s_active_no_interlacing_patches = 0;
|
||||||
UpdateGameSettingsLayer();
|
UpdateGameSettingsLayer();
|
||||||
|
|
||||||
|
@ -1017,6 +1042,7 @@ void VMManager::Reset()
|
||||||
const bool game_was_started = g_GameStarted;
|
const bool game_was_started = g_GameStarted;
|
||||||
|
|
||||||
s_active_game_fixes = 0;
|
s_active_game_fixes = 0;
|
||||||
|
s_active_widescreen_patches = 0;
|
||||||
s_active_no_interlacing_patches = 0;
|
s_active_no_interlacing_patches = 0;
|
||||||
|
|
||||||
SysClearExecutionCache();
|
SysClearExecutionCache();
|
||||||
|
|
Loading…
Reference in New Issue