Springboard
Bluesky Mastodon RSS Contact Me Sponsorship

TRX interview: how a Tomb Raider 1-3 decompilation project came to be

The feature that took five years to get right? "Water color schemes."

TRX interview: how a Tomb Raider 1-3 decompilation project came to be

TRX is one of the best open-source reimplementation projects in recent years. It lets players try out Tomb Raider I-III, including its expansion packs, on Mac, Linux, as well as Windows, along with offering countless extra features that can help suit almost anyone.

I could have written so much more about TRX, such as using the console to flood or drain certain sections of a level, or how pressing the spacebar when flying can unlock any door. But the project is something you should simply try out and discover some of these features for yourself, to be as surprised as I was.

With TRX 1.10 having arrived on August 12, and work ongoing in implementing 1999's Tomb Raider: The Last Revelation, I spoke to Dash, head lead of the project, to find out how TRX came to be, any challenges, and what else could be next.


What was the first TR you remember playing?

Dash: I 'played' Tomb Raider 1 at the age of 7 with my Mom - or more like watched her play it. I remember her being so scared of the rats in the Cistern level! I was scared of the Atlantean monsters - who wasn't? Neither of us could speak English at the time, so we couldn't make any sense of the plot, but that didn't stop us from admiring just how badass a heroine Lara is. After that, every Christmas then meant I had to get the new Tomb Raider game.

How did TRX come to be?

