Skip to main content

Video Game Launchers

There’s a special disdain that I feel whenever I launch a game, through Steam, Lutris, or some other medium, only to be greeted by some janky .NET or Electron launcher. It’s even more egregious when a game releases without a launcher, only to have one patched in later on, as a means of trying to sell you things.

Not content with baking adverts for their other games into the menu of your favourite ARPG, companies1 feel the need to spoil the very first step of your experience with their product, by at best making you find the new ‘Play’ button, hidden behind the first ‘Play’ button; or at worst, they manage to break the entire experience because you don’t happen to have .NET 3.5 installed on your PC, so the game doesn’t start at all…

Bypassing Launchers

Steam lets you set custom commands for your games, and launches its games using a sort of bash wrapper script. Because of this, we can adjust which executables are started and where. I’ll list some examples from my own system.

Batman: Arkham Asylum GOTY Edition

BAGOTY=(%command%); "${BAGOTY[@]/%BmLauncher.exe/ShippingPC-BmGame.exe}"

Baldur’s Gate 3

BG3=(%command%); "${BG3[@]/%LariLauncher.exe/../bin/bg3_dx11.exe}"

Civilization VI

CIV=(%command%); "${CIV[@]/%LauncherPatcher.exe/../Base/Binaries/Win64Steam/CivilizationVI.exe}"

In the above examples, it might not be obvious what’s happening. And being Linux (bash) it’s also entirely possible to accomplish the same thing with different mechanisms. An earlier version of these commands that I hacked up used sed liberally, but it was cumbersome.

Effectively, we’re first setting a variable, e.g. BG3 to the typical output of %command% which is the ’execution command’ that Steam runs when you hit ‘Play’.

It’s up to publishers what they want this %command% to do, but you can find out what it’s doing by starting steam from the command line, changing your Launch Options to something like echo %command% and simply checking what scrolls by when you hit Play on your favourite game. It will usually be a path to the .exe of a given game (or launcher, if the game publisher hates you).

Once we’ve set the variable, we then do some bash substitution, looking for the point at which the .exe is called, and replacing it inline with another path. In the simplest of the examples above, I simply redirect the BmLauncher.exe path to ShippingPC-BmGame.exe instead. Presto, Batman launches without the launcher.

The above all used Proton.

Caveats

Launchers with Settings

Launchers, by and large, are pointless; however some go an extra step of irritating, by putting the ‘configuration’ for the game inside the launcher, and stopping you from making changes inside the game itself2.

In these cases, it is normal to have to find the configuration (usually .ini) file for a game, and adjust values within the file manually, this is error-prone if you make a typo, but as long as you’re careful, it’s possible for most games.

Using Other Launch Options

What if you also want to use gamescope or gamemoderun? Well the adjustments still work, but you have to take care with your ordering. My full BG3 example is below, using mangohud, gamemoderun, and gamescope alongside the launcher dismissal.

BG3=(%command%); MANGOHUD=1 gamemoderun gamescope -W 3840 -H 2160 --hdr-enabled --fullscreen "${BG3[@]/%LariLauncher.exe/../bin/bg3_dx11.exe}"

  1. And it usually is companies as a whole, individual developers and development teams don’t seem to have strong opinions on launchers, one way or the other. ↩︎

  2. Batman: Arkham Asylum GOTY Edition is guilty of this. ↩︎