Dolphin Progress Report: November 2015

Black Friday is a day when many gamers splurge for deals on their favorite games and consoles. For Dolphin testing, this presents an opportunity for users and testers alike to get a lot of games for very, very cheap. So, in honor of that, here's a picture of a Black Friday haul. Thirty-three Wii games and a Drawesome tablet for fifty dollars isn't too shabby of a haul, plus other deals and markdowns grabbed throughout the week make for a monster pile of games to test!

Black Friday

Imagine the total cost of all of these games added together if you bought them new when they were released!

Note that even the marked down sticker tags are do not tell the full tale; many of the games were even cheaper than that once all the promotions kicked in! One tester has a very, very busy holiday ahead!

Notable Changes

4.0-8084 - Flush Vertex Manager if Components Change by flacs

The Vertex Loader JIT has been a part of Dolphin for nearly a year at this point, and for the most part has been nothing but a solid speedup for most users. No serious regressions were immediately noticed and things have gone very well. But, this change wouldn't be mentioned if something hadn't gone wrong. It turns out that Pokémon Colosseum and Pokémon XD: Gale of Darkness seemed to have some problems.

Pokémon Colosseum

After the Vertex Loader JIT was merged, Milotic was looking a bit pale

The thing is, The Vertex Loader JIT didn't do anything wrong to cause this; the bug was pre-existing, although dormant. It turns out one of the flags is not checked when merging primitives, so if a game only toggles that one, other primitives will be merged even through they did not share this flag. All of them are rendered with the same state; even though some of them should be rendered with a different state! A hack proved this to be the case with a fifoci run and a full implementation of the fix quickly followed.


FifoCI showing the fixes

4.0-8159 - Don't Send Return Only Events to Poll by Parlane

Ever since the ES_Launch fixes made the Wii Menu functional, users have taken advantage of this to boot up their favorite channels and games in a very authentic experience. Dolphin testers way back when even used the Internet Channel to navigate to Dolphin's website!

Somewhere along the line, Internet Channel functionality broke and no one knows why. When attempting to bisect, users came to the conclusion that it never worked, even though there is video proof of it working in older versions of Dolphin. Thankfully, mickdermack, with some help from users on IRC, was able to narrow down what was causing this strange regression. POLLHUP was being asked for from the Internet Channel. When Dolphin sent this to poll, the channel ceased to work correctly as it is a return only event. It would fail to load any page despite having internet connectivity.


No pages would load with this defect


Now it's working as expected; though the Wii's web browser doesn't work everywhere!

With Dolphin now refusing to send return only events, the channel now works correctly once more.

4.0-8172 - Read disc data asynchronously in a new thread by JosJuice

Dolphin's DVDInterface inserts a delay before loading data so that loading times will be similar to ones on consoles. During the delay, the CPU thread continues emulating the CPU, then afterward Dolphin loads the data from the user's drive. But if that drive happens to be a spinning platter hard drive, reading the data from the hard drive becomes a slow process, slow enough that emulation may have to wait for a moment for the loading to complete before gameplay can resume.

This change creates a new thread that reads data from the hard drive during the delay. Since disc loading is no longer taxing the primary thread, the game being emulated no longer takes a performance hit during loading. This is especially important for games with dynamic loading, such as the Metroid Prime series. While shader compilation stuttering is still present, this fix addresses one of the many causes of stuttering in the game, and is a definite improvement to this longstanding issue!

4.0-8176 - Fix Crash for Invalid Textures by degasus

Medabots Infinity looks like an N64 game, because essentially, it is. Much like Animal Crossing, it is more or less a port of an incomplete N64 game to a much more powerful console. The models are low polygon, the textures are washed out, and it is by far one of the fastest games to emulate (it commonly can hit full speed in the cached interpreter) and doesn't really use any of the fancy effects we'd expect on a GameCube. It's a mostly harmless game that should be no problem to emulate in Dolphin.

Except, in one of the first levels the emulator outright crashes when you shoot a balloon.

Medabots Infinity

Shoot that, and the entire game would crash!

What happens at this point is that the game tries to load a texture from an invalid address. This data is then caught by Dolphin, and the emulator crashes because it's invalid. No one currently knows what the game is actually trying to do, though. The best guess anyone has is that the same error exists on console, but the GameCube happens to ignore the request and not crash the game. Because there is no visual difference that anyone can tell, this is assumed to be the case for the time being.

4.0-8185 - Reset Native GC Adapter Rumble after Stopping Game by mathieui

The GameCube Controller's rumble motor (src: ifixit)

One of the most widely asked for features regarding controllers is stopping rumble when a game is stopped. The way rumble works on the GC/Wii is that a rumble signal is sent when the controller is to start rumbling. It then rumbles until the game sends the signal to stop rumbling. On console, the only thing that can interrupt this chain of events is turning off the console, which kills power to the controller. In an emulator, there are tons of things that can happen between when a controller is told to start rumbling and stop rumbling; the emulator could be closed, it could crash, the game could lag in a specific manner on dualcore causing the signal to get missed and much, much more. If anything happens causing the game to not send that "STOP" signal, the controller would then rumble until the next time a game sent the signal to stop rumbling! Even unplugging a native GameCube controller and plugging it back in would not fix this.

In order to mitigate this issue, Dolphin now manually sends the signal to stop rumble on actions that are likely to trigger the infinite rumble glitch, such as closing a game, pausing the emulator, or taking screenshots. For the time being, this is only applied to Native GameCube Support, where it is the most common. But it should soon be applied to everything.

In Case You Missed It

Because this progress report is a bit shorter, people looking for some extra content can look to some of the special features posted during November.

Rodea: The Sky Soldier - The Wii's last AAA Release?

Rodea: The Sky Soldier launched to middling reviews and general disdain for the most part. That's because everyone is playing the wrong version. While the Wii U/3DS games are paint-by-number platformers using Rodea's assets, the Wii version of the game is a much more unique game with a fresh control scheme. Strangely enough, the Wii version actually looks far superior to the Wii U version on top of being regarded as the superior version even by the game's creator. We dived into the game in a feature article last month: Rodea: The Sky Soldier Releases for Wii U, 3DS and... Wii?

If you're looking to get your hands on this title; it's going to be fairly difficult at this point. While some of the launch copies of the Wii U version included the Wii version of the game, it's becoming increasingly rare as time goes on.

Emulating Complex Emulators

One of the Wii's most resounding legacies is that it was able to emulate tons of older games. Nintendo's own Virtual Console service expanded the Wii's library by hundreds of games, while homebrew developers opened up the door for thousands with ports of emulators that support entire libraries of games. While it makes sense to run an emulator on a Wii, it doesn't really make much sense to run these emulators on Dolphin. Afterall, wouldn't these games run better/faster in a native emulator? For the most part, yes, but in very specific cases, (mainly Pokémon Snap,) Nintendo's emulators running in Dolphin actually provide the simplest way to play through the game without severe bugs. The tradeoff is that emulating an emulator takes exponentially more power than running an emulator natively. As such, performance does become an issue, especially on weaker computers.

Why all this build up? Because one of Dolphin's testers decided to take the most complex of the Wii's homebrew emulators and throw them at Dolphin. The results are entertaining, at the very least.

Last Month's Contributors...

Special thanks to all of the contributors that incremented Dolphin from 4.0-8082 through to 4.0-8256!