10 Years
On April 12, 2012, I received access to the Waveform source code, for the purpose of bringing the game to Linux and macOS. Classes were ending soon and my summer job was already underway.
That summer job hit its 10th anniversary today.
A few random numbers:
- 70 games (if you look at the list, Soulcaster and Jackbox count as 2 each)
- All 70 use SDL, including the Unity games
- 50 FNA games
- 2 Unity games (a third is coming soon!)
- 4 games with source code available (2 are GPL, 1 is zlib!)
- Contributed to 6 more (Duke3D Megaton, Shadow Warrior Redux, Ion Fury, At the Gates, Darkest Dungeon, Mighty No 9 (yes, really))
- 6 platforms (Linux, macOS, Windows, Switch, Stadia, UWP)
- ~250 individual SKUs (I still maintain ~150, the rest are internal now)
- Most games released in a 365-day period is 15, March 2013 to March 2014
- 2305 commits to FNA, 1133 commits to FAudio, 581 commits to FNA3D
- 102 commits to MojoShader, including a >5000-line patch that I think still haunts Ryan to this day
- At least 147 commits to SDL (the Git history is borked, this is since 2016)
- 2 commits to the kernel, 13 commits to ANGLE, 1 commit to Unreal Engine 5
- 1 spicy article published
- 1 abandoned music production degree (sorry Mom and Dad)
- Dev PC ran on Fedora 18, that same PC now runs Fedora 35 (soon 36) and is still the main PC
- 1 Mac, which I purchased 4 months after shipping my first Mac port
- 63 FOSS sponsors as of writing
Thanks to everyone who has enabled me to be a full-time independent developer for a decade, especially those who continued to support native developers this past year. Native developers and specialists can give small games the attention they deserve, something that no monolithic superpower can ever provide, no matter how much they might claim otherwise.
See you at my next native release!
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
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
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. Create /usr/share/xsessions/steamos.desktop:
[Desktop Entry]
Name=SteamOS
Comment=SteamOS (Gamescope)
Exec=/usr/bin/steamos-session
TryExec=/usr/bin/steamos-session
Type=Application
DesktopNames=SteamOS
9. Steam Deck UI
dnf builddep gamescope
dnf install git xorg-x11-server-Xwayland-devel
Build/Install gamescope: https://github.com/Plagman/gamescope
echo steampal_stable_9a24a2bf68596b860cb6710d9ea307a76c29a04d > ~/.steam/steam/package/beta
STEAM_MULTIPLE_XWAYLANDS=1 gamescope --xwayland-count 2 -e -W 1280 -H 800 -- steam -gamepadui -steamdeck -steamos3
10. 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
# Wayland updates
su -c 'yum remove wayland-devel wayland-protocols-devel'
curl -O https://gitlab.freedesktop.org/wayland/wayland/-/archive/1.19.0/wayland-1.19.0.tar.bz2
curl -O https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/1.25/wayland-protocols-1.25.tar.bz2
curl -O https://gitlab.gnome.org/jadahl/libdecor/-/archive/0.1.0/libdecor-0.1.0.tar.bz2
tar xvfj wayland-1.19.0.tar.bz2
tar xvfj wayland-protocols-1.25.tar.bz2
tar xvfj libdecor-0.1.0.tar.bz2
mkdir wayland-1.19.0/flibitBuild
mkdir wayland-protocols-1.25/flibitBuild
mkdir libdecor-0.1.0/flibitBuild
cd wayland-1.19.0/flibitBuild
meson .. --libdir=lib -Ddocumentation=false
ninja
su -c 'ninja install'
cd ../../wayland-protocols-1.25/flibitBuild
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" meson .. --libdir=lib
ninja
su -c 'ninja install'
cd ../../libdecor-0.1.0/flibitBuild
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" meson .. --libdir=lib -Ddemo=false
ninja
su -c 'ninja install'
# PipeWire 0.3.42 (Highest version usable with meson)
curl -O https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/0.3.42/pipewire-0.3.42.tar.bz2
tar xvfj pipewire-0.3.42.tar.bz2
mkdir pipewire-0.3.42/flibitBuild
cd pipewire-0.3.42/flibitBuild
meson setup .. --libdir=lib -Dsession-managers= -Dpipewire-v4l2=disabled -Dv4l2=disabled -Draop=disabled
# Also:
# Configure SDL with PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
# 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 B (60)
Codename MissedOne (20)
Super Hexagon "Neo" Part 1 (20)
Waiting Room
Codename Pepperoncini
- Paperwork...
Codename DanishBootleg
- Port is done, content is not
flibitEffect
- Waiting for the client to generate a header for me
Codename Devolution Assessment
- Waiting for a source drop
Proteus "Neo" Rewrite
- Not actually a thing, I just wish it was
- Pending some replies
Coding History
- On call throughout development
VVVVVV 2.4
- Giving the localization project as much time as it wants
SDL_ActionSet
- Needs a pretty big grant
ScoreRush PC
- Need AppAdmin for publish, crosshair for mouse
Anodyne 1
- Retirement project