mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-03-18 03:11:11 +00:00
Triforce: Check only first byte in region flag.
In some Triforce games (e.g. _F-Zero AX_), the bytes that follow the
region flag in the `boot.id` file (at `0x38`) happen to be `0x00`.
However, in other games (e.g _Mario Kart Arcade GP 2_), it seems the
region flag is padded with `0xFF`.
_Mario Kart Arcade GP 2_ (`boot.id` in the USA version):
```
00000 0000: 42 54 49 44 00 00 01 E0 00 00 00 01 00 00 00 01 BTID.... ........
00000 0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ........ ........
00000 0020: 47 43 41 4D 00 00 01 C0 07 D3 05 0F 00 00 00 07 GCAM.... ........
00000 0030: 53 42 4E 4C 00 00 00 00 0E FF FF FF FF FF FF FF SBNL.... ........
-----------
^
|
region flag
```
When the region flag was tested in `switch` statements (where a single
byte was expected in the `case`s), the test would fail, depending
on the game.
This issue would lead to the wrong calculation of the country in
`VolumeDisc::GetCountry()`, which was then used to build the game ID in
`VolumeDisc::GetGameID()`.
The solution is to test using only the least meaningful byte in the
region flag.
Unexpected game IDs were first noticed with USA version of _Mario Kart
Arcade GP 2_, which was wrongly assigned the same game ID that is given
to the Japan version (i.e. `GNLJ82`). The correct game ID for the USA
version is `GNLE82`.
This commit is contained in:
parent
b6027da5db
commit
3eea3a90b5
@ -67,7 +67,7 @@ Country VolumeDisc::GetCountry(const Partition& partition) const
|
||||
{
|
||||
const BootID* boot_id = static_cast<const VolumeGC*>(this)->GetTriforceBootID();
|
||||
|
||||
switch (boot_id->region_flags)
|
||||
switch (boot_id->region_flags & 0x000000FF)
|
||||
{
|
||||
default:
|
||||
case 0x02: // JAPAN
|
||||
|
||||
@ -92,7 +92,7 @@ Region VolumeGC::GetRegion() const
|
||||
{
|
||||
if (m_is_triforce)
|
||||
{
|
||||
switch (m_triforce_header.region_flags)
|
||||
switch (m_triforce_header.region_flags & 0x000000FF)
|
||||
{
|
||||
default:
|
||||
case 0x02: // JAPAN
|
||||
|
||||
Loading…
Reference in New Issue
Block a user