Thirty Flights of Loving
An update has been pushed for Thirty Flights of Loving! This update has a number of new features:
- Linux support!
- 64-bit macOS support!
- Refreshed Windows support!
- Puffin Mode is no longer Windows-exclusive!
Much of this is thanks to our refreshed engine, which rebases the TFOL changes on top of the very latest revision of KMQuake2. The game was originally made with v0.20 beta 1, so that's a jump of nearly 15 years!
But it was more than just updating the base engine and calling it a day.
When Brendon asked if I was interested in updating TFOL, he also let me approach the update however I wanted. Originally my plan was to update to yquake2, which is the gold standard for preservation-focused Quake 2 engines in 2021, but as it turns out the game depended on many of the enhancements that KMQuake2 provided, so it looked like I would be digging into the lengthy history of the engine... and trying to figure out what version we were even using, let alone what version was available. To be honest I hadn't looked at KMQ2 for at least a decade, since a Linux version was supposedly a thing but I never saw anyone that ran or packaged it. It definitely existed though, and QuDos' original port did have some bits that were used in the release you see today.
Much to my surprise, KMQuake2 was still getting updates as recently as 2020! Even better, there was now a Bitbucket repo, and looking around it turned out Knightmare was interested in making Update 8 the first to have an official Linux and macOS version since ~2011.
So, a whole bunch of birds got killed with one stone: Knightmare hooked us up with all of the source archives, which made it extremely easy to both figure out the base version and get a clean diff of the TFOL changes, and it meant I had direct contact with the maintainer of upstream, so if I were to do the ports myself I could submit it to the main branch and help bring KMQuake2 to Linux and macOS!
And that's exactly what I did. I ported KMQuake2 to Linux and macOS, and made sure that all of the changes that weren't TFOL-specific were in the master branch before we called this update finished. As far as I know, this is the very first time that all three platforms are fully supported by KMQuake2.
Once that was done it was just a matter of rebasing all the TFOL changes, which couldn't be too bad, right? I mean, other than the game DLL it's just a few changes to Quake 2 and oh who am I kidding I'll just show you the Git diff.
Overall it's not that bad; every game I've ever worked on has That Thing that raises an eyebrow, if anything it's just a reminder that even something that might be classified as "just a mod" still has a lot of work put into it, and in some cases it shows where Quake 2 fell a bit short for people who wanted to make more than just a few tweaks to the base game. The link above goes in more detail and I also threw out a couple mini projects for anyone that wants to play with the source.
As always it was an absolute joy to work on the Blendo catalog, both because the games are always interesting and because so much of the catalog allows me to work on FOSS projects the entire way through (including the game itself). Thanks to Brendon for once again letting me work on these games in such a specific and unusual way, Knightmare for helping out a ton with the KMQuake2 work, and an extra thanks to both of them for putting up with my rusty, awful Visual Studio experience.
Give the new and improved Thirty Flights of Loving a try!
Bill's Hat
Turn a minimal Fedora installation into a SteamOS box!
1. Write Fedora Workstation NetInstall ISO to a USB drive
2. Boot USB image, install Minimal configuration with standard partition layout matching SteamOS'
3. Set root password, create a user called 'steam', set a password for it
4. Reboot, log in as root
5. A whole bunch of commands:
dnf group install hardware-support
dnf install Xorg xorg-x11-drv-evdev libglvnd-egl vulkan-loader.x86_64 vulkan-loader.i686 lightdm flatpak NetworkManager-wifi kernel-modules-extra bluez
dnf config-manager --add-repo=https://negativo17.org/repos/fedora-steam.repo
dnf install steam steamos-compositor steamos-modeswitch-inhibitor.x86_64 steamos-modeswitch-inhibitor.i686
setsebool -P allow_execheap 1
systemctl enable sshd.service
systemctl enable lightdm.service
systemctl set-default graphical.target
6. Edit /etc/lightdm/lightdm.conf:
pam-service=lightdm-autologin
pam-autologin-service=lightdm-autologin
user-session=steamos
autologin-user=steam
autologin-session=steamos
7. Create /var/lib/AccountsService/users/steam:
[User]
Session=steamos
XSession=steamos
Icon=/home/steam/.face
SystemAccount=false
8. Reboot, should work now!
9. Additional steps for NVIDIA users:
dnf config-manager --add-repo=https://negativo17.org/repos/fedora-nvidia.repo
dnf install kernel-devel dkms-nvidia nvidia-driver-libs.x86_64 nvidia-driver-libs.i686
reboot # Should be using the NVIDIA driver now!
flibitBuild
Want to replicate my build machine? Grab CentOS 7 and have a look...
# Update base install before doing anything else
yum update
# Add EPEL
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# Add SCL
yum install centos-release-scl
# All the base build tools!
yum install bzip2 bzip2-devel chrpath cmake cmake3 freetype-devel gcc-c++ \
git gtk3-devel hg libcxx-devel libstdc++-static libusbx-devel \
libuuid-devel libvorbis-devel libxml2-devel lzma-sdk-devel meson \
ocl-icd-devel openal-soft-devel opencl-headers openssl-devel patch \
perl-IPC-Cmd svn unix2dos yum-utils yum-plugin-copr zlib-static
# SDL2 dependencies
yum-builddep SDL2
# Coprs for MinGW as well as GCC 10, needed to build Clang/LLVM/osxcross
yum copr enable mlampe/devtoolset-10
yum copr enable alonid/mingw-epel7
yum install devtoolset-10 mingw32-* mingw64-*
# CMake3 by default
alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake 10 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake \
--family cmake
alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest3 \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack3 \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake3 \
--family cmake
# Fake libdecor, for building with Wayland client decorations
mkdir /usr/local/include/libdecor-0
curl -o /usr/local/include/libdecor-0/libdecor.h \
https://gitlab.gnome.org/jadahl/libdecor/-/raw/0.1.0/src/libdecor.h
touch /usr/local/lib/libdecor-0.so.0
ln -s libdecor-0.so.0 /usr/local/lib/libdecor-0.so
# Fake libdecor pkgconfig
cat <<ENDOFFAKELIBDECOR > /usr/lib64/pkgconfig/libdecor-0.pc
prefix=/usr/local
libdir=${prefix}/lib
includedir=${prefix}/include
Name: libdecor-0
Description: library for Wayland client-side window decors
Version: 0.1.0
Libs: -L${libdir} -ldecor-0
Cflags: -I${includedir}/libdecor-0
ENDOFFAKELIBDECOR
# Also:
# Modify unistd.h to change __block to anything but __block
# The CMake config provided by SDL2-mingw is terrible, delete the block
# that starts with "if(NOT TARGET SDL2::SDL2)".
# Be prepared to pass -std=gnu99 manually. A LOT.
# To enter Mac building mode (and to build osxcross itself):
# scl enable devtoolset-10 bash
Wait, a "plan"?
Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.
In Progress
Codename DanishBootleg
Thirty Flights of Loving Launch
Waiting Room
Codename Devolution Assessment
- Waiting for a source drop
Super Hexagon "Neo" Rewrite
- Waiting on Android stuff
Proteus "Neo" Rewrite
- Not actually a thing, I just wish it was
SDL_ActionSet
- Pending some replies
Coding History
- On call throughout development
VVVVVV 2.4
- Giving the localization project as much time as it wants
ScoreRush PC
- Need AppAdmin for publish, crosshair for mouse
Anodyne 1
- Retirement project