Celeste for Google Stadia
Celeste is now available for Google Stadia! If you have a Stadia account you should now be able to purchase the game on their storefront.
This is the debut title for FNA Stadia, FNA3D (unless you count the Solaroids Xbox demo!), and ANGLE for Stadia, a project I've been quietly hacking on for quite some time. It is not, however, the debut for SDL! Ryan managed to beat me to my own port by releasing DOOM 64 for Stadia a few months ago. Fitting, considering I managed to release a Switch game using his SDL-switch project before he could release his own game... we joke about PS4/PS5 support, but unlike Switch/Stadia that's actually, definitely a joke this time, because... well, that's just how it is for FOSS development on consoles.
Much like Switch, Stadia is really nice in that pretty much all the juicy stuff uses a standard like OpenGL/Vulkan (I did sorta have to bring my own OpenGL, but you get the idea), however Stadia is truly remarkable in that it is literally just a Linux system without a desktop or display server; if you have Linux binaries that don't link to libstdc++ (i.e. use Clang and libc++ instead) and don't use X11/Wayland there is a 99.99% chance that your existing binaries (yes, not just the code, the binaries) will work just fine on Stadia. For Celeste I swapped out the SDL and FMOD binaries, and that was the system port done. Seriously. Celeste.exe got some add-ons for networking features and a couple menu options def'd out, but the port really was centered around SDL and ANGLE, for the most part.
ANGLE was mostly covered by the existing Vulkan work, with the remaining work being support for the GGP extensions (including creating two new EGL extensions) and compliance with AMDVLK, which turns out to be a really good driver to target when you want an added layer of correctness testing on top of the Vulkan validation layers. That was largely done by Jamie Madill and Shahbaz Youssefi, who were extremely helpful in getting ANGLE Vulkan and ANGLE Stadia working. They played a significant role in the port's development, so shoutout to them for all the hard work!
SDL-stadia was where most of my time was spent. Because there's a whole new video and event system (remember, no X11 or Wayland), I had to write new implementations in... and, uh, can all console APIs be like Stadia's? Obviously I can't share any of its contents, but between the API itself and the dev environment it actually makes me really sad that Stadia is a streaming platform and not a local hardware platform, as I would much rather develop for Stadia than any console... it's a real shame that it's cloud-based, because it really is a technological feat in pretty much every other regard. I just really like having my hardware and software run locally a wee bit too much compared to the average person.
In addition to being really good on its own merits, it also shines a very bright light on how close Stadia is to desktop Linux, and how disappointing it will be to see all that good work on AAA games get vaporized and never see the light of day in a desktop Linux release (or even a Windows release, for that matter). I'll put it plainly: There is no technological reason that a Stadia game could not also be on Linux PCs, even factoring in the work to port direct Stadia video/event code to SDL (which is a tiny amount of work, by the way). Virtually every other aspect of developing a Stadia game translates directly to Linux PC game development. Seeing all that reusable work get torched is going to suck really hard.
On the bright side, those of us who do care can happily treat Stadia as a Linux system with the SDL lib swapped. It was pretty refreshing to have the majority of a console port's development be almost 100% in plain sight, and not have a bunch of internal code that will vanish when the generation is over. I'll probably look back at Stadia development fondly whenever I work on the next new proprietary console.
This post has been archived.
I'm happy to announce that I am now in the GitHub Sponsors program! This means that anyone with a GitHub account can now subscribe to a monthly payment system that will allow me to continue my work maintaining the numerous FOSS game development projects that I maintain, including FNA and FAudio.
You can find my sponsorship profile here.
If you're on the fence about this, I'll give you quite the incentive: Microsoft is skipping all payment processing fees, so in addition to taking extra money out of Microsoft's pocket (which I think my audience will take some joy in...), everything you pledge will go directly to me. A slight change of pace from Patreon's usual scams, hm?
I've been very vocal about the poor state of the crowdfunding ecosystem, and I think the GitHub Sponsors program is very much what we've all been looking for. I think you'll agree, and I hope you'll pledge what you can!
Want a Linux game?
I'm now officially back to working on Linux games full-time! I have my own hit list as always, but I'm always looking for more projects! Now's a really good time to hit me up while it's on my mind. Don't forget, whether you're an indie developer or an independent developer, there's a good chance I can accommodate your needs!
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!
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 clang cmake cmake3 gcc-c++ git hg \ libcxx-devel libstdc++-static libuuid-devel libxml2-devel llvm-devel \ lzma-sdk-devel openssl-devel patch svn yum-utils yum-plugin-copr # SDL2 dependencies yum-builddep SDL2 # Coprs for MinGW as well as LLVM 8, needed to build osxcross yum copr enable mlampe/devtoolset-8 yum copr enable mlampe/llvm-toolset-8.0 yum copr enable alonid/mingw-epel7 yum install devtoolset-8 llvm-toolset-8.0 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 # 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 llvm-toolset-8.0 bash
Wait, a "plan"?
Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.
In Progress FNA3D Vulkan Star-Twine 5D Assessment Codename ThinkingWithShaders Codename MishyMashyPlatformSmashy Waiting Room Streets of Rage 4 - Port's been done for a while, QA isn't ready yet They Bleed Pixels Switch - Passed cert, just waiting for the big day Panzer Paladin - Waiting on an external thing Anodyne 1, TFoL, VVVVVV 2.3 - Look at these after FNA3D's out Rhys - Someone has to remove the XNA relinker FNA Tutorial - Leaving this alone for a bit SDL_GetAudioDeviceSpec - Oh god I don't even know dude Codename FullCircle - Need some backend access first... Codename CityVessel - Not even finished yet, whatever Codename SpinnyTokelau - Assessment coming up in... uhh... ScoreRush PC - Graphics, AppAdmin, strings for PC settings, blah blah blah 64-bit Panic - Waveform repo :/ - Gotta rebuild all MojoSetup packages (F you Canonical)