Jekyll2025-01-03T13:48:04-06:00https://www.theinternetvagabond.com/feed.xmlThe Internet VagabondBill NiblockLife in Progress: January, 20252025-01-03T00:00:00-06:002025-01-03T00:00:00-06:00https://www.theinternetvagabond.com/2025/01/03/life-updateLife in Progress: January, 2025

My now page 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.

2024 Retrospective

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.

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 Fallout 3.

At the end of May, I entered into a game jam, and made my first video game, L4-N-DER Training Simulator. 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 Fennel and the LÖVE 2D game engine. 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.

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 Morrowind for the first time.

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 TICSweeper (a Minesweeper clone mde with the TIC-80); RUNR (another TIC-80 game); and Escape The Crash. Escape 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.

At the end of the year, I formally started my business, Niblock Technology Solutions, 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 Deus Ex.

Now: January, 2025

Now. Plenty of plans and ambitions.

Easiest: I started a playthrough of Oblivion. Similar to Fallout 3 and Morrowind, my goal is to complete the main story and all DLC’s. This time around, I explored a new modding setup, using Lutris 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 (Part 1, Part 2) detailing using Steam and Proton. I think the Lutris approach is a bit nicer.

Escape The Crash 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.

Game-making in general I want to continue. I’ve started looking into the DragonRuby game engine. I also want to learn (more) Godot. I have no shortage of ideas, only my regular struggles with motivation and focus.

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.

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.

There are the business goals. I need to have an income that supports my lifestyle, which means more clients and (hopefully) more businesses!

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!

]]>
Bill Niblock
Life in Progress: September, 20242024-09-24T00:00:00-05:002024-09-24T00:00:00-05:00https://www.theinternetvagabond.com/2024/09/24/life-in-progress-septemberLife In Progress, as of 2024-09-24
  • New hardware: laptop, phone, and NAS
  • TWO game jams!
  • Finishing up Morrowind
  • SEAP/Self-Employment Progress

New Hardware

Framework Laptop

This new Framework 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.

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.

Phone

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!

NAS

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 Navidrome for audio, and Jellyfin 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 Ultrasonic, and Navidrome plays nicely with it.

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.

Game Making

Two game jams! One for the entire month of September, Clone Jam, and a Mini-Jam. 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: TICsweeper.

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 TIC-80. 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 RUNR. It ranked 48th out of 66 submissions, which is honestly disappointing, but not enough to demotivate me from continuing my game-making journey!

Game Playing

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 will. I WILL!)

Business Time

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!

That’s All For Now!

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!

]]>
Bill Niblock
Life in Progress: August, 20242024-08-19T00:00:00-05:002024-08-19T00:00:00-05:00https://www.theinternetvagabond.com/2024/08/19/life-in-progress-augustLife In Progress, as of 2024-08-19

Music

Adam and I continue our semi-weekly jam sessions! We’ve settled on Stan Rogers’ Bluenose 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!

Game Dev

Still having a blast with TIC-80. I made a small farming experiment game, to learn Fennel 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 mset 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.

The farming experiment game lives on Itch.io and the TIC-80 Webzone.

Tech Dev

Forgejo continues to be rewarding, and I’m looking forward to expanding my deployment of it by deploying my own “Pages” server. This will allow me to deploy my static sites on my own infrastructure. I’m also working on an “Action” for leveraging butler to publish games I publish the source code for from my Forge to Itch.io.

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.

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.

Entrepreneurship

I’m happy to report I was accepted into New York’s Self-Employment Assistance Program, SEAP. 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.

Gaming

I’ve started a new playthrough of Darkest Dungeon. 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.

I’ve continued my play-through of Sundered, though have put it down for a bit. I’m playing it on my Steam Deck using Lutris, and it works very well. Lutris continues to impress me, and I want to try writing an installer for a game.

]]>
Bill Niblock
Automatic Backups with RClone, systemd, and Backblaze2023-05-07T00:00:00-05:002023-05-07T00:00:00-05:00https://www.theinternetvagabond.com/2023/05/07/rclone-backupsAutomatic Backups with RClone, systemd, and Backblaze

