From 5b722b775adcfd33aa92118bf6a823b7d4178cf7 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Tue, 28 Apr 2020 23:40:01 +0200 Subject: [PATCH] VolumeVerifier: Treat IOS9 as always present Fixes a false positive for Mario Party 8. --- Source/Core/DiscIO/VolumeVerifier.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Source/Core/DiscIO/VolumeVerifier.cpp b/Source/Core/DiscIO/VolumeVerifier.cpp index 38c6fd2e35..18e86481b2 100644 --- a/Source/Core/DiscIO/VolumeVerifier.cpp +++ b/Source/Core/DiscIO/VolumeVerifier.cpp @@ -607,12 +607,17 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) if (type == PARTITION_UPDATE) { - std::unique_ptr file_info = filesystem->FindFileInfo("_sys"); - bool has_correct_ios = false; - if (file_info) + const IOS::ES::TMDReader& tmd = m_volume.GetTMD(m_volume.GetGamePartition()); + + // IOS9 is the only IOS which can be assumed to exist in a working state on any Wii + // regardless of what updates have been installed. At least Mario Party 8 + // (RM8E01, revision 2) uses IOS9 without having it in its update partition. + bool has_correct_ios = tmd.IsValid() && (tmd.GetIOSId() & 0xFF) == 9; + + if (!has_correct_ios && tmd.IsValid()) { - const IOS::ES::TMDReader& tmd = m_volume.GetTMD(m_volume.GetGamePartition()); - if (tmd.IsValid()) + std::unique_ptr file_info = filesystem->FindFileInfo("_sys"); + if (file_info) { const std::string correct_ios = "IOS" + std::to_string(tmd.GetIOSId() & 0xFF) + "-"; for (const FileInfo& f : *file_info)