Some time in my adulthood, long after forgetting TR, I discovered Twitch. The very first stream I watched happened to be a Tomb Raider II live world record attempt by streamer CritzB. I got hooked and loved watching speedruns thereafter. I quickly noticed that when players held the Action button when ending a TR1 level, the game would freeze indefinitely, and that was a well-known kill to a run in the original game. Being completely clueless about how speedrunning worked, and having done reverse engineering on some other games in the past, I made a small patch to fix that bug (which actually turned out to be TombATI's own bug).

It wasn't adopted because it was a fan-made patch, not an official release - but it got me thinking. At the time, there was another decomp project called TR2Main made by Arsunt, which focused on TR2. His incremental approach was something that left a deep impression on me, and I wondered if I could do an open-source TR1 decomp project. I reached out and started a project called TR1Main.

Since we ended up working separately, the name became confusing to the players, given that the two projects were maintained separately with different visions, so it changed to Tomb1Main. Eventually, when Lahm, Aredfan, and Walkaway joined the project, we started looking at finishing the TR2 decomp work. At the time, it was important to make the distinction even less ambiguous, hence the final rename: TR1X, with TR2X.

With separate releases in the past of TR1X and TR2X, what made the decision to unify them all in November 2024?

It was only natural - maintaining two codebases while trying to offer the same features for both games meant twice the effort. It was a lot of work to get them merged. Though with time, we ended up pulling that off, and of course, the engines continue to have their differences preserved, which are in the form of runtime checks. When the player loads a level, we know if it's a TR1 level, a TR2 level, or a TR3 level. For example, that means we know whether we can place pickups dropped by enemies freely, or if they need to be centered on the tile (among many, many more engine-specific things). The TR1-3 engines are thankfully similar enough that unification on the logic side was not the most difficult part; it was catching all the little differences.

As TRX is a decompilation of TR1-3, how much of the original code had to be remade for the games to work as intended?

Surprisingly, very little - mostly platform-specific code: graphics presentation, audio system, etc. However, most of the code was rewritten or moved around to eventually unify the classic engines and give them the features that they now support - developer console, Lua scripting, bug fixes, etc. All of that happened while the underlying logic mostly remained the same, so the game plays and feels faithful, which is very important to both the players and our team.

TR1-3 haven’t been natively playable on Mac and Linux, but TRX grants it - what did it take to get it working on these OSes?

The Linux build was a personal goal from day one because I don't use Windows. Initially, I ran the game through Wine to emulate its old DirectX and WinMM systems (the graphics part needed to run the game - Daryl). Over time, I replaced those with OpenGL and SDL, which made cross-platform support much easier. The TombATI patch was a huge help, though its inner workings were pretty wild. The game draws its 3D graphics through the tools of ancient ATI Rage cards, and puts everything else - the loading screens, the menus, the FMVs - on screen through another called DirectDraw.

Nobody has owned one of those cards in decades, of course, and nobody wants to deal with DirectDraw either, so you end up with two impostors sitting side by side: an ati3dcif.dll pretending to be the card, and a ddraw.dll pretending to be DirectDraw, both of them quietly rendering everything in OpenGL underneath. It took me a long time to work out that nothing in that stack was what it said it was - barking mad!

You can imagine the satisfaction when, once we had the entire game working end-to-end from our own code without any patches, we could bulldoze all of it away.

The Mac builds are a different story, and were donated to the project by a contributor in 2024 - there's a lot to manage. Macs make it surprisingly difficult for programmers to ship their own code - I can't count how many times our changes worked fine on Windows and Linux, only for Macs to fail when we're building TRX for it.

Apple officially considers OpenGL as deprecated and wants you to use their Metal graphics API instead, which would mean shipping a completely separate rendering pipeline - something we can't really afford. I also pay the Apple Developer yearly license fee to keep providing automated builds. Who knows when they decide to kill OpenGL for good? Maybe MoltenVK will save us when that day comes. Let's hope it doesn't come around soon.

It runs great on macOS, but it can be fiddly to install the files - are there plans to make this easier for casual users someday?

I'll quote my favorite reply from our Discord server: "Please raise a ticket on our GitHub!" But yes, I feel the pain - hopefully we can make it easier soon!

There are so many features - PS1 weather, dithering, draw distance - was there a single feature that took more time than players would expect?

The first thing was 60 FPS support. We did receive an early patch for it, but we couldn't land it, and then it went stale. Fortunately, around two years later we were able to land a clean presentation-only interpolation that didn't affect anything but the visuals.

The second, much more interesting thing was water color schemes. We shipped the ability to use a custom color for the water pools from the very early days. But it was never complete, as the water color is very specific to each game. The PC version of TR1 would use one color, the DOS version would use another, TR2 and TR3 would use and name a different color for every level on the PS1, and the TR2 and TR3 expansions were never released on console - only on PC.

I didn't want to hardcode any of this headache, considering we wanted to also support custom levels, and none of this stuff is relevant to them. It took five years, during which we ported TR1-3 in their entirety, until we could use Lua scripting to create fully game-specific options that would make sense for every game and every expansion pack.

With the official remasters and patch 5, do you feel TRX scratches an itch for TR players seeking more of an original experience?

I certainly hope so. I like what I've seen of the remasters, though I've only ever watched them on Twitch rather than played them myself; it's certainly different from our engine, which tries to keep that retro vibe.

There’s a lot out there in media of cut features that have been restored here - Lara’s braid in TR1, pickups in TR3 - did you and the team take on board how the original team approached the games in TRX?

Yes! However, not everything makes the cut. For example, as far as I know, the TR3 team wanted to introduce mechanics related to lianas and a knife, but that item would be too much of a novelty for us to implement. This area is best left to the community in the form of custom levels. We try to recycle what's already there, and limit our own additions to obvious fixes, providing more capacity to builders, adding tiny QoL changes or easter eggs. For example, try running a '/natlastinks' command in TR1 and see what happens!

With 1-3 fully playable, are there plans for 4 and 5 to make an appearance someday? I've noticed some early support for TR4 levels, as well as TR4 Lara already being playable?

I think both you and the readers already know the answer!

With so many features, are there some other QOL benefits that you’d like to see in a future update?

I'd like to grant level builders even more freedom by shipping a Lua engine that other communities can look at and say, "Wow, that's some solid engineering". We're getting there, but it's a long way up. Always has been. But I have the time.

TRLE has such a huge, passionate community, and I’ve seen that TRX has some support for custom levels. Are we close to simply dragging and dropping these into TRX so they’re playable on other platforms?

Unfortunately, no. Our team of three people is currently too small to make that possible. With the amount of work we do on the engine itself and some more secretive objectives I already hinted at, supporting all migration paths from older versions is just not feasible for us at the moment. So this is something that's still to be tackled by a distant version of TRX in the future.

With so many fixes and enhancements, how do you see TRX when it comes to game preservation - perhaps as the definitive version?

The 'definitive version' – yes and no. I like to think that, but we do take the liberty to make some compromises here and there. For example, the user interfaces. In the current version, all dialogs were completely remodeled to accommodate all the options we have (from "Change Lara's outfit" to "Fix bear AI"), and this remains hardcoded as of mid-2026. Whether someone considers this faithful enough is very subjective. For us, it's the tradeoff we have to make to keep the show on.

Looking back so far, what are you most proud of from TRX?

I am proud of our engineering, of being able to inherit a truly magical piece of the 90s (Paul Douglas, your software renderer is just wizardry; Gavin Rummery, your superpacks are such a good hack- and all of you developers, level designers and VAs across all the games, I love your work!), and most importantly, I really am grateful that people come to this project. We can all share the love for these classic Lara adventures, speaking the same language, no matter the timezone or location, or even what our favorite Tomb Raider game is.

My thanks to Dash for taking the time to chat with me.

🦖
If you're enjoying Springboard, I'd love it if you'd consider a small tip to help cover my monthly bills. (Follow the link and click 'change amount' to whatever you want)