diff options
| author | cristian64 <cristian64@gmail.com> | 2026-03-15 18:14:43 +0000 |
|---|---|---|
| committer | cristian64 <cristian64@gmail.com> | 2026-03-15 18:43:00 +0000 |
| commit | 3eea3a90b5a6c3f337f1eb951c63b5ca3ab9b06d (patch) | |
| tree | e52414831e572d36ab93dcc5b2c1dff12574a450 /Source/Core/VideoCommon/GraphicsModSystem | |
| parent | b6027da5db00abd73041d794fbb7b8d7887725dc (diff) | |
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`.
Diffstat (limited to 'Source/Core/VideoCommon/GraphicsModSystem')
0 files changed, 0 insertions, 0 deletions
