How to play SNES games from Steam (with the Steam overlay)

In my quest to build the best console ever, I’ve decided to start with Steam as a base. Moving from Xbox to a custom built console means losing the overlay that lets me do things like chat with friends. Steam provides things like that, and I buy most of my games via Steam, so it makes sense to start there. And with Steam’s big picture mode, it will work perfectly with a controller.

Steam Big Picture Mode

The first challenge, then, was setting things up so I could launch my emulated games as easily as my modern games. This is how I did it.

1. Get an emulator and some games

There’s no special Steam related app that will play older games. You have to use existing emulators and ROMs you already have. Setting up emulators and ROMs is a bit outside the scope of this article, so if you don’t have any ROMs or don’t know how to use emulators, Google around, get some experience with emulators, and come back later. In this guide I’m going to be using snes9x. Get it here.

Make sure you remember where your emulators and ROMs are located. You’re going to need that later. My copy of snes9x is kept in C:\Opt\snes9x and my SNES roms are in E:\ROMs\SNES. Your locations are probably going to be different, so when you see those paths later on, change them out for your own correct paths.

2. Download Ice

Ice is a program for Windows that helps you import your games into Steam. Get it here, and unzip it.

Ice doesn’t have a GUI (yet). Configuration is done via config files, but they aren’t as hard to set up as they seem when you first see them.

3. Open config.txt

Find the line that says:

ROMs Directory=

Add the folder path where your ROMs are located. Mine looks like this:

ROMs Directory=E:\ROMs

Ice expects your ROMs to be seperated by console type. For example:

E:\ROMs\N64
E:\ROMs\PS1
E:\ROMs\SNES

4. Open emulators.txt

Ice adds each game as a shortcut in Steam. Those shortcuts load your emulator with command line arguments to open a specific game. In this step, you are going to tell Ice where the emualtor is (and how to launch it).

The emulators.txt file is pretty bare when you first open it, and only contains some example configurations.

The format for an emulator looks like this:

[Name]
location=[full path to exe]
command=[full command to run]

To add snes9x, add the following three lines:

[Snes9x]
location=C:\Opt\snes9x\snes9x.exe
command=%l -fullscreen %r

Make sure your location matches the actual exe of your copy of snes9x. In the command arugment, %l is the location (the full path to the exe), and %r is the path to the ROM. The name (Snes9x in this case) is going to be referenced later.

In this case, the actual command that is run will look something like this:

C:\Opt\snes9x\snes9x-x64.exe -fullscreen E:\ROMs\SNES\Chrono Trigger.smc

Any other command line arguments (like -fullscreen) are passed directly to the emulator.

5. Open consoles.txt

This is the file that links everything together. A block looks like this:

[Full name of system]
nickname=[Short name of system]
emulator=[Name of emulator]

The full name of the system is what is going to show up in Steam. So, for example, all games under [Super Nintendo] are going to be added to a category in Steam called Super Nintendo.

The nickname is the same as the name of your ROMs folder. So if your ROMs folder is E:\ROMs, and you put SNES here, it will look for roms in E:\ROMs\SNES.

The emulator is the name of the emulator as defined in emulators.txt. In our example above, that was Snes9x.

Change the [Super Nintendo] block to look like this:

[Super Nintendo]
nickname=SNES
emulator=Snes9x

If you named anything differently than the above examples, or if your SNES roms are not in the SNES folder, change these values accordingly.

6. Run Ice.exe

Just double click it and let it work it’s magic. Make sure Steam is closed first. If you configured it correctly, it should look something like this:

Ice in action

That’s all there is to it if you are trying to add your SNES games to Steam. They should now be mixed in with all of your other games as if they are native, and launching them will open snes9x in fullscreen mode.

There’s two more things missing though, if we are trying to make this a real console experience.

7. Fix snes9x’s video configuration

Launching the game from Steam will enable the Steam overlay, but some video configurations in snes9x will stop it from working properly. Steam will still show you as playing the correct game to your friends (the name of the SNES game you are playing, e.g., Chrono Trigger), but trying to open the overlay (via Shift+Tab, the Xbox button, or any other hotkey) will not do anything.

If you launch the game, and the overlay isn’t working, try this. Open snes9x, and click on the Video menu, and then Display Configuration. Make sure Output Method is set to either Direct3D or OpenGL. I’ve had better success with OpenGL, but I’ve also seen Direct3D work. If neither of those options change anything, it might be the Output Image Processing section. Change that, start the game from Steam, and see if it works.

My configuration works perfectly with the Output Method value set to OpenGL, the Output Display Processing value set to Super2xSal, and the Hi Res value set to Simple 2X.

SNES game with Steam overlay

