Playing Epic Store Games on a Steam Link
There are some great games on the Epic Games Store (I personally am a big fan of Tetris Effect). However, Epic’s storefront is less mature, and Epic’s launcher lacks a lot of the comforts we have with Steam (such as Big Picture Mode, In-Home Streaming, etc). However, you can add games from the Epic Games Store to Steam, and even play those games on a Steam Link.
Note: You’ll still need the Epic Game Store application to launch games once this is up and running. We’re not replacing their launcher, just automating it
To begin, we need a way to launch games purchased through the Epic Games Store.
Thankfully, we can take advantage of how Epic itself launches games. Windows
allows programs to register special urls that are opened by specific programs.
For example, Zoom meeting links, when clicked in the browser, allow the
operating system to launch Zoom with some additional data about what meeting to
join. The Epic Games Launcher registers the handler com.epicgames.launcher://
,
so when a url with this prefix is encountered, the data is sent to the Epic
Launcher. The data after the double slash tells the launcher what game to start.
So, to start, we’ll need to get the launch url for our game from the Epic Games Store. Thankfully, this is included in a shortcut to a game. To get the URL:
- In the Epic Games Launcher, navigate to your library, and find the game you’d like to play on Steam.
- Click on the
...
menu near the game, and click ‘Create Shortcut’, this will place a shortcut to the game on your Desktop. - Minimize the Launcher, navigate to the Desktop, and find your new shortcut (it will have the name and icon of the game). Right click on it, and hit ‘Properties’.
- Copy the URL field from the ‘Web Document’ tab and save it somewhere. We’ll need it later.
- You can delete the shortcut at this point.
OK - so we have our URL, we should just be able to go there any launch the game.
As you can see in the picture, we’re launching apps/Kiwi
, which is Tetris Effect.
Steam, however, can’t open this type of shortcut directly. And, even if it did, Steam would have no way of knowing if the game was running or not (while you could launch the game, Big Picture and streaming wouldn’t work). So we’ll need to help it a little bit.
If you’re someone who has a preferred text editor (like Visual Studio Code, Notepad++, Sublime), you can use that for the next step - otherwise, go ahead and launch “Windows PowerShell ISE” from the Start Menu.
In your editor, copy and paste this (we’ll fill in the ‘_HERE’ values in a moment):
Start-Process "URL_HERE"
sleep -seconds 5
$process = Get-Process "PROCESS_NAME_HERE"
$process.WaitForExit()
Let’s explain what this is doing. It’s:
- Starting the URL (which launches the Epic Games Store, and instructs it to launch the game)
- Waiting for 5 seconds (this gives the Epic Launcher time to start the game)
- Locating the game process that Epic started (for Tetris Effect, this is TetrisEffect)
- Waiting for the program to finish.
By waiting for the game to finish before exitting, we’ve ensured Steam will be able to track our game’s status, and will know when it exits (so it can drop us back in Big Picture).
Replace the URL_HERE
with the URL from the shortcut. The PROCESS_NAME_HERE
is a bit harder - it’s what you’d see if you brought up Task Manager and looked
for the game when it’s running. Often this is just the name of the game
(it’s ‘TetrisEffect’ for Tetris Effect), but if you’re
unsure, go to the folder where your game is installed, and find the exe - it’s
usually that without the ‘.exe’.
We now have our script that will launch our game, and will keep running until the game closes. Save this file with a ‘.ps1’ extension - you name it whatever you want, but I’d recommend something descriptive. I called mine “launchTetris.ps1”.
Let’s test this out. With the Epic Games Launcher running, right click on this script, and hit “Run With Powershell” - it should launch your game.
Now that we have a script, we just need Steam to execute it. Steam can’t execute shortcuts (or scripts) directly - but we’ve just written a PowerShell script, so we can get Windows PowerShell to run it. So, we just need Steam to run PowerShell, and have PowerShell call our script.
- Click on the Games menu, and click ‘Add a Non-Steam Game to my Library’.
- Click the ‘Browse’ button.
- Navigate to
C:\Windows\System32\WindowsPowerShell\v1.0
, which is where PowerShell is installed by default on Windows 10. - Select the PowerShell exe.
- Click ‘Add Selected’
Now we’re in the home stretch - we can now launch PowerShell from Steam (it should be under your game list as ‘powershell’), but we need PowerShell to run our launching script. In your Steam library tab:
- Right-Click on your shortcut (it will have a PowerShell icon), and hit ‘Properties’.
- Gave it a more descriptive name, like the name of your game.
- Under target, paste in
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File PATH_TO_SCRIPT
- Hit return in the textbox to close the window.
You can get the PATH_TO_SCRIPT by holding down shift, right clicking on the
script you created (the file ending in .ps1), and selecting ‘Copy As Path’, so
it should look something like:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File "C:\Users\Sean\Desktop\LaunchTetris.ps1"
Alright - you’re now pretty much ready. Start the Epic Games Store, switch over to Steam, click your newly added entry, and hit Play. If all works as expected, you should have your Epic Game Store running in Steam!
Note: You can also change the icon Steam displays for your game in the Properties dialog, though we won’t be covering that here.
Once the game is working in Steam, it will be visible to Steam streaming, so a Steam Link can be used to play games from the Epic Games store (this even works on mobile - you can play games using the Steam Link app). That said, you’ll generally want to start the Epic Games Store on the machine first, before launching from Steam. While it’s not required, if the store has an update, it might take longer than 5 seconds to start your game, and then the script will quit before the game starts.
But, at this point, you’re free to play your games wherever you want, from either storefront!
An Addendum For Programmers
If all you want to do is play your games on Steam/SteamLink, you can ignore this, but just in case someone wants to dig a big more into this…
All of the above works, and, critically, works if you don’t have access to a compiler. Also, when writing this I felt having one script per game makes it easier for non-programmers to check that things are working (they can easily launch their script graphically).
However, we can make a universal launcher pretty easily - just tweak our code to accept the URL and the exe name as arguments. Also, if we make an executable, we can have Steam call it directly, instead of needing to call an interpreter (like PowerShell).
So let’s do that quickly - let’s make a launcher that can accept a game’s URL and name, and then launch it. I’ll use C# here, but really anything that generates an executable will work just fine.
using System;
using System.Threading;
using System.Diagnostics;
namespace SteamLauncher
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 2)
{
System.Console.WriteLine("ERROR: Needs launch URL and EXE Name");
return;
}
var epicUrl = args[0];
var exeName = args[1];
var ps = new ProcessStartInfo(epicUrl)
{
UseShellExecute = true,
Verb = "open"
};
System.Console.WriteLine($"Starting url: {epicUrl}");
Process.Start(ps);
Thread.Sleep(5000);
var gameProcesses = Process.GetProcessesByName(exeName);
if (gameProcesses.Length != 1)
{
System.Console.WriteLine($"Could not find a single process with name: {exeName}");
return;
}
System.Console.WriteLine($"Game started.");
gameProcesses[0].WaitForExit();
}
}
}
When you compile this, you’ll get a program that can be called from Steam, and can launch any game. Simply run the compiled code as:
launcher.exe "com.epicgames.launcher://GAME_SPECIFIC_URL_HERE" "GAME_EXE_NAME_HERE"
And now you have a universal launcher, that you can directly add to Steam! Just adjust the arguments to change which game is launched.
Update (12/06/2020) - Some people reported that they were unable to get Steam to run the
PowerShell script unless there was a -File
before the script path in Steam. I’ve updated
that section accordingly.
Update (02/19/2021) - A reader reported that Epic games using Denuvo DRM may not start when launched from Steam (but still work when a user manually launches the PowerShell script). It’s unclear how widespread this problem is, and if it affects all Denuvo games or just certain ones. H/T to Cygnata for the report.