Running custom Tomb Raider games on Linux

Running TRLEs on Linux isn't hard; but they might not all work.

Running custom Tomb Raider games on Linux
Zoom Zoom

This 'guide' is intended to perhaps streamline, or simplify, or possibly muddy the waters even more, but the idea is that I've long been confused about the easiest way to run TRLEs on Linux. A TRLE is a custom Tomb Raider game created by Tomb Raider fans. TRLE itself stands for Tomb Raider Level Editor and originally shipped on the PC with Tomb Raider 5 (Chronicals) but in the years since there have been additional engines created which fix bugs, add features, etc.

The TR1-3 and 4-6 Remasters in Steam are terrific; but if you don't know about TRLEs think about them as "nearly infinite Tomb Raider games", check out trle.net and trcustoms.org. Both have the ability to search, filter for highest rated, etc., I'm not going to recommend any particular TRLEs but if you sort by rating you're going to find good TRLEs; and there are MANY of them. TRLEs can be based on Tomb Raider 1, 2, 3, 4, or 5 and thus 'limited' to the moves in those games, such as a TR1 based game will not have Sprint, etc. Some TRLEs may have completely custom moves, animations, graphics, models, etc.

I can't speak for any big games, but the Tomb Raider and other small games I play in Steam, using umu-run, etc., all run great on my ten-year-old i7 machine with an Nvidia 970GTX video card and using an 8BitDo Pro 2 Bluetooth controller.

But we need to be able to run them, and we may need some wine first.

Using Steam

If you already have Steam installed, you can use it as a launcher for your games, and it'll use the Proton that it already has downloaded as well as maintain the latest version of Proton for you.

  • Download a game, unzip it anywhere convenient
  • Launch Steam and at the bottom left click Add Game -> Add a Non-Steam game
  • Click Browse and then browse your file system to the TRLE path and click on the EXE and click Select
  • You'll see the Steam "Add Non-Game Steam" window again, click the Add Selected Programs button
  • Right click on new entry, select Properties
    • Rename it to the TRLE name
    • Go to the Compatibility tab and click "Force the use of a specific Steam Play compatibility tool" and pick Proton Experimental
      • I assume this is required; it might have a default elsewhere

The game should be able to run like any other Steam game, assuming it's compatible. I tried a TRLE that works in Wine/Proton in Steam, and it appears to play the same. However, there may be times that you have to tweak something in the "wine install", such as installing a library, Mono, etc., and in those cases I don't believe games will run directly from Steam and you may have to install Wine/Proton directly in your distro.

Using umu-launcher

umu-launcher is a tool that uses the latest Steam Proton components, but makes it easy to launch a game (or possibly other Windows programs) directly and doesn't require Steam itself to be installed.

To get it, look to see if your distribution packages it, and if not, look for a pre-built package on the umu-launcher GitHub release page. Keep in mind the launcher itself isn't what is running the games, but it manages the Proton and execution bits for you. No other Wine or Proton is required, and you can put your games anywhere.

Installing TRLEs

First, we'll install one manually, just to see it work. But later, we have a script that will help organize and launch games.

Ultimately, you'll be unpacking your TRLEs into whatever path you want to use that has enough space (some TRLEs can be pretty large) so pick a TRLE out from trle.net or trcustoms.org. It will probably will be a zip file, cd into the directory you want to put your games in and make a new directory of the game you want to run, cd into it, and then unzip the TRLE you downloaded there. I've found a lot of games don't have a parent path for all of their contents, so I prefer to make one so it's not dumping a bunch of files where other games will eventually also live. Look to see if you see obvious game related things, or perhaps a single directory name, cd into it, and eventually you should see some .exe file, such as TR1X.exe. You should be able to just do umu-run TR1X.exe and the game launches! I've found that depending on the TRLE engine used, some games may have a pre-launcher EXE that does something or another, multiple EXE's, sometimes the actual game EXE is in a subdirectory, etc. Use common sense here, but you probably WILL ultimately have to try a few of the EXE's available to see which one works, or works best.

Setting up keyboard, controller, etc., will vary from game to game, or engine to engine. Some will basically be pre-configured, some may not be, and you need to configure inputs, controller set up, etc., but most of the more modern ones using the TRX or the X/TEN engine more or less just-work. I first one I tested done by AgentXP (an EXCELLENT TRLE builder) using TR1X worked straight away with my controller, I did absolutely nothing, just started playing it like I would Tomb Raider 1. I have since played several TRX games and they have all worked great.

If the game fails to load with a dialog about MSC or dependencies, try another EXE in the game files. I've found quite a few that have an EXE in the main path which does not work directly, but under a subdirectory, like Engine, there was an EXE that worked. I believe some TRLEs have "wrapper" EXE's which make older TRLEs work better on newer systems, but I'm not entirely clear why there are multiple EXEs in some cases.