That screenshot was taken in window mode just to make it easier to take a screenshot. It works just as well in Big Picture mode. Personal info blurred out. Feel free to add me on Steam.

8. Install and configure JoyToKey

Without this, there is no way to exit the game from the controller. Do not use the Steam overlay to quit the game – it will work, but it is the equivalent of the program crashing – your save games will be lost.

To close the game from the controller, Ice comes with a configuration for JoyToKey that will let you press Select+Start to quit the game.

If you’ve never used JoyToKey before, you can get it here. Download it and unzip it somewhere. There is a file called ExitCombination.cfg in the same folder as Ice. Copy it to the JoyToKey folder, and open JoyToKey.exe. Click on ExitCombination in the list of profiles to activate it. If you want to get fancy, you can click on the Settings menu and then Associate profiles with application to activate it automatically when snes9x is open, but that’s a little outside the scope of this article. But as long as the ExitCombination profile is active, pressing Start+Select on your controller will close the current window. It’s the same thing as pressing Alt-F4 on your keyboard.

If you have any trouble with the key combination, try changing which button it is set to. Under Joystick 1, one of the buttons says Use Joystick #5 configuration. This is your Select button. If it’s set to the wrong button (mine is set to Button 7), this is the value you want to change. The Start button is set to Alt+F4 in the Joystick 5 tab.

JoytoKey

9. You’re done!

Steam should now show SNES games as if they were native games. Opening one should set your currently playing game on Steam, and you should be able to use all features of the Steam overlay while in game, like web browsing and chatting. Have fun!

Steam with SNES games

mike

