This game follows the anti-pattern of calling memset on a buffer in the
midst of being DMA copied to ARAM, then calling a DVD read function that
effectively cancels the memset with dcbi instructions. Dolphin does not
emulate dcache for performance reasons, so this patch removes the
offending memset call.
Patches are included for two regions and are enabled by default.
https://bugs.dolphin-emu.org/issues/12759
- Given proper credits for the NTSC-U "Bypass Metafortress" patch (SUKE01.ini)
- Ported the "Bypass Metafortress" patch to the PAL version (SUKP01.ini)
This game has stale icache values in the logs during certain
loadscreens, and after disabling them I was able to play through the
entire game, with one crash that may have been related to savestates and
memory cards since during that loadscreen it said the memory card did
not match.
This does cause invalid reads to be spit out during parts of the game,
but you can safely skip them. Enabling MMU seems to surpress the
invalid reads without side-effects, but the aforementioned
memcard/savestate crash was with MMU on.
For unknown reasons, a Gecko Code on the Wiki for Rayman Arena that was
meant to help with widescreen patches. This doesn't actually change
anything about the game unless you enable Dolphin's built-in widescreen
hack, where it will cause enemies and whatnot to render on the edges of
the screen. This is because it patches out the culling function in the
game, which coincidentally is also the cause of the hang in Dolphin.
With "Store EFB Copies to Texture Only" set to True (the default setting), areas of Excite Truck appear darker than on console. For example, in Sylvan Glen under the Bronze cup, all of the trees appear very dark, nearly black. On console, this does not occur.
Start of the race on Dolphin: https://youtu.be/KjJ-55lwFkE?t=817
Start of the race on Console: https://youtu.be/0W9blwA8AG4?t=699
Setting EFBToTextureEnable = False fixes this issue and does not appear to introduce any performance impacts, so I am recommending that this be disabled by default for this game.
Apparently MMU is no longer needed in these titles. All 3 booted and
played into gameplay in the latest builds without issues, and disabling
MMU results in a very slight, but noticeable performance boost.
At least on Android, SyncGPU has really bad performance compared to
single core. It's less stable too - I get fatal GPU desyncs in
Pokémon XD using the default settings.
This Pull Request updates N64 INIs based on what I know about various
behaviors since the last time we updated it. This should result in more
sane settings for Mario Tennis and Super Smash Bros. while still
preventing the out of memory crash due to the tremendous amounts of EFB
copies.
Red Steel 2 has FMVs that get corrupted with Anisotropic filtering. It
also hangs on dualcore. While SyncGPU works, both another user and
myself saw much smoother gameplay when using Single Core for unknown
reasons.
Same problem as 658eed4... Except instead of just making the
comments use #, I'm actually removing some of the codes entirely
because they are of questionable value.
Should fix https://bugs.dolphin-emu.org/issues/12737.
This game requires emulating the Fifo Pipeline or have Single Core be
able to read ahead in the Fifo. Because Single Core currently processes
things in a serialized manner, this game will not run regardless of
CPU/GPU timing hacks.
This game is the earliest of Heavy Iron Studios' games and has a similar
offset issue to that of the SpongeBob and Incredibles games. While they
weren't offsetting it and breaking shadows like the other games, there's
still an offset in the upper left corner of the screen. This fixes
that, and has no effect at 1x IR, so it's safe to enable by default.
SpongeBob SquarePants: Battle for Bikini Bottom and The Movie Game,
along with the two Incredibles titles suffer from an EFB offset issue
described in earlier commits. This commit adds offsets for the
Incredibles and The Incredibles: Rise of the Underminer releases
and adds additional inis for SpongeBob special releases.
SpongeBob SquarePants: The Movie suffers from all of the same issues as
Battle for Bikini Bottom. These patches are not based on any existing
cheats or codes.
Only the NTSC version of Gladius got a patch with smurf3tte's reverse
engineering work. Since most of the work was done, I ported over the
fix to the PAL, French, and German releases. Leoetlino helped figure
out a consistent way to find the correct address.
This enables Vertex Rounding Hack and has a game patch for two bugs
resulting from game choices. The game draws an efb copy at
coordinate 0.00195313 to 1.00195 repeating which only works due to how the
numbers work out at low resolution.
The Vertex Rounding Hack is a null operation on 1x IR, so there should
be no concern enabling it by default since higher resolutions are
completely broken without it.
This is a port of the NTSC patch to the Japanese and PAL regions. Bonta
converted the GBA code, and leoetlino helped convert some addresses for
the japanese version.
de Blob 2 has the same engine as de blob and shares a lot of the same
issues. I copied the settings used for de blob. It seems defer EFB
copies was the main culprit, but force texture filtering could also
cause problems.
At extreme angles, there is severe shadow zfighting with fast depth
disabled. Enabling it causes it work on all backends without issue.
Verified in OpenGL, D3D11, D3D12, and Vulkan.
Sin & Punishment: Star Successor has rendering issues in the upper left
part of the screen. While we can't completely fix it, by disabling
Store EFB Copies to Texture only, we can make it from a missing box to
just a couple of lines being visible that make up the copy region.
Disables Store EFB Copies to Texture Only. As this game has a lot of
water, the water not rendering correctly provides a pretty significant
gameplay issue.
Baten Kaitos will crash with certain items in your inventory if you
scroll over them in the shop screen. SyncGPU does not fix the issue,
but single core does.
Specifically, 'Scooby-Doo! Mystery Mayhem', 'Scooby-Doo! Unmasked', 'Ed, Edd n Eddy: The Mis-Edventures', and the Wii version of 'Happy Feet'.
The JIT cache causes problems with emulated icache invalidation in these games, resulting in areas failing to load.
These games are erroneously zeroing buffers before they can be fully copied to ARAM by DMA. The responsible memset() calls are followed by a call to DVDRead() which issues dcbi instructions that effectively cancel the memset() on real hardware. Because Dolphin lacks dcache emulation, the effects of the memset() calls are observed, which causes missing audio.
In a comment on the original bug, phire noted that the issue can be corrected by simply nop'ing out the offending memset() calls. Because the games dynamically load different .rel executables based on the character and/or language, the addresses of these calls can vary.
To deal generally with the problem of code being dynamically loaded to fixed, known addresses, the patch engine is extended to support conditional patches which require a match against a known value. This sort of thing is already achievable with Action Replay/Gecko codes, but their use depends on enabling cheats globally in Dolphin, which is not a prerequisite shared by patches.
Patches are included for every region, character, and language combination. They are enabled by default.
The end result is an approximation of the games' behavior on real hardware without the associated complexity of proper dcache emulation.
https://bugs.dolphin-emu.org/issues/9840
This game can deadlock the CPU and GPU by setting FIFO breakpoints too infrequently, provided the CPU gets too far ahead, as can happen under Dolphin due to timing inaccuracies. The game never clears breakpoints, and it will skip setting them if the previous one has not been hit by the GPU. If the CPU gets far enough ahead it will reach the FIFO high water mark and trigger an overflow interrupt, causing the render thread to be suspended. The GPU will make forward progress until it hits the last set breakpoint. However, if the distance between that breakpoint and the FIFO write pointer is greater than the low water mark, then the GPU will never generate an underflow interrupt and the render thread will never be resumed. This patch forces the game to update the breakpoint unconditionally and has been tested on real hardware with no apparent ill effect.
This patch covers the US release (GLSE64), but there are three more (GLSD64, GLSF64, GLSP64) that will likely require similar patches.