How to launch emulator games from steam

Method 1 – Use ‘Ice’ for Steam

When it works, Ice can make the process of adding ROMs and ISOs to Steam a lot less time consuming.

How it works:

Ice []is a script that directly edits Steam’s shortcut .vdf file (which stores all of Steam’s shortcut paths for non-Steam games). You tell Ice where your emulators live and where your games live and then let it do its thing. It sounds simple; and in principle, it is.

Ice has no UI, so it’s a manual setup process that requires a fair amount of editing of config files. There are instructions[] and FAQs[] on the website, but they are woefully brief and don’t really explain what Ice does, which would probably help when it comes to troubleshooting.

The lack of transparency about how Ice works has led to a common misconception that Ice is a front end of sorts, or is in some way responsible for launching the games, when all it does is create the necessary shortcuts within Steam (which can be done manually, as shown in Method 2).

The online setup guide doesn’t prepare you for the variety of issues you can run into, and assumes you’re creating your game folders from scratch (which most users probably aren’t). There’s also no guide to the various command line arguments you need for each emulator or which emulators are supported.

Rather than follow the guide you can just point Ice’s config file to your existing ROM folders, but you have to make sure you get it right first time. Multiple runs can create duplicates in Steam, which makes adding additional games problematic as you have to delete duplicates one by one. Also, Ice is a bit picky about special characters and can fill your Steam library with lots of junk if you point it at the wrong directory.

Having said all that, it’s very well supported and those for whom it’s worked seem to love it.


  • If it works as it should it will save you hours creating your own shortcuts in Steam
  • It has an image scraper that will also automatically add grid images to Steam, instead of having to add them manually one by one
  • Excellent support. Scott (its creator) responds to questions, problems and suggestions and there’s a whole load of other users who can help if you get stuck


  • Doesn’t work for all emulators
  • Lots can go wrong; the error messages can be baffling or undecipherable to most users and troubleshooting is tough
  • The online guide is too brief and doesn’t cater for people with existing libraries of ROMs
  • Lack of emulator-specific guides
  • Although running Ice itself is quick, the preparation of reorganising your library for the script to work and renaming your files for the image scraper to work can take a very long time

Method 2 – Add the shortcuts manually

Many assume that Ice is the only way to configure emulator games to launch from Steam, but it’s actually just an automated way of editing Steam’s shortcuts, which you can do yourself.

Adding non-Steam games is great when you have an executable file to point it too, but not only do emulator ROMs not have exes, but you also need to tell Steam which emulator to use. Fortunately, Steam allows you to edit the shortcut paths, meaning you can just give it the path of the emulator and the game you want it to run. All you have to do is create the shortcut in the first place.

How it works:

  • Create a shortcut in Steam by pointing it to the .exe for the emulator you will launch the game with (you can create shortcuts from any old executable, and edit them later, but using the .exe for the emulator is half the shortcut you’ll need to launch the game)
  • Right click on the shortcut in your Steam library and choose ‘Properties’
  • Under where it says ‘Target’ you will see the path to the emulator (if that’s what you used for your exe), all you need to do is then add the path to the ROM after the path to the emulator, like so:
    “C:EmulatorsN64Project64 2.1Project64.exe” “C:EmulatorsGamesN64Banjo-Kazooie (Europe) (En,Fr,De).n64”

    An example of a Steam shortcut properties window

  • The ‘Start in’ will have the folder path of whichever .exe you used, but it’s not important and leaving it blank doesn’t seem to cause any problems.
  • Go to ‘Grid’ view in Steam (under the ‘View’ menu), right click on the shortcut you created and select ‘Set custom image…’ – add an image. (Steam Banners[] has a great selection of grid images, including many by myself :-))

  • That’s it. Well, almost…

