SteamDeck | RetroArch and mGBA for Trading Pokémon

I bought the SteamDeck for a number of reasons. One such reason was to turn it into a portable retro gaming station. I know there are a lot of other options out there to do this task but this one was the most economical and already had Linux installed on it. That meant, very little faffing about to get the hardware to work well with my preferred platform. It also meant that I could manage files on my SteamDeck the way I want to, not the way Valve or someone else wants. Linux and the Plasma Desktop environment with the SteamDeck truly makes gaming much more enjoyable.

The Point

The point of this write up is to hopefully help someone using RetroArch and mGBA interchangeably with the save files. It took some digging to understand where things were stored and how to successfully use the save files so that I can do “trades” between different emulated Pokémon games using mGBA and play the games in RetroArch on the SteamDeck.

RetroArch Save Files

The first challenge was to figure out where the actual save files for stored on the SteamDeck with RetroArch. I selected to install RetroArch on the SD Card instead of the internal storage and that path is:

/run/media/mmcblk0p1/steamapps/common/RetroArch/saves/

The name of the save file will be the same as the ROM image name but with a .srm extension. In contrast, mGBA puts the save files along side the ROM image and uses a .sav extension. Interestingly, RetroArch uses mGBA as the game engine. From what I can tell, there are no differences between .sav and .srm files. They are interchangeable which begs the question, “why would developers make this unnecessarily complicated?” Perhaps there is a good reason and I just haven’t stumbled upon that GIT commit or read the developer’s blog. Regardless. it is a bit of a confusing thing that must be understood.

If you, perhaps, had a game going on your laptop or some other device and wanted to move the game to your SteamDeck to play in RetroArch, that is absolutely a possibility. Assuming you are playing the same version of game, lets say, “Pokémon FireRed (USA),” all you will have to do is take the .sav file created by mGBA or even a save file from an actual cartridge, ensure the name of the file matches the ROM RetroArch is using and make the extension .srm. I can confirm I have tested this with Gameboy and Gameboy Advance games with success.

Doing Pokémon Trades with mGBA

The process of trading Pokemon on mGBA takes a bit of patience and willingness to fiddle a bit and knowledge about where your various files sit on your SteamDeck. You are going to have to really want to accomplish this as it is not all that convenient.

Scenario

You are playing Pokémon FireRed and you want to make trades to fill out your Pokédex. Since you don’t actually have any friends that are playing the game and the friends you DO have would look at you funny because most haven’t played the game in almost 20 years… if at all. That means I have been doing a little playing in LeafGreen so I can get those exclusive Pokémon to trade. Yes, it’s silly but why not?

What You Will Need

  • SteamDeck or any other machine capable of running mGBA.
  • A Second controller, something like the Bluetooth Wii U Pro controller works great.
  • The Pokémon games

This means, I have been playing both games, using RetroArch on the SteamDeck. I have also been using the RetroArch version within Steam because the controls have been well adjusted for play on the SteamDeck itself.

mGBA

While in Desktop Mode on the SteamDeck. Open up mGBA. I am assuming here you know how to install the mGBA Flatpak.

Load up the ROM file, preferably the same one that you use in RetroArch but anywhere is fine, really, so long as it is the same version. Then you need to load the alternate save file from RetroArch:

File > Save games > Load alternate save game…

Navigate to the aforementioned location for the RetroArch save files. There you will have to clear the filter else you will not see the .srm file types.

The game will restart and you will see that your save game data is present.

Now, you will have to open a New multiplayer window:

File > New multiplayer window

In a similar fashion, open up the compatible Pokémon game in the new window.

Here is an important usability note that must be made. On the SteamDeck in Desktop Mode, with Steam running as seen in the system tray, the controls on the console will also act as mouse interface controls. This will conflict a bit with mGBA, you can ameliorate this by using 2nd paired controller or keyboard and mouse which is admittedly NOT ideal.

Check the settings on the second window that it is using the secondary controller you have connected to the SteamDeck:

Tools > Settings…

Select the “Controllers” section and verify or alter as necessary the selected controller.

Frustratingly, the settings window is slightly too tall for the resolution of the built in screen so that adds another user experience hurdle to jump over. The positive take-away here is that the default inputs tend to be correct so no tweaking is necessary here.

Once the control issue is sorted out, each controller will navigate your player and you can proceed with the Pokémon trading activity.

I never had a GameBoy or similar when they were new but thinking about this, from the perspective of 1990s me, I would have found this whole experience quite fascinating. Sure, I had already played PC LAN games but a handheld device with real-time positional updating had to have been pretty remarkable.

Once you make the trade, mGBA will go through the saving action you would have experienced on the GBA and the task is completed. Maybe not with the same excitement as plugging in a link cable but now it is absolutely possible to have a slice of that 1990s or early 2000s experience on the SteamDeck.

There is a thing that you couldn’t do on the original hardware, “game the system” as it were. This may be obvious but it is very possible to make these trades without actually losing the Pokémon for the other save file. There is nothing stopping you from working off of a copy of the save file and really, only grind out your Pokémon once, make the transfers as you go and beat two games in about the time you would one.

Final Thoughts

SteamDeck has opened up revisiting the gaming I missed for various reasons. The Pokémon series from the 90s and early 2000s being one such franchise. Is it the highest and best use of my time? Probably not but I think it’s important to find the little its of happiness between the daily grinding away at necessities in life.

The SteamDeck makes it very convenient to enjoy these works of art from another era. Is it exactly the same? Certainly not but I also had the pleasure of using an actual GameBoy and although nostalgic, it was not as good of a gaming experience as I have on the SteamDeck. Truly, the SteamDeck makes short little stints of picking up and playing these old games such a pleasure. Combine that with the continually improving gaming experience of these machines has made this device a good, long-term, investment in video game entertainment.

It should be noted that all this can be done on a more conventional, desktop Linux machine and really, might be ever so slightly easier to do. I could, as a follow up, demonstrate how you can do the entire mGBA process from a remote Laptop or Desktop with the fun capability of SFTP and the KIO components of the Plasma Desktop environment. Linux truly makes gaming way more fun and flexible than anything else.

References

SteamDeck resource on CubicleNate.com
mGBA | Game Boy Emulation on Linux
Wii U Pro Controller on openSUSE Linux

7 thoughts on “SteamDeck | RetroArch and mGBA for Trading Pokémon

  1. For me when both saved it was only:
    “Please Wait … … B Button: Cancel” and nothing else happened.

    This happened to me when I loaded “Pokemon – Fire Red.GBA” into Player 1 and “Pokémon FireRed.gba” into Player 2.
    Both are the same game but from a different folder (even same file, not different sources, I just copied and renamed one of them after copying.) but I think the problem was they were named different.

    For me the working solution was:
    Load the same ROM from the same folder.
    But if you use different ROMs, load them from the same folder, I think that will solve it.

    (I used “Load alternative save file” for Player 1 because I wanted to trade into my Retroarch save from an mGBA save (Player 2) [So I was trading starter pokémons into my Retroarch save] so be careful if you also want to trade from FireRed to FireRed because if you created both your save files in Player 1 mGBA slot, you can overwrite it accidentally, this maybe can be avoided to rename one of .sa1 savefile to .sa2, but I didn’t test it, so again, be careful)

      1. Sorry, I wrote this “guide” on a YouTube video that wasn’t into details like your guide and I just copy-pasted the entire guide on a lot of guide video and because your site was the first one that went into the details on Retroarch with mGBA and I really appreacite it, I thought everybody could see my steps/advices.
        I’m sorry if It sounded strange or like I thought you didn’t make necessary steps for this guide.

Leave a Reply