Quick Note

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 on his site. The time (and often money) investment now can reduce worry, stress, and loss should the data you care about ever become unusable.

(There are no affiliate links in this post, nor was I paid to recommend any product or service.)

My Needs

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.

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 RClone, 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 Backblaze. 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.

Backblaze Setup

First step is to setup Backblaze. Create an account, verify email address, all that jazz. I’d recommend enabling multi-factor authentication on the Account -> My Settings page, under Security. Next, click on the Account -> Application Keys 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).

RClone Setup

Download and install RClone. Next run rclone config 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 rclone lsd backblaze:, which will list buckets. Unless a bucket was already configured, nothing will show up, and also there won’t be any errors.

Backup Configuration

Now, figure out how you want to backup your data. I have a BTRFS RAID setup with multiple sub-volumes, 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.

rclone sync --fast-list --transfers 20 /path/to/Books backblaze:bucket-for-Books-backups

The “–fast-list” and “–transfers” options are specified on the RClone Backblaze B2 page, along with some others that may be of interest.

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.

Automating the Process

The first thing to do is create a user-agnostic location for the configuration file and some additional files. I chose /etc/rclone, and copied the RClone configuration file generated previously to this directory as backblaze.conf.

Next, I created a filter file. RClone has extensive filtering options. For my current needs, a single file will suffice.

default.filter

