Things have slowed down, but, that's a good thing. As we hopefully enter the final days of the 4.0 era, there are simply less changes being merged. Dolphin is under a feature freeze, and with few bugs remaining, developers have become exceedingly picky about what can be safely merged into the emulator. So we apologize for the lack of updates, but we promise it will be worth it. To make up for the lack of content, here's another weird game we sent to JMC47 in order to torment him. Enjoy that along with this month's notable changes.
Much like last month, the partial update changes do not fix something that didn't work in Dolphin at some point in the past. All of these fixes are for "regressions" from various cleanups to the EFB Copies code. It turned out that Store EFB Copies to Texture was working in a lot of cases that it really shouldn't, and with the added checks and restrictions put in, those cases were made much more obviously broken, mostly dealing with partial updates to EFB copies. Using last month's example, Donkey Kong Country Returns, everything rendered perfectly in Store EFB Copies to Texture, but, in reality, EFB Copies to Texture was actually rendering Donkey Kong one pixel too big. This didn't matter because the EFB Copy is huge, and most of it is transparent, so users never noticed.
We actually have two more cases that we knew were broken and wanted to make one large progress report entry with them all, but sometimes the timing doesn't work out. The two major fixes in this group are for more cases that stopped working with those additional checks in the code.
Sonic Riders Blur¶
This is fairly straight forward. In order to do the blur effect for high speeds, Sonic Riders puts the screen into an EFB Copy and then overlaps it again and again with new data creating a simple blur that is stronger around the edge of the screen. Previously Dolphin was throwing it out after one frame since it was already used and the game didn't take another EFB Copy causing Sonic Riders to blur in black instead of an EFB Copy, making the outsides of the screen very dark.
The reason Dolphin was throwing them out after one frame was an optimization in the original partial updates code meant to make things run faster. Turns out it didn't make much of a difference and games managed to break on the optimization anyway. With this change, Sonic Riders, Sonic Riders: Zero Gravity, Dave Mirra BMX Challenge, and ATV Quad Racing 2 have working blur effects once again.
Partial Updates to Paletted Textures Fixes Mario Superstar Baseball¶
This is the same kind of issue as Donkey Kong Country Returns except this time applied to Paletted EFB Copies. Prior to discovering that this game was broken, we didn't have a test case to handle this code so it was left broken. Once is was discovered and could be tested, mimimi moved the paletted EFB Copy code to a function and called it in its original place and in the partial updates code.
Mario Superstar Baseball is the only game that seems to benefit from this feature.
The GameCube has a lot of strange hardware quirks, but, we're about 90% sure that the Direct Memory Access (DMA) doesn't suddenly become instant while the GameCube runs Resident Evil 2 or Resident Evil 3 yet that's what Dolphin's code seems to indicate. While it'd be too risky too remove the hack (and break the music in Resident Evil 2/3) with a release upcoming, we came to a very strange problem. The hack for Resident Evil 2/3 were now causing issues in other games that were incidentally triggering the hack.
Now, there are games that do some really tricky stuff with the audio RAM; in the case of the game we discovered was broken, ATV Quad Racing 2, they were using the audio RAM for storage of bones and animation.
By making the timings too fast, this broke the game and it eventually exploded. The Instant ARAM-DMA hack wasn't designed to actually be instant; it suffered from the same Core Timing issues of everything else, so when phire fixed that, it became too fast. Considering everything is working for now, we decided the best course of action was to delay the hack's timings to how it was working before. This repairs the games without any new regressions and allows us to delay actually figuring out what's going on until after Dolphin 5.0 is released.
Wii Remotes have a 200hz polling rate, meaning they update with the Wii every 5 milliseconds. In every controller we've seen historically, they didn't update that fast, but they managed to be perfectly fine regardless. Then came the Xbox One controller. The Windows driver for the controller was incapable of handling rumble commands at 200hz. This caused rumble to be heavily delayed or not play at all.
It turns out this was at least partially Dolphin's fault. Modern rumble should only send an "on" command when rumble is activated, then an "off" command when it is time for rumble to stop. But as of 4.0-4536, Dolphin was constantly sending "off" or "on" commands whenever rumble was active. Most controllers and drivers have no issue with this, including the Linux Xbox One controller drivers, but Windows could not handle it. This change simply goes back to only updating when the rumble state changes, fixing the issue.
This is really two D3D changes rolled into one that will make it behave identically to OpenGL in several situations. The first of which is some depth copies were breaking with MSAA. Users playing Metroid Prime 2, for instance, wouldn't be able to use the scan visor while using MSAA. This repairs the behavior back to before the regression.
The other one is the long delayed fix for Donkey Kong Country Returns for D3D. Last month we talked about how partial updates were needed for Store EFB Copies to Texture to work. But even with that, D3D still flickered Donkey Kong into and out of existence. Why? The stage manager was desyncing on certain patterns of EFB Copies, causing them to become unbound. So while Dolphin was expecting the EFB Copies to be rendered certain frames, D3D was deciding to unbind them.
These definitely aren't familiar images. Nope, completely original and made for this progress report.
CPUs process instructions linearly, one after the other. But if something needs to be done immediately, a piece of hardware can send an external interrupt to the CPU. The interrupt will halt the CPUs linear chain of commands and jump to a new chain from the interrupt, then it will process the interrupt’s chain then resume regular execution.
Dolphin is emulating a console, so it has to emulate the interrupts of the GameCube and Wii. Emulated GC and Wii interrupts will not interrupt the real CPU, so after a set number of instructions, Dolphin advances emulated time to allow emulated external systems to run, then checks to see what emulated interrupts fired when time was advanced, then resumes executing instructions.
At least, that’s how it’s supposed to work. Previously, a change was made that placed the check for interrupts before advancing time. This meant that thousands of instructions would be processed before the interrupts were checked, creating a delay in interrupt processing that games did not expect. Any game that happened to be really sensitive to interrupt timing was broken.
Pokémon Box: Ruby & Sapphire is actually a bit funnier in that before phire's Event Timing fixes, it didn't mind the exception totally missing. It only started caring once the exception was being hit late. The other games that were fixed were having issues long before the Event Timing fixes.
Oh yeah, Metroid: Other M's bug was similar, but it was an edgecase causing it to be multiple seconds off in all CPU backends.
These are two commits that repair two separate issues centering around the Nintendo GameCube Adapter for Wii U when used on netplay. These are regressions from when the GC Adapter code was untwined from the standard controller code and there are possibly others. One of the main problems that was occurring was that users that were using native controller support could not play users using standard controllers. This was because the code for plugging/unplugging native controllers was slightly different (and more accurate) than standard controllers and netplay is fairly weird. For now, the behavior was just reverted to the way it was before the cleanup, making it use the same code as a standard controller for connecting/disconnecting. Do note that temporarily, when not using netplay some games may not boot immediately if you start a game with Native Controllers enabled but not plugged into the adapter. This is a bug and will be rectified very soon.
The second commit is the same type of problem, but instead of causing desyncs it just didn't send rumble commands correctly. For this one, mathieui added a generic rumble function that will work for any device.
In the future, these special cases shouldn't be needed if netplay is rewritten with the advances that have gone through Dolphin in the last few years in mind.
There was a minor incident this month that users should keep in mind. It appears Capcom is cracking down on files uploaded to various filehosts in an attempt to get rid of illegally pirated content. Unfortunately, they've taken the fish in a barrel method to an extreme and have taken down legitimate files in their hunt for copyright violations.
The URL that Capcom reported as violating their copyright: https://t.co/PNrptfsvj3— Dolphin Emulator (@Dolphin_Emu) March 30, 2016
There isn't even a screenshot of their game on there!
The files in question are customized builds of Dolphin from several years ago with hacks designed to improve Monster Hunter Tri. None of Capcom's copywritten material was in the files and they were only 12MB. Even scrubbed and compressed, we highly doubt that Monster Hunter Tri would fit into a 12MB zip file. Because of this flag, Google unlisted some pages of our forums that linked to these files, so we filed a counter notice to correct this obvious error. Unfortunately, our counter notice was refused.
At this time, Google has decided not to take action based on our policies concerning content removal and reinstatement. We encourage you to review http://www.educause.edu/library/digital-millennium-copyright-act-dmca for more information about the DMCA.
So, users uploading files to file hosts, even screenshots, modified builds, texture packs, or anything else need to be warned: Putting a game's name on any of the files could result in your files being taken down or delisted by a bot. And it appears that none of the companies involved care whether they're infringing upon your rights or not.