Michael Day is a web engineer, javascript junkie, video game enthusiast, and blogger. Hating how the big console makers were taking advantage of gamers, he made the switch to PC and set it upon himself to make a machine that did everything the more popular consoles wouldn't.

  • Awesome!!!

  • I wonder why hasn’t somebody configured ice and packed it into a neat little package yet.

    • Having a version of Ice that is preconfigured would mean forcing you to move your roms to a certain place, naming your emulators a certain way, etc. What Ice really needs is a GUI, so you can set all of those values without having to edit the config files directly.

  • AnghellicKarma

    Unfortunately, I cannot get this to work. It detects my SNES9x emulator, but not any of my games.

    • I wonder what the problem is. Does it give you any sort of error message or just kind of finish up the script like it’s looking at an empty folder?

      • AnghellicKarma

        Here’s a post I made for it on Github, but no response yet :/

        https://github.com/scottrice/Ice/issues/296

        • I noticed that in consoles.txt, it says “Snes9x”, but in emulators.txt, it says ” Snes9X”. The “x” is a capital in one but not the other. Try making them match and run Ice again. Please report back with results!

          • AnghellicKarma

            Wow, that was it. Awesome! Now I want to go ahead and add other emulated games as well! Thanks for the idea!

          • Glad I could help!

  • MonoAudioStereo

    Hey! This thing is just amazing. Thank you so much for the tutorial!

    • JoyToKey is not the best solution – it’s just the best one that I know of so far. Whatever you do, don’t use the Steam GUI to force quit snes9x. I found out the hard way this loses all of your progress, as snes9x wont write your save files.

      I wonder if snes9x is stealing the input somehow, and preventing JoyToKey from getting it. I’d be curious to see what happens if you unbound those keys in snes9x and tried again.

      • MonoAudioStereo

        I already found solution. It was so simple that I feel dumb for even asking for help. I just had to run JoyToKey with admin rights.

  • Pingback: An introduction to game emulators | myconsole.io()

  • Jay Gee

    Question, I play old fighting games online versus other players through an emulator called FightCade.

    Would this work with that?

    • Michael Day

      I haven’t had any success opening games directly using FightCade, so this method doesn’t really work with it. FightCade only seems to work when you open the lobby first, login, and then open a game.

      The best you can do is add FightCade to Steam (select “Add a non-Steam game to my library” in Steam). If you do that, I have confirmed that the Steam overlay works once you are actually playing a game (tested with Street Fighter Alpha 2). I made a quick Steam grid image you can use here: http://imgur.com/L9LUx9D.

      • Jay Gee

        Hey thanks for the reply.

        I haven’t had success getting the overlay to pop up when launching FightCade through my Steam Library.

        Do you use any specific launch commands? Does this work for the online part of FightCade or were you referring to the offline way to use FightCade’s emulator?

        Thanks for any and all help!

        • No problem. I’m happy to help.

          I did not use any specific launch commands. I just added FightCade.exe to Steam and launched it via Steam. The overlay did not work in the lobby, but it did work once I opened an actual game. It worked both playing solo (double clicking my own username), and spectating a live match.

          The game was Street Fighter Alpha 2, which meant it was using FB Alpha for the emulator. What games are you trying? Sometimes programs wont work with the overlay due to what library they are using for graphics rendering (OpenGL vs Direct3D, etc).

      • Jerry Richardson

        hello …. can you help me …. i cant get it to find the ROMs

        • For legal reasons, I can’t help you find ROMs. The legality of them is touchy at best, and most sites that talk about emulation wont tell you where to get roms or even tolerate talk about it. In fact, this post was removed from /r/steam on reddit after people started asking where to find roms. All I can tell you is to use Google. Good luck.

  • Kristopher Italiano

    Very well written and easy to understand directions. Everything works flawlessly with my 360 controller connected to my computer. Do you have any ideas on getting this to work with Steam Link? I can launch the game but once there I have no control over the emulator except to press the center button to force close the window.

    • Michael Day

      Different emulators are going to have different problems when streaming, largely due to the fact that it’s not your actual controller connected to the PC that is running the emulator, but an emulated xinput controller created by Steam (or Gamestream, if you are streaming with something like Moonlight).

      There’s a few emulators you can configure to pick up xinput controllers automatically. I think Dolphin does this, and there is a plugin for PCSX2 that can do this too. Basically, look for a way to enable xinput for the controller, and it should pick up the button configurations itself.

      Here’s something you can do for emulators where you have to configure the controller manually:

      Install Chrome Remote Desktop on your PC, and then install the mobile app on your phone (Android here, iOS here. If you are on Android, it’s also useful to install Hacker’s Keyboard, which will give you keys like Alt, Ctrl, Function Keys, Windows key, etc.

      Once you have that set up, open the game streaming. Now you can use your phone to connect to the computer and open the emulator’s settings. When setting up the controller, assign buttons using keys on your Steam controller. It should pick up the right keys. You’ll need to reassign it when you are playing on your PC again. I’ve done this using NVIDIA Gamestream and snes9x, but it should work for Steam and other emulators, too.

      It’s a bit of a pain, but I’m not sure there’s a better way to do it unless you can hack xinput support into the emulator itself.

      Another thing to keep in mind when streaming emulators is that force quitting from the Steam UI can result in losing your saves, depending on when the emulator writes files. Dolphin, for example, seems to save just fine, but snes9x only writes saves to disk when you are quitting the emulator normally. It’s a good idea to open your emulator, play for a few minutes, create a save, and then force quit it using the Steam UI to test it out. If you load the emulator up a second time and your save is not there, you know that you can’t quit the program that way in the future. In that case, you can load up Chrome Remote Desktop and quit the emulator that way.

  • Thanks so much for this write up. I had some issues with the JoyToKey setup but found an alternative route that works for me. One thing I noticed is that tweaking the snes9x settings can reduce input lag by disabling all of the extra buffering options in the video settings. Also switch to the 59hz with vsync on.

    Also I recommend getting a 8bitdo SNES controller.

  • Chief Rocka

    Got the shortcuts added into my steam library but none of them are able to launch and I’m not sure what I’m doing wrong here I went back through the steps to setting it all up twice now but still can’t seem to find what’s causing this issue. I checked the git hub page for ice and could not find a solution so I’m posting here in case anyone has had this issue before or has this issue, if anyone happens to see this any help will be greatly appreciated. thanks for this well written guide Mike (OP); even though I was unable to get it up and running perfectly I appreciate the work you’ve done here.

    • Hey! Sorry for getting back to you so late. Check the actual entries in Steam and see what they are launching – there might be a typo somewhere. You can find the actual command it’s running by right clicking on the title and going to the properties. If you need help with this let me know and I can give you some more detailed instructions. Paste the command and arguments here and I will take a look.

  • Kriztov

    Hi Mike,
    Love the idea, but no dice so far.
    Config looks fine, but when I run Ice it’s just flashing up and closing. Log shows “Starting Ice” and nothing else. Tried running Ice from cmd to see if I could get any more info and I’m getting ‘An error has occurred’ “Storage”. [Storage] is listed in the config as the ROM directory path – mine’s not complex (ROMs Directory=C:EmulatorsROMs) so currently hitting a wall. I’m only trying to add Snes9x and all my ROMs are in ROMsSNES… help?

    • If you can post your logs in a pastebin link, I can take a look at them for you and see if I notice anything out of place.

  • Pingback: Anonymous()

  • Mr. Wednesday

    Do you know how to get Ice to add multiple rom of different emulators? It isn’t working and I think I’m doing something wrong with the config file but I don’t know what. It looks like this in the notepad: ROMs Directory=F:Video GamesROMs. Do I need to add anything?