It’s been a long time coming but RetroArch is now on the App Store, and one of my biggest contributions to it is included!
I recently posted about a test framework I was working on for libretro cores. This is the thing I was testing – a port of a Nintendo DS emulator called melonDS.1
Here are some ways melonDS DS improves upon the legacy core:
Wi-fi
melonDS DS fully supports emulating legacy Wi-fi services! By default, an open clone called Kaeru WFC is configured in the settings, so you can hop online immediately after installing.
Screen Layouts
melonDS DS offers more options for arranging the two screens, including the ability to rotate the display sideways to accommodate games that were played in “book mode”.
I have plans to make this even more powerful without compromising usability; stay tuned!
Better Error Messages
In my experience, good error messages and graceful degradation are severely underrated in the emulation scene.
Streamlined DSi Support
It streamlines DSi support; now instead of having to configure NAND images with the games you want to play, just load it through RetroArch like any other. A DSiWare game will be installed into the NAND for the duration of the session, and uninstalled at the end. Save data will be imported and exported at these points, too.
Easier to Update
It’s architected in a way that’s much easier to keep up to date. Historically, most libretro cores are forks of their original emulator’s codebase. This makes it easier to get something running quickly, but may complicate updates later when merge conflicts start to crop up. This was the case when I tried to update the Dolphin core; as it exists now, this work would’ve had to be done later again.
melonDS DS pulls in the original emulator as a dependency
via CMake’s FetchContent
module.
The main advantage is that I can update to a newer revision at any time
just by changing this line.
Since I don’t fork or vendor melonDS,
most “growing pains” with updates are limited to API changes.
And I can still use a fork later on if necessary, heaven forbid.
I even contributed some relevant features to RetroArch itself:
Microphone Support
The biggest contribution I’ve made to RetroArch itself to date has been a new API for microphone support. I implemented it for the benefit of melonDS2, but it can be used by any core that integrates support for it.
Check out this proof-of-concept I posted of mic support in action:
XDelta Softpatching
RetroArch supports applying patches to ROM images at runtime, usually for things like game mods or fan translations. Most such patches for DS games use the XDelta format, which RetroArch didn’t support…until I made it so!
Power Status Support
Well, exposing it to cores at least. Not technically all that useful, but since RetroArch itself had this capability integrating it into cores was a low-hanging fruit.
This is the best thing I’ve ever made, and it’s important to me because I had a Nintendo DS (and later, DSi) growing up. So many of the games I used to play on it may never see ports to other platforms.
At about the time I started developing melonDS DS, I was having a crisis of confidence.3 I needed to ship something that was polished and beloved, just to prove to myself that I could.
Not long after, I made it my mission to bring melonDS DS to version 1.0.4 Crossing that finish line meant a few things:
- Match the feature set of the unmaintained legacy melonDS core.
- No experience-ruining bugs. Perfection is impossible, but a pleasant gameplay session isn’t. Any new or minor bugs would be fixed later (and I still am).
- Intentionally don’t add too many extra features, at least not for 1.0. I didn’t want to fall into rabbit holes again, so I held off on certain features (e.g. solar sensor, the DSi camera) with the intent to add them later.
For months I tested melonDS DS in various emulation-related chat rooms, gathering feedback about bugs and usability issues. It paid off. It was extremely well-received in the community, and I was even invited on the RetroAchievements podcast to talk about what I did.
You can get melonDS DS from within RetroArch’s core downloader for most platforms, or bundled with the app on iOS.
If you like what I’m doing, consider throwing a couple of bones my way! The libretro and melonDS teams – whose hard work made everything you just read about possible – would appreciate some support, too.
This post is adapted from one I published on LinkedIn in June 2024.
-
The port itself is called “melonDS DS” because it’s a remake of an earlier melonDS port, and remakes on the DS often added “DS” to the title. If I had remade the DeSmuME core, I’d have called it DeSmuME DS. ↩
-
I hadn’t even begun working on melonDS DS yet. This video was taken with a patched version of the legacy core. ↩
-
For reasons that deserve another post. ↩
-
melonDS itself is at 0.9.5 as of this writing, but melonDS DS is versioned independently. ↩