Using ICE to get your Roms and Emulators onto Steam to use with Moonlight
While lurking Moonlight threads both here and on reddit, I’ve been seeing a lot of people ask questions along the lines of: “Can I use this to play emulators?” and while Steam does allow for external shortcuts, not everyone is adept at manipulating command line arguments to get all the games into Steam as separate entries. This is where ICE comes in. ICE is a nifty tool coded in Python that allows you to add games to Steam as single entries, in a batch.
Advantages of using ICE:
- Easily add a ton of roms from different emulators to Steam as single entries instead of adding the emulator itself;
- Highly customizable;
- Also adds images to your games to make them look better in Big Picture Mode using Console Grid;
Disadvantages of ICE:
- Developer only sporadically works on it, so lurking GitHub issues tracker to find fixes for problems is a must;
- No GUI;
- This tool in Windows-only. Sorry Linux and OSx users 🙁
Have I sold you on using ICE? It is a cool tool to have and once you set it up correctly you should never have problems with it. So as long as you follow this guide carefully you shouldn’t have any problems. First off, the requirements:
- This specific build of ICE – I won’t even think about helping in the comments unless you download this build. As I said, ICE builds are far-and-few between and finding the right one is hard. This one is the best cause it runs as a Windows EXE file instead of a Python script and because it fixes a few critical bugs that can hinder your usage of ICE. So, as I said, download this one;
- Notepad++;
- Steam and Moonlight Vita working;
- A bunch of emulators and roms (for this example we will be using PCSX2);
- Some time;
Step 0: Backups your shortcuts
If you don’t have non-Steam shortcuts within your Steam account, you can skip this step.
While ICE does have a backup feature, we will be manually doing a backup in case something goes wrong. This step is entirely optional if you don’t mind losing your non-Steam games and re-adding them later.
Navigate to the root of your Steam installation folder (i.e. D:/Steam) and in the explorer search function write the following:
shortcuts.vdf
This is the file that store all the information related to the non-Steam shortcuts you may have. Backup all of them (in case you use more than one Steam account). My personal advice would be to simply renaming each one to _shortcuts.vdf so you can easily find and restore them later.
Step 1: Setting up ICE correctly.
Before we get ICE working we need to deal with a bug that may appear later first.
- Press Win+R to open up the Run window;
- Type %appdata% to go to your Roaming folder;
- Now press Backspace once;
- Enter the “Local” folder;
- Create a folder named “Scott Rice” (no I’m not trolling, it’s the name of the developer)
- Inside the Scott Rice folder, create another folder named ICE.
If you don’t do this, later when running ICE you will get an error. So I would definetely do this, if you want ICE to work properly.
Now that this is done unpack the ICE zip you downloaded to where you want it to be, in my case this would be E:/Emulation/ICE
The only files that matter for this guide are consoles.txt, config.txt and emulators.txt since this is where ICE store all the configuration information relevant to our current guide.
Step 2: The config.txt file
To make the guide easier to follow, we shall now go one file at a time. It isn’t hard but it makes for a better reading experience that way. Open up config.txt in Notepad++ or your favorite text editor and take a look at the following sections:
This is where ICE is going to go look for roms. Point it at whatever your roms folder is.
Don’t forget to set up a backup folder for your Steam shortcuts.
The rest of the document shouldn’t be touched since it relates to finding Steam and the userdata folder within, which should be automatic since it uses the Windows information to do so. If Steam works, so should ICE.
Step 3: The emulator.txt file
This is where things can become tricky. Each emulator – usually – has its own arguments to load a file directly without having the user do any of the work. That’s how frontends end up loading roms using the emulator EXE files. Here we are going to set up the commands for Steam to tell PCSX2 how to load the games.
I can imagine some of you are extremely confused right now and don’t know what the heck this means. It is much simpler that it seems:
- [PCSX2] is the name we are giving to the emulator within ICE
- location is well… duh. Remember to write the entire path up to the EXE file.
- This line is the most important one. This is the command Steam sends to PCSX2 to correctly load a game. In the case of other emulators, this command changes. The developer has set-up a list of commands for the most known/used emulators. You can check it out here.
If you were to set-up Demul, the Dreamcast emulator, this is how it would look like.
Important: When it comes to Moonlight, you need to do something specific to get games to get detected correctly:
Ignore the –nogui command what we want is the %r. This is related to loading the file. However since Moonlight doesn’t seem to play well with command shortcuts like this we need to change %r into “”%r”” so that Steam can load the game correctly even if you have spaces in the name of the disc image file. This happened to me this morning and I couldn’t figure it out until I dropped by GitHub and found this.
Step 4: The consoles.txt file
Inside this file, we are going to tell ICE which ROM folder belongs to which console and to which emulator that we’ve declared in emulators.txt to use. This is what we should be aiming for:
Again, I’ll go line-by-line into what all this does:
- [Playstation 2] is the name that ICE will give to the category within your Steam it will create for the console.
- nickname: Optional, shortname for the console.
- emulator: remembered when we named the emulator [PCSX2] earlier? This is where you put that.
- roms directory: where ICE should go fetch the PS2 games specifically.
- images: do you have custom images for each game? Point ICE to the folder here. You will probably ignore this though.
- extensions: this is important if you don’t want to have broken/double entries within your Steam. Some people like to backup/download their games in .iso format, others in mdf/mds and others in bin/cue format. What you should do here is point at the bigger file, the actual game so that ICE scans that one and adds it onto steam.
Repeating the example of the Dreamcast, this is how it should look like:
It’s really quite simple once you figure out what each line does. After doing it once or twice you should become adept at knowing what to do.
Extra Step: Getting those grid images to work
You probably noticed on the image at the start of the guide that some of my PS2 games have images while others to not. This is because ICE, as I said earlier, gets its images from consolegrid.com. If you want ICE to correctly attach an image to your game, I would search the website for the game, and then name your game according to the name used in the consolegrid database. If it doesn’t exist, you can upload your own image, which is very useful.
Step 5: You’re ready to use ICE!
After all is done, close Steam and run Ice.exe. Depending on how many games you have, it could take from a few seconds to a few minutes. By the time ICE asks you to close it, you should have added all your roms as independent games that run with Steam overlay and whatever other overlays you may use. Every time you want to add a new console/roms all you need to do is configure it in the above files and re-run ICE.
There we go. After the initial set-up is done, the rest of the process becomes much easier, since you know what to do and where to go to get the information needed. Everytime you run ICE it will delete and re-add your old emulator shortcuts, so keep that in mind.
As usual have a good day and happy gaming!





