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!
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!
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 BlackBook Blossom Tales 2 EOS Waiting Room (2022) Codename DanishBootleg - Port is done, content is not Super Hexagon Neo Part 2 - Merge happened, cleanup happening later Coding History - On call throughout development Waiting Room (2023) SDL_ActionSet - Building up sponsor time, part of 3.0 discussion flibitEffect - Licensing blockage, might get cancelled VVVVVV 2.4 - Giving the localization project as much time as it wants Waiting Room (Heat Death) ScoreRush PC - Need AppAdmin for publish, crosshair for mouse Proteus "Neo" Rewrite - Retirement project Anodyne 1 - Retirement project