# Exclude BTRFS snapshot directories
- .snapshots/**
# Exclude Syncthing configuration directories
- .stfolder/**

systemd timer units ( [Arch Wiki] [Manual] ) 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 Note here: Arch Wiki).

rclone-backup@.timer

[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

Then I can enable and start 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.

rclone-backup@.service

[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

The --config option allows us to specify the configuration in the /etc directory. I include -v to have some additional output in the journal. Again, --fast-list and --transfers are used to speed up the process and keep costs lower. Then I --filter-from the “default.filter” file.

Place each of these files (rclone-backup@.timer and rclone-backup@.service) into /etc/systemd/system. For each directory, enable and start the timer unit; systemctl enable rclone-backup@Example.timer and systemctl start rclone-backup@Example.timer will backup /path/to/Example/ to the bucket-for-Example-backups bucket.

Next Steps

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.

Eventually, I’ll upload this to a repository somewhere for ease of access and backup. When I do, I’ll update this post.

]]>
Bill Niblock
Funkwhale on Linode with Object Storage2022-09-27T00:00:00-05:002022-09-27T00:00:00-05:00https://www.theinternetvagabond.com/2022/09/27/linode_funkwhaleFunkwhale on Linode with Object Storage

Funkwhale Setup

Funkwhale is a decentralized music service, connecting to the fediverse 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 here. The only significant modification I made was using /opt/funkwhale 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 .env 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 additional steps 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 Certbot.

Object Storage Setup

In my old setup, I leveraged Funkwhale’s ability to in-place import music. I transferred about 70GB worth of music to my VPS (using Syncthing <3), filling the disk almost entirely (98%). 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, technically it was.

The relevant configuration options on the Funkwhale side, in the .env file:

## 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=

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 Access Key and a Secret Key. I had already created a bucket, and so I had the Bucket Name. The challenge for me was what the Endpoint URL was, and if I needed to set a Region Name and ACL. Linode’s documentation on their object storage offering is a bit anemic, and so I made use of their setup instructions for using s3cmd with Linode object storage. From this guide, I was able to both setup s3cmd, and also determine what the Endpoint URL would be. I also set the Region Name and ACL 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 .env file; I had to completely stop and re-create them. It wasn’t until I ran docker inspect funkwhale-docker_api_1 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:

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

Next Steps

The downside of Funkwhale’s S3-compatible object storage integration lies in how files are uploaded. One cannot simply walk into 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.

]]>
Bill Niblock
Setting up Syncthing on the Steam Deck (Updated!)2022-07-04T00:00:00-05:002022-07-04T00:00:00-05:00https://www.theinternetvagabond.com/2022/07/04/steam_deck_syncthingSyncthing on the Steam Deck (Updated!)

Update

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.

The Wrong Way: System-Wide Services

My first attempt was to setup Syncthing as a system-wide service managed by systemd, installed via pacman. There are several problems with this. First, it requires disabling the read-only file-system. Next, pacman 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 pacman 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.

The Right Way: User Services

systemd allows for non-root-based services, called user services. The Arch Wiki systemd/User article describes this functionality much more than I will. Here are the relevant details:

  • User services can be enabled to start when a user logs in
  • Service files are stored in the user’s home directory (specifically ~/.config/systemd/user)
  • No root privileges are required. No modifying the read-only file-system

Syncthing

Syncthing is incredible. I’ve written about it before, 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 article on Syncthing 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.

SSHD: Still Incredibly Useful

I got real tired real quick of using the on-screen keyboard. After complaining, a friend recommended I enable sshd 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 sudo, I need to set a password for the default user, deck. In the terminal, type passwd and set it (and then put it in your password vault so you don’t forget. You do have a password vault, right?). Start the service, sudo systemctl start sshd, and optionally enable it to have sshd automatically started on each boot (sudo systemctl enable sshd). Get the device IP with ip addr list, from my desktop run ssh deck@ip-address, type in the password, and now I’m a grade-A Hackermans.

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.

Setup

There are 2 things required: a systemd service file, and the syncthing 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 Syncthing Releases 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 scp 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 syncthing binary, ready to rock. I copy/move the binary to ~/.local/bin/syncthing on the Deck. The exact location is less important than ensuring the binary is within my home directory on the Deck.

The systemd serivce file can also be taken from the extracted tarball, but requires modification. In the tarball, it is etc/linux-systemd/user/syncthing.service. Copy this file to ~/.config/systemd/user on the Deck, and edit the “ExecStart” line in the “[Service]” section from

...
[Service]
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
...

to

...
[Service]
ExecStart=/home/deck/.local/bin/syncthing serve --no-browser --no-restart --logflags=0
...

(or wherever you decided to put the local syncthing binary)

With everything in place, I can now enable and start the Syncthing user service:

systemctl --user enable syncthing.service
systemctl --user start syncthing.service

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:

ssh -L 31337:deck-ip-goes-here:8384 deck@deck-ip-goes-here

Now, on my local machine I can open one tab to localhost:8384, to show Syncthing on my local machine, and another tab to localhost:31337 to show Syncthing on my Deck. From here, I add my local machine as a device on my Deck, and begin sharing folders.

Closing Thoughts

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: Steam Deck Syncthing Setup. 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!

]]>
Bill Niblock
Oblivion on Linux, with Mods! Part 2 - Mods2021-12-09T00:00:00-06:002021-12-09T00:00:00-06:00https://www.theinternetvagabond.com/2021/12/09/oblivion-linux-2Every 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.

Below are some specific mods I would like to highlight, and which I enjoy.

Basic Primary Needs & Personal Hygiene

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.

Each mod can make use of additional HUD Status Bars, which makes tracking the new needs much easier.

Traveler’s Tent

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 Maskar’s Camping Mod 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.

World Enhancement

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.

Better Cities

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.

COBL

“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.

Enhanced Economy

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.

Lubron’s Patch for Enhanced Economy fixes some bugs and cleans up the code a bit.

Lights of Oblivion - Road Lanterns

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.

Natural Environments

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.

Cyrodiil Travel Services

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.

Overhauls

Arguably, these are the heavy hitters. These mods will alter the mechanics of the game, often making things more challenging but also more rewarding.

Maskar’s Oblivion Overhaul

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.

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.

Vanilla Combat Enhanced

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, Dynamic Oblivion Combat and Combat Additions.

Supreme Magicka

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 Av Latta Magicka.

Next Steps

In the last part of this series, I want to walk through a complete install of Oblivion from scratch.

]]>
Bill Niblock
Oblivion on Linux, with Mods! Part 1 - Tools2021-11-20T00:00:00-06:002021-11-20T00:00:00-06:00https://www.theinternetvagabond.com/2021/11/20/oblivion-linuxOblivion 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!

Vanilla Oblivion

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 22330.

Modding Tools

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 Wrye Bash. Mod load order is also important, and the tool I’m using to help with that is LOOT. Finally, TES4Edit, TES4LODGen and BethINI each helps with performance and configuration.

I have the following directory structure setup for my mods:

OblivionMods
  |- Archives
  |- Backups
  |- Tools
  |- WryeBash

Archives is where I store the actual archives of the mods I use. Backups is where I store any relevant backups for my Oblivion game, such as saves or configuration files for the mods. Tools is where I put the executables for all the tools I mentioned above. WryeBash is used to store the unarchived mods (which it calls “projects”) and mod data that Wrye Bash uses.

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 Glorious Eggroll’s Proton, 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.

Wrye Bash

Wrye Bash 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 Shrine of Kynareth. I referenced this guide, and the other written guides to learn how Wrye Bash works and what to setup. I also learned some tricks from the Oblivion Comprehensive Modding Guide by Dispensation.

Setup

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 Mopy directory. This is the alias I use; replace paths accordingly:

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'

Additionally, I copy the Mopy/bash_default.ini file to Mopy/bash.ini and set the sOblivionMods to “Z:\path\to\OblivionMods\WryeBash”, sBashModData to “Z:\path\to\OblivionMods\WryeBash\Bash Mod Data”, sInstallersData to “Z:\path\to\OblivionMods\WryeBash\Bash Installers”, and sOblivionPath to “Z:\path\to\steam\steamapps\common\Oblivion”. In Wine, Z: 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.

Usage

The guides above provide a very thorough explanation of use. Of note: Wrye Bash in Wine does not like drag-and-drop actions, so don’t do them. I don’t do anything special with my usage of Wrye Bash: run the alias, install mods from the Installers tab, enable or disable mods from the Mods tab. I generally don’t do anything else.

LOOT

LOOT sets the proper load order for mods. There is a native Linux client, but I ran into this issue 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.

Setup

Download the stand-alone executable, and extract it to OblivionMods/Tools. This is the alias I use; replace paths accordingly:

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'

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.

Usage

LOOT 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 LOOT couldn’t properly download the master list, and so as a work-around I manually downloaded the master list, and then configured LOOT to use that local file instead of the remote Git repository. Those instructions are covered in the FAQ. If everything works, and the list of mods is there, then you can run a sort, and apply the changes. LOOT will inform you of any “dirty” mods, which you can use the next tool the clear up. I ended up keeping LOOT open, while stepping through the cleaning procedure for each mod, until everything looked happy.

TES4Edit

TES4Edit is the Oblivion version of xEdit, which is an incredible tool. All I use it for is to clean dirty mods. LOOT provides a link to the quick cleaning guide, which gives us exactly the steps required.

Setup

Download the latest build from GitHub, and extract it to OblivionMods/Tools. This is the alias I use, which runs the “Quick Auto Clean” function; replace paths accordingly:

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'

TES4Edit is also useful for other, non-quick-clean functionality, so I have this alias for that:

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'

Usage

Run the quick-clean alias, select the problematic file, and click “OK”. Only one file can be cleaned at a time.

TES4LODGen

TES4LODGen 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.

Setup

I downloaded the files from Nexus, and extracted the archive to OblivionMods/Tools/TES4LODGen. Here’s the alias; replace paths accordingly:

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'

Usage

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.

BethINI

BethINI helps manage the “oblivion.ini” file, providing sane options and a wizard for configuration. While not required, it does help with optimizations.

Setup

I downloaded the files from Nexus, and extracted the archive to OblivionMods/Tools/Bethini. 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:

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'

Usage

Just like the rest, run the alias and answer the questions. BethINI will make backups of the modified INI files before over-writing them.

Next Steps

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.

]]>
Bill Niblock
Character Write-up: Dabbledop Humblebumple2020-10-23T00:00:00-05:002020-10-23T00:00:00-05:00https://www.theinternetvagabond.com/2020/10/23/gnome-cleric-wizardGnomes 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.

Backstory

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.”

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!

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!).

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.

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).

]]>
Bill Niblock
Pathfinder Characters: Eldritch Knight2020-09-27T00:00:00-05:002020-09-27T00:00:00-05:00https://www.theinternetvagabond.com/2020/09/27/pathfinder-eldritch-knightBuilding My Eldritch Knight

Pathfinder has been the tabletop game of choice for my longest-running group. One of my favorite activities is creating characters. I love theory crafting, pouring through source material, and setting limits. My favorite archetype of characters are those that take the combat focus of a warrior and supplement it with magic. The druid, which I already touched on, is a class that has this built in. This blending of magic and metal is often called a Gish.

Concept

All of my characters come from a concept. This concept is heavily mechanics focused, and heavily opinionated: I want a “proper” eldricth knight. To me, a proper eldritch knight doesn’t use any gimmicks or tricks to get into the prestige class sooner, doesn’t rely too heavily on especially unique or strange equipment, and sticks to a limited set of rule books.

Build

For this build, I’ll be limiting myself the these rule books:

  • Core Rulebook
  • the Ultimate books (Combat, Magic, Intrigue, Wilderness, and Equipment)
  • the Advanced books (Player’s Guide, Race, and Class)

Eldritch Knight needs a martial class, and an arcane class. While there are plenty of options, I wanted to start with the most basic options:

Fighter 1 / Wizard (Enchantment) 5 / Eldritch Knight X

Wizards have the option of taking a school, and it makes a lot of sense for a melee combatant to focus on buffing itself. Thus, I went for a Transmutation school, and specifically for the Enchantment school. For opposed schools, I opted for Evocation and Necromancy. I lose out on some nice spells, certainly, but considering our focus, we wouldn’t be using many blasting spells. Not to mention, our spell penetration will be relatively weak by comparison to more spell-focused builds. Obviously, open to alternatives, but I would advise against choosing Illusion, since it has some of the better non-transmutation buffs in the game.

Wizards also have to choose an arcane bond, which is either a familiar or an item. Familiars are incredibly useful, but for this build I really liked the idea of having my arcane bond be my weapon. This can be very dangerous! If your bonded item is taken from you, or destroyed, you will have a very difficult time casting spells.

Traits

In our Pathfinder group, we don’t really use traits, but I use traits. Specifically, I always use 1 trait when it is applicable, because I believe without this trait, any Gish build that relies on multiple classes is severely penalized: Magical Knack. This trait will allow me to up my caster level for Wizard by up to +2, up to my maximum hit dice. This doesn’t give me more spells per day, but it does affect spell details such as duration, or saving throw DC, that rely on caster level. Conveniently, for this build, we have exactly two levels that do not give a bonus to wizard caster level: the 1 level of fighter we take, and the first level of eldritch knight.

If two traits are allowed, solid choices are Reactionary for a bonus to initiative; Deft Dodger for an improved reflex save; Eyes and Ears of the City for a bonus on perception and to add it as a class skill; or Armor Expert to reduce all armor check penalties by 1.

Magical Knack (Wizard)

Race

Human. Elf as a very close second. The bonus for spell penetration, the bonus to perception and spellcraft skills, and the ability score modifiers are all solid. But, this build won’t need to worry about puncturing spell resistance, and because we’re a melee combatant, we need all the constitution we can get. Human provides a bonus +1 skill point per level, a bonus feat, and a floating +2 ability score increase, which we can use for our strength or intelligence.

Skills

None of the three classes in this build provide a significant number of skills; all three give 2 + INT per level. However, being a wizard, we do have a nice intelligence score, and as a human we get an additional +1. At a minimum, we’ll probably get 5 skill points per level. There are no skill requirements to get into eldritch knight, so we can focus on the “important” skills:

Knowledge (Arcana)
Knowledge (Dungeoneering)
Knowledge (Nature)
Knowledge (Planes)
Knowledge (Religion)
Perception
Sense Motive
Spellcraft
Survival

I also like to drop a single point in Climb, Swim, Ride, and Fly, if I can afford to. Getting the trained bonus, combined with our generally good strength and dexterity, means we can accomplish the basics. As a wizard, we can further supplement these with spells. Unfortunately, we do not get perception as a class skill, and so using a trait for that would make sense.

Feats

It is very easy to get lost in feats. Like most aspects of Pathfinder, there are an excess of options. To narrow down my focus, I tried to consider what the character’s options were: warrior focused on melee combat; wizard focused on buffing and crowd control. Being in melee means I’ll be wearing armor, and that brings the Arcane Armor Training feats into relevance. There’s also the Arcane Strike feat, which is perfect for arcane gish builds. Initiative is the king of combat, and as a wizard I’ll want to try going first as often as possible. I also don’t have the most hit points, due to those 5 levels of wizard. Improved Initiative and Toughness make sense. Considering the possibility of being in combat when buffing, Combat Casting makes sense. I’ll probably focus on a specific weapon, so Weapon Focus makes sense, and as a fighter/eldritch knight, those levels will stack for feat requirements. That means, Weapon Specialization is a possibility in the future.

While I’m sure there are some crazy feats in other books, all these feats come from the Core Rulebook. That excites me for some reason. Thus far, the only non-core rulebook thing we’ve done is traits, and for this build we can live without those if absolutely necessary. Again, this limit isn’t necessary, but it was something I wanted to adhere to for this build.

The number of feats laid out above is very quickly growing. Conveniently, I’m entering the game with 3: one for level 1, a bonus for human, and a bonus for fighter. That’s Improved Initiative, Toughness, and Weapon Focus. Any two-handed weapon will do, though I’m partial to the good ol’ greatsword. Using a sword-and-board will severely restrict my casting abilities, because both hands will be full.

Improved Initiative (Level 1)
Toughness (Human bonus feat level 1)
Weapon Focus (Greatsword) (Fighter level 1 bonus combat feat)
Scribe Scroll (Wizard level 1 bonus feat)
Combat Casting (Level 3)
Arcane Strike (Level 5)
Craft Wonderous Items (Wizard level 5 bonus feat; debatable)
Arcane Armor Training (Eldritch Knight bonus combat feat)
Power Attack (Level 7)

The wizard gets a bonus feat at level 5, which is limited to an arcane crafting feat, a metamagic feat, Spell Mastery, or an arcane discovery. I opted for Craft Wonderous Items because I like the options it opens up. There are some good metamagic options I considered though: Extend Spell makes sense for buffing; Still Spell makes sense since we’re in armor; Toppling Spell can give Magic Missile and other force damage spells some crowd-control. Since evocation is one of my opposed schools, though, it wouldn’t work for me.

Wizards at first level also get Scribe Scroll as a bonus feat. Scrolls are great for situational spells.

Gear

There’s only one piece of gear that is unusual here, and it’s the armor. Kikko armor is from Ultimate Equipment, and specifically is a type of eastern setting armor. It provides a +5 armor bonus, allows for a dexterity bonus of +4, incurs a -3 armor check penalty, and has 20% arcane spell failure. However, it is primarily made of metal, and thus can be made from mithral. A mithral suit of kikko armor provides +5 armor bonus, allows for a dexterity bonus of 6, incurs no armor check penalty, and has a 10% arcane spell failure. Those numbers are fantastic. No armor check penalty is great for the odd Climb or Swim check, and for when I can Fly. The 10% arcane spell failure chance is lowered to 0% by Arcane Armor Training, allowing me to safely cast in armor when I so choose. If limited to the core rule book, the next best bet will be either a breastplate, or hide armor.

As for the weapon, I went with a greatsword. You could go with a falchion, and “crit-fish,” but I’d rather have the raw damage. Numbered enchantment bonuses are good, but there is one specific enchantment I would highly suggest: called. A called weapon can be teleported to the wielder’s hand as a swift action. Considering our greatsword is our arcane focus, we’ll want that in our possession at all times, and this greatly increases the chances of that. Keen wouldn’t be too bad; increasing the critical threat range to 17-20. Spell storing obviously makes a lot of sense, too.

I’m a spell caster, so I picked up a few Pearls of Power, a few wands (Cure Light Wounds, Protection from Evil, and Expeditious Retreat), and a bunch of potions of Lead Blades. The reason for the potions and not scrolls or a wand is to avoid Use Magic Device checks.

I have a collection of mundane items, including things like a bedroll, rope, sewing needles, chalk, and a handful of alchemical items, that I like to carry in a Handy Haversack.

Beyond all this, I went with the remainder of the “Big 6”: a Cloak of Resistance, a Ring of Protection, a Headband of Intellect, and a Belt of Strength.

With any left over funds, investing in additional spells known, scrolls, copies of your spellbook, and cheaper wonderous items is always nice.

Spells

I’m a wizard (Harry), with the most versatile spell list in the game, and a book (or books) that can get them all! Aside from the opposed school (but even then, there are some worth getting, such as False Life), I went for every spell that I even remotely thought I would use. On my sheet, that’s 62 spells across levels 1 to 3. I won’t mark them all here, but there are some which I wouldn’t want to be without.

Level 1
- Comprehend Languages (also a great scroll)
- Enlarge Person
- Magic Missile (despite being opposed, a solid fall-back)
- Mount
- Protection from Alignment (generally, evil and chaos make the most sense)
- Shield
- Vanish

Level 2
- False Life
- Glitterdust
- Invisibility
- Mirror Image
- Resist Energy
- Rope Trick

Level 3
- Ablative Barrier
- Fly
- Haste
- Phantom Steed
- Sleet Storm
- Versatile Weapon

At character level 9, we get access to 4th level wizard spells. Some spells on my wishlist include great crowd-control like Acid Pit and Black Tentacles; self-buffs like Stoneskin and Greater Invisibility; and utility like Dimension Door, Stone Shape, and even Wall of Fire or Wall of Ice, despite them being from an opposed school.

Also, as a wizard I got Scribe Scroll at first level. Many spells in my spellbook are almost only there so I can make scrolls of them. Examples include Identify, the various ability enhancements (Cats Grace, etc..), and so on.

Gameplay

I’ve actually played this build 3 times. The first time, as the human shown here. The second time, as this build but with the zombie lord template added. And a third time, but with the skeleton champion template added. Needless to say, those templates make this build incredibly powerful. However, I made some poor play decisions, thinking I was a bit more resistant that I actually was, and so all of these characters died rather unfortunate and avoidable deaths.

What I’ve learned through all three characters is to be patient! This build is very capable, with many options. It can wade into combat and deal some significant damage, even before buffs. Out of combat, it has the flexibility that a well-filled spell book can provide, and a good coverage of knowledge skills.

When engaging in combat, I always try to make sure I have the following self-buffs up, or ready to be up:

  • Protection from Alignment
  • Shield
  • Resist Energy
  • Mirror Image
  • Ablative Barrier

For damage, there’s a ranger spell called Lead Blades which is so good it should almost be considered essential. Versatile Weapon can help with damage resistance which is overcome with special materials.

As for party buffs, few options beat Haste.

For crowd-control, I’ll tend towards a Glitterdust, Pyrotechnics, or Sleet Storm.

In combat, get buffed to a point you feel capable. This may take 2 or 3 rounds. That’s OK! You’re the second line. Use your swift action for Arcane Armor Training, buff yourself, move in. Do that again, maybe moving in for a flank. Third round, swift action for Arcane Strike, and unload with a Power Attack greatsword swing! If you’ve got Lead Blades up, that’s 3d6 + 6 (Power Attack) + 2 (Arcane Strike) + 1.5x strength bonus. Not bad! Unfortunately, Eldritch Knights lag behind for base-attack bonus, so at level 8 (which is the level for all my builds) it’s only 1 attack a round. At level 9, you get two attacks a round. You can also fall back on a composite longbow, which you can also use Arcane Strike with for 1d8 + strength bonus + 2 (Arcane Strike), which isn’t as impressive as that big sword, but can still contribute. And, if weapons won’t due, you’re a wizard! Keep your prepared spells flexible. Scribe Scroll allows you to have certain spells available at all times. Craft Wonderous Items can allow you to create plenty of gizmos and gadgets that give you once-per-day options. Crafting is powerful; use it!

I’ve always had fun with this build. I have, no joke, lost sleep just figuring out cool spells to add to the spell book, worthwhile scrolls, and just imagining scenarios. Despite the apparent short-comings, the Eldritch Knight can definitely hold it’s own, though it does require a ramp-up time.

Sources

]]>
Bill Niblock