Getting into modding is a painful experience for a newcomer especially when on a clock (as in: Ain’t no time for this) so here is what I understood so far.

Finding resources

EgoSoft is one of the few companies that still hold on to a forum. They may be on social media but that’s just as news outlet. This is somehow also where the modding community resides, when it usually would find a place on it’s own “elsewhere”. Clever move and I applaud – at least I don’t have to join some private group on Facebook.

Sadly the forum has no search function to speak of especially not for a technical search or, gasp, a code search. So most mod developers usually host their stuff elsewhere – like scattered on GitHub, and only talk about their mods here and there. Connecting the dots (and users) is up to the initiate. In fact it helps slightly to utilize an external search engine that does a better job compared to the forum search itself. Go figure.

Eventually I stumbled by accident or luck over a Confluence installation that seems to act as some sort of Wiki and has indeed some pointers on modding for various X titles at – and I am still uncertain if this is intended to be public or not. Sadly the X4 modding articles in there are short and of course available in English only. That wouldn’t be an issue if Confluence wouldn’t stubbornly insist in trying to render a page in my native language first, informing me helpful every time that no such entry exists and makes me switch the language every single time back to English. Well, I guess it is a community driven documentation system so I could scratch my own itch and translate stuff. Thing is I should understand what I’d be talking about in the first place, no?

Turns out that most know-how for X4 modding can in fact be learnt from X3 and X Rebirth in particular. Both are precursors and partially sandboxes for X4, from my understanding, so a lot of the information does also apply to X4. Sometimes with slight differences.

The most helpful place however is an unofficial Discord channel where many of the mod developers hang out and they do seem to be really friendly to newcomers asking the same old questions over and over again. I won’t bother with the invite link as this one is subject to change all the time but it can indeed be found with the dreaded forum search.

The extension file formats (and formatting)

Anyway, let’s dive into some details. Mods, or as it should be called nowadays “extensions”, consist usually of so called MD Scripts, that’s short for Mission Director (and not Markdown) written in well formed XML Syntax, and LUA scripts (that seems to be the gaming industry standard – at least I keep hearing that). LUA itself is explained in great detail in the online documentation of LUA while game specifics are listed in varying detail on the Confluence mentioned above but that’s subject for another article. Also various assets may be floating around in the extension folders.

Now in theory XML and LUA are completely system independent so modding with different systems in mind should be a no brainer, right? Right?

Well, of course nothing is ever that easy. Thankfully the user CulunTse took the burden and wrote an article on all the caveats encountered so far: (Steps to make your mod work on Linux+Mac) – it’s for X-Rebirth but the gist applies for X4 as well. So when writing mods make sure to use lower case only and don’t use special characters at all. Best not even use a white-space just to be sure.

<rant>Again Windows f****s us all over being the only system that is fine with "A==a" being true. Not even JavaScript manages this. And since X4 is a game and the majority of gamers (and mod devs) play on Windows we have to suffer from this yet again. The average mod is simply not compatible and broken for e.g. Linux users. Guess who gets the blame. The worst part is that another generation of developers will not see any problem with this behaviour.</rant>

So now we learnt that an extension consists mostly of XML and LUA files, so how comes that mods downloaded from Steam, e.g. to learn from, are riddled with various TXT files instead rendering your linter of choice useless because it won’t automatically parse a text file? Well that seems to be a Steam Workshop limitation not allowing certain file… extensions. So developers started to rename their files when uploaded to Steam. Yay, more confusion for man and machine (as in mankind – c’mon, it’s a lame allusion!).

