Dolphin Progress Release 2609 Dolphin Emulator released version 2609, which adds NetPlay support to its Android build and addresses an AI-driven wave of vulnerability reports plus a macOS buildbot cryptominer compromise that the project says did not affect any builds. The project said people are using AI to mass-scan open source projects for potential vulnerabilities and overwhelm its volunteer team with verbose reports, forcing effort into patching and workflow changes, while a macOS vulnerability briefly let a generic cryptominer compromise the macOS buildbot. Developer tom-pratt built the Android NetPlay GUI across several pull requests using Jetpack Compose, bringing lockstep NetPlay to Android for the first time. Welcome to Dolphin 2609's accompanying Progress Report Like everyone else, we've been doing our best to weather the Techpocalypse brought on by AI, but it's really come after us in the past few months. Our website has been up and down repeatedly lately, as our defenses are barely holding out under the endless bombardment. But now AI has started to come for the emulator directly, with people using AI to mass-scan open source projects for potential vulnerabilities and overwhelm our volunteer team with very verbose reports. Though draining, once these vulnerabilities are out there, we can't ignore them. A lot of effort has had to be diverted to deal with them, both in patching them and adjusting our workflows to better manage them. For more information, zip directly to that section with this link here brace-for-impact-the-ai-vulnerability-reporting-wave-crashes-into-dolphin . But that's not all. A vulnerability in macOS allowed our macOS buildbot to be briefly compromised by a generic cryptominer attack. We'll skip the quick summary and just point you toward the full story below, which you can reach by clicking here the-macos-cryptominer-incident . The important thing is that we have determined that no builds were compromised . We really just want to keep making Dolphin better. Fortunately, despite these headaches and roadbumps, there are still quite a few notable changes to go through, so let's get to it. Notable Changes ¶ notable-changes All changes below are available in Release 2609. 2606-91 - Android NetPlay https://dolphin-emu.org/download/dev/master/2606-91/ by tom-pratt https://github.com/tom-pratt ¶ 2606-91-android-netplay-by-tom-pratt 2606-91 - Android NetPlay https://dolphin-emu.org/download/dev/master/2606-91/ tom-pratt https://github.com/tom-pratt Under the hood, our mobile and desktop builds are almost identical. Dolphin is simply Dolphin; the only difference is the UI that lays on top. Despite this, our Android release doesn't have feature parity with our flagship desktop builds. A lot of features that are missing in the Android GUI that are present in the desktop GUI are mostly missing because they'd be difficult to implement or would have limited value on Android. NetPlay once fell into both camps. For those unaware, Dolphin has lockstep NetPlay https://dolphin-emu.org/docs/guides/netplay-guide/ available to allow for online play in games that only had local multiplayer. Lockstep NetPlay requires perfect synchronization between each instance, and thus Dolphin has to run in a deterministic mode. This means forcing Single Core or using a slower and even hackier version of Dual Core , setting the same starting time/seed, and making sure the same inputs make it to every machine. Optionally, save data and cheats can also be synchronized for use on NetPlay. If done right, each instance of the emulator will stay synchronized with no further intervention, with Dolphin only passing inputs. All of these complexities make NetPlay an enticing, but often cumbersome-to-use feature. And given that it would be annoying to create a good GUI for NetPlay on Android and it would make games run slower on already limited hardware, there was no rush to implement it on Android. In the 2020s, the scales started to tilt in the other direction. Android devices have gotten stronger and stronger, and though CPU governors and GPU drivers still confound us, many flagship devices can run games in Single Core just fine. Additionally, Jetpack Compose https://developer.android.com/compose for Android allows for easier and faster development of Android GUIs. Wanting to share some of his favorite childhood experiences with his own kids, tom-pratt https://github.com/tom-pratt stepped up to the challenge. Using Compose, he built up the NetPlay Android GUI across several pull requests, with an initial bare bones implementation. This made it easier to review and eventually merge, and was quickly followed up with more features, such as controller port configuration https://github.com/dolphin-emu/dolphin/pull/14750 for the host, that brings it closer to parity with the desktop implementation. And now, as of Dolphin 2609, NetPlay is ready for Android users Currently, Android NetPlay requires users to be on a standard network Wi-Fi, Ethernet, etc , but work has been started on adding support for Wi-Fi Direct, which would allow Android NetPlay to function between nearby devices with no network, similar to how the Nintendo DS's local Wi-Fi play worked. Note : Using NetPlay over mobile data is not recommended. Even if you can get it to work, the packet loss and latency are not particularly suitable for lockstep multiplayer. Cross Platform NetPlay ¶ cross-platform-netplay Can Android and desktop Dolphin play together with NetPlay? Yes, they can Players can mix and match devices with whatever they have, so phones and laptops can play together just fine However, there are some limitations that must be kept in mind. Most full-size desktops use x86-64 processors, while most phones use ARM processors, and Dolphin uses different JITs depending on the host CPU. While our ARM64 and x86-64 JITs are very similar, they are not completely identical, and those JIT differences are likely to cause desyncs. Mixing and matching CPU architectures isn't a guaranteed failure though - whether these differences lead to a desync or not depends on what instructions games use and in what order. Ignoring the JIT problem, there is one more major source of potential desyncs: the Framebuffer Games that use EFB Access and/or Store EFB/XFB Copies to RAM can get different results from different graphics drivers. If these results mismatch at all , even if it doesn't directly affect game logic, a timebase desync will usually be reported. Often this won't outright break NetPlay at least immediately , but if the difference becomes big enough, the instances will diverge. Given how special Adreno and Mali drivers are, there may even be problems when playing between different kinds of phones in those games In many games, none of these limitations will come into play. Even the differences in the JITs may not end up mattering. However, keep these factors in mind if everything is set up correctly and you're still experiencing desyncs. 2603-394 https://dolphin-emu.org/download/dev/master/2603-394/ and 2606-121 https://dolphin-emu.org/download/dev/master/2606-121/ - Add XFB Resolution OSD Display by elyashue https://github.com/elyashue and JosJuice https://github.com/JosJuice ¶ 2603-394-and-2606-121-add-xfb-resolution-osd-display-by-elyashue-and-josjuice 2603-394 https://dolphin-emu.org/download/dev/master/2603-394/ and 2606-121 https://dolphin-emu.org/download/dev/master/2606-121/ - Add XFB Resolution OSD Display elyashue https://github.com/elyashue and JosJuice https://github.com/JosJuice As we have covered a few https://dolphin-emu.org/blog/2015/08/01/dolphin-progress-report-july-2015/ 40-7138-pixel-aspect-ratio-adjustment-vi-scaling-fix-by-mirrorbender times https://dolphin-emu.org/blog/2023/05/21/dolphin-progress-report-february-march-april-2023/ new-post-processing-shaders before https://dolphin-emu.org/blog/2023/11/25/dolphin-progress-report-august-september-and-october-2023/ what-is-output-resampling , GameCube and Wii games were made with analog displays in mind, where overscanning https://en.wikipedia.org/wiki/Overscan the edges of the screen away was the norm and the pixels didn't even need to be square Since the only requirement was "close enough", GameCube and Wii games usually render around 640x480, but the exact rendering resolution will vary from game to game and even scene to scene . Given this vague resolution reality, some users wanted a tool to know the exact resolution that a game was running at, but Dolphin didn't really have a way to tell them. The best existing method was to take a screenshot at Raw Internal Resolution , but that doesn't tell you what a game is doing right now, only what the game was doing when you took that shot. Plus, you have to check the screenshot to see the dimensions. This simple change allows users to know in real time what a game is doing with resolution. Go to Config On Screen Display and turn on "Show XFB Resolution", and the game's current resolution will be shown in our on-screen overlay. Now as games change resolutions, you can see exactly what is happening, as it happens Here are some NTSC examples. The GameCube and Wii use non-square pixels, so the aspect ratio is not defined by the rendering resolution. With this new feature, you can see that for yourself in games like F-Zero GX https://wiki.dolphin-emu.org/index.php?title=F-Zero GX . As expected, 640x480 is prevalent across the GameCube and Wii library. 640x456 is common on Nintendo-developed Wii games. The NES and SNES had a vertical resolution of 224 lines. This legacy can be found on the GameCube and Wii in the many games that use the doubling of that vertical resolution: 448. But ultimately, games can do whatever they want Games can even change resolution during play Rogue Leader uses 640x450 for normal gameplay. But its cutscenes are anti-aliased, which increases the memory needed per pixel, so cutscenes use a smaller framebuffer size of 640x304. This also gives these scenes a cinematic aspect ratio of 2.1:1 - turning a technical detail into a visual flourish is exactly what we've come to expect from Factor 5. As should be pretty clear from the thumbnails, the statistic shown is specifically the resolution the game is telling the emulated console to output XFB resolution , not what Dolphin is actually presenting. Dolphin's aspect ratio compensation, internal resolution multipliers, and output presentation after resampling are not demonstrated by this feature. 2606-186 - Android: Route DolphinBar Balance Board to the Balance Board slot https://dolphin-emu.org/download/dev/master/2606-186/ by tommywaaf https://github.com/tommywaaf ¶ 2606-186-android-route-dolphinbar-balance-board-to-the-balance-board-slot-by-tommywaaf 2606-186 - Android: Route DolphinBar Balance Board to the Balance Board slot https://dolphin-emu.org/download/dev/master/2606-186/ tommywaaf https://github.com/tommywaaf When Dolphin on Android was being prototyped back in 2012, Wii Remote support was easy - use Dolphin's Real Wii Remote feature to connect it through the device's on-board Bluetooth adapter. Simple. Unfortunately, the Google Graveyard https://killedbygoogle.com/ beat us to the punch. Android 4.2.1 made changes to the Bluetooth stack to improve Bluetooth controller support, and in the process broke Wii Remote support https://issuetracker.google.com/issues/36966083 entirely . Since Android 4.2.1, no Android device has been able to use Wii Remotes with their native Bluetooth connection. So when Dolphin on Android Beta became available to the public in 2013, there was no way to use Wii Remotes. Fortunately, the Mayflash DolphinBar came to the rescue. By integrating its own Bluetooth radio and passing HID reports directly to Dolphin, the Mayflash DolphinBar could allow Wii Remotes to connect even on uncooperative operating systems and Bluetooth stacks. In 4.0-8877, Dolphin Android gained the ability to connect to the Mayflash DolphinBar https://dolphin-emu.org/blog/2016/03/01/dolphin-progress-report-february-2016/ 40-8877-android-implement-support-for-real-wiimotes-with-the-dolphinbar-by-sonicadvance1-and-40-8886-android-add-ui-support-for-newly-implemented-dolphinbar-support-by-sigmabeta , finally allowing this tentpole feature to work on Android. But something was missing in that update. The Wii Balance Board didn't work After Nintendo's grand experiment to expand beyond the standard gamer audience proved tremendously successful, Nintendo noticed that many people were using its new console's revolutionary motion controls for regular exercise. Naturally, Nintendo responded with a peripheral made specifically for that: the Wii Balance Board. Effectively four pressure sensors inside a big flat Wii Remote that you stand on https://wiibrew.org/wiki/Wii Balance Board , the Balance Board itself is incredibly simple, but it opened the doors to fitness software so successful that the Balance Board was genuinely used in hospitals for physical therapy https://www.patriotledger.com/story/lifestyle/health-fitness/2011/02/10/nintendo-wii-helps-patients-rehab/37945537007/ It was less successful outside of fitness, with Balance Board support in games like Super Monkey Ball: Step & Roll https://wiki.dolphin-emu.org/index.php?title=Super Monkey Ball: Step %26 Roll and Skate It https://wiki.dolphin-emu.org/index.php?title=Skate It mostly receiving a "meh" response from players, though it did establish a strong niche in party games. Since the Wii Balance Board is basically just a Wii Remote, it was pretty trivial for Dolphin to support. Once Dolphin added the Balance Board device ID to its Real Wii Remote code, it connected just like a Wii Remote would. The same applies to the Mayflash DolphinBar. The Balance Board can connect to the Mayflash DolphinBar, and Dolphin can detect the Balance Board through it. Simple. On Android though? The fun fitness-focused peripheral was able to connect to the Mayflash DolphinBar just fine, but Dolphin on Android simply didn't look for it , making the peripheral unusable and all of the games that required it unplayable Where the code for the check should have been was simply // TODO . Oops. A simple four line change makes Dolphin on Android aware that the Balance Board exists, allowing the peripheral and the 135 games