

It's time for us to again delve into the latest changes hitting the newest release of Dolphin Emulator. If you've been keeping tabs on development channels, you'll know there are some exciting bombshell features waiting for us just over the horizon. Unfortunately, given the close proximity to this release, we've decided to hold a lot of them off so they can get more widespread testing in the development builds before hitting a release. Think of the March 2025 release as an iterative improvement that focuses on experience and stacking many small iterative improvements instead of swinging for every homerun.
Having said all of that? We do have a few major changes that made the cut.
Probably the most requested of the features in this progress report is the ability to finally set custom graphical settings on a per game basis. Our advanced s may be thinking, "Wait, couldn't we already do that?" and they'd be right. The major change here is that per-game graphical settings has been added directly to the game properties page, allowing for a very easy, visual way to change settings and see what settings are force enabled.
For our achievement hunters out there, RetroAchievements has seen its first major upgrade that will bring a huge amount of quality of life to many games. And if you're into weird old game behaviors? A developer dove into Summoner: A Goddess Reborn to determine why it crashes so much. The catch with this one? Some of these crashes have been confirmed to happen on official hardware!
Additionally, there are a plethora of small, but tangible, changes that are the hallmark of an Open Source project. The desktop versions of Dolphin also saw a lot of improvements to input configuration and a few extra upgrades that might make people who want to track their time spent in games very happy. But, let's not spoil everything and get into the notable changes of the March 2025 release!
Release 2503a¶ 1z4p54
On April 21 2025, we created Hotfix Release 2503a to fix some problems that snuck into Release 2503:
- Fixed a bug that caused GBA connectivity in some games to not work properly.
- Fixed a bug where Dolphin would crash with a memory error on some older macOS versions.
- Fixed an problem with our build system which caused Release 2503 to be mislabeled as a 2412 development build on some platforms.
Notable Changes¶ 39372c
Cheat Code Whitelist for Hardcore RetroAchievements - ¶ 3n2h3z
RetroAchievements in Dolphin has received its first major update, and it's... cheat in hardcore?! What gives?
Up until around the 7th generation, video game consoles did not have operating systems, and software had complete control over the hardware. While "running on the metal" is simple and efficient, the only security on such systems was the proprietary interfaces needed to load code onto the machine. If someone could fashion a device that could access the memory of one of these consoles, they could do effectively anything.
What did gamers do with this incredible power? Cheat at video games of course!
An entire cottage industry developed around cheating, with dedicated hardware, companies, jobs, and entire communities, all built on cheats! By the time the GameCube arrived, a cheat device video game enhancer was guaranteed to come out shortly after a console launched, a customer could buy one in the same retail store where they bought the console and buy games, and they could find tens of thousands of codes readily available for free on the internet! For a moment, cheating was mainstream (within the niche market that was video gaming at that time).
During this era, the kind of player who would buy a device to cheat at video games was also the kind of player who would dump their games to emulate them on PC. In fact, many game enhancers had the ability to dump games! This overlap made cheat an essential feature for emulators. Because Dolphin's development began in this era, Dolphin ed Action Replay codes before it ed Wii games.
However, cheat systems are still just a way to edit memory. It didn't take long for emulator s to figure out that they could use cheat systems for far more than just cheating at video games. They could use cheats to change the game itself. Widescreen aspect ratio codes, anti-invert stick codes, bloom removal codes - most of the "cheats" being developed today aren't for cheating at all, but to adjust games to better fit modern sensibilities, add quality of life changes, or improve accessibility.