Why I mentioned Steam now? Well, learning from existing extensions is the way to go. Also since some simply don’t work for Not-Windows users it’s up to myself to debug. The places to get extensions is usually from NexusMods (no thanks, still angry that they lost my user data years ago – still used by scammers) and Steam. Avid readers of my ramblings may know my especially sour spot of having purchased X4 on GOG ( so downloading from the Steam Workshop is not as straight forward as it is for others. There are various so called “steam workshop downloader” that easy the pain somewhat.

But wait. The Steam Workshop file comes as DAT file. What is that again when I just talked about TXT files? Well, this is from my understanding a format by EgoSoft designed for Steam Workshop files for X Rebirth – also called a XRWS file. At least from – a tiny little project that helps unpacking the DAT files but has to be compiled before use. That’s usually a matter of issuing the make command after checking out the repository (or download the release file if you’re feeling lucky). Fair warning: It is somewhat rigid in the way the DAT file has to be named so you may have to adjust that by renaming. Ymmv.

Armed with that knowledge I was able to download and extract the awesome extensions_fireandsmoke_v107.dat extension that really spices up space fights with the effects we know and love from X Rebirth (or not). This one I could also drop in my user space folder under ~/.config/EgoSoft/X4/extensions/x4_fireandsmoke/ (again: case sensitive, important). The folder name matters because it is also hardcoded into the extension files itself and will fail to load various assets if changed. Interesting design choice.

Why this is noteworthy? Well apparently this does not work for all kinds of extensions. Some seem to work only when put in the game path /path/to/X4_Foundations/game/extensions/ where the game also stores official DLCs. Better keep that in mind. The gist seems to be that user space extensions are limited in functionality to prevent nefarious mods. Or so I hear. Maybe EgoSoft simply never got it working properly. There is more (conflicting) info hidden deep in that Confluence mentioned above.

One extension to rule them all (and a pipe)

So why go through all that trouble when an extension can simply be downloaded from e.g. GitHub? Well, I learnt the hard way: Also not as simple. For example many mods rely on one very important extension that can be found in the repository – a wild mix of various extensions and even a Pipe Server (more on that later). It’s the indeed impressive extension sn_mod_support_apis featuring a clever way to work around some UI modding limitations in X4, allowing lazy loading of further LUA scripts and even introduces a Pipe Server to interact with the game from the outer world – mostly used for more complex hot keys. A dream coming true and used by many other extensions as well.

Sadly it didn’t really work out of the box when checked out from GitHub and put in place at /path/to/X4_Foundations/game/extensions/sn_mod_support_apis/. There were various reasons for this. First of all: Case sensitive again. The XML files in the md/ folder must be lower case or X4 will simply ignore the files. Easily fixed though.

The next problem wasn’t that easy to identify and the reason for this is hidden in plain sight in this titbit of information from the synopsis:

A workaround is to load in custom lua files alongside the egosoft lua. This is done by editing one of a handful of ui.xml files in the ui/addons folders, adding the path to the custom lua file. These ui.xml files cannot be diff patched. The lua file must be given an xpl extension, and this xpl and the ui.xml must be packed in a “subst” cat/dat.


Where this arcane know-how was acquired from in the first place I do not know. The gist is that some XML files are happily read by X4 (and can even be hot reloaded) while some can not. The ui.xml falls into the not so much category and since I have no idea how to create a cat/dat file (yet) I had to scrape the “subst” files from a release (Steam Workshop, NexusMod, GitHub release, you name it). Without it’s simply not read and ignored and this is also why no single debug line will ever be logged to give the (weary) initiate a hint what may be wrong.

After that mods relying on sn_mod_support_apis started working (or throwing traces at least). Awesome! Onwards to Pipes! Or Not! Because this part is Windows only. Why? Well, the Pipe Server uses a LUA feature to load a library from disk providing that pipe feature. And that project is written in C, compiled as a separate DLL and relying on Windows, of course. That makes even sense and I really can not blame the author for scratching the own itch only here. See for details and to be fair the extension is written in a way that other features do still work so it’s not a total roadblock and in theory I can go back to be a happy gamer at this point.

Alas I want that Pipe feature, of course, so I have to come up with my own library at this point. It’s not a complex file but my C days are long past. So to spice this up I needed a crash course on how LUA is supposed to work. Script wise and all and I don’t think I was prepared for all this.

Diving into the unknown (What is LUA/JIT anyway?)

LUA is basically… ah frell, go and look it up yourself. In the end LUA scripts are interpreted by a VM. That would be LuaJIT (JIT – Just In Time) on Linux and this is why X4 is shipped with a file named Sadly this is not the particular version of LuaJIT. It stands for an ABI compatibility version. In theory at least. My first goal to get the idea was to grab the source and compile my own libluajit. Should be a no brainer, right? Little did I know when I checked out the project from

I run a hexedit on the distributed library to get an idea what version is used and came up with 2_1_0_beta3. The commit 8271c643c21d1b2f344e339f559f2de6f3663191 of the LuaJIT project is tagged with that version so I went with that first.

Compile went smooth, beside some warnings, but X4 would stop dead throwing a Fatal Error at me that I’ve never seen before. Well, let’s fast forward to HEAD and try again and this time the game started but became stuck in main menu with unresponsive entries and missing labels (some said “Processing…”). So obviously X4 is not running vanilla LuaJIT and since this is under MIT licence I don’t think they even have to provide modifications. What now?

Thankfully some fellow gamer on Telegram, who doesn’t want to be named, pointed me in the right directions due to experience with LUA. An article over at explains some major caveats with this and sure enough once I knew what I was looking for I found evidence here and here and here. (Yes, they have Jira as well – who would have guessed).

Lua engine was upgraded to LuaJIT 2.1 which comes with performance improvements as well as new language features (incl. some added Lua 5.2-specific features as well as some Lua 5.3 ones.

Just looking at the number of forks of LuaJIT on GitHub makes me dizzy so I went with the first recommendation that also addresses the memory issue and also edited the file src/Makefile enabling some LUA 5.2 features by commenting in the line: XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT

And guess what, X4 launched with this and also started an older save game of mine just fine. I guess this works so I’ll keep that in mind in case I need some monkey patching to try stuff.

Next on that list? Find out how to write a loadable C library for LUA and adapt that Pipe Server.

At least gaming itself is easy as pie on Linux in 2021. Modding? Now so much.

13 thoughts on “Getting into X4 Foundations modding (on Linux)

  1. Wolfire Games files antitrust lawsuit against Valve, Raspberry Pi powered PS4/5 remote play with Chiaki, Nvidia poisons the cryptominer well, tips for X4 Foundations modding on Linux, and cautionary tale about new releases and Proton.
    Special thanks to:
    Minus9 (new patron)
    Holy Toast (new patron)
    Monica (new patron)
    Strider (SSD from wishlist)


    {“type”:”audio”,”tracklist”:true,”tracknumbers”:false,”images”:true,”artists”:true,”date”:true,”itunes_subtitle”:false,”poster”:{“src”:””,”width”:”144″,”height”:”144″},”tracks”:[{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 454: Cyberpunk 1444″,”caption”:”Linux Game Cast 454: Cyberpunk 1444″,”description”:”Linux Game Cast 454: Cyberpunk 1444″,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 454: Cyberpunk 1444″,”genre”:”Podcast”,”year”:”2021″,”date”:”May 2, 2021″,”length_formatted”:”1:15:34″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 453: Nier Death Experience”,”caption”:”Linux Game Cast 453: Nier Death Experience”,”description”:”Linux Game Cast 453: Nier Death Experience”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 453: Nier Death Experience”,”genre”:”Podcast”,”year”:”2021″,”date”:”April 25, 2021″,”length_formatted”:”1:24:04″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 452: Profitable By 2027″,”caption”:”Linux Game Cast 452: Profitable By 2027″,”description”:”Linux Game Cast 452: Profitable By 2027″,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 452: Profitable By 2027″,”genre”:”Podcast”,”year”:”2021″,”date”:”April 18, 2021″,”length_formatted”:”1:27:21″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 451: Cowboy Beep-Boop”,”caption”:”Linux Game Cast 451: Cowboy Beep-Boop”,”description”:”Linux Game Cast 451: Cowboy Beep-Boop”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 451: Cowboy Beep-Boop”,”genre”:”Podcast”,”year”:”2021″,”date”:”April 11, 2021″,”length_formatted”:”1:10:59″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 450: Powered by Spoon”,”caption”:”Linux Game Cast 450: Powered by Spoon”,”description”:”Linux Game Cast 450: Powered by Spoon”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 450: Powered by Spoon”,”genre”:”Podcast”,”year”:”2021″,”date”:”April 4, 2021″,”length_formatted”:”1:04:37″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 449: Super Monkey Giraffe”,”caption”:”Linux Game Cast 449: Super Monkey Giraffe”,”description”:”Linux Game Cast 449: Super Monkey Giraffe”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 449: Super Monkey Giraffe”,”genre”:”Podcast”,”year”:”2021″,”date”:”March 28, 2021″,”length_formatted”:”1:16:06″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast 448: Harked Real Hard”,”caption”:”Linux Game Cast 448: Harked Real Hard”,”description”:”Linux Game Cast 448: Harked Real Hard”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast 448: Harked Real Hard”,”genre”:”Podcast”,”year”:”2021″,”date”:”March 21, 2021″,”length_formatted”:”1:06:50″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast Weekly 447: Atari Feces”,”caption”:”Linux Game Cast Weekly 447: Atari Feces”,”description”:”Linux Game Cast Weekly 447: Atari Feces”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast Weekly 447: Atari Feces”,”genre”:”Podcast”,”year”:”2021″,”date”:”March 14, 2021″,”length_formatted”:”1:08:42″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast Weekly 446: Penguin Rail Gun”,”caption”:”Linux Game Cast Weekly 446: Penguin Rail Gun”,”description”:”Linux Game Cast Weekly 446: Penguin Rail Gun”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast Weekly 446: Penguin Rail Gun”,”genre”:”Podcast”,”year”:”2021″,”date”:”March 7, 2021″,”length_formatted”:”1:02:27″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}},{“src”:”″,”type”:”audio/mpeg”,”title”:”Linux Game Cast Weekly 445: GaryMX Switches”,”caption”:”Linux Game Cast Weekly 445: GaryMX Switches”,”description”:”Linux Game Cast Weekly 445: GaryMX Switches”,”meta”:{“artist”:”Talent Name”,”album”:”Podcast Title here”,”title”:”Linux Game Cast Weekly 445: GaryMX Switches”,”genre”:”Podcast”,”year”:”2021″,”date”:”February 28, 2021″,”length_formatted”:”1:14:31″,”link”:””},”poster”:{“src”:””,”width”:144,”height”:144}}]}


    Podcast (lgcweeklyaudio): DownloadSubscribe: Google Podcasts | Spotify | Pandora | Stitcher | TuneIn | RSS | More

    00:00 Intro
    07:38 Wolfire games takes Valve to court
    15:08 Steam golden week sale
    07:08 Xen museum
    19:03 Worst rated launch ever
    22:33 Neir on Linux is busted
    25:58 Raccoon simulator
    28:03 Plugs & Thanks
    35:08 Nvidia LRH series cards
    40:38 PS4 on your Pi 4
    43:28 Futex 2 take 2
    46:18 Jagged Alliance 2 0.18.0
    48:33 Eudora 2.1.0
    51:03 Modding X4 on Linux
    53:03 Review: Turnip Boy Commits Tax Evasion
    01:03:58 Hate mail

    Colour key: Venn Jordan Pedro
    Steam: News
    Hop hop sue

    Valve should make a tier for developers who want a larger cut.
    They get a single store page on Steam and that’s that.
    They were just first and still are the best – especially with their current refund policy.
    I was going to say okay, they just want more money, but then I saw they quoted Timmy in the suit.
    I don’t think I’m buying any games on Humble for a while.

    Humble was sold to IGN/Ziff.

    Oh, well in that case I might continue to purchase the odd bundle.

    Valve’s not the only storefront that demands you keep prices consistent, but I really wish that would go away as a practise
    And yeah, as light as valve’s lock in is, it is still there and the sense I get from some indie devs is that their relationships with valve is complicated
    I don’t think this is antitrust level though. Lets see what the courts think

    Golden Week sale

    Two things Japanese developers love, PC & Linux.

    And porn… Lots and lots of tentacle porn.

    Danganrompa, RPG maker MV, oneshot, disgaea 2, corpse party are the linux games I could find after a few minutes of scrolling

    That said, Zone of the enders is dirt cheap so, you might take the opportunity to heretic purchase some stuff you were holding out on

    Steam: Game Updates
    Xen museum

    See what the wait was all about
    All of the development versions of the Xen levels are available as a steam workshop mod for black mesa.
    Determine for yourself if the wait was worth it.
    You can semi-interactively experience the massive overhaul Xen went through.
    That’s cool.
    I can play the game proper now, so it’s cool.

    Wost. Game. Evar.

    It’s cross-platform bad.
    Ooof, 8% positive reviews.
    They do say they’re looking to revise the process by which this happened but if these past few years have been any indication, that will last exactly until the next release happens.
    Looks like the europa universalis expansions have really been on a negative decline reception wise
    Maybe it’s just time to cut bait and work on europa universalis V

    Nier Disaster

    Brings gameplay to a grinding halt.
    Turns out github need spoiler tags.

    Can’t spoil 11yr old games dude.
    At least some people think that.

    People are poking at the problem and it appears to lie with DXVK so who knows.
    Apparently also happens in Windows if you’re using DXVK.
    Makes sense, since DXVK is what’s handling DXGI and in the original report the crash happens when DXGI tries to load a MF file.

    Steam: New Games
    Raccoon Simulator

    Not as unhinged as Goat stimulator but looks well done.
    Tactical assault racoon could be enjoyable.
    So this is Fallout 4: Skateboard racoon at least according to the description
    You have my attention at the very least
    Bit of a high price to satisfy your curiosity though

    RTX Gamble

    I give it a week, na, weekend before this is bypassed.

    If they “mistakenly” release another driver that bipasses it, it won’t really matter

    This will cause absolute hell for retailers dealing with returns.
    The arms race continues. In the era of “everything is game for crypto speculators” I don’t know what sort of drastic shit is gonna eventually be required. Either that or the planet will melt

    PS4 Pi

    It’ll run on your PI4 Now
    No PiS5 for you
    Pedro said the only fky part was extracting your Playstation ID.
    Notocu was saying in shat that Chiaki is much better than the official PS4 Remote Play.
    So that’s good!

    Futex you!

    The new Futex2 Patches are ready for review in the mainline kernel it seems
    Nothing too earth shattering in terms of a performance boost, but no substantial regressions either.
    Is this futex take 2?
    21% drop in performance in requeue operations is a bit.
    I get the why, but is the trade off worth it?

    Jagged Alliance 2 Stracciatella 0.18.0

    Lots of gameplay fixes, but the big linux change this time around is appimage support
    30 bug fixes in total.
    Configurable game speed is always nice to see.
    Nobody likes to hurry up and wait.

    Eudora 2.1.0

    Apparently there’s a sequel in the works.
    This one shouldn’t get many updates since it was a game jam project.
    Apparently YYC is an alternative compiler for gamemaker projects that can improve performance.

    Modding Foundation on Linux

    The X series has been linux friendly for as long as it has been able, but I guess actually making mods for it wasn’t part of their thought process
    Beko has attempted to reverse engineer this process after some amount of blood and sweat.
    Nice that someone put the effort into documenting the process.

    – Nooope

    – Not sure if want
    – Check it out
    – Shutupandtakemymonies

    Game: Turnip Boy Commits Tax Evasion
    Devel: Snoozy Kazoo
    Engine: Unity
    Price: £11.39 / $14.99 / $17.49
    Wazzat: Play as an adorable yet trouble-making turnip. Avoid paying taxes, solve plantastic puzzles, harvest crops and battle massive beasts all in a journey to tear down a corrupt vegetable government!
    Mandatory Disclosure: Devs sent us keys via Curator Connect


    1080 & 2160 no issues.
    Fullscreen and windowed work.
    The default button layout is bass akwards.
    And you can’t change them, YAY!
    Outside of that everything was solid.


    I’m 20 minutes in and man do I love a surprise.
    Well, I’m in love with the cute characters and semi dark tone of everything.
    At its core Turnip Boy Commits Tax Evasion is a Zelda parody with the fetch quests turned up to 11.
    You get a sword, boop some shit, collect items, and murder a snail for rent money.
    All while ripping everything paper based to shreds.
    It’s cute, looks the part, controls well enough, has a serviceable story and most importantly… bizarre, it’s bizarre all fk and or all.
    I like that in a game.
    Mix that with the good writing (albeit a bit topical) and you have a fun & quirky little game.
    I do mean little; since this one clocks in around the 2 hour mark and that’s if you 100% it.
    If they unfuck the controls by adding the option to rebind (because you seriously released a game without that in 2021) AND, well, add more content, they will have something worth picking up.
    Right now $14.99 is a little on the high side for what amounts to a Part 1.
    Isn’t that right, Frozenbyte.



    Launches OOTB on the 8150/RX50
    The character art is pretty good. Although in some of the larger arenas there is some character blindness
    The option to switch your button prompts is appreciated
    That wacked out controller layout isn’t


    This is very clearly a zelda game
    There’s nothing wrong with that, zelda is a classic for a reason and this game does pretty well at capturing the essence of what makes the game work

    Also using a watering tin instead of a lamp. I see you devs

    There is quite a bit of backtracking over such a small area. Everything is basically on the opposite side of where it needs to be, and your job is to bring it there
    The sense of humour is pretty good. Our silent protagonist is delightfully chaotic neutral in his actions.
    The moral of the story here is “Fuck paperwork”
    It shits achievements pretty regularly at you as well,
    I like the adventure-time-esque horrible shit covered up with cute shit story
    All in all, I can’t say that I really learned anything about tax evasion from this game, so I guess it failed in that regard


    Launched out of the box
    Holds 144 at 2560×1440
    You can rebind the keyboard buttons but not the controller buttons
    I lost count of how many times I hit the B button to dodge and X to attack, when they’re attack and item select respectively.
    The graphics and sounds all work great.
    On a technical level, it’s much better than a lot of games we’ve thrown chairs at lately.


    It is pretty fun
    And smacking the nuke with the shovel and getting an achievement for it made me chuckle.
    It is a short game, especially for the price, but there are plans to introduce new content.
    According to the devs version 1.10 is the one we’re waiting on for that.
    But I can only judge what is there now and it is not bad at all
    Yes it’s short, and it pads itself by forcing you to go all across the maps to find the one veggie you need to talk to in order to progress.
    Sometimes, you just need to talk to the same veggie more than once and they will give you the key to allow to continue
    It’s not clearly sign posted but the game is so tiny that you can probably find what you’re looking for just by talking to every fruit and vegetable you come across.
    It’s a kids game that doesn’t treat kids like brain dead sheep and that should be celebrated.


    Hate Mail:
    Following Pedro
    So long


    Linux Game Cast 450: Powered by Spoon

    Linux Game Cast Weekly 437: Debian Ballsy

    Linux Game Cast 451: Cowboy Beep-Boop

    Linux Game Cast Weekly 442: Hyper-Weeb Drifter

    Linux Game Cast Weekly 443: Realisticality

Leave a Reply