Tech Over Tea - #262 The State Of Linux Is Something | Ritchie
Episode Date: March 7, 2025Today we have Ritchie back on the show once again to talk about the state of his game Socially Distant, the game engine he's working on for it and just generally chatting about linux.==========Sup...port The Channel==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson==========Guest Links==========YouTube: https://www.youtube.com/c/AcidicLightWebsite: https://acidiclight.dev/Patreon: https://www.patreon.com/acidiclightSocially Distant: https://sociallydistantgame.com/==========Support The Show==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson=========Video Platforms==========🎥 YouTube: https://www.youtube.com/channel/UCBq5p-xOla8xhnrbhu8AIAg=========Audio Release=========🎵 RSS: https://anchor.fm/s/149fd51c/podcast/rss🎵 Apple Podcast:https://podcasts.apple.com/us/podcast/tech-over-tea/id1501727953🎵 Spotify: https://open.spotify.com/show/3IfFpfzlLo7OPsEnl4gbdM🎵 Google Podcast: https://www.google.com/podcasts?feed=aHR0cHM6Ly9hbmNob3IuZm0vcy8xNDlmZDUxYy9wb2RjYXN0L3Jzcw==🎵 Anchor: https://anchor.fm/tech-over-tea==========Social Media==========🎤 Discord:https://discord.gg/PkMRVn9🐦 Twitter: https://twitter.com/TechOverTeaShow📷 Instagram: https://www.instagram.com/techovertea/🌐 Mastodon:https://mastodon.social/web/accounts/1093345==========Credits==========🎨 Channel Art:All my art has was created by Supercozmanhttps://twitter.com/Supercozmanhttps://www.instagram.com/supercozman_draws/DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase we may receive a small commission or other compensation.
Transcript
Discussion (0)
Good morning, good day, and good evening.
I'm as always your host, Brody Robertson.
And today we have Richie back on the show.
Now I would be showing you the website of the game that you're working on.
Um, but the, the server migration hasn't gone well.
So, uh, well, you know, it's going well. It's's just that i two minutes ago discovered a problem so
it is what it is ssl is not working everything's offline yeah so let me just go back to the thing
just so we can see exactly what the issue said i what is it it is s SSL-ERROR-BAD-CERT-DOMAIN.
Um, so what were you saying you thought the problem was?
Okay, so I have been hosting the servers at home for the past couple months.
But recently I migrated to a Hetzner server auction box, which is a lot more powerful than what I have at home.
And it went well, but I haven't decommissioned the old server yet.
So I used Let's Encrypt, and CertBot is set up to renew the certificates at midnight.
And I guess it detected that the old ones expired.
And so when that little script executed to renew everything it went, ooh these certificates
are expired, I'm gonna go renew them on the old servers.
So then the certificates installed on the new servers went invalid and then everything
died.
So all my websites are down, I'll have to look into that.
Completely unrelated problem, I tried to go to the Hetsonil website and their site's down.
That's even better.
Oh, I love the internet.
This is so fun.
I, my, my web server is like, like my, my, my website, I, I, it's badly run.
Um, I use it as a link tree.
So, you know, uh, it's not as up to date as it probably should be.
But we'll just leave it at that.
Oh, it's still doing better than mine because mine is an SSL error that you can't bypass.
Yeah. Yeah. Um... Yeah.
Well, that's fine. At least you got the migration done.
At least all the hard stuff is done.
The SSL stuff, like, that's annoying.
But it's not that big of a deal to deal with.
Yeah. Yeah. I'd say that, but then there's GitLab pages.
GitLab pages is GitLab pages.
Mm-hmm. I've never actually self-hosted GitLab before. What is like the actual process of
doing that? How, like people will say GitLab's kind of heavy as opposed to things like Giddy
and things like that. I don't know if you've ever messed with those before but like, like
how easy is it to set up your own GitLab?
Uh, not easy. They have a Docker container and that's kind of the recommended way to
install it. But even then, uh, that's just to get GitLab, like the Git server running.
So you get your web interface and your, your SSH and stuff like that. And the ability to
store repositories and clone and all that stuff,
all the Git stuff. Right. That is relatively simple. You just get your server, preferably
a beefy one, because it is heavy, they're not lying. Four gigs of RAM minimum, I think two cores
minimum, and it needs a decent amount of disk space if you're doing anything useful with it. Sure. But, other than that, it's just your standard, you know, exposing the right ports,
probably putting it behind a reverse proxy or Cloudflare or stuff like that,
getting certificates, getting a domain name, the usual self-hosting stuff you have to do.
Sure, sure.
But that, that's just for Git, the base GitLab.
There are two other components to it that I also have,
and there is GitLab pages, which is like GitHub pages, but for GitLab.
And not a lot of people use GitLab pages compared to GitHub pages.
I literally am just finding out it existed right now.
And it's a similar sort of idea. GitLab page compared to GitHub pages. I literally am just finding out it existed right now.
And it's a similar sort of idea.
There's multiple ways you can configure it, but it's a lot harder to set up than the base
GitLab.
And then there is GitLab container registry, which I also use, which is what allows you
to host your own Docker containers as images that people can just download.
I don't like polluting third-party websites or centralized repositories of my stuff,
especially if I don't know if I'm gonna keep that stuff around.
So, like, I don't publish to Docker Hub because I don't want to pollute it.
So I have my own container registry.
And the reason these things are complicated is because each one of them needs its own domain name or sub domain
Mm-hmm, and in GitLab pages case
Depending on how you set it up. You need a separate static IP address all together for it and it involves manual networking and money
I
See so yeah, if you were to just like, just for what you're doing, how... I don't
know if you want to say how much, like, the setup you've got going on cost, like, because
I imagine that's sort of like minimum viable product, right? Like, you're not going, you're
not trying to host something like a free desktop where tons of other people are using it. It's pretty much just like for your product and
that's it.
Okay, so I obviously don't have like a massive cluster of servers like they do. I have one
beefy server. Um, this is a video game, so it needs to do video game things. And it's also a program that needs to do unit testing and stuff like that.
So I do need the RAM, and I do need the course, and I do need, at minimum, a graphics card that can do openHAL.
It doesn't need to be a beefy one, because it's not a AAA game, it's a hacking game.
But it does need a graphics card so that I can actually
bootstrap SDL and get everything running. And so I have a Hexner server auction box.
It's got an Intel Core i7-6700, I think, which is a 4-core processor running multi-threading, so four cores, eight threads. Decently fine for what I use.
And 64 gigs of DDR4 RAM, which sounds like a lot for what I'm doing, but when you get a lot of
GitLab CI-CD runners going and because when you're self-hosting, you have to bring them
yourself. You don't automatically get them.
That's stuff you do have to provide the hardware.
So, you know, once you get a lot of those running, the RAM usage is going to kick up pretty fast.
So it's good to have.
And then it's got an Intel 8D630 in it, I think, for the integrated graphics card.
So not something that you can play Cyberpunk 2077 on,
but at the same time you can try. I wouldn't recommend it. You can try, it might run at one
frame per year. But it should run so highly distant, fine, and that'll be enough for testing
and making sure that like I can write code that says, hey, click this button, see what it does,
and does it do what you expect stuff like that
So that's good
And then other than that it's just stored. It's got eight terabytes of storage on it
Which you know if you're hosting GitLab you kind of need storage
And
The reason I say that that hardware is what it is is because it costs me, I believe, 60 bucks a month Canadian for that one server.
Okay.
So it's a bit much, but it is partially covered by my lovely Patreon supporters, so, you know, I can afford to do it and you know it'll make my life a little easier so I don't I didn't really see a point not to upgrading to that plus the old server is
the crappy gaming computer that I had there that I built ten years ago and it
was barely good at gaming when it was new and I've upgraded it since then and it still struggles to run GitLab.
Why did you decide to actually go and like move off of your like self-hosting stuff?
Like what was your old setup not doing for you?
Okay so my old setup, even though I was hosting the actual server at home, the home part of it was the problem.
Because we're on gigabit fiber, which is great.
It's great for home use.
That would be nice.
The problem with it is, we don't have a static IP.
We have a dynamic IP, and you actually want a dynamic IP as a residential network
because if someone grabs your IP through some exploit in a video game, you know, you just
reboot your router and you know, they can't do anything with it other than maybe some
coarse hail location. But we're not even just that. If you're torrenting something and you're
a public cedar, like that's going to expose your IP address.
Like there's so many...
If you go to a website and they keep IP logs and then that website has a data leak,
there are so many ways your IP address can just like get out there.
And having one that's just changing is...
Like there's no...
Well, firstly, there's a minimal...
Especially we're talking IPv4, there's only a minimal set of IP addresses,
so having home addresses be static just isn't really viable anymore.
And yeah, there's too many ways for it to be leaked.
The downside, however, is most things you self-host kind of need a static IP because
you need a dedicated IP that the internet knows where to reach you at. And there are ways around that. You can do dynamic DNS or you can like set up a
Cloudflare daemon on your server to like basically figure out what your new home
IP address is and do some API magic. No, I don't want to deal with that. I just
want my stuff to work. So what I did is infinitely more complicated
in true written fashion um I rented a five dollar per month VPS through um a local VPS provider
uh-huh and I set it up as a wire guard host and that became my static IP
I guess that works, yeah! So it works.
The problem is now you need, so not only do you need Cloudflare in case you want the CDN
caching stuff like that for static assets, but you need an NX reverse proxy that sits
on the VPS with the static IP and that routes your traffic through
WireGuard into your home network to GitLab or Nextcloud or whatever you're hosting. So if I go
set up Nextcloud, for example, I don't follow the normal, here's what you do to get it working
instructions. I have to follow agony. I have to actually learn what's going on and figure out how to get it working under the reverse proxy and
through wire guard and stuff like that. It's a nightmare and
It's a single point of failure if someone DDOS is that VPS all my stuff falls off the internet
If I stop paying for that VPS it falls off the internet
for that VPS, it falls off the internet. Mm-hmm. Mm-hmm.
Yeah, that's a, um, that's an approach.
Um, look, you could argue that it's not horrible because it's a learning
experience and you have a deeper understanding of how networking functions.
Yeah.
But! have a deeper understanding of how networking functions. Yeah. What? Unwiring that mess to something sane?
Well, now you know why I have SSL errors.
Mm-hmm.
Mm-hmm.
Mm-hmm.
Yeah.
I, okay.
We were talking yesterday about you doing the migration and you were getting very worried
about the, um, about what GitLab was
doing in the process of that. Yeah. So let me explain for people who weren't in that conversation,
it would be everyone but you, what I was doing yesterday. So yesterday I was actually doing the whole migration step by step. So I started it on Saturday.
So I migrated.
First, I did my authentication service because I have multiple things I need to log into.
I want one user account that's managing MFA and stuff like that.
And so I migrated that fairly painless, you know, just migrate a database and then copy
some Docker files over to the new server, reconfigure all the DNS, we're good to go.
That worked, that's fine, that was easy. Then I migrated Nextcloud, which was a
little more painful, but it was relatively simple. Just copying data from
server to server, routing DNS and configuring all that stuff, getting that working.
Fair enough.
Then I did the S3 gateway, which is how images are stored on my websites.
So if I ever post an image in my blog, that is stored on an S3 bucket that's hosted behind a read-only gateway.
So people can view publicly, but only I can upload privately.
So that's how that works.
That was easy, that was one file to copy over.
Then we get to GitLab.
So, you know, GitLab, how I was saying earlier, how I have the container registry,
and the GitLab pages stuff, and you know, GitLab itself, all my code is on GitLab, how I was saying earlier, how I have the container registry and the GitLab pages stuff,
and GitLab itself, all my code is on GitLab. I also have GitLab CI CD, which is your GitHub
actions equivalent on GitLab. So that's how when you commit to code or commit to a repository and
submit a merge request.
It goes and runs all these automated tests and stuff like that, checks your code for errors and stuff like that.
That's GitLab CI CD. I had to set that up myself.
And SohlyDistant uses it for releasing to Steam.
So whenever I submit a merge request, despite being the BDFL, I still do merge requests.
When I merge it, a little pipeline fires off. It compiles the game for both Linux and Windows.
We'll get to Windows later.
And then it takes that build, it generates the online manual from the documentation that gets output from C-sharp, so that gets uploaded to GitLab pages.
Then it takes that build, and it throws it away, because it then recompiles the game
for Career Mode, which is the paid version of the game that's not out yet.
That's coming to Steam.
So it does that for both Linux and Windows. And then it takes
that build and it uploads it to Steam. And then, you know, that's a nightmare of its own, but
it uploads to Steam. A couple seconds later it appears in my Steam library as an update. Great, awesome. And that's all automated. Awesome. The problem is,
if you lost track, the game was compiled four times during that murder.
I see.
And the way GitLab works with CI-CD, with build artifacts, to get files from one job in the pipeline to another, is
you upload them as artifacts. And you might think that those artifacts expire after a
while. They do not, unless you set that up. I did not set that up. So when I went to tear down the GitLab server
yesterday, one of the things I had to do was copy the data directory of it from
one server to another. And I thought I would do the sensible thing of just wrap
it all up in a tarball so I have to upload one file and one file only and
then once it's on the destination
server I just extract it to the right place and then I copy the docker files and everything and
set everything up. Just like all the other three things I did. Problem is, I'm looking at it,
and I'm seeing, um, okay, compressing file socially distanthliDistantWindows x64, careermode.zip.
Compressing file, SohliDistantLinux x64, careermode.zip.
And then I keep seeing this over and over and over again for every rant and every commit I have ever done since moving to GitLab.
Mm-hmm.
That tarball compressed was 30 gigabytes.
Ah-ha! ball compressed was 30 gigabytes.
Aha! So I I let it finish and then I take the file and I download it using
SCP from my home server to my main computer what I'm using right now so
that I can copy it over to the new server.
Because when I first tried to just directly SCP it from one server to another, which you
can do for small files, the desp- Oh. Hello? Uh, hello?
Did we lose you?
I've had a lot of Discord issues recently.
What is going on with this platform?
Jesus Christ, why is Discord like this?
This is like three episodes of Discord.
I'm not even sure what's going on.
I'm not even sure what's going on.
I'm not even sure what's going on.
I'm not even sure what's going on.
I'm not even sure what's going on. I'm not even sure what's going on. Jesus Christ, why is Discord like this?
This is like three episodes an hour, we've had the exact same problem.
Maybe I need to stop using Discord.
I think that's the solution.
Hello?
I'm still here.
Yeah, I disconnected.
I've been-
That was weird.
I need to stop using Discord.
I've had this issue so many times recently.
That was weird.
I heard you the whole time.
What?
The whole time I heard you.
What?
I never saw you disconnect or anything.
What? Wait, that confuses me even more now.
I don't know.
I don't know.
Okay, um, you were saying you copied the files to your home system, uh, and then you cut
out.
Okay. Uh... and then you cut out. Okay, so I cut my file- er, I- I cut my file- I copied my files from the home system to local,
because, you know, doing it directly got me kicked off the server for some reason.
Um, and, you know, that went fine. It downloaded perfectly fine.
Then I tried to upload it to the Hetzner server, and it first appeared to work.
Then I get kicked off again.
And I think, okay, maybe 30 gigabytes of tarball is too big for SCP to handle over SSH.
And I think maybe I'll try rsync. So I rsync the file over and
It kicks me off with a timeout. It has a different error this time
So then I think okay, this isn't working I'm gonna try using sftp through PC man FM
and
I I type in FTP colon slash slash the domain name of the server and I hit enter.
And it spins. And it spins. And it spins.
And a dialog box comes up and it says, uh, connection timed out while logging in.
And I click okay. And then it says, uh, this directory is not mounted.
And then it just goes blank screen on me and rips.
And then I go, okay, well, let's try going to one of my websites.
Uh-huh.
And it spins.
And it spins.
And it spins.
And it goes, connect, and it's timed out.
Error 502, bad gateway.
Um, what happened?
Cause you know, it's all well and good that I get kicked off SS8,
because that means SS8's cracked. Sure. But my website also cracked. I log into Hetzner Robot,
check the server status, and at first I get jump scared by a big red banner, but that's part of
their UI design. I might have to, you know, yell at them about that. But I look next to that big red banner and there's a green checkmark saying the server's online.
And I go, okay, well let's see if I can VNC in. I click the little VNC button.
Turns out that VNCing on Hetzner, I don't know if I'm doing something wrong,
but it doesn't just give you a screen to interact
with the server. It literally has a drop down to select what operating system you want to
install and boot into. So I'm like, no, we're not touching this. I don't want to wipe the
server.
Okay, sure.
So, um, then I go to the reset tab, um, and there are four options and this is where I find out that
things are very over explained on Hetzner there's an option on it to press
the power button on the server and under it is like a big mile long paragraph
that just basically says TLDR if the server is on it'll turn it off if the
server is off it'll turn it on This is what happens when you press the power button on your tower at home.
The quote that we have sp- I can read the quote because you did send it to me.
If the server is powered down, it can be turned back on with this function.
If the server is still running, it will receive an ACPI signal to shut down.
Our servers and standard images are configured so that this
process triggers a regular operating system shutdown. What happens is actually exactly
the same as what happens when you press the power button on your home computer.
Thanks for the info, Hetzner. That's not what I need.
Those first two sentences are completely redundant.
Yep. And I thought to myself, maybe this option is or this option is
described this way because someone pressed it thinking also fix the server
and then it got turned off and didn't turn back on again they had to send out
a support request to get a human to turn it on maybe they got sick of all those
requests I don't know either way very over explained option but right below it
is the one that I actually need which is hit the reset button on the server.
And I hit that button, and 30 seconds later everything's back online, and I'm able to copy the file over.
And I still don't know how I managed to crash the entire operating system with a 30GB tarball.
Maybe I ran out of RAM, I don't know.
Maybe, I don't know. I think the question that always comes up when people talk about doing self-hosting is, whether it's GitLab or anything else, why not just go and use gitlab.org or gitlab.com, whatever the main one is, and just pay them whatever monthly fee they want. Well, um, honestly for me, if I have to spend money, I want
root access to the hardware. That's as simple as that. I don't like to pollute
GitHub and GitLab.com with my stuff because a lot of my stuff is
let's create a repository and experimentLab.com with my stuff, because a lot of my stuff is,
let's create a repository and experiment and then if it goes well, well, whatever. And
for me, I feel a lot better messing around with that stuff when I'm the one paying directly for
the hard drive that the data is stored on. I'm just weird like that. But at the same time,
as far as why I switched away from GitHub in the first place and everything is because
I just didn't like the direction things were going with AI and forced two-factor authentication and stuff like that. Now, to be clear, I do
understand the merit of forced two-factor authentication, but I'm also blind and 2FA
is difficult for me. So, um, I would rather not be.
What?
But anyway.
Is that, no, actually that is kind of interesting, I hadn't really thought of that.
What is the problem with 2FA for you?
So, um,
now at the time this is how I felt. Since then I have actually learned a little bit more about how 2FA works
and I've solved the problem. But at the time
when GitHub forced two-factor authentication, the options were...
There's plenty of options, but many of them involve a six-digit code that expires every 30 to 60 seconds that I cannot read in that amount of time.
So that's the problem.
But the other options are get a code through SMS or get a code through email.
Now, you might realize the problem with those methods
is they're insecure.
Like really insecure.
You know, SMS, they're SIM swapping.
It's also being generally transferred
in plain text over the air
so someone can sit and snoop the traffic.
I don't believe anyone's monitoring me, but you know.
Yeah, the SMS thing is getting better with RCS, but that's still widely rolled out for
everything yet.
And I don't even know if my carrier supports it yet, but either way, the other problem
with SMS is if your phone's not working, you can't get the codes. Now, I do have backup
codes, but I don't know where they're stored,
that's my problem, but anyway, that's still a problem. And the other aspect of it is I
don't like keeping my phone in the same room as me when I'm at my computer, because if
I'm at my computer, most people that I actually care about can reach me through my computer.
I don't need my phone spamming me with notifications and telemarketing and robocalls and stuff like that. It's annoying, and if I'm going
to have it silent, I may as well not have it in the same room. So my phone, when I'm
done with it, goes in my bedroom. My computer is not in my bedroom. So if I have to log
in to GitHub, and it's forcing me to do 2FA, and the only accessible
option is SMS for me, which is more secure than email, because if you have my email,
then you can just get the code, but it's a bit harder to get my phone number, realistically,
because I just don't give it out.
And you know, if I have to go up two flights of stairs, go read the code, and go down and
enter it in, it's just annoying and I don't want to do it, so that made me think, okay,
well, I'll set up GitLab at home and then I don't have to deal with that.
It may be less secure, but it's more convenient for me, and honestly, it is technically more
secure that way because most people don't know where my code is.
Security by obscurity. Not that that's actually security but you know, still.
That's true but you also have to consider like the kind of target you are right? Like people will
talk about how oh you shouldn't write your passwords down and put them on a sticky note
on your computer but if you're doing that with a home computer, like, you shouldn't write your passwords down and put them on a sticky note
on your computer. But if you're doing that with a home computer, unless you're a government
official, no one's breaking into your house to steal your passwords. Now, if you're doing
that- And if somebody is breaking into your house
to steal your password, you have bigger problems, like the person who broke into your house,
period. Yeah, yeah. But if you're doing that with an office computer, like that's a
very different scenario, right?
Like people will walk by people who maybe are in other apartments, maybe a
disgruntled employee who wants to like, or maybe someone who's disgruntled with
you, who wants to frame you for something, like doing that with a, in a more public
setting, like that, that makes sense why that's not secure, but, or like my, um,
my mum, for example, she has a notepad
where she writes down all her passwords and that's not secure but she's also not a target
for that being a problem. People need to think about like when we're dealing with security
it's, you have to think of the realistic attack vectors, who would be trying to get this data? Because there's
always going to be this trade-off between privacy and security. And you can, like, you
could store your codes in a vault at the bottom of the ocean, but, like, is that providing
any more benefit than putting them on a thumb drive that's in a cabinet. Or just putting them open in the IDE on an unlocked computer in the middle of an office building.
I don't know. But anyway, like I said earlier, that whole 2FA thing has been solved.
I ran into about 2FA in my community and we found a solution to the problem. There's a command line
rented a vote2fa in my community and we found a solution to the problem. There's a command line
TOTP client that you can use. It's called COTP. It's available in the Archery Post.
And it's a bit unintuitive at first with the syntax of the command, but once you learn it, it's literally just you... it's encrypted, but it's stored on my computer,
and I can give... I can take the secret phrase from Google Authenticator, if I'm given the option to
set up Google Authenticator. I can put that into COTP, give it a label, and it'll generate a six
digit code. I enter that in, and as far as the remote site is concerned, I'm using Google
Authenticator, but I'm not. And then it just works. So because it's on my main computer now,
here it's a bit less secure than having it on a separate device. But you know, I have to open
my terminal, I have to willingly do that. And then I have to know which key I want to get
Because they have different labels
and then I have to enter a
Decryption password to actually get the code and then I have to copy paste that code in the website and in it sounds slow
The way I'm describing it, but it's like five to ten seconds max. I have never actually had the code expire in that time.
So it's a lot more convenient and most things port it now, like Discord.
I have it working there. I have it working on my authentic server, so all my self-hosted stuff is protected and has two-factor now.
So it's been really handy. The only one I haven't done it for yet is
GitHub because I honestly don't care enough about my GitHub account to go and fix it.
Sure. I think there's a thing that people don't actually realise about OTP. When I did my video
on GitHub 2FA, all of the people in the comments were saying, I don't want to use my phone for 2FA.
I don't think there's a lot of people that realise that OTP is not Google Auth or is not like any of these other authenticator
applications on your phone. It is a protocol that can be implemented in other things. I believe
Bitwarden has support for generating OTP codes now. So like there are ways that you can do it
on your computer. There are ways you can do it with things that are not in your phone.
But because the things that are...
Like usually when there's like the tutorial on,
Hey, setting up 2FA, it's going to show you how to use Google Auth or whatever Microsoft's one is.
So I can understand why people get confused about it.
And even more, and this is more of a US problem in my opinion,
When there is the option for OTP, it's not clear that it's OTP,
because it's labeled as Google Authenticator, and it tells you you gotta go get your phone and install
the app and then scan the QR code. And sometimes you don't even get the secret phrase that is behind
that QR code. You have to somehow scrape it. It's not always displayed. Sometimes it's displayed in
a format that isn't compatible with
the client you're using and you have to fix it in the text editor, it's not intuitive at all.
But luckily I have a community of people who like help me with this stuff, so I was able to figure
it out. But not everybody has that, and that's a little frustrating because then, you know,
less people use 2FA and then ultimately it gets a bad rap and then people's accounts get hacked and they wonder why
Mm-hmm. Yeah, like if you're if you're the kind of person who uses the same password for everything and you're not using 2FA
Just give up just give up just what are you doing?
Like yeah
And even me like I you I don't know any of my passwords
I know my bitwarden decryption key and I know my 2FA decryption key. That's it
I don't know any of my app help passwords because they're three miles long
Speaking of that I I hate when websites put in just weird arbitrary
Like restrictions on the password and don't explain it initially
I've had sites where I generate, you know, I usually I think I have bit more than set usually like 50 characters.
So I will generate a 50 character code and some sites will truncate what I enter.
So I save the password, I try to log in and it's like, oh password's wrong.
Like what do you mean password's wrong? I literally just set it. I've just copied it in.
But it didn't actually set the password that I had set.
copied it in, but it didn't actually set the password that I had set. Here's a fun one. My bank, I'm not going to name them because of this security flaw. It
may have been patched since then, but a few years ago, I needed to reset my password for a reason. And I went to enter one of my three mile long random passwords through Bitwarden, and I
entered it in and the bank started spinning.
Spinning.
Spinning.
And all of a sudden, 503 service unavailable.
A patenever in 2.4 on Ubuntu. I crashed the banking software Brody. Mm-hmm. It was out for a good two hours
It was because there was an exclamation point in the password oh
Oh, okay.
I know there's a lot of people out there that like to intentionally set usernames
and passwords that just they know are going to cause a problem for someone like,
you know, including an open bracket, including a quote mark, um, you know,
exclamation mark, just, just things that should be getting escaped
and depending on the language is going to cause serious problems.
Yeah, well in my case I just hit copy and hit paste and then trashed it.
What do you want me to do banking software?
That's impressively bad. I don't don't know like because usually they would
require you to use special characters and an exclamation marks a pretty common
special character it's not like you use some you know weird Unicode symbol or
you know just something like maybe a you know curly brace things like that
emoji yeah yeah like that I can understand why it might do something weird, especially Emoji,
because Emoji double-wired characters and Unicode gets a bit weird. I know a lot about Emoji that I
don't need to know about Emoji. Writing game engines is fun. Yeah, yeah. Well, I've seen how emojis kind of break from time to time just in a normal terminal
that's like intended to be a terminal.
So I guess for anyone who's not aware, just give a brief explanation on your game and
then we can go into some of like, you know, you would bring emoji stuff there, but anything
else you want to get into with that.
Okay, so all the self-hosting stuff is for a game called Socially Distant that I've been working on for the left-
well, since COVID-19 been-
Um, and it's a hacking game where you- well the story is kind of being revamped so I'm not gonna actually go too far into it
but basically you are an employee for a company and you're a hacker man and you're going on this investigation
I'm not pitting the game too. Well because it's kind of in limbo right now
we're working on it, and I don't want to make promises right now, but
It has a desktop environment built into it
that's very Linux II and has a terminal and
environment built into it that's very Linuxy and has a terminal and the big the big part of it is that it's in a custom game engine that I wrote for it
so I wrote the entire UI system for it I wrote the rendering code I wrote the
window management and I wrote the text rendering and I added emoji support to
the game now you mentioned terminal but I haven't actually gotten it working in
terminals yet I've gotten it working everywhere else where the game. Now, you mentioned Terminal, but I haven't actually gotten it working in Terminal yet.
I've gotten it working everywhere else where the game can display tabs, but not Terminal,
because Terminal's Terminal. But Emoji, on a website, if you have a competent browser,
If you have a competent browser, it's just theoretically gonna work. You know, if you go to GitLab or GitHub and you post an issue or a comment or something like that and you use an emoji, it's gonna work.
Sure. desktop application, not always. Because emoji, they are standardized, but what isn't standardized
is those little short codes they're called. When you type in a colon and you type the word heart
and then another colon and a heart appears in the message. That is not standardized. That is
completely dependent on the specific service you're using.
So if you're writing a desktop app, you need to come up with those yourself.
I've got Emojipedia open right now. The example they have here for short codes is
on GitHub it's policewoman, on Emojipedia it's woman underscore police underscore officer,
on Slack it's female dash police dash police officer
not underscore they decide to be different yeah so that's the short codes uh now that's relatively
easy to figure out um i just went to the github api they have they have they have an api that
returns like a chase on object of every short code that their system supports,
and then what Unicode values they move to.
So I took that, turned it into C sharp, and that became a 4,000 line long file in my source tree.
Yeah, I've got the...
I think this is a full list.
Someone decided to put a cheat sheet together.
Um, yeah.
Yeah.
Also Unicode is a evolving standard, so you might get more emoji.
Yeah.
So I have this lookup table of every single emoji there is, except for the ones
that didn't have Unicode code points attached to them for some reason, or
didn't have short codes attached to them for some reason, becauseub is weird. So that is only part of the problem. You know, parsing those shortcodes,
looking them up to get their code point values. That's relatively easy. I've written a few
programming language interpreters for languages I've invented, so I know what I'm doing.
for languages I've invented so I know what I'm doing. Rendering the emoji.
First things first, C-harp character encoding, UTF-16.
It's not UTF-8, it's UTF-16, a character is 16 bits, two bytes.
Thring encoding in C-harp is also UTF-16.
So storing a Unicode code point for an
emoji is not possible in a string because the backslash U hexadecimal escape
sequence can only accept two bytes of data, not the four that you need for an emoji.
So somehow I needed to be able to turn strings into UTF-32. Luckily,.NET 8 and.NET 9 have a method to do this,
but it is probably not as efficient as I would need
in a game engine, so it's not particularly
ideal. So I had to do some of the parsing myself. That's fine. Whatever. Now we get
to the text rendering part. So you know how in an Arch Linux system, if you don't install
an emoji font, all the emoji look like squares? Because you don't have an emoji font. You
need to install an emoji font. Now in a game Cause you don't have an emoji font. You need to install an emoji font.
Now on a game engine, you also need an emoji font, but you're very limited on
what emoji font you're able to use because of performance and license.
Um, now I believe, uh, I'm good to go as far as the emoji font that I picked.
Um, it is actually actually a it's based on
Twi emoji but it's modified for performance. And what I wanted is I wanted color emoji,
which complicates the problem. And I wanted an up to date font that has most of the modern emoji.
font that has most of the modern emoji. And, you know, I was able to get that.
And the problem is
fonts and color glyphs
are not exactly sane because there are so many different ways to do
color in a font. And I'm using free type,
which doesn't support all of them. So,
free type can handle your standard bitmap raster glyphs from 1974. That's fine. It handles those.
It can handle single color vector glyphs, which is what most fonts are nowadays. That's fine. It handles those. It can handle single color vector glyphs, which is what most fonts are nowadays.
That's what TrueType fonts mostly are. And it'll rasterize them out into a bitmap that you can then copy into your texture on the graphics card.
That's easy enough. Color! There are two standards. There's SVT and then there's COLR.
Okay.
SVT is fucking slow. Pardon my friend.
It took at least two minutes to render a single emoticon at 12 point font in the game and because there are no SVP renderers for.NET that run in.NET and
aren't platform specific and by platform specific I mean Windows. I'm on Linux, I can't use those.
So you know rendering an SVP out not a not not a viable process. I do cast the test, but it's gotta be rendered first.
I don't want the game to hang for a minute during that first cold run.
No thanks.
Um, that's for one emote!
Imagine having to preload every single one of them
just in case one of them might be used by a mod.
No way!
So they're not happening. Now, colr
is, first of all, it works fine in free type, but you have to write specific code to be able to take
the data out of the font and get it into your texter. It's a bit more complicated, but I was
able to figure it out. The problem is there aren't many emoji fonts that use that format because they all are
expected to be used on the web and therefore are SVG fonts.
Is it reasonable to convert between the two?
I am sure it's possible but I don't know about the legality of doing so.
And I just don't want to mess with it because this is a commercial
game. I want to make sure my fonts are licensed properly. So, you know, I'm not a lawyer.
I don't want to deal with that. I want to if someone else has turned an open source
emoji pack into the right font that I need and it's under OFL and under the right license,
I'm going to use that. This makes life easier, but you have to find that font.
And luckily I was able to.
But my God, that was a nightmare.
And now I have the ability to render
cute little red foxes in the user interface.
Hey, I guess this might be a big part of the reason why a lot of games just don't bother with it
And if they're gonna use something emoji like they'll just go with emoticons because that's much easier because you're already doing that anyway
You're already you're already dealing with these characters. So it's fine. No issue. No, that reminds me. There is another
emoji like system in Unicode. It's called the private use something or other.
Unicode is kind of hard to learn and hard to remember.
The private use area.
Yeah, private use area, whatever.
It's this upper area in the spec where fonts can just put whatever the fuck they want.
So you're using material design icons,
that's where they're gonna put them.
If you're using another icon pack,
that's where you're gonna put them.
And obviously being that this is an operating system
environment that you play the game through,
I do need these kinds of icons and I need them to scale.
So, you know, toolbars, for example,
they need your open and save icons.
Or if you're in the browser, you need a back and forward button.
And I'm not an artist and I'm also blind, so I'm just going to use an icon font for that.
And maybe down the line, I can get someone to, you know, replace those icons with something a bit better for the game.
I would assume the nerd fonts probably also use that area for storing their glyphs? I'm not certain though. I would imagine so as well, but I haven't looked into nerd fonts. I probably should
for the terminal, just for flair, but not yet. More fun, more pain. These icon fonts
are why I ultimately decided to implement emoji into the game, and I'm telling this
story in reverse because I thought that it would be easy. It was not easy. Icon fonts are easy. They're just fonts
with different glyphs in the private use area, and then if your language supports Unicode,
which any language built within the past 30 years will hopefully support, you can represent
those icons properly, and it'll just work. And you'll get,
uh, you'll get your monochromatic tailable icons that you would expect on the internet for flat
design and it all works. And that is until you use material design icons and you make a game about about COVID-19. That gets you flagged as a password stealer in Windows Defender.
Okay. I'm serious. I needed to get help from the Jon Hamm and the community to figure this out with
this one out and figure out what was flagging it. I had to reach out to Microsoft Security
on multiple occasions to report it as a false positive.
And we found that the one thing that was tripping it up was one material design icon called Coronavirus.
We removed the constant for it in the code, compiled it, and it worked fine. Windows Defender stopped flagging it.
Material design...
What?
What? Wait, wait, I found it.
Coronavirus icon material design.
What?
Okay, sure.
Yeah, so it's a little glyph of like a coronavirus type thing.
It was causing my game to be detected as malware.
So this is stuff you have to deal with
False positives are a thing and it is a nightmare
As you know, those antiviruses are not gonna tell you what flagged them because if they told you you'd be able to circumvent it Right, right
It's always fun when your own game gets flagged as a security issue. Oh, it's great. It's great for PR.
You know, biggest operating, I know
Linux is trying to overtake Windows in terms
of gaming market share.
But realistically, Windows is still dominant.
I don't know how long that'll be,
but the year of the Linux desktop is not yet.
Not yet.
One day.
And I want Windows to at least work, even though I'm developing the game Linux first.
So, you know, if my game gets flagged by the default antivirus's malware,
and I have to tell everybody to turn it off in order to play the game or to exclude their Steam direct-
No! First of all, no! Second of all, Valve does not allow that.
If you put malware, even if it's false positive on Steamworks, they're gonna bite you.
So, you know, I had to get that fixed. That was a year-long nightmare and it
affected me across multiple game engines when it's just great.
Yeah, you'd be getting a
very interesting email from Valve when you try to post that version, they try to test it. It's like, hmm.
And you know, I have gotten some interesting emails from valve
I can't talk about most of them, but you know I have had to work with valve in the past to get stuff working
And it is um they don't mess around
We'll put it that way. They're they're cool, but they don't mess around one of the things I had to do is
cool but they don't mess around. One of the things I had to do is it's not currently working not related to the S sellers but you used to be able to log
into my websites using your Steam account and you'd think that it'd be
simple because it is simple if you want to log in with GitHub or set up GitLab
or Twitter or stuff like that you know some of those websites you do need to
get reviewed before you can allow
public logins. Like Google, you need to get approval before you can do that. And, you know,
others you don't. But in either case, they all use OAuth 2 behind the scenes to make that work.
So this is where this is your login with Google button and stuff like that on many websites. I wanted to set that up for Steam.
Now Steam does support OAuth 2 if and only if you contact Valve and you happen to be a big enough
game studio. This is in their documentation. I don't know if the last part is, but you do need to contact them, and they only issue
those client IDs that you need on a case-by-case basis. So that leads me to believe that you need
to be a big guns studio or publisher to get them, and that makes sense, it's that you don't get your
Steam phishing stuff, and you know know people being able to take your
your Random website and put login with steam and then suddenly you've logged into
Some sketchy website that steals your steam ID. Yeah, I've seen a lot of um
I've like games like path of exile do this Marvel rivals does this but like, you know, your smaller games usually
I at least haven't seen anything that's relatively unknown habit
usually I at least haven't seen anything that's relatively unknown have it yeah now the problem is is that they also support open ID now for the system
administrators out there I do not mean open ID connect which is just o off to I
mean open ID the old one okay they do support that and that's open to anybody
it's a bit of a nightmare to set up but it's open to anybody. It's a bit of a nightmare to set up but
it's open to anybody. But it's also old OpenID so it comes with the security
flaws of old OpenID. So my authentication provider which is
authentic, I self-host it, does not support that old version of OpenID.
And this is why it's not working right now. In order to get Steam working, I need to set
up a whole other authentication broker that's written by some guy on GitHub in C Sharp as
a Docker container.
That's always a good start.
And I run that locally, and I reverse prophecy it behind a domain name,
and I point Authentic at that. And what it does is it talks to Authentic using OpenID Connect,
but talks to Steam using OpenID too. And somehow by the alignment of three dark forces and a blue
moon, it works. Right now it doesn't because the application
for whatever reason does not speak the right version of TLS and it confuses my internet
browser. So it is an SSL error, it's not related to the one that has everything else down right
now. So that's something. So Steam doesn't work right now. But the other thing that I had to do with
Steam is I need to be able to publish builds. Now, publishing a build to Steam right now involves
you install SteamCMD, which may be in your distributions packet manager, maybe not,
most likely not. It is in the AUR. But most likely what you're going
to do is you're going to download the Steam SDK from Steamworks if you're a partner. And
you use SteamCMD from that. And there's a weird command you have to enter to, and you
have to do some like source engine scripting to configure it, which is great. I love, I
love VDF scripts. They're great.
That's sarcasm, by the way. Um, and that's coming from the guy who wrote a bash interpreter in C-Harp. Anyway, um- So, you know, we've said that all up.
Regarding um, regarding packages, just- just one sec, um, they do have documentation on this. Uh,
Uh, it's available in multiverse on Ubuntu. On Debian they do have a package arch.
Yeah, they literally tell you to get it from the AUR.
Um, so, oh, there is a dock container though.
Excuse me.
Um, so I had to set this up as a do Docker container so I could do it from CI-CD, and it turns out that not many people upload builds to Steam using continuous deployment.
It's just not a thing people do often, and if they do it, they don't talk about it.
Mm-hmm.
Because... it is not technically possible.
Mm-hmm.
It is possible, because I've done it, but it is not easy. So you know how you log into Steam
and on a new device, or if you're logging into something particularly sensitive, it'll do it
every time, but most of the time on a new device you only have to do it once. Maybe you bought a
Steam Deck and you're signing into it for the first time. It goes and pops up a little SteamGuard
window and says you've got to enter a six digit code that's been sent to your
email or phone or whatever. So you enter that code in you're signed in and it
works.
Steam works and Steam CMD you have to do the same at the command line. And it works the same as on Steam UI. So, you know,
you enter the six digit code and then it works, hopefully. Assuming you enter the right code
and it didn't expire. Now, this is great if you're a human being doing a human thing on
a human computer. If you're a build robot running a continuous deployment
tab, you can't enter the code because you don't know the code because you cannot access
an email address to get the code from. And even if you could, logs in GitLab are read-only,
so you don't have a standard input, you can't enter the field, it'll crash Steam CMD. That's great.
So what you have to do is you have to log into Steam CMD on the same device that's going to run
the GitLab job, but you have to do it as a human being. Right. And then you do the Steam Guard. And
then there's some file buried deep in proprietary no man's land that I don't know if I'm allowed
to reveal that has the credentials that log you into your Steam account. And you take
that file, you store it as a repository secret, and you do not touch it. You do not touch
that Steam account ever again, because if you do and you invalidate the Steam Guard code, you have to do it all over again.
And you have to write the build helps that it takes this repo secret, downloads it, puts it in the right spot, and then hopefully it works.
Now the other problem is you also need your Steam password as a repository secret.
So that's great. Another problem is you also need your Steam password as a repository secret.
So that's great.
Needless to say, I created a dedicated account that has no credit card attached to it and
only has access to what it needs to.
Understandable.
So, you know, I was able to get it to work, but it's a bit of a nightmare.
And you know, the only reason I knew how to do it is because I was able to contact Valve and get them to help me.
But it's not an easy process. So if you ever intend on developing a Steam game and do continuous integration, welcome to hell.
Enjoy your stay. So before you're mentioning OpenID and um just just one random thing I want
to mention with the with that um they provide icons you're supposed to use if you're using the
OpenID login um the the icons they have here are the uh the valve icons from about 15 years ago.
years ago. Yeah that page hasn't been updated in a while. Um yeah I I I don't use those icons sorry Valve I just stole a random SVP of the Steam logo and put it there instead because that's all
I could do I cannot physically fit those icons in my authentic list of things you can use.
You just have like Google and whatever and it's just like this giant banner.
It won't even give me the option to set that banner. It's just an icon.
Oh, God.
So one of the things that you did, uh, the one thing you did bring up that you wanted to talk about was, um,
the, uh, developing a game engine on Arch.
It is a nightmare.
So, most of the time it'll work. But in any... as is the case with any art system, eventually something weird will break for weird reason that is weird.
And I had that happen three days ago. So, I was not informed of this, but SDL3 came out.
I don't know why I wasn't informed because my game engine is written in SDL2. I guess maybe I'm not popular enough to know about SDL releases. So SDL 3 comes out,
and you know, I'm thinking great, it has all these new APIs I might actually use. Like,
it has a dialogue API now. I think it's just the front end for ATK on Linux, but either way,
I can go into SDL and say, hey, pop up an error message, which is a lot better than doing it in
engine, because if your engine crashes, then you can't display the error message that tells the user why the engine crashes.
Your only other option is to log it to the terminal and the terminal might not be open so I don't think that's adequate.
So I'm glad they have dialogue API but anyway SDL3 comes out but I'm still on SDL2 and I'm not ready to port because porting requires work and I'd rather dedicate work to
working on the game. Um, not the engine. Especially the platform layer that really doesn't need to
change because it works fine. Now, last week I started a massive documentation run because
I want people to contribute to the game. I want people to know how to use the API.
Um, so I'm going through it, documenting
everything. I got some freaking Synthwave music going the whole time. Everything's
going well. And every now and then I'm compiling the game, making sure I haven't broken something
somehow because, you know, games somehow documentation can break things sometimes for some reason.
I don't know. But you know, I'm doing that and everything's
working fine. You know, some things have broken because I've been removing code. Text labels
in settings are now white instead of being green. I have to look into that. But that's
subtle. That's fine. It's fine. And so I get to Wednesday last week, and I'm doing documentation, and I do an art update.
And I think this art update is fine.
I don't think about it too much, because nothing really big is going on.
I do see some SDL stuff, but I don't think about it, because I'm thinking to myself,
okay, this SDL2 package is getting replaced with SDL2 compat,
that's fine, SDL3 came out, there's probably some legacy package rename going on there.
It's fine.
And I keep working.
And then Thursday happens, and I get a massive cluster headache.
So I put the source code down, Wednesday night.
I go to bed, I have my cluster headache. So, I put the source code down, Wednesday night, I go to bed, I have
my cluster headache, and then I come back on Friday, and I boot the game, and I'm hacking,
and I try to hover over things in the UI. And it ain't doin' it. You know, usually
when you hover over something in Socially Distant, there's a tooltip now that tells
you what the icons are, because accessibility is important. Those tooltips were not coming up.
And I thought okay maybe the game hang? Tabbed over to the IDE? No, everything's fine.
Game's still running, still pumping messages. It's fine. And so I tried clicking on things and,
you know, and no, not working not working okay so I tried going into
system settings just maybe my frame rate is really low no I couldn't get into
system settings couldn't click it okay so I hit one of the I am gooey debug
layers to check my frame rate so I hit f4 and it comes up and it tells me I'm
running solid 60 FPS v-sync on because I'm on Wayland
and great it's fine and I think okay maybe there's like a user interface element blocking the mouse cursor from reaching the ones that I can actually see maybe I've introduced some sort of weird bug
I don't know I open the widget inspector which allows me to see all the UI in the game and where
how it's all laid out and I cannot click on any of the nodes.
Now they're not in my native UI system, they're in iamgui.
So something is desperately wrong right now
if I cannot click on iamgui.
And I cannot click on iamgui.
So I go, okay, something's weird.
My keyboard's working, my mouse isn't.
Now, I'm on my documentation branch, So I go, okay, something's weird. My keyboard's working, but my mouse isn't.
Now, I'm on my documentation branch, which is not Master. So I think, okay, I'll stash my changes, and I'll go to Master, which I knew worked.
And I boot it up. And same problem, the mouse ain't working.
And then I go to Steam and I boot the game on 24.07, which at this point is almost a year old, and it works. And then I go to Steam and I boot the master, the git beta for the master branch.
Now you know why I didn't say the words in order.
So I boot that for the game, which is the same build that wasn't working earlier with
the mouse. And I boot it and it works fine. So exact same build of the game working fine
under Steam, not working fine under a debugger. What's going on? So then I look, and I look
into system settings and I think, okay, maybe Steam's
running the game in X11 mode? No, I don't even see a Wayland toggle, which implies that maybe
it's not running under Linux. So I open the in-game terminal type neofet, the host string, which
tells me what operating system the game is running on.ofet in game is actually a debugging tool for me
So if I ever get a bug report, I'm gonna ask for neofet
Yes, I'm serious
So I look at that and it says steam runtime version, whatever whatever whatever x64
And I'm like, that's not helpful. I want to know what operating system it thinks it's running on not that it's running under steam
So I exit the game and I like click on it because I'm thinking maybe it's running on. Not that it's running under Steam. So I exit the game, and I right-click on it, because I'm thinking, maybe it's running
under Proton, and that's why it's working. Because there are Windows builds. And I remembered
a year ago I did set the game to purposefully run on Proton back before I had Linux working.
And I looked, no, it wasn't running under Proton. I actually turned on the little toggle
to force it to run under a specific runtime, and it was the Steam runtime.
But I noticed there was an option, Legacy Runtime, and I'm thinking, ooh, what if I run it under that?
And this is how I found out that Steam vendors SDL2 in the Steam runtime.
So, I booted the same build of the game under legacy runtime and the mouse
stopped working. So this tells me there is some package difference between my Arch system and
Steam. And like I said, Steam vendors SDL too. Now that's great! Tells me it's not a bug in my code,
but it also means I can't work on the game on my current system.
So, I write a debug tool at this point to figure out what's going on with the mouse,
and I add it to the IMGUI layers, which I know I can access, and I hit F4 to bring it up,
and I'm moving the mouse around, and there's a little indicator saying where it thinks the mouse
is, and it keeps thinking it's at location 0 0 which is the top
Left of the screen no matter where I put it and actually
Took a screenshot of the mouse cursor like way near the bottom of the window or of the visible zoom area of my screen
And then the little mouse indicator thing saying it's that top left of the screen when it's clearly not because you can see where the cursor is
So top left of the screen when it's clearly not because you can see where the cursor is. So basically what happened is, ARC maintainers, they swapped the SDL package out with SDL2Compat,
which is an official SDL library, and what it does is it's SDL2, but under the hood, SDL3.
So you know, if there's any bug fixes in SDL3, you get those bug fixes.
However, the game will still think it's SDL2, so it'll work.
Except it's not actually SDL2, it's pretending to be SDL2 in terms of API and ABI, but it is decidedly not SDL2
because it broke mouse position pulling, and that is a feature of SDL2 that I use.
So I'm gonna have to file a bug report for that. I went surecarzogging into GitHub,
which I don't want to do, but maybe that'll give me a reason to finally fix 2FA on it.
but maybe that'll give me a reason to finally fix 2FA on it. But, you know, I'll have to
point a bug to fix that and get it fixed for other games that maybe have that same issue, because I doubt that I'm the only one. And so that's great. But what I ended up needing to do
is if you go in the Arch Wiki, the SDL2 Wiki article for it tells you that if you still need
SDL2, you are recommended to install SDL2Compat, and it'll do it automatically if you have SDL2 installed.
The package got renamed, and anything that requires SDL2 will require- will see SDL2Compat as SDL2, and it'll work.
SDL2 and it'll work.
Problem is if you go to uninstall that to replace it,
KDE requires SDL2 for gamepad support.
Unable to install SDL2 compat because it breaks dependency SDL2 required by Plasma workspace or whatever it was.
Okay, that's fine, whatever.
Made a KDE developer, uh, go, what?
Uh, SaverHugel, I love him.
Uh, confused the hell out of him.
Um, then, then, he saw the other packages that were also complaining about this when
he tried to remove it.
Um, FFmpeg requires STM?
Uh, what? Okay.
Uh, SCRCPY, which is a tool I use for viewing my Android phones on my PC where I can zoom in and use them as some keyboard,
that uses SDL2. That actually makes sense because it's actually a graphical application. But FFmpeg, I don't
know why it uses SDL 2, because it's a video encoding library and it doesn't render to
the screen? It doesn't use window management? It doesn't use a gamepad? What does it do
with SDL? I don't know. But it requires it. Maybe it uses it to set up an off-screen OpenPL context? I don't know.
Um, but either way.
SteamCMD requires SDL2.
SteamCMD, the command line version of Steam!
Wait, hold on, just one thing. They have this in their documentation.
Oh, look at this.
It doesn't really tell- it's just pure code documentation. But they're doing something with it.
Okay. So they're doing something with SDL2, but it weirded me out.
But the weirder thing is that SteamCMD needs it?
Why?
Okay.
Um.
So here's how I ended up fixing this.
Um.
Right next to where it says use SDL2Compat, it says if you actually need SDL2, it's in
the AUR now.
Um.
Don't know why.
But it is.
I would think SDL2Compat should go in the AUR,
because it's not quite ready, I guess, because my game broke in it, and that's how I feel.
If the project says it's the official package, I guess, like, I get why they've done it like that.
It might be annoying, but like, yeah, it broke things, but if the project's saying this is the way to do it,
like, I get why they've done it, even if it's not the thing they should be doing yeah but
either way my stl2 is in the aur so to install that I have to compile it great
whatever so eventually it finishes compiling and it says hey I steal to
compact conflicts of stl2 would you like to replace stl2 compact with it and I'm
like sure yeah go ahead and it says okay I cannot remove SDL2 Compat because it breaks
lib32-sdl-compat, which is required by steamcmd. So go remove lib32-sdl-compat. And it goes,
no, you can't do that because steamcmd needs it. So I go remove steamcmD, then remove the lib32 packet, then remove SDL2 compat by replacing
it with SDL2, then I had to compile lib32 stl compat- er, SDL2, through AOR.
I get that working.
Then I had to install SteamCMD, and I boot so highly distant, and my mouse works!
Never mind the fact that I'm using an integral system package that I installed through the
Arch user repository, which you're generally not supposed to do, but my mouse works.
Uh, this is why people don't develop things on Arch if they need very critical packages
and use containers or use like, Debian stale or something like that.
And the worst part is this won't affect the CI CD builds because they're all done through either
Ubuntu or Alpine. Oh god. But that does remind me.
But that does remind me. Haters.
So, you may be aware of opening a Steam game nowadays on Linux.
You spend maybe 20 minutes playing the game, but 4 hours compiling Vulcan haters before
you get to play it.
Cool.
My game uses OpenAL because I don't feel like writing a Vulcan renderer.
It's 2,000 lines of
CR just to figure out what graphics card you have and if it's capable of being a
graphics card. I think Vulcan 1.4 is going to solve a lot of those problems
but I have to wait for APUs to widely support Vulcan 1.4 consistently before I
can do that. So I just don't want to fight with that right now. So I'm doing
OpenAL. Besides, I don't need Vulkan.
I mean, most Wayland compositors, which at the end of the day is what my game engine is,
except it doesn't support Wayland being a compositor.
But it does all the compositor things.
It renders windows to the screen, it does window management, it does all that funny stuff that your compositor does.
They're all written in OpenPL.
And SaverHugel again told me, unless you actually need the performance of Vulkan, which realistically
it takes years and lots of practice to write code that is more performant than what OpenPL
gives you, for the unseeable feature, just use OpenPL.
It'll be fine.
So I'm using OpenCL. And obviously shaders in OpenCL are written
in CLSL. But in my game engine, they are not. They are DirectX shaders written in HLSL.
Because my game engine is a hard fork of MonoGame. Which is a spiritual hard fork of XNA Game Studio 4 for the Xbox 360 and Windows Phone.
So MonoGame is basically a successor to that. What it does is it adds support for other platforms like it.
It can do PlayStation, it can do Xbox, it can do desktop, it can do mobile, all that fun stuff.
It can do OpenAL and it can do DirectX, but which graphics platform you use depends on what platforms you want to target.
And if you're targeting Windows, Mac, Linux, you do OpenAL.
That is all you get.
However, because of the build, or the way assets work in MonoGame, by exception of my
game engine, because it's a hard fork, MonoGame uses something called the MonoGame
Content Pipeline, where you create this separate project that's separate from your code, and you
run this little tool, and it goes through and it finds all your textures and it converts them to
MonoGame's format, with some platform-specific metadata to tell it how to load it. It goes through all your audio, does the same thing.
Basically, it packs all of your source assets
into a friendly format for the game engine, in this case.
And shaders are no exception.
You write them in 8LSL, because that's
what you wrote them in in XNA Games 3 or 4.
So it's the same syntax.
But what it does is it transpiles them to PLSL. Now if you're a graphics programmer,
you might be thinking it uses Spurvy to do that. No! Spurvy didn't exist back then,
because MonoGame started development in like 2007, 2008, I want to say, something around then.
development in like 2007 2008 I want to say something around then and it's where VEX didn't exist so it uses something else that used something called mode
show hater to do the transpilation but in order to do the transpilation you
need to compile it first to direct X which requires the D3D compiler, which requires Windows. I'm on Linux. I don't have Windows.
So, here's how you're supposed to do it, as per Bottle Game's official documentation.
First, install Wine. Don't use bottles, because bottles is going to give you a nightmare when
you set this up. Sorry, Skelly, I would love to use bottles for this, but no.
So you install base wine, and you set up a wine prefix.
And you're supposed to run this random shell script that some guy wrote.
And I looked at the code, I've audited it, so I know it's safe.
But what it does is it sets up the wine prefix great um and it goes and
downloads a random build of firefox for windows okay extracts it pulls the d3d compiler from that
puts it in system 32 in the wine prefix uh-huh that's step one right Next it downloads a random version of.NET and installs it into System32.
And that's so you can run.NET code.
And then it downloads MACB, which I already have installed for Linux,
but the Windows version, and puts it in System32.
That's what the script does. And you're supposed to run that,
and then it will set an environment variable
pointing at the wine prefix that MonoGame knows to look for,
so that when you compile your game, it will go,
OK, I'm on Linux, I need wine, here's the wine prefix,
I'm going to tell wine to execute then mpcp and compile these haters.
It'll do it in Windows World, and then the haters will come back
in the friendly format that MonoVenus
sets. But this requires Wine. Now, this is great on Arch, where you have the latest version
of Wine available. It's also great if you're a human and you're able to click through the
graphical installation of Mono and stuff like that that wine does the first time you boot it
Now
Like I said earlier a CI CD build pipeline is not a human there is no graphical interface click on and it cannot click on those things so I
ended up needing to create my own image of the.NET SDK in Docker. And I basically did what the
script did. So I installed Wine into the container. Then I put the random build of Firefox into
the container in the right spot. Then I put the random build of.NET framework in the right spot.
framework in the right spot. And then I set up everything so that when MonoGame goes and requests Wine to do its thing, it just uses the container. And as far as
the container is aware, when you boot into it, you actually get a Windows
command prompt instead of a Linux hell. And then it's super sketchy, but it works.
And that is what is called
the socially distant build environment for Linux.
It's a Docker image you can just use.
It has everything you need to compile socially distant,
but it's super sketchy.
But there's a problem with that.
If you try-
Oh, we haven't got the problems yet.
Okay, okay.
Okay.
That was haters. Right. But this is why I need Windows specifically, Oh, we haven't got the problems yet. Okay, okay. Okay, that was Haters.
Right.
But this is why I need Windows, specifically, and not Wine.
Because if you try to build the game for Windows in this build environment on Linux,
it'll compile the Haters fine.
But there's something else the game has. It has game scripts.
Written in a custom programming language I wrote called SDSH, which by the name implying
is very similar to Bash, because SDSH stands for Socially Distant Shell.
It is the in-game command shell, but used as a scripting language for the game,
so for missions and stuff like that.
Because I like bash, and I don't care what anyone says about bash syntax, I find it easy and
declarative for what I need it to do in the game. So what I do is after compiling shaders and stuff like that and compiling the base game, I
have the build system go and
I have the build system go and asked the game itself to validate all of the mission scripts and everything for syntax errors, so that I can get compile time errors if I screw up
a command for syntax.
Problem is, I'm doing this through MSBuild, because.NET, and if you build a Windows self-contained application and try to use that on Linux as
an MSBuild build task, despite the fact that this is a.NET assembly and so should be universal
and not rely on Windows. Um, it'll
complain at you because the kernel does not know how to open the library
and.NET doesn't know what to do with it.
So you cannot actually compile socially distant for Windows
on Linux. And that is how I'm now a customer of AWS.
Because, now, And that is how I'm now a customer of AWS. Because now I could do this the home lab way of just downloading
windows 11 and creating or registering it as a windows build
runner for GitLab and then tell the windows build hubs to run on
that windows 11. That'll work. And I did it as a proof of concept
to make sure that it works. But if you read the Windows EULA, you're actually not allowed to do that.
Okay.
Because Windows 11, Windows 10, all that, those are client builds of Windows. And client builds are not allowed to be used if you're exclusively using them for remote access.
Or automated access. And in fact, if you have
Windows 11 Pro, you can set it up as a remote desktop server. But if you are logged in at your
desk on that computer, that's the remote desktop server, and say someone else in your house goes
and connects to it, it'll log you out because only
one user is allowed to be using it at a time. You can either use it remotely or use it not remotely,
locally at the desk. That's in the license agreement. There's no way around that.
In Windows Home, you can't even use remote desktop server on there. So, you know, you're really not
supposed to use Windows client builds for remote and automated use like this.
And a CIA pipeline falls under that.
So you need to use Windows Server.
Now, Windows Server is licensed per core.
So, you know, it already costs a thousand dollars.
Mm-hmm. I have four core processor in that machine. Now I might limit the VM to
only use one or two cores. That would save me two thousand dollars.
Mm-hmm. You'd think, but no, that's not how it works.
Not only is it licensed per core,
but it is licensed for each core
it could theoretically run on.
So if you run a VM, a Windows server,
and you only give it two cores and you pin the cores
that it only ever touches those two cores, no.
If you have a 64 core processor,
you gotta pay for 64 cores. Simple
as that. However, AWS... Okay, no. Backtrack a little. I thought, okay, let's... I use
VaultPair for most of my VPS stuff because they're Canadian and they're local. They have a Canadian data center.
And they're relatively cheap.
They're relatively nice.
The UI is easy for me to use.
And they're Windows server boxes, I believe, from one gigabyte of RAM and
like two VCPUs, it's $24 a month.
Don't quote me on that.
It's a little brutal.
Yeah.
And I only need this server to turn on whenever I need to do a build hub.
So you know, I thought maybe I could turn the server off and save money when it's not
being used.
I can just write a script to turn it on when I need it.
No, it bills you even if the server's turned off because the resources are allocated and the storage is allocated, so that costs money.
So AWS, they bill by the minute instead of monthly.
So Windows Server is billed by a minute with EC2,
and it is significantly cheaper for this use case at least. So,
with the help of my friend Zapprit, I'm going to shout him out, he does AWS stuff for a living,
or at least he used to, so he knows what he's doing, and he was helping me through the archaic
user interface that is the AWS console, setting up all the instances and stuff like that. And I imaged it with Windows Server
Core. So I'm thinking this is Windows Server. It's an automated build runner. I don't need a GUI.
Just need command line. Let me ssh pin and do what I need to do. That's not what Windows Server Core is.
Windows Server Core is a GUI that only opens command prompt.
What?
So you, uh, you, you remote desktop into it and you get a command prompt and it's PowerShell, which is my worst enemy. I hate PowerShell.
I'm not going to rant about PowerShell, but I hate it.
Um, I will rant about PowerShell, but I hate it.
I will rant about other stuff to do with Windows.
So you log in, and I have a simple task.
I need to download GitLabRunner.exe from GitLab's website.
I need to put it in a folder.
I need to install Docker.
And I need to tell GitLabRunner to use Docker.
And I need to install SSH. That's all I need to tell GitLab runner to use Docker. And I need to install SSH.
That's all I need to do.
It's no web browser.
None. Not Edge. Not IE. None.
There's no web browser.
Now this is a problem.
Who's the maintainer of curl again? What's his name? This is a problem.
Who's the maintainer of curl again? What's his name?
He might get a kick out of this.
Daniel Stenberg.
Yeah, Daniel Stenberg.
You're going to get a kick out of this if you're listening.
On Windows PowerShell, on Windows Server Core,
you go to download a file.
You have to use curl or wget.
There's both.
You put in the URL and it goes in downloads.
No, it doesn't because it pops a big red alert saying Internet Explorer is not available.
They aliased curl and wget to invoke web request, which is a PowerHel commandlet.
And that behind the scenes uses Internet Explorer!
Which is not installed, because it's Windows Server Core, and you're not supposed to have Internet Explorer on there.
So curl doesn't work.
Because it's lying, it's not actual curl.
So... It's lying. It's not actual curl. So, um, I
Thought okay. Well, I'll destroy this server because this clearly is going to be painful and I'll go grab regular Windows server
That way I have a desktop. I have Microsoft Edge
I can do all that stuff and just download things the way you would on Windows. Sure, sure. And I set everything up
I get everything working and then I look up online how to convert a server install
to server core.
Because you used to be able to do that
in Windows Server 2019, I believe.
Not in Server 2022, they removed that functionality.
You cannot convert the install back and forth.
If you pick the wrong one, congrats,
you have to re-image the server from scratch. Right. So I did all this setup, get everything
working, and I find out, oh crap, I have this desktop environment running that's taking up
resources, an obnoxious amount of resources, and I can't get rid of it. So I have to start over.
That was painful. But now I can do Windows builds.
Why does Microsoft make this so hard? Like, imagine this for like a Linux
system, right? You want to set up a Linux server, you want to have a GUI as you
set it up. So you install KDE, you do all the stuff. When you're done with it,
you just delete KDE. You delete the browser.
It's just fine. Why is it this hard?
I don't know. I just don't know. Oh, by the way, they cost the same.
Of course they do. Of course they do.
Lovely. Incredible. Amazing. Thank you, Microsoft.
Yep. Making my life easy. And it is really annoying because I've been trying to cut
Windows out of my life. I have Windows on my laptop because I barely use my laptop and can't
be arsed to use it long enough to install Linux. but other than that, I have Linux on all my stuff.
I didn't even bother to install Windows on the Steam Deck, even though that would be more of an accessible experience, to be honest, because, you know.
I still have SteamOS on it, because KDE is nice, even though it's 5.27 and that doesn't have
my zoom fixes so I can't use it properly. Oh well, I have Linux on my things. But
because of a weird little bug with MSBuild I still rely on Windows in some
part of the pipeline and it's a little frustrating. I just hope someday that I
can use ReactOS for this.
I tried.
No, GitLab runner does not know what to do with ReactOS.
It turns out that if you take GitLab runner and run it on an operating system that tells
it it's Windows 2000, things break.
Imagine that.
So that was a bill go.
What a- imagine- who would have ever guessed that would happen?
I had to try though. I had to try.
Oh man.
That is what it's like to develop a game engine on Linux.
Yeah, I can- I- I can see why most people just don't bother with it.
Why are you actually doing your own engine anyway?
What could you not have done before?
Oh yeah.
So, it used to be in Unity, and the problem with Unity is that its user interface system is not actually
a user interface system. To be clear, I'm talking about UchiUI, and there's a distinction,
because UchiUI is the old one that everyone uses, and UI Elements is the new one that isn't finished.
So UI Elements is very web-like. So you think on the web you have HTML, CSS, and have a script.
In UI elements, you have UXML, you have USS, and you have C sharp.
UXML is like your HTML.
It's a little more strict, but that's how you define the things that are actually in
your user interface.
So buttons and stuff like that. that's how you place them.
So it's a lot like React Native, I guess, in that regard, but it's all rendered in-engine.
That's UXML.
USS is Unity Stylias, and it is the exact same syntax as CSS.
You even have Flexbox.
In fact, you only have Flexbox.
So if you like using flexbox on the web,
if you use UI elements, that's your cup of tea. You're gonna have flexbox and you're gonna be
happy. And it was great. And that's also how you theme things and give things consistent color and
animation and stuff like that. That's great. Problem is it doesn't support haters. At least
it didn't at the time. It probably does now. And you know,
Linux systems, if you're trying to make that kind of look, the one thing you absolutely need is
hater support, because what does everyone who first uses hyperlend on their Linux system do?
They go and make their terminal translucent, and they blur the background. That, ladies and gentlemen, requires a hater.
Um, UI elements can't do that.
Uh, UI, or UGUI, can.
It's a bit complicated, you have to write your own hater code, but you can do it.
Um, that's great. But it doesn't have a nice layout system like UI Elements does.
It doesn't have a flexbox system. It doesn't have Unity-style hates.
It doesn't have this declarative way of building the UI.
What it is, is it's the Unity scene view, with your game objects and stuff like that.
And UI Elements are just 2D sprites rendered in the world somewhere,
and then you have a camera
that knows to render them on the screen. That's all it is. And it has a layout system. It has
vertical layout groups, grid layout groups, don't talk about those. It has horizontal layout groups,
and then allows you to do your stack panels and stuff like that. So if you have a list of items,
you can group them so that they're one on top of the other, on top of the other, vertically, that's all well and great. Problem
is, that layout system doesn't allow me to say, take a piece of text and say, I want
you to word wrap, but I only want you to word wrap if you're 500 pixels wide.
If you're 400 pixels wide, I want you to be 400 pixels wide.
There's no way to set a maximum width or height of a UI element.
You can only set the minimum size, the preferred size, and the flexible size. And minimum is how big it's going to be. If it really cannot fit, it will
break. Preferred is how much it wants to be, and if it cannot be that size, it will shrink until
it reaches minimum size. And flexible means if there's space left, it'll take it. Sure.
So I can do some pretty complicated things with that, but I cannot make a dialogue box
that starts out small and then grows as the message inside it gets longer and then eventually
rewraps.
So I have to design things that are static size and I don't like that. The other thing that was frustrating me with
performance is the terminal. I'm coming back to terminal for a good year so this is
like leading up to the first podcast episode. The terminal when you write a
lot of text to it would drop the frame the framerate to like, one.
This is because I was using TextMeshPro, which is the Unity text renderer that everyone knows
about, and it has markup, and it's, you know, you can do multicolor, bold, italic, all
the wonderful stuff that you can do. And I need that in the terminal for fancy hacker
effects. You know, NeoFetch would not be possible without that. And everything works fine until you add background colors,
because there's an element in the documentation for TextMeshPro Markup
that tells you how you can format things.
There's an element called Mark, and it takes a color,
and then you surround text with that element and the text around with
the mark element will be highlighted in the given color.
So think double clicking a message in Discord, it goes blue because you've selected it.
That's what the mark element does.
Except not really.
It really behaves more like the highlighter feet hair of say Microsoft Word.
So instead of it being a background color behind the text, it's a foreground rectangle above the text.
So it needs to be translucent, otherwise you cannot see the text.
Mm-hmm. So The colors in Sohly Distant are not translucent because that would desaturate them and it would look weird.
Right.
So I ended up having to create two text boxes.
One that renders behind the other. One gets dedicated to background colors and the other is everything else.
And what happened was every time you print a large amount of text, a bunch of whitespace
had to be rendered in the background, because you might not have been using colors, and
a bunch of text had to be rendered in the foreground, which means two text meshes had
to be redone, two layout passes, two geometry passes, and everything just broke, and frame
rate drops to one. And it's great. layout passes, two geometry passes, and everything just broke and frame rate
drops to one and straight. So I did eventually work around that but it
introduced other bugs and I'm like screw this I just want to write my own
renderer for this and it turns out that text mesh pro is really hard to just get
it to render a character to a 2d canvas because that's not how it works.
Unity has a way of like not exposing its low level APIs
in some cases, but exposing them in others.
So like you have access to the L clear function from OpenGL,
but like it's really hard to
render a mesh using OpenCL calls directly, so that's great. But TextMeshPro
is the same way. It's really easy to get a text element on the screen, but it's
really hard to figure out how big the text element might be. And it's really
hard to render an individual character to a vertex
buffer. It doesn't expose that functionality in an easy way. And then,
after that, you get to... you get to third-party packages. Specifically
Steamworks integration.
The developer, Faceplunch Studios. I think they did...
...Carry? Smod? If I recall correctly.
It's a great Steamworks library for Unity, and it works outside of Unity as well.
But there's a bug with it in how it's structured.
The plugin manifest. When you're making a Unity plugin, you need to
declare a plugin for each supported platform, otherwise it kind of just doesn't work.
The plugin manifests for facepunch.steamworks have two plugin manifests, one for Windows and one for
POSIX, because they assumed that Mac OS and Linux are the
same platform. They are not and so it won't compile on Linux. So I have to
manually fix that. Uh-huh. Um, then I upgrade to Unity 6
and it fundamentally breaks the terminal. It stops rendering. It stops accepting key presses.
So I, I, I, I, I, I need, okay, I'm not even done yet. Not even with Unity six. I think I'm on,
on like Unity 20, 20, three. No, that's Unity six, 20, 2022. The Rider integration got upgraded so that every time Unity logs an error to the console,
it will talk to the Rider debugger and put a breakpoint there and hang the Unity editor.
So if you get in Unity develop...
Did we disconnect again?
Why is Discord like this? Did we disconnect again? Uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
I don't know what's going on. I don't know. I don't know. I wish I knew.
Are we good yet? Are we good then? Yeah, we're good.
Okay. All right. So where was I? Breakpoints.
Okay. So breakpoints. Yeah. So every time an error occurs in your code, for whatever
reason, it will talk to the writer debugger and place a breakpoint
so you get the little exception has occurred dialogue and you can debug your code. That's
great if you're writing a.NET application, but Unity developers, you know this very well.
If you accidentally type a space in a script, or maybe your cat does, and you tab into Unity,
it's going to do a script reload, which recompiles the game behind the seams and it will reload Unity, which will cause, in most cases, many null
reference exceptions to get spammed to the console every frame. Now because of
this update to the writer integration, each one of these exceptions will get
sent to the writer debugger, which will hang the Unity editor and pop up a little
Accept Man has occurred message in Rider, and the Unity editor will not function. You cannot get
out of this loop. Can't use it. So I have to go in and tell it to not breakpoint on any
exceptions, and there's no way to do this
on a per project basis so I have to remember to go in and turn that off when
I'm using the only distance game engine but if I'm working on on a Unity game I
have to turn it back on and this crap is why I stopped working on Restitch, it got annoying. And so, yeah, I eventually got fed up with
Unity breaking in these weird ways and, you know, these random changes happening,
and then Unity 6 sealed the deal for me for socially distant. If I want to keep the engine
up to date, I constantly have to fix the game and constantly have to work around these weird bugs,
and I just don't want to anymore, because, you costs money to do so the runtime fee and all that. I don't want to deal
with that. I can write a much better specialized game engine that'll run much better and it does
than Unity and it works. So I wrote my own game engine and that is what Socially Distant uses.
My other games that I'm working on do use Unity, but socially distant will not.
You talk about the issue of um...
Sorry, just completely blanked there.
What was I saying? Shit.
Wait, I completely blanked.
What was this? Oh, right.
Porting your game between versions being a giant waste of time.
And I saw this video the other day with this dev who,
their game was being built with UE4.
And it wasn't even like a stacked video.
Yeah, it wasn't even up-to-date version of UE4.
They were just like, yeah, this is the version it works in.
If I change the version, something will break.
I'm not going to UE5.
I'm not going to use any of the UE5 features.
There is literally no reason to do so.
Yeah.
There was one point where Socially Distant was in UE5.
Okay.
Great.
The performance was not great.
It looked great.
The build size wasn't great.
But I do know Unreal, and he's not wrong,
even with a simple hacking game,
because I've been developing hacking games
for a lot longer than Sohli.
None of them succeeded or came out,
but one of them wasn't Unreal,
and it was Unreal 4.
And every time I updated,
even minor engine updates, some weird thing would break with the in-game terminal. And
sometimes it'd be a compile error, sometimes things would just stop rendering and I wouldn't
know why. There was one weird change to how Slate works, which is the UI renderer in Unreal,
change to how Slate works, which is the UI renderer in Unreal, that broke between, I believe, 4.22 and 4.23. I had to fundamentally rewrite my code. That was great. It compiled,
it just didn't work because they deprecated an API and stubbed it out.
TLDR, unless your engine you're using is not supporting an operating system you want to use,
if it doesn't have a feature that you want, there's probably not a reason to upgrade.
Yep. If it ain't broke, don't upgrade it is basically the industry standard with Game Inventions.
As an example, I believe the latest Final Fantasy VII is still a UE4 game.
If I remember correctly.
FS7, Remake.
Because I know the first part was...
Part 2.
Is it UE4 still? I could be wrong. Yeah, no, it's UE4 still. Yeah. And it came
out this year. Or last year, sorry.
I'm glad. I'm glad I never... I'm glad I switched away from Unreal 5, and the reason I did is because when I switched to Linux,
you still have to compile Unreal for Linux.
Ha!
And when I did, text rendering was so broken that I could not read the dialog box to tell me how to set up everything and get it working.
It was completely blurred out, couldn't read it.
Oh my god.
So Unreal's a bit of a mess right now. It used to be great, but like, what happened?
Oh, that's fun. That's real fun. Video games. Video game development.
Yeah.
Angels.
They're great.
They're great.
Just, uh, just, uh, write in OpenGL by itself.
Don't even use a library. Just make plain and openGL calls.
That's your solution.
I don't even bother if Vulkan, hence the story you don't need the performance gains you get from it.
And you won't get them unless you're a really good graphics programmer, which I am not.
Mmhmm.
Yeah, well, look, if it works, it works.
Uh, yeah, pretty much fine.
I guess there's like one more thing we can probably talk about. Um, oh, actually we did talk a little bit ago about Cosmic and
uh what what is what is your current like thoughts on it? I know that you're waiting
sort of for the screen, um not screen, um zoom, waiting for the zoom which is supposed to be
alpha 6, alpha 7, something like that, but have you had like have you tried to play with it as it is and
just you know probably not have much luck with it? So I physically can't use Cosmic right now without
Zoom. It's not possible. Sure. So I could play with it in a virtual machine but like that's not
why I use desktop environments. I don't use them to play with them. I use them to use my computer.
So I don't want to spin up a VM and test it if it's not going to work on bare metal for me.
So I haven't actually touched Cosmic, but I have seen the UI, and what I will say is I like it,
and I'm redesigning Socially Distant to look a little bit more like it.
So I do like where they're going with the user interface. Of course, I've only seen vague
screenshots and videos of it. So like I know vaguely what the window decorations look like,
but I don't know what it's like to actually use it. I don't know where the bugs are. I don't know
how fluid it is, but I like the look of it. And I like the look of the dark theme. And so
so far it looks good.
I don't have a lot of experience with it yet.
Well, since we're talking about cosmic zoom, that how do you, how do you want
the zoom to work because people are going to design, there is going to be zoom of
some sort and considering that a lot of the design
choices they've made have been very inspired by Gnome, um, I will see how that ends up going.
But what do you- So I have experience with Gnome Zoom.
Yeah, what do you want from the Zoom?
I want it to be like K-Win, um, because I'm a little biased there because I'm the one who fixed K-Win Zoom.
And the reason I say that is because I have dual monitors. I don't use dual monitors the way that most people use dual monitors.
I use them just so that I have peripheral vision when I'm reading. I can use an Alt or Wide for that, but I also do sometimes use
dual monitors as you would use dual monitors, so you know, it's nice to have. And the problem with
dual monitors and Zoom is nobody except for, I'd argue, Kwin gets it right. So Windows, it works
mostly fine, but there's a few bugs with edge detection, with detecting
that you're pushing up against a monitor edge and panning the zoom area.
It's usable, but usable to the point where I didn't notice the bugs until I started looking
for them.
So Windows is mostly okay, but KDE on Linux is the best, because you have the configuration
of how you want to use the mouse while zoomed in.
Some people prefer having it stuck in the center of the screen.
I've talked to other blind people with the same condition that I have, and for them it's
to make the mouse cursor easy to keep on screen.
It's in the center of their screen.
Their vision is a lot worse than mine.
So that makes sense for them.
But for me, that's disorienting and nauseating.
So for me, I need the ability to go in and have it in push mode.
Yeah.
What does KDE call the one where it's centered?
Is that like follow mouse, something like that?
The default is proportional. That's the one where the zoom area moves
in proportion with the mouse. So if the mouse moves a pixel, the zoom area moves a pixel. Right.
There's also the centered mode, which is what I was describing. That's not the default,
but that's where it keeps it in the center of your workspace. And only if you start bumping up against the edge of the workspace
doesn't fall back to report handle movement.
And then there's the push mode where
on a single monitor, if you push up against the top edge, it moves up.
If you push toward the left, it moves to the left.
That's how I like it.
But I need that to work for dual monitors or for three monitors or for one monitor
that's arranged weirdly.
And right now, KDE is the best desktop for that.
It's not perfect.
You can still kind of escape into the void.
If you, if you move your mouse to the top left corner of one of your outer displays
and then zoom in, you'll start to see the void and
there's a zoom limit now so you can't get too far into it and if you move the mouse cursor around you'll get back into reality and there are certain arrangements that do break it
or at least did when I merged it or when it got merged. But for the most part, if you have a standard monitor layout, like maybe you have two monitors
side by side perfectly aligned, it'll work fine.
If they're slightly misaligned, like I had, it'll work fine because that's what the merge
request did.
I really just want Cosmic to do that.
Honestly, just steal the KWin code for lack of a better phrase.
Because it works fine and it's accessibility.
It's not the type of thing where you can really make assumptions.
You need as many options as possible.
They need to be accessible.
You need different people because people do have different preferences on how they need their mouse to work.
And I say need, because this is again accessibility, it's not like light versus dark where dark looks cool and light doesn't.
We actually need these things to work the way that they do. So right now KDE does that the best, and GNOME, when you zoom in on multiple monitors with push
mode, it breaks butter completely. Like rendering glitches happen within seconds, it's not usable.
And it hasn't been usable for the better part of 15 years. So yeah, that's something I really hope that
that someone looks into that. I don't have experience with the GNOME code base. I'm sure
someone would be willing to help me learn my way around, but I'm a bit scared and I've got
other things I need to do and KDE already worked. So I just hope that that same bug doesn't make it into cosmic. I doubt that it will,
but you never know. Because again, nobody really gets zoom right on Linux. KDE is the
closest we have to correct and it doesn't, it's not perfect. There are still monitor arrangements that break, and there's still bugs. So yeah, that's where I'm at.
All I really want is to be able to have another desktop environment that I can use other than KDE.
KDE is great, but I want choice. If KDE for whatever reason breaks and I don't have a
usable system with KDE, I'd want to be able to swap over to Cosmic and have a usable system.
But right now there's no other desktop I can use.
Unless I want to use Compiz.
And nobody wants to use Compiz nowadays.
One of the things I noticed with-
Except for the two people that do.
There is a surprising amount of people who really like it on Reddit.
They're weird, I don't get them.
One of the things I did spot that KDE has is the option to move the zoom area using, like, keybinding.
Have you ever played around with that?
I've done that on Windows, but, be honest, it's a lot slower to use than just flip the mouse in the direction I want to go.
Right, right.
Yeah, if you're gonna be clicking on stuff, your hand's probably on the mouse anyway.
Yeah.
It's the same argument I have with like Vimbo hands.
It's great if you don't have to use the mouse, but I have to use the mouse
anyways, I'm supposed to type normally.
Sure.
Sure.
Just wanted to just want to double check on that one.
Um, we're closing in on the two hour mark.
So I guess, um, when, when the site's working properly, where can people
find your stuff and if they want to go and support the project and all that, where can
they go?
Okay, so if you want to find out about Socially Distant, there's SociallyDistantGame.com.
I promise it will be fixed before the podcast goes live.
It should be, this isn't going up for like two weeks.
I've got a few weeks. And if you want to support development, there's patreon.com, especially
Zidic Lite. It's two bucks a month for, or name your price. And that money goes directly
to paying for the beefy Hetzner box that hosts the source code, but also getting me coffee every now and then so I can continue to develop the game.
And you get monthly devlogs. There was the February one that- or the January- actually no, February. We're in February right now. Yeah. January one came out a few weeks ago to Patreon. I have to post it to everyone
because it's out of early access. But I'm thinking of doing some sneak peek type stuff about career
mode, which nobody has seen yet. And that's going to be Patreon exclusive. So if you want to access to that, that's a good way to support me.
And then, I did say this last year, but I mean it this year. Play testing is about to start
because I'm working on career mode. So if you want to help actually make the game run well,
I need hardware to test it on. And I don't have a lot need hardware to test it on.
And I don't have a lot of hardware to test it on.
So it would be nice, but at the very least have a group of people who can test it on different desktop environments,
different graphics cards, stuff like that.
Because I am developing the game engine, obviously, and you know, is important.
So if you feel like helping out the game with the game that way,
there will be info on the game's website about how to apply form you've got to fill out. And then I look at it eventually and reach out and then you get a Steam key and you can play the game.
Awesome.
And then I'll leave what breaks.
Anything else you want to mention or is that pretty much it?
The last thing I want to mention is it has been almost two years since my eye treatment and
things are going great. Wow okay well that's good. Yeah. Awesome um I guess for me main channel is
Brody Robertson. I do Linux videos there six-ish days a week um uh I've got the gaming channel Umm... Uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh fantasy which is the best kind of Final Fantasy. I've got the React channel
VeridiaOpens from React which I upload clips to. If you're watching the video
version of this you can find the audio version on any podcast platform. Tech over
T is on Spotify. Spotify also has video which is neat as well and I've got the
video version of this yeah that's on YouTube. take a tea, search that. I don't know why I'm forgetting my outro today.
I've done this like 250 times already. Um...
I'll give the final word. What do you want to say? Anyone sign us off?
Uh...
Well, I don't actually know. Um...
Last time I think I said we got a stomp of the gompa, but that's not gonna work here. Um...
Uh... I have been known to come up with random phrases that are... words spelled out.
The one I came up with with my friend Ash was, uh, using bottles under nicks turns ugly,
and that spells ubuntu.
So that's how I'm gonna end it.
Sure.