First
I thought Adam was first.
Just done testing, some PSVITA game ports i had on steam like Senran Kagura Estival Versus and Danganronpa 1 & 2. Used 960×544 60fps both in vita but also in the game itself (some ports support 960×540 in options) and games so far run almost 1:1 lag free (or at least, I cant notice it) . Was Just wandering how i can play Persona 3 FES (PS2) on my Vita since i finished Persona 4 Golden recently, and boy did this post made my day. Freaking awesome stuff. Def gonna try tomorrow.
*wondering
Definitely works on Linux and SteamOS. See here: http://kbmod.com/2016/07/ive-been-using-my-steamos-box-to-play-uh-nintendo-games/
I meant ICE doesn’t work for Linux and MacOS 😛 Sorry for the misunderstanding.
Skimming that article it seems to be about ICE working on a Linux box (and I’ve personally used the maintained package from the repo they’re talking about, though on a mainline desktop Linux rather than SteamOS) and their sample emulators.txt include examples for all three main desktop OSes. The specific build you’re linking may or may not, I haven’t looked into it too much other than seeing the sample emulators.txt is the same one that lists the three examples, but I’d assume it’s likely to have the script somewhere and the executable is just a self wrapped version of Python 2.7 for convenience
I still can’t even get moonlight to connect toy PC.
Moonlight is looking so good to have on Tue vita and I can’t get The IP to connect
Ipconfig shows 192.168.254.4 , I put that in The server.txt but nothing
you have to disable antivirus
i finally got it working, it was a user error
got it paired and everything but it wont launch steam
. this is all that i get
http://imgur.com/whWBEKw
Do you have 2 screens ? Disable the second one, and retry.
On my computer, I’d the same issue, but disable the second screen let me see steam 😉
same thing happened to me, to get it working I had to uninstall Geforce experience entirely, reboot, reinstall geforce experience, reboot and then it worked, now it runs fine
First, your PC and vita must be in the same network, the ip change, depends of all the devices connected to the network, ie, if you connect your android device, gonna get 192.168.254.1, then your pc will get 192.168.254.2, access your AP config, and try to reserve one ip to your pc, and one for the vita.
Make sure that your computer and game you are streaming are at the resolution that your vita is calling for or it will not run. I ran into the same problem earlier today.
I’ll give that a try setting the resolutions, but I swear I thought I did that last night.
And I’ll put steam on my C drive.
I have the worst luck haha
Yeah. I already set up a static IP for my PC so it doesn’t change
Could it be an issue with steam being on a different partition other than C.
Idk if Moonlight knows to auto find Steam.exe or if it just defaults to the usual install path
Because mines on D
I could just repath steam to C but to redirect all my games would take forever . worth a try I guess
still waiting for the real ps2 emulator on vita (kingdom hearts running on vita really teased me)
is it possible?
nope. never will.
why is that? to high in system requirements?
to play a game at full speed, emulator needs at least 10x more perfs than the emulated console…
Not working don’t show any game on steam… Tutorial very mess up!
Not working
using launchbox as an working alternative
I’ll admit I have been seeing these Moonlight posts and I didnt realize what it was. I have a shield portable so utilizing the vita will be an interesting comparison! Thanks @TYPHOON_NEON!
Consolegrid don’t work anymore for uploading an image. I’m searching for an alternative.
How can I readjust my Roms directory per system? Like in my Roms location, I have the (full) names of my systems and inside those folders I have another few folders (one of which is called “Games” and that is where my Roms for that system are actually stored. I do not want to have to reorganize my directory just for ICE.
I must admit this was an overly complex *** of a waste of time which ultimately failed due to either Windows being the sack of *** it is or some miniscule fault in the scripts I’ve revised five times over now. +1 to the guy suggesting LaunchBox.