1480 lines
No EOL
95 KiB
XML
1480 lines
No EOL
95 KiB
XML
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://www.theinternetvagabond.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.theinternetvagabond.com/" rel="alternate" type="text/html" /><updated>2025-01-09T13:43:39-06:00</updated><id>https://www.theinternetvagabond.com/feed.xml</id><title type="html">The Internet Vagabond</title><author><name>Bill Niblock</name></author><entry><title type="html">Oblivion on Linux: Lutris Edition</title><link href="https://www.theinternetvagabond.com/2025/01/09/oblivion-lutris.html" rel="alternate" type="text/html" title="Oblivion on Linux: Lutris Edition" /><published>2025-01-09T00:00:00-06:00</published><updated>2025-01-09T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2025/01/09/oblivion-lutris</id><content type="html" xml:base="https://www.theinternetvagabond.com/2025/01/09/oblivion-lutris.html"><![CDATA[<h1 id="oblivion-on-linux-lutris-edition">Oblivion on Linux: Lutris Edition</h1>
|
||
|
||
<p>I love Oblivion. I’ve written before about setting up Oblivion on Linux using
|
||
the Steam version, Proton and a handful of aliases: <a href="/2021/11/20/oblivion-linux.html">Part
|
||
1</a> covers most of the tooling setup, and <a href="/2021/12/09/oblivion-linux-2.html">Part
|
||
2</a> covers some mods I liked. This setup
|
||
works, though it is a bit of a hassle to manage. It requires running the tools
|
||
individually through aliases from a terminal, which can be intimidating and
|
||
unfriendly. It also requires the Steam version of Oblivion.</p>
|
||
|
||
<p>When I recently decided to return to Cyrodiil and close some gates, I wanted to
|
||
review my setup, and also my mod list. I discovered that Wrye Bash now does have
|
||
a native Linux application (as does LOOT!). However, I opted to stick with using
|
||
Wine and Windows versions of these applications due to a complication of modding
|
||
Oblivion in general: the case-sensitive nature of the filesystem. On Linux, the
|
||
filesystem is case-sensitive; on Windows, the filesystem is <strong>not</strong>
|
||
case-sensitive. For modding, this means if you extract an archive with a
|
||
<code class="language-plaintext highlighter-rouge">Data/meshes</code> folder, but your current setup has a <code class="language-plaintext highlighter-rouge">Data/Meshes</code> directory, on
|
||
Linux you’ll end up with two directories: <code class="language-plaintext highlighter-rouge">Data/Meshes</code> <em>and</em> <code class="language-plaintext highlighter-rouge">Data/meshes</code>.
|
||
There are solutions to this problem on Linux, namely using an EXT-4 filesystem.
|
||
I don’t feel like reformatting my disks, and so I’ll let Wine handle it. It may
|
||
mean a slight performance hit, but it’s Oblivion - there are <strong>always</strong>
|
||
performance hits. If there aren’t performance hits, then you haven’t modded the
|
||
game enough yet.</p>
|
||
|
||
<h2 id="setup-game">Setup: Game</h2>
|
||
|
||
<p>I’ll be using <a href="https://lutris.net">Lutris</a> to handle installing and launching
|
||
the game. No more terminal aliases! I’m also using the <a href="https://www.gog.com/en/game/elder_scrolls_iv_oblivion_game_of_the_year_edition_deluxe_the">GOG version of
|
||
Oblivion</a>.
|
||
Lutris allows you to link your GOG account, and easily install games using Wine
|
||
(or native versions, if available!). In Lutris, I install the game to my
|
||
preferred destination, using the default GOG Wine install script. After
|
||
installation, I launch the game once to generate some initial configuration
|
||
files, and verify things work as expected. Before the next steps, there is a
|
||
significant change: the Wine version. In order to use the latest version of Wrye
|
||
Bash through Lutris, I had to change the Wine version from my Lutris default,
|
||
<em>wine-ge-8-26</em>, to my latest system version, 9.22. There seems to be a Windows
|
||
API which Wrye Bash relies upon which isn’t handled well in Wine versions
|
||
previous to 9.</p>
|
||
|
||
<p>Lutris can also install from downloaded GOG installers, without having to link
|
||
accounts. Make sure to download all the parts (for Oblivion, there are 3: a
|
||
small EXE, and two BIN files). When installing, make sure all the downloaded
|
||
files are in the same directory. In Lutris, click the <code class="language-plaintext highlighter-rouge">+</code> button to add a new
|
||
game, and select “Install a Windows game from an executable.” Name the game as
|
||
you wish, and add identifier
|
||
<code class="language-plaintext highlighter-rouge">the-elder-scrolls-iv-oblivion-game-of-the-year-edition-deluxe</code> for the GOG
|
||
version. It’ll pull down nice looking images. On the next screen, click the
|
||
<code class="language-plaintext highlighter-rouge">Install</code> button next to “Setup file”, choose your desired directory, and then
|
||
select the EXE downloaded from the three files above. Lutris will create the
|
||
Wine prefix, and load the GOG Installer. Make note of the directory you chose
|
||
above for installation (default will be in the Lutris game library directory,
|
||
<code class="language-plaintext highlighter-rouge">Lutris Hamburger Menu</code> -> <code class="language-plaintext highlighter-rouge">Preferences</code> -> <code class="language-plaintext highlighter-rouge">Storage</code> -> <em>Game Library</em>), and
|
||
substitute it accordingly below.</p>
|
||
|
||
<p>Assuming everything is setup and running, the last step here is to note where
|
||
Lutris installed the game. The path to the directory will differ, but the
|
||
directory structure should be similar to the below. The Lutris “Directory”
|
||
(Right-Click -> Configure) value will bring you to the Wine directory (with
|
||
<code class="language-plaintext highlighter-rouge">drive_c</code>), and from there will be the <code class="language-plaintext highlighter-rouge">GOG Games</code> directory (or possibly
|
||
renamed; this can be changed during the GOG install process), and then the
|
||
<code class="language-plaintext highlighter-rouge">Oblivion</code> directory.</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Lutris
|
||
|-> gog
|
||
|-> the-elder-scrolls-iv-oblivion-game-of-the-year-edition-deluxe
|
||
|-> drive_c
|
||
|-> GOG Games
|
||
|-> Oblivion
|
||
|- Data
|
||
|- Oblivion.exe
|
||
|- ...
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="xobse">xOBSE</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/llde/xOBSE">Project Link</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/37952">Nexus Links</a></li>
|
||
</ul>
|
||
|
||
<p>The Oblivion Script Extender is required for many mods, and should be considered
|
||
essential for anything beyond a strict vanilla playthrough. Download the latest
|
||
version, and extract it to the <code class="language-plaintext highlighter-rouge">Oblivion</code> directory. When you launch Wrye Bash
|
||
(covered next), in the lower-left corner, on the icon bar, should be a green
|
||
checkbox. Hovering over it will notify you that OBSE is enabled. Clicking that
|
||
box will toggle OBSE. Generally, make sure it is enabled (checked).</p>
|
||
|
||
<p>At this point, before any other tools, when you double-click/Play Oblivion, it
|
||
will launch the purely vanilla Oblivion that was installed above. To use OBSE,
|
||
right-click Oblivion in Lutris, choose <em>Configure</em>, and on the “Game Options”
|
||
tab, change the <em>Executable</em> by clicking the button with three dots (labeled
|
||
“Select a file”) to <code class="language-plaintext highlighter-rouge">obse_loader.exe</code>. Save the changes, and re-launch.</p>
|
||
|
||
<h2 id="pre-setup-tools">Pre-Setup: Tools</h2>
|
||
|
||
<p>Before setting up the modding tools, it is required to run Oblivion once. This
|
||
will generate the INI file.</p>
|
||
|
||
<p>I also recommend adding the Wrye Bash <code class="language-plaintext highlighter-rouge">bash.ini</code> file detailed below before
|
||
running Wrye Bash for the first time. By declaring where the executable for
|
||
Oblivion is, Wrye Bash won’t try to automatically find it, which can cause some
|
||
troubles or confusion.</p>
|
||
|
||
<h2 id="setup-tools">Setup: Tools</h2>
|
||
|
||
<p>I’ll be using the following tools. When possible, download the stand-alone
|
||
version of the tool. To make things easy, I use the <code class="language-plaintext highlighter-rouge">GOG Games</code> directory for
|
||
all the tools.</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>drive_c
|
||
|-> GOG Games
|
||
|- BethINI
|
||
|- LOOT
|
||
|- Mods
|
||
|- Mopy
|
||
|- Oblivion
|
||
|- TES4Edit
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="wrye-bash">Wrye Bash</h3>
|
||
|
||
<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>Mod manager, and <strong>everything else</strong> launcher in this setup. One of the most
|
||
exciting results of this setup is handling almost all modding management through
|
||
the Wrye Bash UI. From the Project Link, download the stand-alone executable
|
||
from the releases. I extract it to the <code class="language-plaintext highlighter-rouge">GOG Games</code> directory, which will create
|
||
a <code class="language-plaintext highlighter-rouge">Mopy</code> directory. Within that will be the executable, <code class="language-plaintext highlighter-rouge">Wrye Bash.exe</code>. Next,
|
||
in the <code class="language-plaintext highlighter-rouge">Mopy</code> directory, copy the <code class="language-plaintext highlighter-rouge">bash_default.ini</code> file to <code class="language-plaintext highlighter-rouge">bash.ini</code>. Make
|
||
the following changes (or replace <code class="language-plaintext highlighter-rouge">bash.ini</code> with this information):</p>
|
||
|
||
<div class="language-ini highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">[General]</span>
|
||
<span class="c">; -- Path to mod directory.
|
||
; These are relative to the Oblivion directory.
|
||
</span><span class="py">sOblivionMods</span><span class="p">=</span><span class="s">..</span><span class="se">\M</span><span class="s">ods</span>
|
||
<span class="py">sBashModData</span><span class="p">=</span><span class="s">..</span><span class="se">\M</span><span class="s">ods</span><span class="se">\B</span><span class="s">ash Mod Data</span>
|
||
<span class="py">sInstallersData</span><span class="p">=</span><span class="s">..</span><span class="se">\M</span><span class="s">ods</span><span class="se">\B</span><span class="s">ash Installers</span><span class="se">\B</span><span class="s">ash</span>
|
||
|
||
<span class="c">; -- Path to the Oblivion directory.
|
||
; "C:" here is drive_c on our filesystem.
|
||
</span><span class="py">sOblivionPath</span><span class="p">=</span><span class="s">C:</span><span class="se">\G</span><span class="s">OG Games</span><span class="se">\O</span><span class="s">blivion</span>
|
||
|
||
<span class="c">; -- User directory stuff.
|
||
; "C:" here is drive_c on our filesystem.
|
||
; Make sure to replace YOUR-USERNAME with your username
|
||
</span><span class="py">sUserPath</span><span class="p">=</span><span class="s">C:</span><span class="se">\u</span><span class="s">sers</span><span class="se">\Y</span><span class="s">OUR-USERNAME</span>
|
||
<span class="py">sPersonalPath</span><span class="p">=</span><span class="s">C:</span><span class="se">\u</span><span class="s">sers</span><span class="se">\Y</span><span class="s">OUR-USERNAME</span><span class="se">\D</span><span class="s">ocuments</span>
|
||
<span class="py">sLocalAppDataPath</span><span class="p">=</span><span class="s">C:</span><span class="se">\u</span><span class="s">sers</span><span class="se">\Y</span><span class="s">OUR-USERNAME</span><span class="se">\A</span><span class="s">ppData</span><span class="se">\L</span><span class="s">ocal</span>
|
||
|
||
<span class="nn">[Tool Options]</span>
|
||
<span class="c">; -- TES4Edit
|
||
; Path is relative to the Oblivion directory.
|
||
</span><span class="py">sTes4EditPath</span><span class="p">=</span><span class="s">..</span><span class="se">\T</span><span class="s">ES4Edit</span><span class="se">\T</span><span class="s">ES4Edit.exe</span>
|
||
|
||
<span class="c">; -- TES4LODGen
|
||
; Path is relative to the Oblivion directory.
|
||
</span><span class="py">sTes4LodGenPath</span><span class="p">=</span><span class="s">..</span><span class="se">\T</span><span class="s">ES4LodGen</span><span class="se">\T</span><span class="s">es4LODGen.exe</span>
|
||
|
||
<span class="c">; -- LOOT
|
||
; Path is relative to the Oblivion directory.
|
||
</span><span class="py">sLOOT</span><span class="p">=</span><span class="s">..</span><span class="se">\L</span><span class="s">OOT</span><span class="se">\L</span><span class="s">OOT.exe</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>In this configuration, the relative paths are relative to the <code class="language-plaintext highlighter-rouge">Oblivion</code>
|
||
directory (where the game executable is). For all remaining tool setup, modify
|
||
the paths in this configuration to match the paths for the tool executable (or,
|
||
rename the tool directories, which is what I prefer).</p>
|
||
|
||
<p>This is where the magic happens: within Lutris, right-click Oblivion and choose
|
||
<em>Configure</em>. On the “Game Options” tab, change the <em>Executable</em> by clicking the
|
||
button with three dots (labeled “Select a file”), and choose the <code class="language-plaintext highlighter-rouge">Wrye Bash.exe</code>
|
||
executable in the <code class="language-plaintext highlighter-rouge">Mopy</code> directory. Save the configuration, and
|
||
double-click/Play Oblivion. This time, Wrye Bash will start up (<strong>Remember:</strong>
|
||
This will not work on versions of Wine older than 9!).</p>
|
||
|
||
<p>At this point, when you want to play Oblivion, you will open Lutris, and launch
|
||
“Oblivion.” This will launch Wrye Bash. You can then click the Oblivion icon in
|
||
the lower-left icon bar to launch the game. As additional tools are configured,
|
||
they will appear in the lower-left icon bar (everything except BethINI). To use
|
||
the tool, you’ll run it from Wrye Bash.</p>
|
||
|
||
<h3 id="loot">LOOT</h3>
|
||
|
||
<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>LOOT handles mod load order. Another application with a native Linux version. I
|
||
had previous run into some bugs, but everything looks to work as expected now.
|
||
Despite that, I still download and use the stand-alone Windows version (the
|
||
archive from the releases, not the EXE). I extract it to my <code class="language-plaintext highlighter-rouge">GOG Games</code>
|
||
directory, and rename the directory (or edit the <code class="language-plaintext highlighter-rouge">bash.ini</code> file) so the
|
||
executable is where my Wrye Bash configuration expects it.</p>
|
||
|
||
<p>If setup properly, when you run Wrye Bash, in the lower-left corner will be a
|
||
bar full of icons, one of which will be a little treasure chest. Clicking it
|
||
will launch LOOT. From there, sort the order, and then close LOOT. Wrye Bash
|
||
will refresh, and you can continue on. LOOT will also notify you of any “dirty”
|
||
mods, which can be cleaned using TES4Edit (see below).</p>
|
||
|
||
<h3 id="tes4edit">TES4Edit</h3>
|
||
|
||
<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>I’m still not a mod creator, so my uses of TES4Edit are limited to “quick
|
||
cleaning.” From the project page or Nexus, download the latest version, and
|
||
extract the archive to the <code class="language-plaintext highlighter-rouge">GOG Games</code> directory. Rename the directory or edit
|
||
the <code class="language-plaintext highlighter-rouge">bash.ini</code> file so Wrye Bash can find it; restart Wrye Bash to verify. Wrye
|
||
Bash doesn’t include a dedicated short-cut for the “Quick Auto Clean” option,
|
||
instead you have to right-click on the TES4Edit short-cut (or the TES4LodGen
|
||
short-cut), and choose “Quick Auto Clean”. Choose the mod to clean from the
|
||
list, click OK, and let the program do its work.</p>
|
||
|
||
<h3 id="tes4lodgen">TES4LODGen</h3>
|
||
|
||
<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>This will generate LOD files ahead of time, allowing for more distant objects to
|
||
be shown as you adventure around Cyrodiil. Download the archive, and extract it
|
||
to where Wrye Bash expects it, either changing the directory name or updating
|
||
the <code class="language-plaintext highlighter-rouge">bash.ini</code> file accordingly. After mod installation is complete, click the
|
||
icon from the icon bar to generate the LOD files.</p>
|
||
|
||
<h3 id="bethini">BethINI</h3>
|
||
|
||
<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. This is the only tool that is not run from Wrye Bash.
|
||
However, it’s still pretty easy to work with. Download the stand-alone archive,
|
||
extract it to the <code class="language-plaintext highlighter-rouge">GOG Games</code> directory.</p>
|
||
|
||
<p>To run the tool, in Lutris single-click on Oblivion. A bar should appear with
|
||
some additional details about Oblivion, including some buttons: one will say
|
||
“Play”, and one will look like a wine glass; each will have a small button with
|
||
an up-facing arrow. Click the arrow button next to the wine glass button, and
|
||
select “Run EXE inside Wine prefix.” Navigate into <code class="language-plaintext highlighter-rouge">drive_c</code>, then <code class="language-plaintext highlighter-rouge">GOG Games</code>,
|
||
and into the directory you just set up for BethINI, and select <code class="language-plaintext highlighter-rouge">BethINI.exe</code>.</p>
|
||
|
||
<p>Wrye Bash does allow for custom application short-cuts, but it requires creating
|
||
a Windows shortcut <code class="language-plaintext highlighter-rouge">.lnk</code> file, and I cannot figure out an easier way to do
|
||
that than to just run it from Lutris.</p>
|
||
|
||
<h2 id="post-setup-tools">Post-Setup: Tools</h2>
|
||
|
||
<p>Verify each tool runs as expected. Conveniently, all the Bethesda DLCs are
|
||
“dirty,” so LOOT will notify you, and then you can clean them. Run BethINI,
|
||
generate LOD files, and run the game from Wrye Bash. Praise Todd.</p>
|
||
|
||
<h2 id="mods">Mods</h2>
|
||
|
||
<p>Wrye Bash on Windows can install mods from an archive, but with this setup that
|
||
functionality is unreliable. Instead, I extract the mod archives manually before
|
||
installing them with Wrye Bash. For each mod that I want to use, I’ll create a
|
||
directory in the <code class="language-plaintext highlighter-rouge">Mods -> Bash Installers</code> directory, and extract the mod
|
||
archive into that directory. Then, within Wrye Bash, on the “Installers” tab, I
|
||
can install mods as expected.</p>
|
||
|
||
<p>For actually using Wrye Bash, I recommend <a href="https://www.shrine-of-kynareth.de/wrye-bash-for-beginners-part-1-installation-and-installers-tab">laulajatar’s
|
||
guide</a>.
|
||
Obviously, you can skip the installation steps for both Wrye Bash and OBSE.
|
||
There is also the <a href="https://wrye-bash.github.io/docs/Wrye%20Bash%20General%20Readme.html">Wrye Bash
|
||
Manual</a>.</p>
|
||
|
||
<h2 id="lutris-setup-problems">Lutris Setup: Problems</h2>
|
||
|
||
<p>The significant problem with this setup is no way to alt-tab away from the game.
|
||
To make things even more inconvenient, playing in a windowed mode also doesn’t
|
||
work, and shows only a black screen with audio. I haven’t done an exhaustive
|
||
trial of options and mods yet to try and fix this, because it isn’t a major
|
||
problem to me.</p>
|
||
|
||
<p>The second inconvenience is as I mentioned above, with Wrye Bash not installing
|
||
mods directly from archives. Again, not a major problem to me.</p>
|
||
|
||
<p>I suspect that both of the problems can be resolved with some Wine tweaks.</p>
|
||
|
||
<h2 id="lutris-setup-benefits">Lutris Setup: Benefits</h2>
|
||
|
||
<p>What this setup gets right is ease of use, and ease of replication. All tools
|
||
(except BethINI, for now) and the game are run from Wrye Bash. No juggling
|
||
multiple application entries, aliases, or special setups. Plus, all tools, mods,
|
||
and the game itself are all within the Lutris directory, making multiple setups
|
||
a breeze: just copy the directory. In Lutris, you can then duplicate the entry
|
||
(Right-Click -> Duplicate), and edit the executable (Right-Click -> Configure ->
|
||
“Game options” tab -> <em>Executable</em>) to point to the new directory.</p>
|
||
|
||
<h2 id="lutris-setup-next-steps">Lutris Setup: Next-Steps</h2>
|
||
|
||
<p>The most useful next step would be automating this process, by building a Lutris
|
||
install script. Also, resolving the alt-tab and windowed problems above.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Oblivion on Linux: Lutris Edition]]></summary></entry><entry><title type="html">Life in Progress: January, 2025</title><link href="https://www.theinternetvagabond.com/2025/01/03/life-update.html" rel="alternate" type="text/html" title="Life in Progress: January, 2025" /><published>2025-01-03T00:00:00-06:00</published><updated>2025-01-03T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2025/01/03/life-update</id><content type="html" xml:base="https://www.theinternetvagabond.com/2025/01/03/life-update.html"><![CDATA[<h1 id="life-in-progress-january-2025">Life in Progress: January, 2025</h1>
|
||
|
||
<p>My <a href="/now">now page</a> is growing too verbose. Instead, I’ll leave that page as a
|
||
summary of what this/these page(s) will explore. I’ll start with a retrospective
|
||
of 2024, up to now, the beginning of 2025. Maybe a bit of ambitions too.</p>
|
||
|
||
<h2 id="2024-retrospective">2024 Retrospective</h2>
|
||
|
||
<p>2024 was a significant year. The most notable change being that I was laid off
|
||
in April. The remaining 8 months were quite nice. Before April, the year doesn’t
|
||
feel much different or significant. From what I remember, I was stressed,
|
||
unhappy, and overall dissatisfied with my situation. I was in the process of
|
||
saving money to leave, when I was laid off and paid a generous (enough)
|
||
severance. It’s nice when the universe solves problems.</p>
|
||
|
||
<p>Much of April and May was time spent decompressing. A bit too much drinking,
|
||
from what I recall. I began receiving unemployment payments, and looking for
|
||
jobs, though only half-heartedly. I was already decided I would start my own
|
||
business. I also started my playthrough of <strong>Fallout 3</strong>.</p>
|
||
|
||
<p>At the end of May, I entered into a game jam, and made my first video game,
|
||
<a href="https://vagabondazulien.itch.io/lander">L4-N-DER Training Simulator</a>. One thing
|
||
I do remember from the beginning of the year was speaking with some friends
|
||
about trying to publish a video game on Itch. I made the game using
|
||
<a href="https://fennel-lang.org/">Fennel</a> and the <a href="https://www.love2d.org/">LÖVE 2D game
|
||
engine</a>. It was incredibly rewarding, and a great
|
||
learning experience. This game would be the first of 5 that I published on my
|
||
Itch page this year.</p>
|
||
|
||
<p>Much of the summer was spent procrastinating starting my own business, and
|
||
golfing. At the beginning of summer, in June, my grandmother passed away. She
|
||
was about 2 weeks from her birthday, and so we round up and say she lived to 98.
|
||
I spent some time helping to clean and clear up her house too. In the beginning
|
||
of July I traveled to New York City to see Rezz. I also started properly
|
||
exploring WordPress, and working to understand better the business I was still
|
||
going to start. Around August, I began playing <strong>Morrowind</strong> for the first time.</p>
|
||
|
||
<p>In the fall is when I “got serious” about my business. I signed up for the New
|
||
York State Self-Employment Assistance Program (SEAP), and through them signed up
|
||
with SCORE to speak with a mentor and begin some small business training. I made
|
||
my first WordPress site, for a relative (and for free). I also entered into 3
|
||
more game jams during this period, publishing
|
||
<a href="https://vagabondazulien.itch.io/ticsweeper">TICSweeper</a> (a Minesweeper clone
|
||
mde with the TIC-80); <a href="https://vagabondazulien.itch.io/runr">RUNR</a> (another
|
||
TIC-80 game); and <a href="https://vagabondazulien.itch.io/escape-the-crash">Escape The
|
||
Crash</a>. <em>Escape</em> was based on
|
||
some work of mine over the summer to better understand and implement ray-casting
|
||
in the TIC-80, which I then translated for use in Fennel and LÖVE. At the end of
|
||
fall, my remaining grandmother severely injured herself, placing her in town
|
||
through the end of the year. For the second year in a row, much of the holidays
|
||
would be spent visiting a rehabilitation center (the same one as my first
|
||
grandmother’s). Since the pandemic, I don’t think I’ve had a “normal” holiday
|
||
season.</p>
|
||
|
||
<p>At the end of the year, I formally started my business, <a href="https://www.niblock.tech">Niblock Technology
|
||
Solutions</a>, and began working on websites for two
|
||
additional clients. Exploring this new world has been exciting, and there are a
|
||
lot of new challenges. I love working with others to solve problems, and I’m
|
||
looking forward to it. I’m also beginning work on a second business idea for a
|
||
game shop. I want to build a community space for people to play games, enjoy
|
||
company, and relax. Rounding the year out was my first playthrough of <strong>Deus
|
||
Ex</strong>.</p>
|
||
|
||
<h2 id="now-january-2025">Now: January, 2025</h2>
|
||
|
||
<p>Now. Plenty of plans and ambitions.</p>
|
||
|
||
<p>Easiest: I started a playthrough of <strong>Oblivion</strong>. Similar to <strong>Fallout 3</strong> and
|
||
<strong>Morrowind</strong>, my goal is to complete the main story and all DLC’s. This time
|
||
around, I explored a new modding setup, using <a href="https://lutris.net/">Lutris</a> to
|
||
install and manage the game (from GOG), and all the modding tools. For all three
|
||
of these games I want to write up a brief retrospective about my experiences and
|
||
any of the setup required for playing them on Linux. I already have two articles
|
||
for Oblivion (<a href="/2021/11/20/oblivion-linux.html">Part 1</a>, <a href="/2021/12/09/oblivion-linux-2.html">Part
|
||
2</a>) detailing using Steam and Proton. I think
|
||
the Lutris approach is a bit nicer.</p>
|
||
|
||
<p><em>Escape The Crash</em> was fun to make, but it’s not done yet. I want to add in a
|
||
floor, sound effects, a skybox, and objectives. And an actual ending condition.</p>
|
||
|
||
<p>Game-making in general I want to continue. I’ve started looking into the
|
||
<a href="https://dragonruby.org/">DragonRuby game engine</a>. I also want to learn (more)
|
||
Godot. I have no shortage of ideas, only my regular struggles with motivation
|
||
and focus.</p>
|
||
|
||
<p>I’ve fallen into a few bad habits, and my health is worse for them. Its absurdly
|
||
easy for me to put on weight, and equally as difficult to lose it again. At my
|
||
heaviest I was over 320 pounds, and I’m now at a much better 240. I want to
|
||
bring that number down to 200, but I also want to remove as much significance
|
||
from that number as I can. It should be a metric, not a grade.</p>
|
||
|
||
<p>I’ve also set for myself several music goals. I want to get better at
|
||
sight-reading, and so I have a goal to read a new piece of music each week. I
|
||
also want to explore music production, and try making my own 45-60 minute mix.</p>
|
||
|
||
<p>There are the business goals. I need to have an income that supports my
|
||
lifestyle, which means more clients and (hopefully) more businesses!</p>
|
||
|
||
<p>Finally, I want to write more. I think about writing, but rarely follow-through.
|
||
As all my other ambitions develop, sharing them with the world will help me
|
||
formally catalog my successes. Plus, if I have something useful and helpful to
|
||
share, then I want to!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life in Progress: January, 2025]]></summary></entry><entry><title type="html">Life in Progress: September, 2024</title><link href="https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september.html" rel="alternate" type="text/html" title="Life in Progress: September, 2024" /><published>2024-09-24T00:00:00-05:00</published><updated>2024-09-24T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september</id><content type="html" xml:base="https://www.theinternetvagabond.com/2024/09/24/life-in-progress-september.html"><![CDATA[<h1 id="life-in-progress-as-of-2024-09-24">Life In Progress, as of 2024-09-24</h1>
|
||
|
||
<ul>
|
||
<li>New hardware: laptop, phone, and NAS</li>
|
||
<li><strong>TWO</strong> game jams!</li>
|
||
<li>Finishing up Morrowind</li>
|
||
<li>SEAP/Self-Employment Progress</li>
|
||
</ul>
|
||
|
||
<h2 id="new-hardware">New Hardware</h2>
|
||
|
||
<h3 id="framework-laptop">Framework Laptop</h3>
|
||
|
||
<p>This new <a href="https://frame.work">Framework</a> is great! I’ve only had it for a few
|
||
weeks, but it is wonderful. I’ve been slowly sync’ing and migrating workflows
|
||
from my various existing options to it. Being able to work for multiple hours
|
||
without worrying about battery life is nice.</p>
|
||
|
||
<p>Previously, the Chromebook I have was my go-to remote personal macine.
|
||
Considering its age, and the inherent limitations of a Chromebook, it served me
|
||
better than I ever could have hoped. However, I knew it’s time was drawing
|
||
near, and the Dell I got as part of my work severance was not going to cut it.
|
||
Considering I’m starting a business doing technology, I needed a reliable,
|
||
“all-day” machine with Linux. The ARM-based Macs are incredibly tempting, but
|
||
I am not a fan of Mac. I’ve been eyeing Framework for a bit now, and their
|
||
newest 13-inch model with AMD components checked enough of the boxen for me to
|
||
dive in.</p>
|
||
|
||
<h3 id="phone">Phone</h3>
|
||
|
||
<p>For a while I’ve been eyeing Mint Mobile. In the US, they have a plan offering
|
||
unlimited text and talk, plus 5 GB of data, for $15 per month. I generally use
|
||
less than 1 GB of streaming data, so this seemed like a clearly better option
|
||
than the $30+ I was paying for Google Fi. When I decided to switch, they had an
|
||
incredible deal offering a Google Pixel 9 plus a year’s service for a great
|
||
price, so I not only switched carrier, I also snagged a new phone! I had a
|
||
Samsung S21, which was more than sufficient for my needs, so switching isn’t
|
||
quite as significant as with the laptop, but it’s still a nice new experience.
|
||
The OS and environment on the Pixel is much nicer than Samsung phones, so
|
||
that’s quite the plus!</p>
|
||
|
||
<h3 id="nas">NAS</h3>
|
||
|
||
<p>I bought a 2-bay Synology NAS from a friend a few months ago, and with the
|
||
myriad other changes, decided to set it up proper. I setup
|
||
<a href="https://www.navidrome.org/">Navidrome</a> for audio, and <a href="https://jellyfin.org/">Jellyfin</a> for video. I had previously used Navidrome, then
|
||
switched to Jellyfin for both audio and video, but with the new phone comes a
|
||
return to form. I like <a href="https://gitlab.com/ultrasonic/ultrasonic">Ultrasonic</a>,
|
||
and Navidrome plays nicely with it.</p>
|
||
|
||
<p>The other big additions with the NAS is more backup scripts, and also pulling
|
||
down some YouTube series I like for local copies. More details in a full post.</p>
|
||
|
||
<h2 id="game-making">Game Making</h2>
|
||
|
||
<p>Two game jams! One for the entire month of September, <a href="https://itch.io/jam/clone-jam-game-a-month">Clone
|
||
Jam</a>, and a
|
||
<a href="https://itch.io/jam/mini-jam-167-cyber">Mini-Jam</a>. For the Clone Jam, I was
|
||
working on building a ray-casting-based dungeon scavenger, similar to “Legend
|
||
of Grimrock”, but with less combat. However, while I have made great progress
|
||
understanding how ray-casting works, and how to implement it, I won’t have time
|
||
to finish such a game. That knowledge won’t go to waste, though! There’s a
|
||
game-jam at the end of October where I intend to make use of it. Instead, I’ll
|
||
be touching-up and submitting a clone of Minesweeper I made:
|
||
<a href="https://vagabondazulien.itch.io/ticsweeper">TICsweeper</a>.</p>
|
||
|
||
<p>For the Mini-Jam, I decided to make a “runner” type game: you maneuver your
|
||
sprite to collect and/or avoid certain projectiles. I also made this game in
|
||
the <a href="https://tic80.com">TIC-80</a>. While I didn’t pull any all-nighters, focusing
|
||
on a single project for 72-hours with as little down-time as possible is still
|
||
quite exhausting! My submission was called
|
||
<a href="https://vagabondazulien.itch.io/runr">RUNR</a>. It ranked 48th out of 66
|
||
submissions, which is honestly disappointing, but not enough to demotivate me
|
||
from continuing my game-making journey!</p>
|
||
|
||
<h2 id="game-playing">Game Playing</h2>
|
||
|
||
<p>I finally finished my play-through of Morrowind, and one of its two expansions,
|
||
Tribunal. (Note: before “DLC”, new game content for existing games was
|
||
distributed like the game itself, on a piece of data-storing media, such as a
|
||
CD. These were called “expansion packs.”) I have thoroughly enjoyed my time in
|
||
The Elder Scrolls III, and I definitely understand why many claim it as their
|
||
favorite. I will talk more about my experience in a full post, just like I did
|
||
for my recent Fallout 3 replay (I mean, just like I <em>will</em>. I <em>WILL!</em>)</p>
|
||
|
||
<h2 id="business-time">Business Time</h2>
|
||
|
||
<p>Alas, while game making and playing are great uses of my time, they do not get
|
||
me the resources I need to pay my bills. I continue to work on starting my own
|
||
business. I’ve met with two mentors, one business and one technology, to help
|
||
get me started and provide guidance. In fact, this week marks what I would
|
||
consider the proper beginning of my business. With some dedication, I’ll have
|
||
more exciting news to share about this next time!</p>
|
||
|
||
<h2 id="thats-all-for-now">That’s All For Now!</h2>
|
||
|
||
<p>I think the original intention of a “Now” page is to be less verbose, but I
|
||
find the monthly cadence of a somewhat comprehensive update to be more
|
||
appealing! Until next month!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life In Progress, as of 2024-09-24]]></summary></entry><entry><title type="html">Life in Progress: August, 2024</title><link href="https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august.html" rel="alternate" type="text/html" title="Life in Progress: August, 2024" /><published>2024-08-19T00:00:00-05:00</published><updated>2024-08-19T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august</id><content type="html" xml:base="https://www.theinternetvagabond.com/2024/08/19/life-in-progress-august.html"><![CDATA[<h1 id="life-in-progress-as-of-2024-08-19">Life In Progress, as of 2024-08-19</h1>
|
||
|
||
<ul>
|
||
<li>Learning <a href="https://www.youtube.com/watch?v=LZVpvJsqTMM">Stan Rogers’
|
||
<em>Bluenose</em></a> on mandolin and voice</li>
|
||
<li>Building a few games in the <a href="https://tic80.com">TIC-80 fantasy console</a></li>
|
||
<li>Deploying my own <a href="https://codeberg.org/Codeberg/pages-server/">“Pages” server</a></li>
|
||
<li>Building a Forgejo Action for deploying game builds to Itch.io using
|
||
<a href="https://itch.io/docs/butler/">butler</a></li>
|
||
<li>Building a custom WordPress Docker container that uses SQLite</li>
|
||
<li>Starting my own business</li>
|
||
</ul>
|
||
|
||
<h2 id="music">Music</h2>
|
||
|
||
<p>Adam and I continue our semi-weekly jam sessions! We’ve settled on <a href="https://www.youtube.com/watch?v=LZVpvJsqTMM">Stan Rogers’
|
||
<em>Bluenose</em></a> for our first piece. I
|
||
normally pick up lyrics pretty quick, but this song eludes me. We worked on the
|
||
chord progression last week, and I’ve been actually practicing!</p>
|
||
|
||
<h2 id="game-dev">Game Dev</h2>
|
||
|
||
<p>Still having a blast with <a href="https://tic80.com/">TIC-80</a>. I made a small farming
|
||
experiment game, to learn <a href="https://fennel-lang.org">Fennel</a> some more and also
|
||
nail-down some basic design principles. Some of the ideas in that experiment,
|
||
namely generating the map with a loop and <code class="language-plaintext highlighter-rouge">mset</code> instead of using the built-in
|
||
map designer, gave me some insight for solving my darkness troubles in
|
||
Nightgolf. I’m still wrapping my head around it, but I think this will be a
|
||
solution.</p>
|
||
|
||
<p>The farming experiment game lives on
|
||
<a href="https://vagabondazulien.itch.io/farm-experiment-1">Itch.io</a> and the <a href="https://tic80.com/play?cart=3965">TIC-80
|
||
Webzone</a>.</p>
|
||
|
||
<h2 id="tech-dev">Tech Dev</h2>
|
||
|
||
<p><a href="https://forgejo.org/">Forgejo</a> continues to be rewarding, and I’m looking
|
||
forward to expanding my deployment of it by deploying my own <a href="https://codeberg.org/Codeberg/pages-server/">“Pages”
|
||
server</a>. This will allow me to
|
||
deploy my static sites on my own infrastructure. I’m also working on an “Action”
|
||
for leveraging <a href="https://itch.io/docs/butler/">butler</a> to publish games I publish
|
||
the source code for from my Forge to Itch.io.</p>
|
||
|
||
<p>In preparation for both my own use, and my business use, I need to learn more
|
||
about Nextcloud. I’m also working on building a custom WordPress Docker
|
||
container that relies on SQLite instead of MySQL.</p>
|
||
|
||
<p>Hovering about all this is backups and monitoring, both of which I sprinkle into
|
||
my learning voyage. I’m looking forward to writing up some documentation about
|
||
my implementation.</p>
|
||
|
||
<h2 id="entrepreneurship">Entrepreneurship</h2>
|
||
|
||
<p>I’m happy to report I was accepted into New York’s Self-Employment Assistance
|
||
Program, <a href="https://dol.ny.gov/SEAP">SEAP</a>. I will be starting a business offering
|
||
managed online services, such as website design and deployment, personal cloud,
|
||
and email. I would like to offer these services to local small businesses and
|
||
not-for-profits. I think of it as “Silicon Valley experience” at reasonable,
|
||
local prices. I’m excited to dive into the parts I’m not very familiar with,
|
||
namely the business side of things. I have extensive technical experience and
|
||
mastery, but I lack any significant business experience.</p>
|
||
|
||
<h2 id="gaming">Gaming</h2>
|
||
|
||
<p>I’ve started a new playthrough of <a href="https://en.wikipedia.org/wiki/Darkest_Dungeon">Darkest
|
||
Dungeon</a>. It’s mildly
|
||
frustrating, but mostly fun. I have fun yelling at the game; it’s like stress
|
||
relief. I’ve been generally successful, but the Crimson Court has been very
|
||
rough to me. It is a game about challenges and loss, though, so nothing
|
||
unexpected.</p>
|
||
|
||
<p>I’ve continued my play-through of
|
||
<a href="https://en.wikipedia.org/wiki/Sundered">Sundered</a>, though have put it down for
|
||
a bit. I’m playing it on my Steam Deck using <a href="https://lutris.net/">Lutris</a>, and
|
||
it works very well. Lutris continues to impress me, and I want to try writing an
|
||
installer for a game.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Life In Progress, as of 2024-08-19]]></summary></entry><entry><title type="html">Automatic Backups with RClone, systemd, and Backblaze</title><link href="https://www.theinternetvagabond.com/2023/05/07/rclone-backups.html" rel="alternate" type="text/html" title="Automatic Backups with RClone, systemd, and Backblaze" /><published>2023-05-07T00:00:00-05:00</published><updated>2023-05-07T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2023/05/07/rclone-backups</id><content type="html" xml:base="https://www.theinternetvagabond.com/2023/05/07/rclone-backups.html"><![CDATA[<h1 id="automatic-backups-with-rclone-systemd-and-backblaze">Automatic Backups with RClone, systemd, and Backblaze</h1>
|
||
|
||
<h2 id="quick-note">Quick Note</h2>
|
||
|
||
<p>Backups are not complicated. They may seem like it, but in reality the
|
||
complications arise from restoration. If you’re not doing anything fancy with
|
||
your data now, then don’t do anything fancy with your backups. Follow the 3-2-1
|
||
methodology: 3 copies of (important) data, in 2 different locations, 1 of which
|
||
is off-site. Many others have written about this in better detail than I ever
|
||
can; Jeff Geerling has a great article and several videos about it <a href="https://www.jeffgeerling.com/blog/2021/my-backup-plan">on his
|
||
site</a>. The time (and
|
||
often money) investment now can reduce worry, stress, and loss should the data
|
||
you care about ever become unusable.</p>
|
||
|
||
<p>(There are no affiliate links in this post, nor was I paid to recommend any
|
||
product or service.)</p>
|
||
|
||
<h1 id="my-needs">My Needs</h1>
|
||
|
||
<p>Backups are as important as the data you have. If all you’ve got is a directory
|
||
full of meme GIFs that you don’t mind losing, then backups may be a waste of
|
||
time and money. I have recently taken to buying as much of my music as possible
|
||
(especially through Bandcamp, and especially on Bandcamp Fridays!). While much
|
||
of the music I buy does exist on a remote server at a company somewhere, the
|
||
cost of having to re-download and re-organize all of it well outweighs the cost
|
||
of proper backups. Not to mention the music which I can’t get anywhere else
|
||
anymore. Nor to further mention the other data which I have. All of this is to
|
||
say: backups are worth it to me.</p>
|
||
|
||
<p>Recently I wanted to setup NFS on my home network. I was concerned about messing
|
||
something up, and erasing the directory I had intended to share, so I wanted to
|
||
backup the data. For a while I’ve been intending to setup backups (as everyone
|
||
probably does), but it was never a priority. This project helped to prioritze
|
||
it. I had read about <a href="https://rclone.org/">RClone</a>, a command-line utility for
|
||
interacting with an incredible number of cloud services. I messed around a bit
|
||
with it, found it to my liking, and started shopping around for a cloud storage
|
||
solution. Enter <a href="https://www.backblaze.com/">Backblaze</a>. The folks that publish
|
||
all those hard-drive stats? Turns out they also run a business where they
|
||
provide cloud storage. It’s inexpensive, reliable, and straight-forward. The
|
||
last step was to automate it with systemd timer units.</p>
|
||
|
||
<h2 id="backblaze-setup">Backblaze Setup</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://www.backblaze.com/">Backblaze Site</a></li>
|
||
<li><a href="https://www.backblaze.com/help.html">Backblaze Docs</a></li>
|
||
</ul>
|
||
|
||
<p>First step is to setup Backblaze. Create an account, verify email address, all
|
||
that jazz. I’d recommend enabling multi-factor authentication on the
|
||
<strong>Account</strong> -> <strong>My Settings</strong> page, under <strong>Security</strong>. Next, click on the
|
||
<strong>Account</strong> -> <strong>Application Keys</strong> page, and generate a new key. Fill in the
|
||
blanks (I gave my key full access to all buckets), copy the important bits, and
|
||
store them somewhere safe (like your password vault).</p>
|
||
|
||
<h2 id="rclone-setup">RClone Setup</h2>
|
||
|
||
<ul>
|
||
<li><a href="https://rclone.org/">RClone Site</a></li>
|
||
<li><a href="https://rclone.org/b2/">RClone Backblaze B2 Page</a></li>
|
||
</ul>
|
||
|
||
<p>Download and install RClone. Next run <code class="language-plaintext highlighter-rouge">rclone config</code> and walk through the
|
||
prompts. I’m using Backblaze, so I select “Backblaze B2” as my storage backend.
|
||
Then I add the application key ID and application key secret (key) at the
|
||
relevant prompts. For all of this configuration, I named the remote “backblaze”,
|
||
though a shorter name can make commands easier. Regardless, verify the
|
||
configuration is setup properly by running <code class="language-plaintext highlighter-rouge">rclone lsd backblaze:</code>, which will
|
||
list buckets. Unless a bucket was already configured, nothing will show up, and
|
||
also there won’t be any errors.</p>
|
||
|
||
<h2 id="backup-configuration">Backup Configuration</h2>
|
||
|
||
<p>Now, figure out how you want to backup your data. I have a <a href="/2020/06/14/setting-up-btrfs.html">BTRFS RAID setup
|
||
with multiple sub-volumes</a>, each for a
|
||
different data type: one for Books, one for Music, and so on. Since creating a
|
||
bucket doesn’t cost anything, I decided to split my backups similarly. I created
|
||
the buckets I wanted, and did a “manual” RClone sync of the data.</p>
|
||
|
||
<p><code class="language-plaintext highlighter-rouge">rclone sync --fast-list --transfers 20 /path/to/Books
|
||
backblaze:bucket-for-Books-backups</code></p>
|
||
|
||
<p>The “–fast-list” and “–transfers” options are specified on the <a href="https://rclone.org/b2/">RClone
|
||
Backblaze B2 page</a>, along with some others that may be
|
||
of interest.</p>
|
||
|
||
<p>At this point, my data was “backed-up”, and I could muck about with it more
|
||
confidently. Also, at this point, configuring back-ups is done. Run those RClone
|
||
sync commands once a week, and all is set. I don’t want to remember to do
|
||
things, though.</p>
|
||
|
||
<h2 id="automating-the-process">Automating the Process</h2>
|
||
|
||
<p>The first thing to do is create a user-agnostic location for the configuration
|
||
file and some additional files. I chose <code class="language-plaintext highlighter-rouge">/etc/rclone</code>, and copied the RClone
|
||
configuration file generated previously to this directory as <code class="language-plaintext highlighter-rouge">backblaze.conf</code>.</p>
|
||
|
||
<p>Next, I created a filter file. RClone has extensive <a href="https://rclone.org/filtering/">filtering
|
||
options</a>. For my current needs, a single file
|
||
will suffice.</p>
|
||
|
||
<h3 id="defaultfilter">default.filter</h3>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Exclude BTRFS snapshot directories
|
||
- .snapshots/**
|
||
# Exclude Syncthing configuration directories
|
||
- .stfolder/**
|
||
</code></pre></div></div>
|
||
|
||
<p>systemd timer units ( [<a href="https://wiki.archlinux.org/title/Systemd/Timers">Arch
|
||
Wiki</a>]
|
||
[<a href="https://man.archlinux.org/man/systemd.timer.5">Manual</a>] ) are triggers that
|
||
activate on a schedule. That schedule can be dynamic (relative to a
|
||
previous/other trigger), or static (at 6:15 every day). A timer unit triggers a
|
||
service unit, which does the work. For my backups, I decided to run a sync every
|
||
hour, at sometime between the 15 and 45 minute mark of that hour. To simplify
|
||
having multiple timer units that all do the same thing, I setup a template unit
|
||
(see the <strong>Note</strong> here: <a href="https://wiki.archlinux.org/title/Systemd#Using_units">Arch
|
||
Wiki</a>).</p>
|
||
|
||
<h3 id="rclone-backuptimer">rclone-backup@.timer</h3>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Unit]
|
||
Description=RClone Backup Timer Template
|
||
|
||
[Timer]
|
||
# Run every hour, sometime between the 15 minute and 45 minute mark
|
||
OnCalendar=*-*-* *:15:00
|
||
AccuracySec=30min
|
||
RandomizedDelaySec=5min
|
||
|
||
# The %i is whatever value is after the "@" for the configured unit. For
|
||
# example, rclone-backup@Books.timer will run the rclone-backup@Books.service
|
||
Unit=rclone-backup@%i.service
|
||
|
||
[Install]
|
||
WantedBy=timers.target
|
||
</code></pre></div></div>
|
||
|
||
<p>Then I can <code class="language-plaintext highlighter-rouge">enable</code> and <code class="language-plaintext highlighter-rouge">start</code> a timer for each directory to backup. To
|
||
minimize configuration, I also setup the service file to be a template. This
|
||
requires a bit of inflexible coordination: the directory name must match to a
|
||
part of the bucket name.</p>
|
||
|
||
<h3 id="rclone-backupservice">rclone-backup@.service</h3>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Unit]
|
||
Description=RClone Backup of %I
|
||
|
||
[Service]
|
||
Type=simple
|
||
ExecStart=/usr/bin/rclone sync -v --config "/etc/rclone/backblaze.conf" --fast-list --transfers 20 --filter-from "/etc/rclone/default.filter" /path/to/%i/ backblaze:bucket-for-%i-backups
|
||
</code></pre></div></div>
|
||
|
||
<p>The <code class="language-plaintext highlighter-rouge">--config</code> option allows us to specify the configuration in the <code class="language-plaintext highlighter-rouge">/etc</code>
|
||
directory. I include <code class="language-plaintext highlighter-rouge">-v</code> to have some additional output in the journal.
|
||
Again, <code class="language-plaintext highlighter-rouge">--fast-list</code> and <code class="language-plaintext highlighter-rouge">--transfers</code> are used to speed up the process and keep
|
||
costs lower. Then I <code class="language-plaintext highlighter-rouge">--filter-from</code> the “default.filter” file.</p>
|
||
|
||
<p>Place each of these files (<code class="language-plaintext highlighter-rouge">rclone-backup@.timer</code> and <code class="language-plaintext highlighter-rouge">rclone-backup@.service</code>)
|
||
into <code class="language-plaintext highlighter-rouge">/etc/systemd/system</code>. For each directory, enable and start the timer
|
||
unit; <code class="language-plaintext highlighter-rouge">systemctl enable rclone-backup@Example.timer</code> and <code class="language-plaintext highlighter-rouge">systemctl start
|
||
rclone-backup@Example.timer</code> will backup <code class="language-plaintext highlighter-rouge">/path/to/Example/</code> to the
|
||
<code class="language-plaintext highlighter-rouge">bucket-for-Example-backups</code> bucket.</p>
|
||
|
||
<h1 id="next-steps">Next Steps</h1>
|
||
|
||
<p>I would like to get some sort of metrics and dashboards setup to track backup
|
||
status and statistics. It could be very useful to be notified if a backup ever
|
||
fails.</p>
|
||
|
||
<p>Eventually, I’ll upload this to a repository somewhere for ease of access and
|
||
backup. When I do, I’ll update this post.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Automatic Backups with RClone, systemd, and Backblaze]]></summary></entry><entry><title type="html">Funkwhale on Linode with Object Storage</title><link href="https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale.html" rel="alternate" type="text/html" title="Funkwhale on Linode with Object Storage" /><published>2022-09-27T00:00:00-05:00</published><updated>2022-09-27T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale</id><content type="html" xml:base="https://www.theinternetvagabond.com/2022/09/27/linode_funkwhale.html"><![CDATA[<h1 id="funkwhale-on-linode-with-object-storage">Funkwhale on Linode with Object Storage</h1>
|
||
|
||
<h2 id="funkwhale-setup">Funkwhale Setup</h2>
|
||
|
||
<p><a href="https://funkwhale.audio/">Funkwhale</a> is a decentralized music service,
|
||
connecting to the <a href="https://en.wikipedia.org/wiki/Fediverse">fediverse</a> using the
|
||
ActivityPub protocol. It is a web-based application, allowing users to upload,
|
||
listen, and share music and podcasts. I think it’s a cool project, and I can
|
||
self-host it, so I did. For a while, Funkwhale offered an all-in-one Docker
|
||
container, but they shifted focus to a multi-container approach. I had delayed
|
||
my transition from all-in-one to multi-container, but finally this past weekend
|
||
I found myself with time and motivation to get it done. The installation of
|
||
Funkwhale using Docker is very straight forward. The community has developed a
|
||
series of templates that can be fetched, modified, and used to get started very
|
||
quickly and easily. Those instructions are
|
||
<a href="https://docs.funkwhale.audio/installation/docker.html#multi-container-installation">here</a>.
|
||
The only significant modification I made was using <code class="language-plaintext highlighter-rouge">/opt/funkwhale</code> as my
|
||
default data and media root. I keep all my Docker configuration in directories
|
||
in my home directory as well. Much of these changes can be established in the
|
||
<code class="language-plaintext highlighter-rouge">.env</code> file discussed in the installation instructions, but I also scrubbed the
|
||
template files created and used during installation to make sure the directories
|
||
were as I wanted them. I also proxy Funkwhale and many other services behind
|
||
nginx, and there were a few <a href="https://docs.funkwhale.audio/installation/index.html#nginx">additional
|
||
steps</a> I had to
|
||
take. With all that complete, I had transitioned successfully. I already had SSL
|
||
certificates, but if that’s also a requirement, they can easily be provisioned
|
||
using <a href="https://certbot.eff.org/">Certbot</a>.</p>
|
||
|
||
<h2 id="object-storage-setup">Object Storage Setup</h2>
|
||
|
||
<p>In my old setup, I leveraged Funkwhale’s ability to <a href="https://docs.funkwhale.audio/admin/importing-music.html">in-place import
|
||
music</a>. I transferred
|
||
about 70GB worth of music to my VPS (using Syncthing <3), filling the disk
|
||
almost entirely (<em>98%</em>). It was a temporary solution for a road trip, and I
|
||
knew I couldn’t keep it that way for long. Funkwhale has the ability to leverage
|
||
S3-compatible object storage, and Linode, the provider I already use for my VPS,
|
||
offers object storage. Any of the other major cloud providers will also do the
|
||
trick; I just went with what was easiest. On the Linode side, there’s not much
|
||
to it. I created a new bucket, labeled it accordingly, created an access key,
|
||
and that was it. The Funkwhale side proved to be a bit challenging, but not, it
|
||
turns out, due to configuration. Well, <em>technically</em> it was.</p>
|
||
|
||
<p>The relevant configuration options on the Funkwhale side, in the <code class="language-plaintext highlighter-rouge">.env</code> file:</p>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## External storages configuration
|
||
# Funkwhale can store uploaded files on Amazon S3 and S3-compatible storages (such as Minio)
|
||
# Uncomment and fill the variables below
|
||
|
||
AWS_ACCESS_KEY_ID=
|
||
AWS_SECRET_ACCESS_KEY=
|
||
AWS_STORAGE_BUCKET_NAME=
|
||
# An optional bucket subdirectory were you want to store the files. This is especially useful
|
||
# if you plan to use share the bucket with other services
|
||
# AWS_LOCATION=
|
||
|
||
# If you use a S3-compatible storage such as minio, set the following variable
|
||
# the full URL to the storage server. Example:
|
||
# AWS_S3_ENDPOINT_URL=https://minio.mydomain.com
|
||
AWS_S3_ENDPOINT_URL=
|
||
|
||
# If you want to serve media directly from your S3 bucket rather than through a proxy,
|
||
# set this to false
|
||
# PROXY_MEDIA=false
|
||
|
||
# If you are using Amazon S3 to serve media directly, you will need to specify your region
|
||
# name in order to access files. Example:
|
||
# AWS_S3_REGION_NAME=eu-west-2
|
||
# AWS_S3_REGION_NAME=
|
||
|
||
# If you are using Amazon S3, use this setting to configure how long generated URLs should stay
|
||
# valid. The default value is 3600 (60 minutes). The maximum accepted value is 604800 (7 days)
|
||
|
||
# AWS_QUERYSTRING_EXPIRE=
|
||
|
||
# If you are using an S3-compatible object storage provider, and need to provide a default
|
||
# ACL for object uploads that is different from the default applied by boto3, you may
|
||
# override it here. Example:
|
||
# AWS_DEFAULT_ACL=public-read
|
||
# Available options can be found here: https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl
|
||
|
||
AWS_DEFAULT_ACL=
|
||
</code></pre></div></div>
|
||
|
||
<p>I’ve included the comments. The entire file is commented, and generally easy
|
||
enough to figure out. On the Linode side, when I generated the access key, it
|
||
provided me an <em>Access Key</em> and a <em>Secret Key</em>. I had already created a bucket,
|
||
and so I had the <em>Bucket Name</em>. The challenge for me was what the <em>Endpoint URL</em>
|
||
was, and if I needed to set a <em>Region Name</em> and <em>ACL</em>. Linode’s documentation on
|
||
their object storage offering is a bit anemic, and so I made use of their setup
|
||
instructions for <a href="https://www.linode.com/docs/products/storage/object-storage/guides/s3cmd/">using s3cmd with Linode object
|
||
storage</a>.
|
||
From this guide, I was able to both setup <code class="language-plaintext highlighter-rouge">s3cmd</code>, and also determine what the
|
||
<em>Endpoint URL</em> would be. I also set the <em>Region Name</em> and <em>ACL</em> to match what
|
||
the UI was showing, but I’m still not certain their necessary. Here’s the trick,
|
||
and the cause of a few hours-worth of confusion: restarting the Docker
|
||
containers wasn’t re-reading the <code class="language-plaintext highlighter-rouge">.env</code> file; I had to completely stop and
|
||
re-create them. It wasn’t until I ran <code class="language-plaintext highlighter-rouge">docker inspect funkwhale-docker_api_1</code>
|
||
and noticed the environment variables weren’t set that I figured this out. Could
|
||
be this is common knowledge for Docker-gurus; now I know. With the
|
||
configuration in place, and the containers recreated, I was able to upload files
|
||
through Funkwhale, and watch them be stored in my Linode bucket. My final
|
||
configuration options were as follows:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>AWS_ACCESS_KEY_ID=<stuff>
|
||
AWS_SECRET_ACCESS_KEY=<secret stuff>
|
||
AWS_STORAGE_BUCKET_NAME=funkwhale-music-bucket-name
|
||
AWS_S3_ENDPOINT_URL=https://us-southeast-1.linodeobjects.com
|
||
AWS_S3_REGION_NAME=us-southeast-1
|
||
AWS_DEFAULT_ACL=public-read
|
||
</code></pre></div></div>
|
||
|
||
<h2 id="next-steps">Next Steps</h2>
|
||
|
||
<p>The downside of Funkwhale’s S3-compatible object storage integration lies in how
|
||
files are uploaded. One cannot simply <del>walk into</del> upload files to the bucket;
|
||
music must be uploaded through Funkwhale’s API (via web or other means), and
|
||
then Funkwhale stores it accordingly (like for local uploads). I have a lot of
|
||
music, and I can’t be asked to manually upload it all. That’s, like, 2 hours of
|
||
half-hearted work. No, instead, the obvious solution is to build a script that
|
||
can automatically upload any new music from my local music directory to
|
||
Funkwhale automatically. What I’m considering now is how I want to do that. I
|
||
could leverage systemd to watch my local music directory, and run the upload
|
||
script whenever new music is uploaded. Could even expand it to remove music
|
||
whenever I delete it locally, though that seems a bit odd. I could instead setup
|
||
a cron or systemd-timer to run at a set interval, and check for any new files
|
||
since the last run, and upload them. Regardless of the trigger, the upload
|
||
functionality should ideally avoid duplicates, run in a non-blocking fashion,
|
||
maybe batch upload files, and be low impact on my desktop. So that’s next.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Funkwhale on Linode with Object Storage]]></summary></entry><entry><title type="html">Setting up Syncthing on the Steam Deck (Updated!)</title><link href="https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing.html" rel="alternate" type="text/html" title="Setting up Syncthing on the Steam Deck (Updated!)" /><published>2022-07-04T00:00:00-05:00</published><updated>2022-07-04T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing</id><content type="html" xml:base="https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthing.html"><![CDATA[<h1 id="syncthing-on-the-steam-deck-updated">Syncthing on the Steam Deck (Updated!)</h1>
|
||
|
||
<h2 id="update">Update</h2>
|
||
|
||
<p>Turns out, when you update the SteamOS, it completely over-writes the operating
|
||
system. All of the setup I had originally written was great, if I never update,
|
||
which is unacceptable. Not all is lost; the quest simply gets harder. If I can’t
|
||
rely on system-wide services, then I rely on user services.</p>
|
||
|
||
<h3 id="the-wrong-way-system-wide-services">The Wrong Way: System-Wide Services</h3>
|
||
|
||
<p>My first attempt was to setup Syncthing as a system-wide service managed by
|
||
<code class="language-plaintext highlighter-rouge">systemd</code>, installed via <code class="language-plaintext highlighter-rouge">pacman</code>. There are several problems with this. First,
|
||
it requires disabling the read-only file-system. Next, <code class="language-plaintext highlighter-rouge">pacman</code> is not setup nor
|
||
reliable, since every SteamOS update will over-write any changes I make to any
|
||
of the read-only file-system, including the directories that <code class="language-plaintext highlighter-rouge">pacman</code> relies on.
|
||
Related, the update will also erase the Syncthing package. This means I either
|
||
never update (inadvisable, and unacceptable), or I setup Syncthing not in the
|
||
read-only file-system.</p>
|
||
|
||
<h3 id="the-right-way-user-services">The Right Way: User Services</h3>
|
||
|
||
<p>systemd allows for non-root-based services, called user services. The Arch Wiki
|
||
<a href="https://wiki.archlinux.org/title/Systemd/User">systemd/User</a> article describes
|
||
this functionality much more than I will. Here are the relevant details:</p>
|
||
|
||
<ul>
|
||
<li>User services can be enabled to start when a user logs in</li>
|
||
<li>Service files are stored in the user’s home directory (specifically
|
||
<code class="language-plaintext highlighter-rouge">~/.config/systemd/user</code>)</li>
|
||
<li>No root privileges are required. No modifying the read-only file-system</li>
|
||
</ul>
|
||
|
||
<h2 id="syncthing">Syncthing</h2>
|
||
|
||
<p>Syncthing is incredible. I’ve <a href="2020/07/19/syncthing-part-1.html">written about it
|
||
before</a>, but the setup here is a bit more
|
||
involved. The Steam Deck runs Arch Linux (and have I told you yet today that I
|
||
do too?), so the Arch Wiki <a href="https://wiki.archlinux.org/title/Syncthing">article on
|
||
Syncthing</a> gives some good insight.
|
||
When I initially started this process, I installed the SyncthingGTK application
|
||
from the Discover Store. This means it is a Flatpak application, and so doesn’t
|
||
require elevated user privileges. I also tried the Syncthingy application, which
|
||
explicitly calls out Steam Deck users. However, both require running the Flatpak
|
||
in the background (like some users do for Discord or Spotify). I don’t like
|
||
this, it feels off, and thus I sought a different approach.</p>
|
||
|
||
<h2 id="sshd-still-incredibly-useful">SSHD: Still Incredibly Useful</h2>
|
||
|
||
<p>I got real tired real quick of using the on-screen keyboard. After
|
||
complaining, a friend recommended I enable <code class="language-plaintext highlighter-rouge">sshd</code> and just remote in to the
|
||
device. Doing so was a breeze, and I recommend to others who don’t have a
|
||
physical keyboard they can plug into their device. Drop to desktop mode
|
||
(hold the power button for a few seconds, and select the option), and start a
|
||
terminal (default is Konsole). Before remotely accessing the device, or using
|
||
elevated privileges via <code class="language-plaintext highlighter-rouge">sudo</code>, I need to set a password for the default user,
|
||
<em>deck</em>. In the terminal, type <code class="language-plaintext highlighter-rouge">passwd</code> and set it (and then put it in your
|
||
password vault so you don’t forget. You <em>do</em> have a password vault, right?).
|
||
Start the service, <code class="language-plaintext highlighter-rouge">sudo systemctl start sshd</code>, and optionally enable it to have
|
||
<code class="language-plaintext highlighter-rouge">sshd</code> automatically started on each boot (<code class="language-plaintext highlighter-rouge">sudo systemctl enable sshd</code>). Get
|
||
the device IP with <code class="language-plaintext highlighter-rouge">ip addr list</code>, from my desktop run <code class="language-plaintext highlighter-rouge">ssh deck@ip-address</code>,
|
||
type in the password, and now I’m a grade-A Hackermans.</p>
|
||
|
||
<p>This setting is not reset on SteamOS updates, that I can tell. Once enabled,
|
||
this will always start at boot, and always be on until explicitly turned off. Be
|
||
mindful of that if you decide to wander away from your home network; maybe turn
|
||
it off in public if you don’t need it.</p>
|
||
|
||
<h2 id="setup">Setup</h2>
|
||
|
||
<p>There are 2 things required: a systemd service file, and the <code class="language-plaintext highlighter-rouge">syncthing</code>
|
||
binary. Syncthing is written in Go, and a compiled binary can be downloaded that
|
||
has no dependencies or installation requirements. It can be downloaded from
|
||
the <a href="https://github.com/syncthing/syncthing/releases/tag/v1.20.3">Syncthing
|
||
Releases</a> page for
|
||
many platforms and architectures. The Steam Deck is a Linux platform, using the
|
||
AMD64 architecture (or x86_64), so I grab that one. I’ll note here, since I have
|
||
SSH access, I do all the editing and downloading on my desktop, and then
|
||
transfer the files using <code class="language-plaintext highlighter-rouge">scp</code> to the Deck. All of these steps can be done on
|
||
the Deck itself, without SSH access. Once the proper tarball has been
|
||
downloaded, extract it, and within will be the <code class="language-plaintext highlighter-rouge">syncthing</code> binary, ready to
|
||
rock. I copy/move the binary to <code class="language-plaintext highlighter-rouge">~/.local/bin/syncthing</code> on the Deck. The exact
|
||
location is less important than ensuring the binary is within my home directory
|
||
on the Deck.</p>
|
||
|
||
<p>The systemd serivce file can also be taken from the extracted tarball, but
|
||
requires modification. In the tarball, it is
|
||
<code class="language-plaintext highlighter-rouge">etc/linux-systemd/user/syncthing.service</code>. Copy this file to
|
||
<code class="language-plaintext highlighter-rouge">~/.config/systemd/user</code> on the Deck, and edit the “ExecStart” line in the
|
||
“[Service]” section from</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
|
||
[Service]
|
||
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
|
||
...
|
||
</code></pre></div></div>
|
||
|
||
<p>to</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
|
||
[Service]
|
||
ExecStart=/home/deck/.local/bin/syncthing serve --no-browser --no-restart --logflags=0
|
||
...
|
||
</code></pre></div></div>
|
||
<p>(or wherever you decided to put the local <code class="language-plaintext highlighter-rouge">syncthing</code> binary)</p>
|
||
|
||
<p>With everything in place, I can now enable and start the Syncthing user service:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>systemctl --user enable syncthing.service
|
||
systemctl --user start syncthing.service
|
||
</code></pre></div></div>
|
||
|
||
<p>Since I don’t have a physical keyboard plugged in, I modify my SSH command
|
||
slightly to forward the Syncthing web-UI from the Deck to my local machine:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -L 31337:deck-ip-goes-here:8384 deck@deck-ip-goes-here
|
||
</code></pre></div></div>
|
||
|
||
<p>Now, on my local machine I can open one tab to <code class="language-plaintext highlighter-rouge">localhost:8384</code>, to show
|
||
Syncthing on my local machine, and another tab to <code class="language-plaintext highlighter-rouge">localhost:31337</code> to show
|
||
Syncthing on my Deck. From here, I add my local machine as a device on my Deck,
|
||
and begin sharing folders.</p>
|
||
|
||
<h2 id="closing-thoughts">Closing Thoughts</h2>
|
||
|
||
<p>I’ve been using this setup for about a week now. I’ve synced almost 20GB of
|
||
files, including configurations and saves for Retroarch. It works after
|
||
restarts, OS and client upgrades, and waking the device from sleep. It sits
|
||
quietly in the background, without having to start up applications. The biggest
|
||
problem is that it doesn’t automatically update to the newest version of
|
||
Syncthing. It’s also a bit involved to setup. To that end, I’ve written a tool
|
||
to help with setup: <a href="https://codeberg.org/VagabondAzulien/steam-deck-syncthing">Steam Deck Syncthing
|
||
Setup</a>. I’m still
|
||
finishing it up, but I intend to make use of it to keep my version of Syncthing
|
||
up-to-date. If you use it, let me know!</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Syncthing on the Steam Deck (Updated!)]]></summary></entry><entry><title type="html">Oblivion on Linux, with Mods! Part 2 - Mods</title><link href="https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2.html" rel="alternate" type="text/html" title="Oblivion on Linux, with Mods! Part 2 - Mods" /><published>2021-12-09T00:00:00-06:00</published><updated>2021-12-09T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2</id><content type="html" xml:base="https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2.html"><![CDATA[<p>Every player’s mod list is different. Some will focus on visuals, making the
|
||
game as graphically impressive and pretty as possible. Others care primarily
|
||
about additional content. I tend towards the later, with a preference for
|
||
additional survival or realism mods. I recommend starting with the “Core Mods”
|
||
section in the <a href="https://www.nexusmods.com/oblivion/mods/49898">Oblivion Comprehensive Modding Guide by
|
||
Dispensation</a> which will cover
|
||
some essential performance and enhancement mods.</p>
|
||
|
||
<p>Below are some specific mods I would like to highlight, and which I enjoy.</p>
|
||
|
||
<h2 id="survival-related">Survival Related</h2>
|
||
|
||
<h3 id="basic-primary-needs--personal-hygiene">Basic Primary Needs & Personal Hygiene</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/37088">Nexus Link - Basic Primary Needs</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/42038_">Nexus Link - Basic Personal Hygiene</a></li>
|
||
</ul>
|
||
|
||
<p>These two mods cover most of the survival aspects of my mod pack. “Basic Primary
|
||
Needs” adds hunger, thirst, and fatigue, while “Basic Personal Hygiene” adds
|
||
cleanliness. Managing these will feel tedious to some, but I really like having
|
||
to eat and drink, and visiting a bath house after a long time adventuring.</p>
|
||
|
||
<p>Each mod can make use of <a href="https://www.nexusmods.com/oblivion/mods/34905">additional HUD Status
|
||
Bars</a>, which makes tracking the
|
||
new needs much easier.</p>
|
||
|
||
<h3 id="travelers-tent">Traveler’s Tent</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/49654">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>This mod adds a portable player home, and is supremely comfy. Because I avoid
|
||
fast-travel, I wanted some sort of camping mod. I originally used <a href="https://www.nexusmods.com/oblivion/mods/37197">Maskar’s
|
||
Camping Mod</a> before learning of
|
||
this mod. By comparison, the tent in Traveler’s Tent feels almost like cheating,
|
||
but sometimes it’s important to treat yourself.</p>
|
||
|
||
<h2 id="world-enhancement">World Enhancement</h2>
|
||
|
||
<p>These I would consider my graphical improvements. I’m generally not too
|
||
concerned with making the game look good, but I love making the game feel more
|
||
realistic. These mods make Cyrodiil feel more alive.</p>
|
||
|
||
<h3 id="better-cities">Better Cities</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/16513/">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>This is a massive collection of city overhaul and enhancement mods. I was
|
||
awe-struck when I walked around the Imperial City for the first time with this
|
||
mod enabled. Bravil felt like a dangerous, crowded harbor town. Leyawin looks
|
||
like an actual place people live. Though the improvements do come with FPS hits.
|
||
Doubly-so if enabling the Open Cities option, which moves cities into the
|
||
overworld space, instead of their own individual instances. It’s a balancing
|
||
act: the immersion of walking directly into a city sometimes isn’t worth
|
||
crashing to desktop when adventuring around cities.</p>
|
||
|
||
<h3 id="cobl">COBL</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/21104">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>“Common Oblivion” enriches the world of Oblivion by adding lots of little
|
||
things, and helping different mods “talk” to each other. I like to think of it
|
||
as filling in a lot of the details that feel missing from vanilla Oblivion.</p>
|
||
|
||
<h3 id="enhanced-economy">Enhanced Economy</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/25078">Nexus Link</a></li>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/47184">Lubrons Patch</a></li>
|
||
</ul>
|
||
|
||
<p>This mod and the corresponding patch make the economy of the world more dynamic.
|
||
What I really like are the merchant quests that are added. Several merchants in
|
||
each town will ask you to find an item in one of the nearby dungeons. It adds
|
||
flavor to the game in just the right way.</p>
|
||
|
||
<p>Lubron’s Patch for Enhanced Economy fixes some bugs and cleans up the code a
|
||
bit.</p>
|
||
|
||
<h3 id="lights-of-oblivion---road-lanterns">Lights of Oblivion - Road Lanterns</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/46131">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>A very simple mod that I feel really enhances my travel around Cyrodiil. I avoid
|
||
fast-traveling whenever possible, and walking lit roads at night feels comfy.
|
||
I’m partial to the Imperial model.</p>
|
||
|
||
<h3 id="natural-environments">Natural Environments</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/2536">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>Arguably the only graphical enhancement mod, Natural Environments provides
|
||
options for modifying the weather, water, and vegetation around Cyrodiil. The
|
||
weather and vegetation enhancements especially stand out. Overall the mods
|
||
don’t cause me much performance impact, if any.</p>
|
||
|
||
<h3 id="cyrodiil-travel-services">Cyrodiil Travel Services</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.afkmods.com/index.php?/files/file/263-cyrodiil-travel-services/">AFK Mods Link</a></li>
|
||
</ul>
|
||
|
||
<p>I really enjoyed that in Skyrim there was a dude with a wagon you could pay to
|
||
travel to the various cities. This mod adds similar functionality, and then
|
||
some. Useful when playing the game without fast-travel enabled.</p>
|
||
|
||
<h2 id="overhauls">Overhauls</h2>
|
||
|
||
<p>Arguably, these are the heavy hitters. These mods will alter the mechanics of
|
||
the game, often making things more challenging but also more rewarding.</p>
|
||
|
||
<h3 id="maskars-oblivion-overhaul">Maskar’s Oblivion Overhaul</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/42780">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>Maskar’s Overhaul is a massive endeavor. It “[improves] many aspects of the
|
||
game, while maintaining the overall feel of the game and ensuring compatibility
|
||
with most other mods.” I think it does so with great success! However, be
|
||
forewarned, that this overhaul makes the game more challenging.</p>
|
||
|
||
<p>There is too much to cover about Maskar’s in this post, but I highly recommend
|
||
it. It comes with a PDF instruction manual, which is 61 pages long.</p>
|
||
|
||
<h3 id="vanilla-combat-enhanced">Vanilla Combat Enhanced</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/45314">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>As the name implies, this overhaul adjusts but does not change the vanilla
|
||
combat experience. Whereas other mods add new moves or fatigue systems, this mod
|
||
updates the vanilla combat experience to be more challenging and fair. It works
|
||
with Maskar’s after a small modification, which will be covered in the next
|
||
part. This is one of the mods that I haven’t played with for too long, and
|
||
there are definitely some additional or alternative combat mods I’m considering.
|
||
Namely, <a href="https://www.nexusmods.com/oblivion/mods/49873">Dynamic Oblivion Combat</a>
|
||
and <a href="https://www.nexusmods.com/oblivion/mods/49939">Combat Additions</a>.</p>
|
||
|
||
<h3 id="supreme-magicka">Supreme Magicka</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://www.nexusmods.com/oblivion/mods/12466">Nexus Link</a></li>
|
||
</ul>
|
||
|
||
<p>Rounding out the trio is a magic overhaul. Supreme Magicka approaches magic in
|
||
Oblivion in a similar way to Vanilla Combat Enhanced with combat: it seeks to
|
||
improve and expand, without replacing. To continue similarities, this mod is one
|
||
I haven’t sank my teeth into as much. The characters I’ve been playing most
|
||
recently haven’t achieved very powerful magical capabilities yet. An alternative
|
||
to this mod is <a href="https://www.nexusmods.com/oblivion/mods/49096">Av Latta
|
||
Magicka</a>.</p>
|
||
|
||
<h2 id="next-steps">Next Steps</h2>
|
||
|
||
<p>In the last part of this series, I want to walk through a complete install of
|
||
Oblivion from scratch.</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Every player’s mod list is different. Some will focus on visuals, making the game as graphically impressive and pretty as possible. Others care primarily about additional content. I tend towards the later, with a preference for additional survival or realism mods. I recommend starting with the “Core Mods” section in the Oblivion Comprehensive Modding Guide by Dispensation which will cover some essential performance and enhancement mods.]]></summary></entry><entry><title type="html">Oblivion on Linux, with Mods! Part 1 - Tools</title><link href="https://www.theinternetvagabond.com/2021/11/20/oblivion-linux.html" rel="alternate" type="text/html" title="Oblivion on Linux, with Mods! Part 1 - Tools" /><published>2021-11-20T00:00:00-06:00</published><updated>2021-11-20T00:00:00-06:00</updated><id>https://www.theinternetvagabond.com/2021/11/20/oblivion-linux</id><content type="html" xml:base="https://www.theinternetvagabond.com/2021/11/20/oblivion-linux.html"><![CDATA[<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>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[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 Systematic Chaos. 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!]]></summary></entry><entry><title type="html">Character Write-up: Dabbledop Humblebumple</title><link href="https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard.html" rel="alternate" type="text/html" title="Character Write-up: Dabbledop Humblebumple" /><published>2020-10-23T00:00:00-05:00</published><updated>2020-10-23T00:00:00-05:00</updated><id>https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard</id><content type="html" xml:base="https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizard.html"><![CDATA[<p>Gnomes are interesting. I can’t help but play them as small frantic stressballs.
|
||
Like hobbits from <em>Lord of the Rings</em>, dialed up to 11, minus the extra
|
||
breakfasts, and plus ceaseless banter. Gnomes are fun. This write up was for a
|
||
character for the same campaign as <a href="/2018/01/27/halvar.html">Halvar</a>, when he had
|
||
to step away for a bit.</p>
|
||
|
||
<h2 id="backstory">Backstory</h2>
|
||
|
||
<p>Nothing is more tiresome than midweek afternoon service. All the candles, and
|
||
the verses, and the never-ending procession. Odin’s great and all, but I don’t
|
||
think he cares about this. Of course, I mention that one time to the head priest
|
||
and it’s latrine duty for the week! I guess now it doesn’t matter. All these
|
||
acolyte duties were from many years ago. It was pure fate, the day my current
|
||
teacher Maell’ezharon wandered into our village. He needed certain gemstones,
|
||
which my family was renowned for, and which I was responsible for that day. I
|
||
just happened to bring exactly the number he needed with me to the church that
|
||
day. That’s a habit I have. The priests say I’m “blessed by foresight.”</p>
|
||
|
||
<p>Anyway, Maell’ezharon wanders in, and finds me, and I tell him I know he’s
|
||
looking for these gemstones, and he’s a bit surprised, but mentions that he
|
||
hadn’t had his serious anti-divination protections up, since he figured no one
|
||
would care. I told him I didn’t know what that meant. The priest chimed in that
|
||
I was blessed by foresight. Maell’ezharon said that was shit. I was blown away.
|
||
The priest huffed and wandered off, and I just stared at this elf who seemed
|
||
completely unphased by an ability the priests couldn’t stop fawning over me for.
|
||
So I push him a bit on it, and he says that divination is mighty common, and
|
||
that if I wanted to learn more he could teach me, and he’d be willing to give me
|
||
a discount on his services if I gave him a discount on the gems!</p>
|
||
|
||
<p>And man temples are booooring! So yeah, I just packed up some stuff and told the
|
||
priests I had to go because “foresight told me I had to!” and caught up with
|
||
Maell’ezharon and off we went! I brought some extra gems, and a few extra
|
||
sandwiches (which he seemed off-put by, which I account to his dainty elf ways,
|
||
which meant more for me!).</p>
|
||
|
||
<p>For the most part, it was kind of boring - but not as boring as the temple!
|
||
Nothing is as boring as that. Trust me. Just routine travel along “safe and
|
||
well-known roads” (says Maell’ezharon) to “respectable and trustworthy
|
||
merchants” (says Maell’ezharon) for “law-abiding and fair trade deals.” (says
|
||
Maell’ezharon). I was a bit surprised to find myself still saying a prayer here
|
||
and there but old habits die hard. The more we travelled, the more Maell’ezharon
|
||
would teach me. First he helped me refine my portent abilities, and got me a
|
||
spellbook, and let me copy some of his spells into it. Then, in each town we
|
||
went to, we would combine our powers to get the best deals possible. I would
|
||
call upon my divine powers to aid him, and he would wheel-and-deal his way
|
||
through trade deals and contracts. He insisted, time and again, that we do
|
||
things “legally and fair” (his words) which was fine by me.</p>
|
||
|
||
<p>Then, the event happened. And magic suddenly left, and Maell’ezharon… did not
|
||
take that well. I should say, this was probably 5 or so years into his
|
||
mentorship. He had taught me many things, and I was developing into “quite the
|
||
capable wizard, if I do say so myself” (Maell’ezharon said that). We had
|
||
travelled all over the place, and eventually Maell’ezharon decided he’d like to
|
||
“invest in real estate since it’s like free money” so he bought a tower and did
|
||
the whole typical wizard thing: magic plants, and a few animated objects as
|
||
guards, and what not. I helped with that too, which was really fun. Anyway when
|
||
the event happened, we were trading and suddenly I just felt this… emptiness.
|
||
Like, a part of my body was suddenly missing. I looked at Maell’ezharon and he
|
||
was pale as bone. He just stared at his hands, then looked at the merchant and
|
||
told him he had to go, and he just left. He didn’t even get his things, he just
|
||
stumbled out of the shop. I grabbed anything that was ours, and walked outside
|
||
and saw him just standing there, waving his arms and trying to say the words,
|
||
and his eyes were a bit crazy-like, and he was sweating. After about 20 minutes,
|
||
he just sat down and stared. It took me almost 4 hours to finally get him up and
|
||
to an inn. The next day we went back to the tower, and it was really quite a sad
|
||
sight. The plants had all died (and not because I forgot to water them I always
|
||
watered them I am responsible), the guards were piles of rubble. I helped him
|
||
in, to his room, to his favorite chair, where he just slumped down and stared
|
||
into the empty, cold fireplace. For a few weeks I tended to him, making sure he
|
||
at least ate. And I kept up the place, cleaning as best I could. But after a
|
||
while, I started worrying about my family, and so I hired a local farm boy to
|
||
take care of Maell’ezharon while I was gone (feed him twice a day, make sure he
|
||
uses the loo, and don’t let him hurt himself).</p>]]></content><author><name>Bill Niblock</name></author><summary type="html"><![CDATA[Gnomes are interesting. I can’t help but play them as small frantic stressballs. Like hobbits from Lord of the Rings, dialed up to 11, minus the extra breakfasts, and plus ceaseless banter. Gnomes are fun. This write up was for a character for the same campaign as Halvar, when he had to step away for a bit.]]></summary></entry></feed> |