When RetroAchievement in Dolphin launched late last year, cheats and many other features were disabled whenever RetroAchievements' hardcore mode was active. The leaderboard is for those that take achievements seriously and want a record of their accomplishments, so cheats could trivialize their efforts. But once RetroAchievement was merged, those same overachievers pleaded with RA staff for limited cheat in hardcore mode. Cheats remain the primary way to patch unfortunate game behaviors and add quality of life improvements, and the hardcore community wanted to be able to utilize those kinds of cheats while climbing the leaderboard.
After some deliberation within the RetroAchievements staff, the conclusion was an allowlist. Select and specific cheat codes are now able to be used in RetroAchievements' hardcore mode. Most of them are widescreen aspect ratio codes, but there are other changes as well, such as unlocking the C-Stick to smash feature in single player Super Smash Bros. Melee modes, or codes to fix game issues like freezes and bugs. Now overachievers can enjoy the thrills of Gotta Get 'Em All in the comfort of 16:9.
As part of this effort, LillyJadeKatrin went through our wiki looking for cheat codes, then spent hours adding hundreds of new cheats to Dolphin's built in cheat code database. Everyone benefits from this, whether achievement hunting or not!
Qt Input Mapping Lightning Round by ¶ 313e2i
For the past couple of months, Billiard has been going through Dolphin's input mapping systems like a storm, cleaning up and improving dozens of things! There are too many for us to even show, but here are some highlights.
Note that most of these changes only apply to desktop builds of Dolphin; Android is not affected.
— ¶ 1o6f5e
Input entry is now non-blocking, and multiple input mappings can be queued/un-queued/cleared without locking the UI.
— ¶ 1o6f5e
For years, Dolphin's mapping windows have had some sort of indicator that would light up when the presses a button that is mapped to an emulated button. This is a quick and easy way to confirm to the that they have successfully mapped a button and that it is working correctly. However, how that indicator looks and works has changed dramatically.
When the mapping indicators were first introduced, they were red graphical indicators that were detached from their associated buttons.
When we moved from the WX interface to the Qt interface we now use on desktop, this was changed to lighting up the input within the mapped button itself simply by bolding it.
It was never a great solution, but it was good enough and was simple to implement in the storm that was our move to Qt. It left us a little wanting though.
Billiard, thinking back to the original design, realized that with Qt, we could do something MUCH better.
— ¶ 1o6f5e
Dolphin's advanced mapping window is incredibly powerful, with all of our mapping complexity laid bare and ready for all the input shenanigans a power could dream of. However, most s don't want to interact with all of our mapping complexity, but they may want to do some basics such as AND and OR. AND was possible simply by pressing two buttons at once, and then it would require the player to press both buttons to send the emulated input, simple. But OR required going into the advanced input mapping window. Given how often s want to be able to press either of two physical buttons to engage single emulated button, Billiard wanted some way to accomodate that without requiring s to plunge into the depths of our mapping system.
To achieve that goal, there is now a new option - Wait for Alternate Input Mappings. When this feature is enabled, there is a small delay added after each input, allowing s to make multiple individual inputs. For example, to map two physical buttons to one emulated button, with this feature all a needs to do is press one button on their controller, then quickly press the next button. Now either input will trigger the emulated button. Simple as that!
To access this feature, click the arrow beside Refresh.

— ¶ 1o6f5e
Iterative input is a nice feature that can take some of the tedium away from configuring a controller. Having to look down, figure out what button you want to push, then use your mouse to go to the next input over and over again can be annoying, especially if you're just trying to set things up as a couch gamer. That's where iterative can really shine. But, unfortunately, its history with Dolphin has been rocky at best.
The upside is clear - with just a single click, iterative input allows a to go through every input on the screen one by one without needing to return to your mouse or keyboard. This feature took so long to return because it's hard to do right, especially with controllers as complicated as the Wii Remote. Last time, problems were revealed and it was easier to remove it outright than to fix it.
Billiard has given it another go, with a brand new implementation that doesn't suffer any of the issues of the original. Plus, with the non-blocking changes above, it now is a much smoother experience simply from being implemented now. Iterative input is currently disabled by default, but can be enabled in the controller mapping window.

