Even with Steam making available more titles to game on Linux, certain things were still “Windows only”, like modding the game. Some video games are popular only because of the plethora of mods available, like the Elder Scrolls series or the Fallout series. It is really too much to ask the mod author to also support another platform, when he is already distributing mods for free, developing which he must have put numerous hours in, without any monetary expectations. Especially if mods require some “dll” files to be modified – which are Windows specific.
But if WINE or Proton can run an executable, why can’t they run those cooked dlls too? Of course they can, so lets see how it turned out!
2/n: Modding the Elder Scrolls 4: Oblivion on Linux
The Elder Scrolls 4: Oblivion (2006) for PC is available on Steam as a Delux edition containing all DLCs and official mods. It was a big hit on non-PC platforms like XBOX and Playstation as well, but unfortunately, controller support is not great for PC editions. It is a shame really, for games released also on consoles to not have native gamepad support on PC, when it is just a matter of providing multiple input controls config. There is no justification why the PC master race cannot have the best of both worlds. But more on that in another post maybe.
In order to use a XBOX controller on PC, we have to install a mod, which not just replaces some static files in the data directory, but also uses some cooked dlls, since it has to alter the input configuration at runtime. The Oblivion modding community uses OBSE for the purpose. OBSE has support for both Steam and Non-Steam versions, though I found that it required some additional steps to run via Proton in Linux.
After installing Steam Oblivion on Linux (and running it once, so that Proton creates the required Windows directories), we need to
1. Download the mod archive from Nexus
2. Download OBSE and install to game Data directory. Then follow these steps as it seems there is some issue with OBSE running via Proton.
3. Extract the mod to some location
Here is where things are a little different in Linux compared to Windows – Oblivion uses timestamp of the files in Data directory to determine whether to use loose files (assets) that exist there, in place of the packed assets (.bsa files) that were installed with the game. For loose files to be recognized, they must have a later timestamp than the installed files. Steam sets timestamp of the files as the one during installation, so any mod that has a past timestamp compared to this (i.e. virtually all mods) will not be picked up by the game during launch.
There are two ways to overcome this. First is to use archive invalidation. There are multiple ways to do so, among which this mod is simplest to use. It is basically a .bsa file that we register manually in Oblivion.ini, so that the game ignores this rule. It did not work just by itself in my case, so I had to do an additional thing – artificially alter the timestamps of all asset files of the mod before putting them in the Data directory.
4. Open a terminal in the mod extracted location and run
find . -exec touch {} \;
This will run the Linux “touch” command on all files inside the current directory recursively, which basically sets the modified timestamp to current. This would be later than the Steam installation timestamp, so our mod will now be recognized by the game.
5. Copy the contents of mod directory now, to game Data/
Another thing to note in Linux is that filenames are case sensitive. So “meshes” and “Meshes” are different! So if we install multiple mods, one way is to convert all asset filenames in lowercase, or another way is to keep track of what files are being replaced, and convert only the required ones but keep it consistent.
6. Apart from the above mod, I also used a texture pack for which I had to ensure this was the case.
7. For OBSE to work, we need Steam Overlay to be active. Although sometimes it breaks controller support, assuming our mod will take care of it, I enabled it.
8. Now I could launch Oblivion from Steam through OBSE – it will first be launched, and it will in turn launch the main executable. Once in the game, I could use controller as if it has native support, with button prompts changed as well. The mod also offers XBOX or Playstation theme for the buttons.
The only issue I faced was in the inventory menu, where controller did not give me a way to switch between main, quest, and magic inventories – I had to do that using the mouse! This looks like a mod issue, and would probably occur in Windows too.
Oblivion is an award-winning game, and being able to play with controller and using some high resolution textures in a 2006 game was really a great experience. Whatever concerns I had about modding the game on Linux, were completely taken care of. I played it on Linux as if I was playing on a console!