There are a few emulators that need some additional command line arguments, to either work properly or just to make the launch a bit more seamless. Here are some examples, most are optional but some are required:

  • MAME (no need for the ROM path, just tell it the ROM name)
    “C:EmulatorsArcadeMameUI64Mameui64.exe” -autosave -skip_gameinfo -nowindow

    (‘-autosave’ saves the gamestate on exit, the others are self explanatory)

  • PCSX2
    “C:EmulatorsSony Playstation 2pcsx2-v1.3.1pcsx2.exe” –nogui –fullscreen –fullboot “G:EmulatorsGamesPlaystation 2Legend of Spyro – A New Beginning.iso”

    (‘–fullboot’ is optional, for those who like to see the Playstation logo before the game launches ;-))

  • ePSXe
    “C:EmulatorsSony PlaystationePSXe1925epsxe.exe” -loadmemc0 memcardsAlien.mcr -nogui -loadbin “G:EmulatorsGamesPlaystationAlien TrilogyAlien Trilogy.bin”

    (‘-loadmemc0’ creates a memory card file for the game, which otherwise wouldn’t be created)

  • Dolphin
    “C:EmulatorsGameCube & WiiDolphin-x64Dolphin.exe” /e “G:EmulatorsGamesWiiDonkey Kong Country Returns.wbfs” /b

    (The ‘/e’ loads the file specified directly into Dolphin and the ‘/b’ switch exits Dolphin when you close the game)

  • Stella
    “C:EmulatorsAtari 2600StellaStella.exe” “G:EmulatorsGamesAtari” -fullscreen 1

    (Stella is windowed by default, so the ‘fullscreen 1’ command forces a full screen launch)

    “C:EmulatorsPSPppssppPPSSPPWindows64.exe” “C:EmulatorsEmulator GamesPSPDaxter_EUR.iso” –fullscreen

    (PPSSPP also goes windowed by default so requires the ‘–fullscreen’ command to launch full screen)

  • Higan (Include the library path of the sfc file after the emulator path rather than the ROM’s path)
    “C:EmulatorsFamicomhigan-accuracy.exe” “C:EmulatorsEmulator GamesHigan LibrarySuper FamicomBust-A-Move.sfc”

I found most of these command lines over at the Launchbox website (thanks Jason!), which has an awesomely comprehensive list[] of all command line arguments for emulators you may need.


Although this method is simple it can be time consuming if you’re planning on adding a large number of games, so here are a few tips to ease the pain:

  • Create multiple exes of the same file to start off with (the Ctrl+mouse drag method is a quick way of creating multiple copies). This will save time when adding lots of exes to Steam that you can then edit.
  • Create a text file with all the paths of the ROMs that you can just copy and paste into the ‘Target’ section of the Steam shortcuts, rather than typing them out one by one. To do this:
  1. Open a command window in the Windows folder where all your games live (shift & right mouse click)
  2. Type the following into the command window:
    dir /s/b >list.txt

    Example of a command window

  3. You’ll still need to add the quote marks and the emulator path to each line, but if you’re good with spreadsheets then you can just create a quick formula to do it for you.
  4. When you’re done, you will have a text document that contains all the paths to the games that you can just copy and paste into each Steam shortcut. All you need to do then is add the images.


  • I’m yet to come across an emulator this method doesn’t work with
  • You’re in complete control of what you add and what you don’t
  • A good learning experience about how Steam shortcuts work, which can help if you ever run into trouble or need to move files/libraries
  • Can be used in conjunction with Ice to make additional shortcuts or for those emulators that Ice struggles with


  • Time consuming – this method can takes days out of your life if you have a lot of games across multiple emulators
  • If you lose your Steam shortcuts (after a reinstall or another reason) you’ll have to do them from scratch (although keeping a copy of the text file with all the file paths, as suggested above, can help with this)

Method 3 – Create independent launchers for each ROM

Instead of putting the file paths for the emulator and the ROMs directly into Steam this method puts them in an .exe file which Steam can then be pointed to.

There are a couple of ways this can be done, but the most effective requires the creation of executable files from batch files.

Mister Slimm’s method[] creates a batch file containing the path of the emulator and the game, in a very similar format to that used in Method 2, and then converts it to an .exe.

