392 lines
20 KiB
HTML
392 lines
20 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>The Internet Vagabond :: Oblivion on Linux Part 1, Tools</title>
|
||
<link type="application/atom+xml" rel="alternate" href="https://www.theinternetvagabond.com/feed.xml" title="The Internet Vagabond" />
|
||
<meta name="description"
|
||
content="Rants of a wandering techy, in search of truth, knowledge, and a decent ping." />
|
||
<meta name="author" content="Bill Niblock" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<link rel="canonical" href="https://www.theinternetvagabond.com/2021/11/20/oblivion-linux.html" />
|
||
<link rel="stylesheet" type="text/css"
|
||
href="https://www.theinternetvagabond.com/src/styles/corrupt_layout.css" />
|
||
<link rel="stylesheet" type="text/css"
|
||
href="https://www.theinternetvagabond.com/src/styles/corrupt_typog.css" />
|
||
<link rel="icon" type="image/x-icon"
|
||
href="https://www.theinternetvagabond.com/src/images/favicon.ico" />
|
||
<link rel="stylesheet"
|
||
href="https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css"
|
||
integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY="
|
||
crossorigin="anonymous">
|
||
<script data-goatcounter="https://theinternetvagabond.goatcounter.com/count"
|
||
async src="https://www.theinternetvagabond.com/src/scripts/goatcounter.js"></script>
|
||
</head>
|
||
<body>
|
||
<div class="cor_page">
|
||
<header>
|
||
<a href="/">
|
||
<div>
|
||
<span class="first">T</span>he
|
||
<span class="first">I</span>nternet
|
||
<span class="first">V</span>agabond
|
||
</div>
|
||
</a>
|
||
</header>
|
||
<main>
|
||
<article>
|
||
<p>Oblivion holds a special place in my heart. I remember spending a summer in the
|
||
town I went to college in, and playing Oblivion almost every day while listening
|
||
to Dream Theater’s <em>Systematic Chaos</em>. Back then, I wasn’t aware of modding, so
|
||
it was literally just vanilla Oblivion for hours upon hours. I also used
|
||
Windows, so the game would run fine. Now, things have changed. The easier issue
|
||
to deal with is playing Oblivion on Linux. Thanks to Valve, Oblivion runs
|
||
excellent with Proton out of the box. The more challenging issue is mods, and
|
||
that’s what this write-up is all about!</p>
|
||
|
||
<h1 id="vanilla-oblivion">Vanilla Oblivion</h1>
|
||
|
||
<p>Starting from the beginning, Oblivion is available on many platforms, but my
|
||
experiences here will assume the Steam installation. The primary difference will
|
||
be with respect to how the tools used to mod Oblivion are run. I’ve got the
|
||
Game of the Year edition, which is Steam ID <code class="language-plaintext highlighter-rouge">22330</code>.</p>
|
||
|
||
<h1 id="modding-tools">Modding Tools</h1>
|
||
|
||
<p>Much of modding Oblivion is done with the help of additional tools. A mod
|
||
manager is used for installing and configuring the mods. There are several
|
||
options for Oblivion, and the one I’ve been suggested and use is called <code class="language-plaintext highlighter-rouge">Wrye
|
||
Bash</code>. Mod load order is also important, and the tool I’m using to help with
|
||
that is <code class="language-plaintext highlighter-rouge">LOOT</code>. Finally, <code class="language-plaintext highlighter-rouge">TES4Edit</code>, <code class="language-plaintext highlighter-rouge">TES4LODGen</code> and <code class="language-plaintext highlighter-rouge">BethINI</code> each helps with
|
||
performance and configuration.</p>
|
||
|
||
<p>I have the following directory structure setup for my mods:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>OblivionMods
|
||
|- Archives
|
||
|- Backups
|
||
|- Tools
|
||
|- WryeBash
|
||
</code></pre></div></div>
|
||
|
||
<p><em>Archives</em> is where I store the actual archives of the mods I use. <em>Backups</em> is
|
||
where I store any relevant backups for my Oblivion game, such as saves or
|
||
configuration files for the mods. <em>Tools</em> is where I put the executables for all
|
||
the tools I mentioned above. <em>WryeBash</em> is used to store the unarchived mods
|
||
(which it calls “projects”) and mod data that <code class="language-plaintext highlighter-rouge">Wrye Bash</code> uses.</p>
|
||
|
||
<p>Because each of these tools is run using Proton, I also have a set of aliases
|
||
configured. Similar aliases could be setup for using Wine instead. For each
|
||
alias, modify the paths accordingly for your setup. I should also note that I’m
|
||
running Oblivion using <a href="https://github.com/GloriousEggroll/proton-ge-custom">Glorious Eggroll’s
|
||
Proton</a>, version 6.16. I
|
||
haven’t experimented with different Proton versions to find the most performant
|
||
version, but if I do in the future, I’ll mention it.</p>
|
||
|
||
<h2 id="wrye-bash">Wrye Bash</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/wrye-bash/wrye-bash">Project Link</a></li>
|
||
<li><a href="https://wrye-bash.github.io/">Homepage</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/22368">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">Wrye Bash</code> is involved. I don’t know how to use it fully. There are a few
|
||
guides that helped me learn how to use it enough to get mods installed and
|
||
configured though. The first, and very relevant, is at <a href="https://www.shrine-of-kynareth.de/wrye-bash-on-linux">Shrine of
|
||
Kynareth</a>. I referenced
|
||
this guide, and the
|
||
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-1-installation-and-installers-tab">other</a>
|
||
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-2-load-order-bashed-patch-and-savegame-profiles">written</a>
|
||
<a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-3-ini-edits-tools-and-tricks">guides</a>
|
||
to learn how Wrye Bash works and what to setup. I also learned some tricks from
|
||
the <a href="https://www.nexusmods.com/oblivion/mods/49898">Oblivion Comprehensive Modding Guide by
|
||
Dispensation</a>.</p>
|
||
|
||
<h3 id="setup">Setup</h3>
|
||
|
||
<p>The easiest option is to use the stand-alone executable from the GitHub releases
|
||
page. Extract the archive, and then use Proton to run the executable in the
|
||
<em>Mopy</em> directory. This is the alias I use; replace paths accordingly:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-wrye='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/Mopy/Wrye\ Bash.exe'
|
||
</code></pre></div></div>
|
||
|
||
<p>Additionally, I copy the <em>Mopy/bash_default.ini</em> file to <em>Mopy/bash.ini</em> and set
|
||
the <code class="language-plaintext highlighter-rouge">sOblivionMods</code> to “Z:\path\to\OblivionMods\WryeBash”, <code class="language-plaintext highlighter-rouge">sBashModData</code> to
|
||
“Z:\path\to\OblivionMods\WryeBash\Bash Mod Data”, <code class="language-plaintext highlighter-rouge">sInstallersData</code> to
|
||
“Z:\path\to\OblivionMods\WryeBash\Bash Installers”, and <code class="language-plaintext highlighter-rouge">sOblivionPath</code> to
|
||
“Z:\path\to\steam\steamapps\common\Oblivion”. In Wine, <code class="language-plaintext highlighter-rouge">Z:</code> references your
|
||
local file system. Theoretically, because Wine is awesome, you may be able to
|
||
use Linux file system paths in the configuration, but I went with this.</p>
|
||
|
||
<h3 id="usage">Usage</h3>
|
||
|
||
<p>The guides above provide a very thorough explanation of use. Of note: <code class="language-plaintext highlighter-rouge">Wrye
|
||
Bash</code> in Wine does not like drag-and-drop actions, so don’t do them. I don’t do
|
||
anything special with my usage of <code class="language-plaintext highlighter-rouge">Wrye Bash</code>: run the alias, install mods from
|
||
the Installers tab, enable or disable mods from the Mods tab. I generally don’t
|
||
do anything else.</p>
|
||
|
||
<h2 id="loot">LOOT</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/loot/loot">Project Link</a></li>
|
||
<li><a href="https://loot.github.io/">Homepage</a></li>
|
||
</ul>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">LOOT</code> sets the proper load order for mods. There is a native Linux client, but
|
||
I ran into <a href="https://github.com/loot/loot/issues/1615">this issue</a> and decided to
|
||
just use the Windows version. The GitHub releases page includes a 7z archive
|
||
with a stand-alone executable, and that’s what I used.</p>
|
||
|
||
<h3 id="setup-1">Setup</h3>
|
||
|
||
<p>Download the stand-alone executable, and extract it to <em>OblivionMods/Tools</em>.
|
||
This is the alias I use; replace paths accordingly:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-loot='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/LOOT/LOOT.exe'
|
||
</code></pre></div></div>
|
||
|
||
<p>On first run, it should auto-detect the Oblivion installation and configure
|
||
everything accordingly. If it doesn’t, there are instructions on the Homepage
|
||
for configuration.</p>
|
||
|
||
<h3 id="usage-1">Usage</h3>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">LOOT</code> is pretty straight forward. It references a master list of mods to
|
||
determine the optimal load order for all installed mods. I ran into an issue
|
||
where <code class="language-plaintext highlighter-rouge">LOOT</code> couldn’t properly download the master list, and so as a work-around
|
||
I manually downloaded the master list, and then configured <code class="language-plaintext highlighter-rouge">LOOT</code> to use that
|
||
local file instead of the remote Git repository. Those instructions are covered
|
||
<a href="https://loot.github.io/docs/help/LOOT-FAQs.html#git-errors">in the FAQ</a>. If
|
||
everything works, and the list of mods is there, then you can run a sort, and
|
||
apply the changes. <code class="language-plaintext highlighter-rouge">LOOT</code> will inform you of any “dirty” mods, which you can use
|
||
the next tool the clear up. I ended up keeping <code class="language-plaintext highlighter-rouge">LOOT</code> open, while stepping
|
||
through the cleaning procedure for each mod, until everything looked happy.</p>
|
||
|
||
<h2 id="tes4edit">TES4Edit</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/TES5Edit/TES5Edit">Project Link</a></li>
|
||
<li><a href="https://tes5edit.github.io/">Homepage</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/11536">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">TES4Edit</code> is the Oblivion version of <code class="language-plaintext highlighter-rouge">xEdit</code>, which is an incredible tool. All
|
||
I use it for is to clean dirty mods. <code class="language-plaintext highlighter-rouge">LOOT</code> provides a link to the <a href="https://tes5edit.github.io/docs/7-mod-cleaning-and-error-checking.html#ThreeEasyStepstocleanMods">quick cleaning
|
||
guide</a>,
|
||
which gives us exactly the steps required.</p>
|
||
|
||
<h3 id="setup-2">Setup</h3>
|
||
|
||
<p>Download the latest build from GitHub, and extract it to <em>OblivionMods/Tools</em>.
|
||
This is the alias I use, which runs the “Quick Auto Clean” function; replace
|
||
paths accordingly:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4edit-quick='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4Edit/TES4EditQuickAutoClean.exe'
|
||
</code></pre></div></div>
|
||
|
||
<p>TES4Edit is also useful for other, non-quick-clean functionality, so I have this
|
||
alias for that:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4edit='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4Edit/TES4Edit.exe'
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="usage-2">Usage</h3>
|
||
|
||
<p>Run the quick-clean alias, select the problematic file, and click “OK”. Only one
|
||
file can be cleaned at a time.</p>
|
||
|
||
<h2 id="tes4lodgen">TES4LODGen</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/TES5Edit/xLODGen">Project Link</a></li>
|
||
<li><a href="https://tes5edit.github.io/docs/16-xLODGen.html">Homepage</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/15781?tab=description">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">TES4LODGen</code> will generate the relevant LOD files ahead of time. Apparently it
|
||
helps with performance in-game, but may result in slower initial load times when
|
||
starting the game.</p>
|
||
|
||
<h3 id="setup-3">Setup</h3>
|
||
|
||
<p>I downloaded the files from Nexus, and extracted the archive to
|
||
<em>OblivionMods/Tools/TES4LODGen</em>. Here’s the alias; replace paths accordingly:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-tes4lodgen='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/TES4LODGen/TES4LODGen.exe'
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="usage-3">Usage</h3>
|
||
|
||
<p>Run the alias. The program should auto-find everything, do some magic, and will
|
||
eventually report that it has finished. At that point, you can close the
|
||
application.</p>
|
||
|
||
<h2 id="bethini">BethINI</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/46440">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">BethINI</code> helps manage the “oblivion.ini” file, providing sane options and a
|
||
wizard for configuration. While not required, it does help with optimizations.</p>
|
||
|
||
<h3 id="setup-4">Setup</h3>
|
||
|
||
<p>I downloaded the files from Nexus, and extracted the archive to
|
||
<em>OblivionMods/Tools/Bethini</em>. If you use AutoHotKey apparently you can use that
|
||
to run it, but that doesn’t make sense to me, so I went with the stand-alone
|
||
executable. Here’s the alias; replace paths accordingly:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>alias oblivion-bethini='STEAM_COMPAT_DATA_PATH=/path/to/steam/directory/steamapps/compatdata/22330/ \
|
||
STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/directory/ \
|
||
/path/to/proton/proton run /path/to/OblivionMods/Tools/BethINI/BethINI.exe'
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="usage-4">Usage</h3>
|
||
|
||
<p>Just like the rest, run the alias and answer the questions. <code class="language-plaintext highlighter-rouge">BethINI</code> will make
|
||
backups of the modified INI files before over-writing them.</p>
|
||
|
||
<h1 id="next-steps">Next Steps</h1>
|
||
|
||
<p>Once all the tools are assembled, and usable, the next step is mods! In my next
|
||
post, I’ll cover some of my favorite mods. The third part will then be a
|
||
complete walk-thru of my installation of my full mod list.</p>
|
||
|
||
<div class="author_info">
|
||
Bill Niblock
|
||
<a href="https://unlicense.org/"
|
||
aria-label="Code dedicated to the public domain under Unlicense">
|
||
<span class="fa fa-cc-pd" aria-hidden="true"
|
||
title="Code dedicated to the public domain under Unlicense"</span>
|
||
</a>
|
||
<a href="https://creativecommons.org/publicdomain/zero/1.0/"
|
||
aria-label="Published to the public domain under CC0">
|
||
<span class="fa fa-cc-zero" aria-hidden="true"
|
||
title="Content dedicated to the public domain under CC0"</span>
|
||
</a>
|
||
2021-11-28
|
||
<br />
|
||
[
|
||
|
||
<a href="/topics/gaming">gaming</a>
|
||
|
||
]
|
||
</div>
|
||
</article>
|
||
</main>
|
||
<footer>
|
||
<nav>
|
||
<div><a href="/">home</a></div>
|
||
|
||
<div><a href="/topics/all">all</a></div>
|
||
|
||
<div><a href="/topics/gaming">gaming</a></div>
|
||
|
||
<div><a href="/topics/life">life</a></div>
|
||
|
||
<div><a href="/topics/philosophy">philosophy</a></div>
|
||
|
||
<div><a href="/topics/technology">technology</a></div>
|
||
|
||
<div><a href="/topics/writing">writing</a></div>
|
||
|
||
</nav>
|
||
|
||
<hr />
|
||
|
||
<div><a href="https://www.theinternetvagabond.com/now">Life In Progress</a></div>
|
||
|
||
<hr />
|
||
|
||
<section class="h-card">
|
||
<section class="footer_about" id="about">
|
||
<div>The Site</div>
|
||
<div>
|
||
<a href="https://www.theinternetvagabond.com/feed.xml"
|
||
aria-label="RSS feed for the site">
|
||
<span class="fa fa-rss" aria-hidden="true"
|
||
title="RSS Feed"</span>
|
||
</a> |
|
||
<a href="https://theinternetvagabond.goatcounter.com/"
|
||
aria-label="GoatCounter statistics for the site">
|
||
<span class="fa fa-bar-chart" aria-hidden="true"
|
||
title="GoatCounter Statistics"</span>
|
||
</a> |
|
||
<a href="https://codeberg.org/VagabondAzulien/the-internet-vagabond-dot-com"
|
||
aria-label="Source code repository for the site">
|
||
<span class="fa fa-code" aria-hidden="true"
|
||
title="Site Source Code"</span>
|
||
</a>
|
||
</div>
|
||
<a class="u-url u-uid" href="https://theinternetvagabond.com"></a>
|
||
<p>
|
||
This site is a small slice of internet real-estate that I use for
|
||
occasional writing. Nothing I say is visionary or profound. I
|
||
focus on technology, gaming, and philosophy. All opinions my
|
||
own.
|
||
</p>
|
||
<div>The Vagabond</div>
|
||
<div>
|
||
<a rel="me"
|
||
href="mailto:bill@theinternetvagabond.com"
|
||
aria-label="Email Bill at The Internet Vagabond dot com">
|
||
<span class="fa fa-envelope-o" aria-hidden="true"
|
||
title="Email bill at theinternetvagabond.com"</span>
|
||
</a> |
|
||
<a class="u-url" rel="me"
|
||
href="https://matrix.to/#/@vagabondazulien:matrix.org"
|
||
aria-label="Speak with me on Matrix">
|
||
<span class="fa fa-matrix-org" aria-hidden="true"
|
||
title="Speak with me on Matrix"</span>
|
||
</a> |
|
||
<a class="u-url" rel="me"
|
||
href="https://mastodon.social/@azulien"
|
||
aria-label="Find me on the Fediverse">
|
||
<span class="fa fa-mastodon" aria-hidden="true"
|
||
title="Find me on the Fediverse"</span>
|
||
</a> |
|
||
<a class="u-url" rel="me" href="https://www.twitch.tv/vagabondazulien/profile"
|
||
aria-label="Link to my Twitch channel">
|
||
<span class="fa fa-twitch " aria-hidden="true"
|
||
title="My Twitch channel"</span>
|
||
</a>
|
||
</div>
|
||
<p>
|
||
My name is <span class="p-name">Bill Niblock</span>. <span
|
||
class="p-note">I'm a computer scientist by education, a technologist
|
||
by trade, a gamer by hobby, and a philosopher by accident. I
|
||
live in <span class="p-locality">Buffalo</span>, <span class="p-region">
|
||
New York</span>, <span class="p-country-name">USA</span>.<br />
|
||
<br />
|
||
My PGP Key is <span class="u-key" id="key">CCE7 3682 331B 5614 9FAB
|
||
7383 7359 80B2 6381 C91E</span>.
|
||
</p>
|
||
</section>
|
||
<section style="display: none;">
|
||
<span class="p-category">Gaming</span>
|
||
<span class="p-category">Technology</span>
|
||
<span class="p-category">Philosophy</span>
|
||
<span class="p-category">Open Source Software</span>
|
||
<span class="p-category">Self-Hosting</span>
|
||
<span class="p-category">Coffee</span>
|
||
<span class="u-email">bill@theinternetvagabond.com</span>
|
||
</section>
|
||
</section>
|
||
</footer>
|
||
|
||
</div>
|
||
</body>
|
||
</html>
|