— Input mapping expression improvements - ¶ 2a1j3d
For our advanced input mapping extraordinaires, Dolphin's input expression parser saw many improvements.
- Conditional Operator Added
Dolphin's mapping expressions have long provided an "if" function for creating conditional expressions:if(`A`, 1.0, 0.6)
But this syntax can be cumbersome and unfamiliar, so the ternary conditional operator syntax that's present in many other programming languages has finally been added:`A` ? 1.0 : 0.6
- Assignment Operator Fixed
Probably unknown to most s, mapping expressions -defined variables. These can be used to share state across frames, with other mappings, or just in as a means of organization. This can allow for very customizable and dynamic control schemes. Variables are created with the $ symbol and can be given a value using the familiar assignment operator = . For instance:$x = `A` ? 1.0 : 0.6
Sometimes writers of complex mapping expressions like to describe their calculations as a multiple step process. The comma operator was already provided for this, and functions like it does in other programming languages. This contrived example below effectively does the same thing as the previous example, but in two steps, which can sometimes create more-readable or maintainable code when the calculations get overly long winded. For example:$a = `A`, $x = $a ? 1.0 : 0.6
For technical reasons that we won't get into, the previously mentioned assignment operator was implemented in a manner that did not play nice with the comma operator. It also didn't play nice with other assignment operators. While the operators worked fine in simple use-cases, power s could observe these two operators doing wrong or unexpected things when paired together. Comma and assignment operators can now be used together like intended and should do what someone familiar with them would expect them to do, even in complex cases. - Compound Assignment Operators Added
One final nice-to-have was added to the mapping expressions - compound assignment operators. When altering a -defined variable based on its current value, the variable name previously always had to be mentioned twice, once on either side of the assignment-operator. Here is an example that reduces the current value of a variable:$x = $x - 0.6
So-called compound assignment operators are now provided to allow this previously verbose syntax to be much more succinct:$x -= 0.6
This syntax can be used with all of the binary operators for which it makes sense:&|^+-*/%
¶ 6nt53
One thing that many s have been requesting for a very long time is a visual interface for editing per-game settings. While Dolphin has provided a single page with a few key settings, the majority of the settings had to be added via the text editor.


While this change doesn't add everything, now s can set most graphics settings directly in the game properties page. While this functionality already existed by using the text interface, the visual interface makes it easy to see what settings are force enabled, and allows s an easy way to set them without having to memorize the names of the settings.

Note that this feature should be considered a work in progress, and the current design may not reflect a more complete solution in the future.
¶ 6nt53
For those of you who do video dumping in Dolphin, you may have noticed that a lot of modern video editors didn't play nice with the lossless codec in Dolphin. That's because Dolphin used to default to the rather old FFV1 video codec. For TASers or people just wanting extremely high quality footage of the games, it frequently got in their way.
Fortunately, an alternative was added a few years ago - the Ut Video codec. This codec is what OBS chose for their lossless recording, granting it extremely widespread compatibility. Despite requiring an INI edit to use in Dolphin, the codec's popularity has compelled us to make the switch. By default Dolphin's lossless frame dumping feature will now use the Ut Video codec for greater compatibility. For those that want to still use FFV1, you still can do that through changing the config file manually.
¶ 6nt53
Summoner: A Goddess Reborn has been a problematic title in Dolphin since the very beginning. While there were reports that some builds work better than others, the game has never been stable. In fact, playing through it from beginning to end in Dolphin was an arduous experience that meant dealing with crashes and constantly swapping between different U clock values in different parts of the game to just for a chance to get to the next section.
And now, we finally know why. This game is just broken and you can even cause the same crashes on console!
Click to Play. File has audio.
To be completely fair, the game isn't nearly as bad on console. While we did find some consistent crashes that helped us track down this bug, playing through the game isn't nearly as arduous. Still, the very same bug that causes the game to occasionally crash on console is what is causing it to crash in Dolphin, which means there isn't a great chance of us fixing it through emulation changes.
Charlese2 said enough was enough and decided to figure out what was going on with this mysterious crash. And within a few days, we had an answer. Summoner: A Goddess Reborn reinitializes its sound system buffers during transitions even if sounds are still being played. If there are still pointers in the sound list to sounds in the buffers when the buffers get cleared, the game crashes with a null pointer dereference.
This is a serious bug that should be affecting console at the same rate as Dolphin, but it doesn't. Our best guess is that the Audio Interface DMA interrupt timings are slightly different on console, which causes things to happen in a slightly different order most of the time. However, the bug is there - even in a perfect, cycle accurate emulator, Summoner would occasionally crash if it is not modified.
To address this, Charlese2 dove into the game and decided to fix the bug themselves! A lengthy patch (that is enabled by default in the latest builds of Dolphin) cleans up the pending sound list during sound system reinitialization before continuing to the sound system initialization call. With this patch, even known crashes when playing on console are fixed.
Click to Play. File has audio.
¶ 6nt53
Tracking time played is something we almost take for granted these days. Whether you play on a Nintendo Switch, PlayStation, or Steam, all of these platforms track your playtime for all of their titles. It's just expected behavior now.
Dolphin however emulates the GameCube and Wii, consoles that came out long before this trend. Unlike modern systems, the GameCube didn't have a clue how many hours you've rolled around at the speed of sound, and the Wii would only show it on a day-by-day basis. But what if Dolphin could track your total play times?
And now it can! As of this change, Dolphin can now track the time played for all of its titles and display it in the game list.
Play time tracking is enabled by default, so all it takes to track your time played is a quick update to the latest Dolphin version! If you'd rather not, you can disable it by going to Config > Interface and unchecking Enable Time Tracking. You can also remove the time played column from the game list if you wish without impacting whether or not your play time is tracked.
Currently only our Qt graphical interface can display play time.
NOTE: Time played can only be tracked in 2412-305 and newer.
¶ 6nt53
For our TASers that need to use Wii Remotes, this is a long overdue change. For a basic rundown, when a person makes a Tool-Assisted Speedrun (TAS), they're essentially creating a long string of controller inputs that, when played back, completes a game quickly or accomplishes some other impressive feat. These controller inputs have to be stored in some way so they can be played back later. Like most emulators, Dolphin has a custom file format for this, and it's called DTM (Dolphin TAS Movie). It's a relatively simple format: 256 bytes of metadata and settings, followed by all the controller inputs and nothing else.
Depending on how optimized you intend your TAS to be, you might use Dolphin's input recordings alongside slowdown, frame-by-frame, savestates, or even rely on scripts (using specialized TASing forks) that generate inputs through bruteforcing across hundreds of hours!

