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.cpp88
1 files changed, 82 insertions, 6 deletions
diff --git a/Source/Core/DiscIO/Enums.cpp b/Source/Core/DiscIO/Enums.cpp
index 2ef5b0e344..f6311422fe 100644
--- a/Source/Core/DiscIO/Enums.cpp
+++ b/Source/Core/DiscIO/Enums.cpp
@@ -18,6 +18,23 @@ bool IsNTSC(Region region)
// Increment CACHE_REVISION (ISOFile.cpp & GameFile.cpp) if the code below is modified
+Country TypicalCountryForRegion(Region region)
+{
+ switch (region)
+ {
+ case Region::NTSC_J:
+ return Country::COUNTRY_JAPAN;
+ case Region::NTSC_U:
+ return Country::COUNTRY_USA;
+ case Region::PAL:
+ return Country::COUNTRY_EUROPE;
+ case Region::NTSC_K:
+ return Country::COUNTRY_KOREA;
+ default:
+ return Country::COUNTRY_UNKNOWN;
+ }
+}
+
Region RegionSwitchGC(u8 country_code)
{
Region region = RegionSwitchWii(country_code);
@@ -124,20 +141,79 @@ Country CountrySwitch(u8 country_code)
}
}
-u8 GetSysMenuRegion(u16 title_version)
+Region GetSysMenuRegion(u16 title_version)
{
+ if (title_version == 33)
+ return Region::UNKNOWN_REGION; // 1.0 uses 33 as the version number in all regions
+
switch (title_version & 0xf)
{
case 0:
- return 'J';
+ return Region::NTSC_J;
case 1:
- return 'E';
+ return Region::NTSC_U;
case 2:
- return 'P';
+ return Region::PAL;
case 6:
- return 'K';
+ return Region::NTSC_K;
+ default:
+ return Region::UNKNOWN_REGION;
+ }
+}
+
+std::string GetSysMenuVersionString(u16 title_version)
+{
+ if (title_version == 33)
+ return "1.0"; // 1.0 uses 33 as the version number in all regions
+
+ std::string region_letter;
+
+ switch (GetSysMenuRegion(title_version))
+ {
+ case Region::NTSC_J:
+ region_letter = "J";
+ break;
+ case Region::NTSC_U:
+ region_letter = "U";
+ break;
+ case Region::PAL:
+ region_letter = "E";
+ break;
+ case Region::NTSC_K:
+ region_letter = "K";
+ break;
+ }
+
+ switch (title_version & ~0xf)
+ {
+ case 96:
+ case 128:
+ return "2.0" + region_letter;
+ case 160:
+ return "2.1" + region_letter;
+ case 192:
+ return "2.2" + region_letter;
+ case 224:
+ return "3.0" + region_letter;
+ case 256:
+ return "3.1" + region_letter;
+ case 288:
+ return "3.2" + region_letter;
+ case 320:
+ case 352:
+ return "3.3" + region_letter;
+ case 384:
+ return (region_letter != "K" ? "3.4" : "3.5") + region_letter;
+ case 416:
+ return "4.0" + region_letter;
+ case 448:
+ return "4.1" + region_letter;
+ case 480:
+ return "4.2" + region_letter;
+ case 512:
+ return "4.3" + region_letter;
default:
- return 'A';
+ return "?.?" + region_letter;
}
}