Yesterday’s coding session was a.. hmmmmmmmmm

Look up Method Chaining. This was something I have found a SINGLE Nuget package uses in my few decades of using .Net. A SINGLE PACKAGE. It is that uncommon. I ran across that same package yesterday and realized how awesome such a thing is.. then promptly changed out part of my server code to use that for sending packets to the client..

Then I started wondering about implementing the same on the client side.. hmmm.

Regardless, I am using art and music from all over the place. Paid for quite a bit over the years so it’s time to put them to good use. This dude right here has some awesome artwork I have purchased and will be using. You should check him out:

finalbossblues.com

Outside of coding, I get to have the joy of merging various tilesets together to get them ready for consumption in the map editor and the client itself.

So.. I figured I would spend today’s coding session tackling something that I dreaded for a long time. I have tried several times in the past, but ran into massive Steam issues on Linux. Why does that matter for this game? The server will run on Linux (or supposed to). This allows for cheaper server costs (as I will retire eventually and retirement checks are extremely small)…. Actually, I think that is the only reason.

Warning: This is a technical rant…

As a programmer, one lesson that is baked into your brain is that you never cross the bits. 32 bit programs cannot have 64 bit dependencies. And vice versa. While there are some exceptions, they are not the case here. The game server is in 64 bits. It’s dependencies are 64 bits. The Linux OS (Ubuntu) is 64 bits.

Steam for Linux… is not… well, as I found out tonight, not completely. In a sane world, when you develop an application, you package all the dependencies into a nice package, copy them onto the target machine and run it. Easy peasy, this is normal. Steam on Linux hates normal and seems to hate developers.

In order to run any game distributed (as a stand alone server) onto Linux. You must package a single 64bit library called.. libsteam_api.so. However, the game still won’t run.. no way, that would make too much sense. On you windows box, you must install something called steamcmd and force it to download a linux 64bit sdk.. which it refuses to do. It only downloads two additional 64bit SO files. Fine.

You must log into root on the hosting Linux machine and create a special folder path and upload these files to it and mark them as executable. AND then you must install 32 bit architecture (something-linux-crap-here) infrastructure junk. Then install a 32 bit linux steam client on that server. It’s a complete cluster. Literally crossing the bits.

And then and only then can you run your game.. sudo as root from a normal account or login as root just to run the stupid thing.. W..T..F.. Linux Steam is a security nightmare. Why must you go through all this crap? “Permission Denied” error on files you have permissions to and are owners of. It’s completely broken.

After reaching out to several developers, etc. Basically, it looks like Valve has decided to just.. abandon Steam on Linux in general and focus on their own distro of Linux called.. SteamOS. This is the OS used on Steam Deck, Steam Machine, etc. And all of that is client side. Nothing for server side.. literally.. nothing.. not any more.

For my other projects, I’ve used Godot for client side development. It’s great for more or less single deployment to Android, Ipads, Iphones, Windows, MacOS, and Steam Deck (did deployments on all of those). However, I am not using that for this project.. thus.. Windows only for the client.

Well.. that’s my rant.. I really really hate Linux since it really really hates everyone.