Dolphin's DTM format was originally designed for GameCube controllers and works fairly well for them. For Wii Remotes, the format has been quite a bit more cumbersome. Wii Remotes are a nightmare for emulation on a level that no controller before them can match. The Bluetooth connectivity is annoying, you can swap attachments, it has an infrared receiver, a small amount of EEPROM, battery levels, and of course, its signature motion controls. In fact, a Wii Remote collects so much data that it can't be sent all at once! Games that Wii Remotes have to tell them what reporting mode to use, with different reporting modes sending different data and using different levels of precision. And to make things even tricker, Nintendo decided to encrypt data from extension controllers. We don't know if this was to make things harder for third-party controller manufacturers or for some other reason, but we do know that it has made things harder both for TASers and Dolphin developers!
How do you bolt all of this into a format that was designed for GameCube controllers? Dolphin's solution was to store data in the same format a Wii Remote would send it, using whatever reporting mode the game specified. This did work, but came with a lot of consequences. At the start of a recording, you'd be locked into your Wii Remote configuration. You couldn't change attachments during a recording, and manually editing DTM files in a hex editor was almost impossible. The reason for this was that the game could change reporting modes throughout a playthrough, and if the wrong sort of data was provided at the wrong time, the game would refuse to accept it.

But it didn't have to be this way. When Wii Remotes were added to netplay, they suffered from all of these problems (and more!) which made Wii netplay into a nightmare. But, eventually addressed a lot of these issues to make Wii Remote netplay slightly more tolerable.
The new system, rather than naively copying the Wii Remote data as-is, used an intermediary structure that can then be translated into the game-requested format on the fly. This elegant solution allows the input data to be manipulated without fear of breakage from the ever-changing game state. On top of significantly improving stability, it gave for more games by allowing s to change attachments mid-session.
While it may not seem like it at first glance, a lot of what netplay does overlaps with "movie" which is used for TASing. They both require absolute determinism, recording inputs, and playing back inputs. When looking for ways to improve things for TASers, Billiard realized that iralCurtiss's netplay improvements were never ported over to movies! He decided to replace the old way of storing Wii Remote data in DTM files with netplay's intermediary format, bringing many of the improvements over.
We're hoping that this new format makes creating optimized Wii TASes easier and more stable. On the Dolphin side of things, it was also a maintenance win. A bunch of ugly code related to reporting modes and extension data encryption became unnecessary and was removed. As per usual, if you've started a TAS on an older build of Dolphin, you're more-or-less stuck there. Not only is the new DTM format incompatible with the old one, any minor change to Dolphin could break the syncing of a TAS. When creating a new TAS, please ensure that the build of Dolphin you're using s the feature set you need to accomplish your goals. This goes for whether you're using an official build of Dolphin or a scripting fork. And for the TASers out there doing crazy things in Dolphin, we're always looking forward to seeing what you do next.
This Release's Contributors...¶ 2v1v5
Special thanks to all of the contributors that incremented Dolphin by 341 commits after Release 2412!