And sadly, I've found not every game will work. TRX and TEN games I've found so far just-work, but I've yet to find an older tomb4.exe TRLE that works. They either don't run, crash immediately, or crash while playing. Don't be discouraged, there are a LOT of TRLEs.

Also keep in mind that your screensaver will very likely come on while playing if you use a controller, so you'll want to disable that, or you'll wind up with your screen locking on you while playing. My script below attempts to temporarily disable screensavers, so let's talk about that.

I will replace you with a very small shell script

First off, I want to say that there ARE some TRLE launchers out there and if I manage to make one work, I WILL update this to mention them. But, so far, I can't seem to make them do anything. I imagine they're great, but… Maybe I'll figure it out. But until then, I can write bash like the worst of them, so let's go.

Linked below is a bash script that has a few options for installing and managing TRLEs. It is absolutely nothing fancy, but it will make installing and running TRLEs a little easier. It will not do anything about setting them up, etc., but will remove some manual steps and make it easier to run games, which is what want to do.

The link to the script, and a helper script which inhibits the screensaver, is available as a snippet on my GitLab page at this link.

The script has a few parameters to use it:

  • install
    • Download and install a TRLE in the appropriate Wine folder
      • Give it the trle.net ID and what you want to name the TRLE (IE: the parent folder that it unzips into) and it'll try to grab the file and unzip it for you. I've found some games actually link to other websites, in which case you'll need to unzip manually yourself.
  • run
    • Using fzf magic against your games path, it will list out TRLEs that are available, then list the appropriate EXE files available, and then run the proton engine you've configured against that EXE. It will also attempt to disable the screensaver.
  • cd
    • Using the games path and fzf, it will let you browse to where a game is but instead of running it, just drops you into that directory. Just makes it easier to try to manually figure out which EXE works, clean up old TRLEs, etc. When done, be sure to 'exit' as the script prompts you to do, as it creates a temporary shell to do this cd action.

Setting up Controller for games that don't otherwise work or support it

I so far have not investigated this myself, but I have been told that antimicrox can help map a controller, presumably emulates keyboard input from a controller for games that don't have native controller support. I'll add more details here when I try this myself. Your Linux distribution may very well package this for you, so look in your own distribution before you try to install this from the GitHub page.

Workarounds

The developer of one of the TRLE launchers gave me a few tips on running TRLE's in Linux, and while I have not yet tried or needed any of these, I wanted to make note of them here in case they're useful for someone else.

For some games, you may need dgvoodo2, which is a wrapper library for old graphics libraries in Windows. You would copy the ddraw.dll and dgVoodoo.conf into the level directory and try to run the game. Apparently it's not very stable and can sometimes crash and refuse to function again until you reboot your entire computer, I am not quite sure why that would be necessary but this is what was suggested.

If you play a TR3 game, the config file can get corrupted and if so, try removing the config.txt inside the TRLE path.

And on TR2 and TR4 you may need to over-ride the winmm sometimes. I have no idea what this means, I'll add more when I do ;)

TRX Engine

On a side note, I am aware of the TRX engine having native Linux binaries, but I'm not at all clear how I would use it to run games on Linux. If/When I get more information here, I'll add more details. For games using the TRX engine, it might offer some advantages to use the native TRX binaries, but this said, every game I've run so far run really well with only the occasional stutter or micro lag.

If you really want to use Wine/Proton

If you prefer to manually use Wine or Proton, your distribution may have it in its repos, or you may opt to use Wine, or even a different Proton, etc., all of that is up to you. I've often heard GloriousEggroll's custom Wine/Proton is best, so I went with it.

Go to their GitHub page at https://github.com/GloriousEggroll/wine-ge-custom and go to releases and download the latest release, IE: wine-lutris-GE-Proton8-26-x86_64.tar.xz for example.

I 'opt' to put files like this in /opt, but you can put it wherever you prefer, your home, whatever. I personally prefer to keep 'installs' like this out of my homedir. I also like to symlink to the installed name, so later I'll know what version I'm using, etc., again, this is up to you.

cd /opt
tar xf wine-lutris-GE-Proton8-26-x86_64.tar.xz
ln -s lutris-GE-Proton8-26-x86_64 proton

In your shell rc, add the appropriate path to your PATH variable. In my case, this means I'm just adding /opt/proton/bin to my path.

Once this is done, open a new shell etc., so you pick up the latest path, and you should be able to run winecfg and it should pop up a window. If your display resolution is high, like mine, you'll have to squint and look for the Graphics tab and change the DPI. I set mine to 196, you set yours to whatever makes sense.

When installing a TRLE using Wine/Proton, you may need to use the ~/.wine/drive_c type path so Wine/Proton find other dependencies, but I'm not 100% sure here.