How it works:

  • Create a new text document anywhere you like. Open it up and write the path to the emulator followed by the path to the ROM, just like in Method 2, but start off with the starting folder path of the emulator (ie C:EmulatorsNintendo 64Project64 2.2). Something like this:
    CD “C:Emulators\Nintendo 64Project64 2.2”
    “C:Emulators\Nintendo 64Project64 2.1Project64.exe” “G:EmulatorsGamesNintendo 64Banjo-Kazooie (Europe) (En,Fr,De).n64”
  • Now select “Save As…” from the ‘File’ menu, give the file a name, but then add ‘.bat’ on the end (without the quotes) instead of ‘.txt’. Also, change the ‘Save as type’ from “.txt” to “All files” as shown below:

  • You should now have a fully functioning .bat file, so just double click it to make sure it works. If it does, it should launch the game.
  • Unfortunately, Steam ignores .bat files if you try and add them as shortcuts, so you have to convert them to an .exe. There are a number of free applications available to do this for you, but thankfully Mister Slimm made his own, which is fast and simple, and available from his downloads page[].
  • That’s pretty much it, although you’ll need to include the same command lines for certain emulators as described in Method 2. Mister Slimm includes a few of these command lines in his guide, but you can also use the Launchbox ‘Emulator settings’ guide [] to deduce what additional commands you may need.

An alternative method that many people use is very similar in principle but points Steam directly to the .bat file by pointing it first to a dummy .exe and then manually editing the path in Steam. This method is detailed in DrBaronVonEvil’s guide.

Unfortunately, this method has a number of compatibility issues with Big Picture, first and foremost being that Steam Overlay doesn’t work, but it’s a good example of an another method.


  • If you ever have to reinstall Steam or your Steam shortcuts are accidentally wiped, (which can happen) setting them up again is simple. Steam will also remember any grid images you have linked to the shortcuts (they are stored in the cloud), which is a massive bonus!
  • Exe files can be launched by anything, not just Steam.
  • If you ever need to set up the shortcuts on another PC, you can just copy the launchers over (as long as you keep the paths identical on the other PC).
  • This method is 100% future proof against any potential changes Valve make to how shortcuts work, since it’s the .exes that are launching the games, not Steam.


  • Also very, very time consuming. Even more so than Method 2 since you have to create the .bats, then the .exes, then the shortcuts. However, when you consider the amount of time you will spend troubleshooting, reorganising and renaming you library in order to get Ice to work, it’s probably worth spending the time creating your own launchers.

Using the Steam Controller

Valve’s Steam Controller is an extremely versatile input device, and as such is perfect for playing emulators especially if you’re launching them from Big Picture.

However, not all emulators play nice with the Steam Controller, so I’ve compiled a few guides to help users get the controller set up with most of the main emulators that cause problems.

Emulators that work ‘out of the box’

The following emulators all work with the Steam Controller out of the box, allow full customisation of both Gamepad and KBM inputs, and work with the Steam Overlay (I haven’t tested the multi-platform emulators myself, I’m told they work fine, but let me know if not):

  • RetroArch[] (Multi)
  • Mednafen[] (Multi)
  • Higan[] (Multi)
  • Stella[] (Atari 2600)
  • Spectaculator[] (ZX Spectrum)
  • Vice [](Commodore 64)
  • Nestopia [](NES)
  • Snes9x [](Super Nintendo)
  • DeSmu ME[♥♥♥♥♥♥♥.org] (Nintendo DS)
  • Dolphin [](Game Cube & Wii)
  • PPSSPP[] (PSP)

The following emulators also work ok, but have certain issues:

  • FCEUX[] (NES) – Works ok with all inputs but no Steam Overlay
  • Fusion[] (Sega Genesis & Master System) – Only accepts KBM inputs and no Steam Overlay (if anyone knows a way to get the overlay to work in Fusion I’d love to know!!)
  • Visual Boy Advance[] (GameBoy Advance) – Only accepts KBM inputs but Steam Overlay works fine

As I mentioned, controller configurations are out of the scope of this guide, but since almost all of these emulators allow for a full range of controller and KBM inputs it’s really just down to personal preference how you want to map the in-game pad controls and emulator hotkeys. Many users have come up with very creative ways to configure controls for Dolphin and Nintendo DS emulators, so just play around and find a configuration that suits you best.

