diff options
| author | JosJuice <josjuice@gmail.com> | 2019-02-23 17:49:06 +0100 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2019-02-25 19:54:25 +0100 |
| commit | 8842a0f402ffe60a80ce7894bfd36afd039009fc (patch) | |
| tree | 63b17123d1238eeca41754711dd186a3c48689cc /Source/Core/DiscIO | |
| parent | d27036eb77a7cde0beea1760773dfd046dd2ca10 (diff) | |
Keep track of GameTDB ID separately from game ID
The difference between Dolphin's game IDs and GameTDB's game IDs
is that GameTDB uses four characters for non-disc titles, whereas
Dolphin uses six characters for all titles.
This fixes:
- TitleDatabase considering Datel discs to be NHL Hitz 2002
- Gecko code downloading not working for discs with IDs starting with P
- Cover downloading mixing up discs with channels (e.g. Mario Kart Wii
and Mario Kart Channel) and making extra HTTP requests. (Android was
actually doing a better job at this than DolphinQt!)
Diffstat (limited to 'Source/Core/DiscIO')
| -rw-r--r-- | Source/Core/DiscIO/Volume.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeGC.cpp | 11 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeGC.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeWad.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeWad.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeWii.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/DiscIO/VolumeWii.h | 1 |
7 files changed, 25 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h index 4620234313..3b70f765b7 100644 --- a/Source/Core/DiscIO/Volume.h +++ b/Source/Core/DiscIO/Volume.h @@ -76,6 +76,7 @@ public: return offset; } virtual std::string GetGameID(const Partition& partition = PARTITION_NONE) const = 0; + virtual std::string GetGameTDBID(const Partition& partition = PARTITION_NONE) const = 0; virtual std::string GetMakerID(const Partition& partition = PARTITION_NONE) const = 0; virtual std::optional<u16> GetRevision(const Partition& partition = PARTITION_NONE) const = 0; virtual std::string GetInternalName(const Partition& partition = PARTITION_NONE) const = 0; diff --git a/Source/Core/DiscIO/VolumeGC.cpp b/Source/Core/DiscIO/VolumeGC.cpp index 1275fcfb78..e3db29c1f5 100644 --- a/Source/Core/DiscIO/VolumeGC.cpp +++ b/Source/Core/DiscIO/VolumeGC.cpp @@ -72,6 +72,17 @@ std::string VolumeGC::GetGameID(const Partition& partition) const return DecodeString(id); } +std::string VolumeGC::GetGameTDBID(const Partition& partition) const +{ + const std::string game_id = GetGameID(partition); + + // Don't return an ID for Datel discs that are using the game ID of NHL Hitz 2002 + if (game_id == "GNHE5d" && !GetBootDOLOffset(*this, partition).has_value()) + return ""; + + return game_id; +} + Region VolumeGC::GetRegion() const { const std::optional<u32> region_code = ReadSwapped<u32>(0x458, PARTITION_NONE); diff --git a/Source/Core/DiscIO/VolumeGC.h b/Source/Core/DiscIO/VolumeGC.h index d7fcc82b48..1bf6139768 100644 --- a/Source/Core/DiscIO/VolumeGC.h +++ b/Source/Core/DiscIO/VolumeGC.h @@ -34,6 +34,7 @@ public: const Partition& partition = PARTITION_NONE) const override; const FileSystem* GetFileSystem(const Partition& partition = PARTITION_NONE) const override; std::string GetGameID(const Partition& partition = PARTITION_NONE) const override; + std::string GetGameTDBID(const Partition& partition = PARTITION_NONE) const override; std::string GetMakerID(const Partition& partition = PARTITION_NONE) const override; std::optional<u16> GetRevision(const Partition& partition = PARTITION_NONE) const override; std::string GetInternalName(const Partition& partition = PARTITION_NONE) const override; diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp index 7d927ae73d..a49488506b 100644 --- a/Source/Core/DiscIO/VolumeWad.cpp +++ b/Source/Core/DiscIO/VolumeWad.cpp @@ -105,6 +105,11 @@ std::string VolumeWAD::GetGameID(const Partition& partition) const return m_tmd.GetGameID(); } +std::string VolumeWAD::GetGameTDBID(const Partition& partition) const +{ + return m_tmd.GetGameTDBID(); +} + std::string VolumeWAD::GetMakerID(const Partition& partition) const { char temp[2]; diff --git a/Source/Core/DiscIO/VolumeWad.h b/Source/Core/DiscIO/VolumeWad.h index e89c684975..32d8bfe3a6 100644 --- a/Source/Core/DiscIO/VolumeWad.h +++ b/Source/Core/DiscIO/VolumeWad.h @@ -35,6 +35,7 @@ public: std::optional<u64> GetTitleID(const Partition& partition = PARTITION_NONE) const override; const IOS::ES::TMDReader& GetTMD(const Partition& partition = PARTITION_NONE) const override; std::string GetGameID(const Partition& partition = PARTITION_NONE) const override; + std::string GetGameTDBID(const Partition& partition = PARTITION_NONE) const override; std::string GetMakerID(const Partition& partition = PARTITION_NONE) const override; std::optional<u16> GetRevision(const Partition& partition = PARTITION_NONE) const override; std::string GetInternalName(const Partition& partition = PARTITION_NONE) const override diff --git a/Source/Core/DiscIO/VolumeWii.cpp b/Source/Core/DiscIO/VolumeWii.cpp index 29d822fca9..777d774d82 100644 --- a/Source/Core/DiscIO/VolumeWii.cpp +++ b/Source/Core/DiscIO/VolumeWii.cpp @@ -278,6 +278,11 @@ std::string VolumeWii::GetGameID(const Partition& partition) const return DecodeString(id); } +std::string VolumeWii::GetGameTDBID(const Partition& partition) const +{ + return GetGameID(partition); +} + Region VolumeWii::GetRegion() const { const std::optional<u32> region_code = m_reader->ReadSwapped<u32>(0x4E000); diff --git a/Source/Core/DiscIO/VolumeWii.h b/Source/Core/DiscIO/VolumeWii.h index 7ad657c26d..48010d5b37 100644 --- a/Source/Core/DiscIO/VolumeWii.h +++ b/Source/Core/DiscIO/VolumeWii.h @@ -45,6 +45,7 @@ public: u64 partition_data_offset); u64 PartitionOffsetToRawOffset(u64 offset, const Partition& partition) const override; std::string GetGameID(const Partition& partition) const override; + std::string GetGameTDBID(const Partition& partition) const override; std::string GetMakerID(const Partition& partition) const override; std::optional<u16> GetRevision(const Partition& partition) const override; std::string GetInternalName(const Partition& partition) const override; |
