summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/Enums.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DiscIO/Enums.cpp')
-rw-r--r--Source/Core/DiscIO/Enums.cpp50
1 files changed, 39 insertions, 11 deletions
diff --git a/Source/Core/DiscIO/Enums.cpp b/Source/Core/DiscIO/Enums.cpp
index e46ca238d0..f3f1f3bf71 100644
--- a/Source/Core/DiscIO/Enums.cpp
+++ b/Source/Core/DiscIO/Enums.cpp
@@ -145,7 +145,8 @@ Country TypicalCountryForRegion(Region region)
}
}
-Region CountryCodeToRegion(u8 country_code, Platform platform, Region expected_region)
+Region CountryCodeToRegion(u8 country_code, Platform platform, Region expected_region,
+ std::optional<u16> revision)
{
switch (country_code)
{
@@ -159,11 +160,24 @@ Region CountryCodeToRegion(u8 country_code, Platform platform, Region expected_r
return Region::NTSC_J; // Korean GC games in English or Taiwanese Wii games
case 'E':
- if (expected_region == Region::NTSC_J)
- return Region::NTSC_J; // Korean GC games in English
- else
+ if (platform != Platform::GameCubeDisc)
return Region::NTSC_U; // The most common country code for NTSC-U
+ if (revision)
+ {
+ if (*revision >= 0x30)
+ return Region::NTSC_J; // Korean GC games in English
+ else
+ return Region::NTSC_U; // The most common country code for NTSC-U
+ }
+ else
+ {
+ if (expected_region == Region::NTSC_J)
+ return Region::NTSC_J; // Korean GC games in English
+ else
+ return Region::NTSC_U; // The most common country code for NTSC-U
+ }
+
case 'B':
case 'N':
return Region::NTSC_U;
@@ -198,7 +212,8 @@ Region CountryCodeToRegion(u8 country_code, Platform platform, Region expected_r
}
}
-Country CountryCodeToCountry(u8 country_code, Platform platform, Region region)
+Country CountryCodeToCountry(u8 country_code, Platform platform, Region region,
+ std::optional<u16> revision)
{
switch (country_code)
{
@@ -214,10 +229,10 @@ Country CountryCodeToCountry(u8 country_code, Platform platform, Region region)
return region == Region::NTSC_U ? Country::USA : Country::Europe;
case 'W':
- if (region == Region::PAL)
- return Country::Europe; // Only the Nordic version of Ratatouille (Wii)
- else if (platform == Platform::GameCubeDisc)
+ if (platform == Platform::GameCubeDisc)
return Country::Korea; // GC games in English released in Korea
+ else if (region == Region::PAL)
+ return Country::Europe; // Only the Nordic version of Ratatouille (Wii)
else
return Country::Taiwan; // Wii games in traditional Chinese released in Taiwan
@@ -251,11 +266,24 @@ Country CountryCodeToCountry(u8 country_code, Platform platform, Region region)
// NTSC
case 'E':
- if (region == Region::NTSC_J)
- return Country::Korea; // GC games in English released in Korea
- else
+ if (platform != Platform::GameCubeDisc)
return Country::USA; // The most common country code for NTSC-U
+ if (revision)
+ {
+ if (*revision >= 0x30)
+ return Country::Korea; // GC games in English released in Korea
+ else
+ return Country::USA; // The most common country code for NTSC-U
+ }
+ else
+ {
+ if (region == Region::NTSC_J)
+ return Country::Korea; // GC games in English released in Korea
+ else
+ return Country::USA; // The most common country code for NTSC-U
+ }
+
case 'B': // PAL games released on NTSC-U VC
case 'N': // NTSC-J games released on NTSC-U VC
return Country::USA;