gonetz / GLideN64

A new generation, open-source graphics plugin for N64 emulators.
Other
774 stars 181 forks source link

Ocarina of Time game-specific pause lag fix does not work in iQue versions #2164

Open MrCheeze opened 4 years ago

MrCheeze commented 4 years ago

The code in RSP.cpp looks for "THE LEGEND OF ZELDA" in the rom header, but the iQue roms do not have this. Instead their headers are almost blank. The mainland release has this as its header:

80 37 12 40 00 00 00 0F 80 00 04 00 00 00 14 4C B1 E1 E0 7B 05 12 69 DD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

While the taiwanese one has this:

80 37 12 40 00 00 00 0F 80 00 04 00 00 00 14 4C 3D 81 FB 3E BD 84 3E 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Not a lot to go on for detecting the rom, although the hashes are still there at least.

gonetz commented 4 years ago

The simplest solution for now is to hack the roms headers.

GhostlyDark commented 4 years ago

I created patches for all currently known iQue ROMs that replace the blank space in the header with the header information of the corresponding US (if unavailable: Japanese) version. This allows for dumping textures and loading HD assets for iQue games as GLideN64 currently does none of that if no internal ROM name is present.

The workaround in action: iQue ROM Headers

MrCheeze commented 4 years ago

Good to have, and the workarounds do indeed work as expected. But I do still hope that in the future we can have logic to detect these builds in the plugin itself, so that e.g. TASes can be made against the "real" rom.

I can think of a couple ways to do it, but just checking the crc hash should work OK enough in practice, since under the small chance that anyone actually makes an iQue rom hack they can just edit the headers themselves.

fzurita commented 4 years ago

A potential solution could be to detect a game based on ucodes being used instead of the header.