As for some of the others…

MAME Guide

  • Standard MAME []mostly works ok, but it’s a bit stubborn. It will only recognise default gamepad inputs. If you bind any keyboard or mouse commands to the Steam Controller they are totally ignored, and rebinding any controller inputs are also ignored (bizarrely).
  • The only option this leaves you is to bind the controller commands to the native Mame inputs via its own interface, which is dead easy to do, and since most coin-op games only have a couple of buttons this leaves lots of additional controller inputs free to bind.

    Example of a MAME input config menu

  • By the way, if you have MameUI64 [] then give up hope of getting the Steam Controller to work with it. In the same way that standard MAME ignores any KBM inputs, Mame64UI completely ignores all inputs.

Project 64 Guide

  • You’ll need to download the Pokopom xinput plugin[] and extract it to the ‘Plugin’/’Input’ folder of Project 64[]
  • Pokopom’s plugin is the holy grail for Steam Controller users who play certain emulators but doesn’t allow changes to the default config, which is fine for most other emus but it means the four ‘C’ buttons of the N64 layout are fixed to the right analog stick. For a standard Xinput controller (like the 360 pad) this isn’t really an issue, but for the Steam Controller it means the four-way ‘C’ buttons are bound to the right pad, which isn’t ideal, but works ok. Two of the ‘C’ buttons, however, are mapped to B and Y (C-down and C-left respectively) which works well for many games that use those buttons for separate functions.

    Pokopom’s settings screen (note the lack of binding options)

    Example of a Project 64 controller config

ePSXe (& PCSXR) Guide

  • You’ll need to download the Pokopom xinput plugin[] and extract it to the plugins folder of ePSXe[]
  • Create a new folder called ‘inis’ in the main ‘epsxe’ folder (the reason for this will become clear later)
  • Get the latest version of PeteOpenGLTweak[], unpack it and put its contents in the ‘plugins’ folder
  • From the epsxe ‘config/video’ menu setting select ‘PeteOpenGL2 Tweaks 2.2’ (or whatever version you have) plugin and make sure you also already have Pete’s OpenGL2 Driver 2.9[] in the plugins folder
  • Run ePSXe and just check that any game starts up ok. Close ePSXe
  • Go to the ‘inis’ folder you created earlier and you should find a file called “gpuPeteOpenGL2Tweak.ini” has been created; open it up with a text editor (notepad will do)
  • Find the section at the bottom labeled [PadPlugin] and change the two lines immediately below to the following (this will make sure ePSXe is using the pokopom input plugin, as you can’t actually choose it from the ePSXe UI.):
    Port1 = pluginspadPokopom.dll
    Port2 = pluginspadPokopom.dll

    UPDATE: If you have epsxe 2.0 you can now select the controller plugins from the main epsxe window, so no need for the above two steps!

  • The Pokopom plugin starts working once you’ve booted up a game and ePSXe should now detect the Steam Controller as an Xinput device and work fine with any Gamepad inputs you use on your controller config
  • The plugin’s controls cannot be rebound and attempting to change the controller settings via ePSXe has no effect on Pokopom. Thankfully, all the controls can simply be rebound by the Steam Controller to set up whatever controller binds you wish
  • By the way, if you like your games stretched to widescreen the PeteOpenGLTweak makes the aspect ratio fixed by default, for some strange reason (and changing the aspect ratio in graphics settings has no effect). So you’ll need to edit the relevant section in “gpuPeteOpenGL2Tweak.ini” and change it to “false”, like so:
    #Fixes fullscreen aspect ratio
    FixFullscreenAspect = false

(Thanks to hulkenstrong for the basis of this guide)

PCSX2 Guide

  • For PCSX2 []you’ll need to download the Pokopom xinput plugin[] and extract it to the ‘plugins’ folder
  • That’s it, off you go! As both PlayStation consoles have standard controller layouts, the Pokopom mappings work well in their default settings, but if you want to remap any controls on the Steam Controller, you can do so and they will work fine.

How to launch emulator games from steam was originally published on Something Different