My Oblivion Modding Experience

By Erik Letson, Aug 5th, 2021 (blog index)


This post is a recounting of the experiences I have had running The Elder Scrolls IV: Oblivion in Linux, and in particular how I have attempted to mod the game. This is the first of several posts I intend to make to this blog regarding Oblivion, mostly for my own benefit (I have been meaning to write this stuff down for a long time, in case I ever stop modding the game for a while and forget it). This initial post is a long and rambly thing, and is probably going to be boring to most people, so feel free to skip it.

I play Oblivion on Steam. I own the Game of the Year Edition with all the official DLC. I used to play Oblivion on the Xbox 360 many years ago. I of course currently play on a Linux system (Mint, rather than Gentoo, because the Mint system in my living room has a 1070ti, making it much more graphically powerful than either of my Gentoo systems and thus my main gaming PC). As I use the Steam version, I can easily take advantage of the excellent Proton tool for easing Wine use. The base-game and official DLC for Oblivion work quite well on Linux via Proton, but of course what I really wanted to do with Oblivion was play the mods.

Modding games through Wine/Proton on Linux is a sort-of final frontier in general. There are so many moving parts and things you have to know and keep track of and things that can go wrong that it can be pretty overwhelming at first. I have been hacking away at some other games to mod on Linux before Oblivion (especially Mount & Blade: Warband), so I had at least some experience with the concept. Oblivion has lots and lots of mods, though, as well as a pretty tried-and-true approach to modding in general (.esp files and other data just plopped in the Oblivion/Data directory and activated). There was a lot to learn here.

I did pretty much everything wrong from the start. At first, I ended up using a version of Proton (5.13) that was less than ideal for running external programs such as mod managers. Without realizing I had done anything wrong, I simply proceeded as normal. It ran Oblivion just fine, and most .esp mods as well, but there were issues from the start. One thing that should have been an early warning sign was that I had to make edits to the OBSE (v0021) executable in order to get it to run, as described here. Later on, I would change my environment, as well as switch to the new xOBSE fork, but for now I was dealing with some problems.

The biggest one was the fact that, since I couldn't easily run a mod manager, I had no way to sort load order. Instead of starting from scratch or something, I simply learned how load order and mod enable-disable worked under the hood. In Oblivion, .esp load order is determined based on which files have the most recent modified date. This means that you can manually manage load order in Linux with the touch command on .esp files. Enabling and disabling .esp's works a little bit differently. Basically, Oblivion reads from a file that, in a Proton prefix, is located (in the compatdata directory) at users/steamuser/Local\ Settings/Application\ Data/Oblivion/Plugins.txt in order to determine which .esp's to enable. Any file that appears in this list will be considered enabled. After I learned this, I wrote a little tool in Python that I called 'OPET' that handled this work for me. I used OPET for quite a while, and because it is totally bare bones, I was forced to learn how to do things the hard way when it came to mods. This includes referring to the BOSS masterlist and accordingly sorting my .esp's with OPET by hand. It was slow going and fraught with danger (I broke my install more than once), but ultimately I think learning to mod Oblivion in this way was worth it because of the experience I was able to gain.

But eventually adding other peoples' mods to the game wasn't enough; I wanted to make my own mods. This would require me to get the Construction Set (and Extender) up and running, something I had failed to do before.

I understood the reason that the Construction Set Extender wouldn't work: some Windows components (namely version 45+ of the .NET framework and the Visual Studio Redistributable 2019) would not install in the Proton prefix I was using. When I tried to install them in Protontricks, they failed, and a bit of internet searching revealed that the problem was that Proton 5.13, based on Wine 5.13, could not install the Windows components that I needed. Upon learning this, I backed up my Oblivion saves and other files that were located in the Proton Wine prefix (since these would be wiped upon switching to a different version of Proton) and changed my Proton version for Oblivion to Proton 5.0 in the Steam interface. After I did this, Proton installed the components perfectly, and in short order I had the CS and CSE up and running, along with Wrye Bash (in stand-alone .exe form) and TES4Edit.

Since then, I have been hacking away at these tools. My main goal for the time being is to make a few compatiblity patches for some of the mods I use. Oblivion is an old game, and many many patches already exist, but there are inevitably some cracks that have yet to be filled, and I've found some. That should keep me occupied for now, anyway.

Return to blog index