Cthulhu Saves the World for Linux/macOS
Zeboyd announced a sequel to CSTW! It's called Cthulhu Saves Christmas:
So in the spirit of the Christmas season that is right at this very moment, I have decided to release the Linux/macOS port that has yet to see the light of day.
Here are the archives:
So what do you do with these files? And how the hell am I distributing the game like this?
The trick is that the game isn't in these files. You have to provide that yourself. How you do that is up to you. It's available on Steam if you want it from there.
From there it's relatively straightforward:
- Extract the version for your OS
- Copy 'CSTW.exe', 'CSTW.pdb', and 'Content' from the Windows version to the executable directory. On Linux it's the 'CSTW/' folder, on macOS it's 'CSTW.app/Contents/MacOS/'.
- Get the
md5sum
of 'Content/Movies/CSTW_intro2.wmv'. On macOS, the terminal command ismd5
. - Extract CSTW_Xiph.zip, merging the Content folder with the one that already exists from copying the original game. The password is the md5sum from step 3!
- The game should now run! Run ./CSTW on Linux, open CSTW.app on macOS.
There was one caveat, mostly related to display settings. The Zeboyd XNA engine is very strange, unlike anything I've seen in other XNA games. Rather than prep the video settings and call ApplyChanges, the engine seems to use PreparingDeviceSettings exclusively, meaning settings are only loaded at program startup. There is a settings file, but it doesn't expose what you would expect. The display mode is stored as either 720p, 360p, or "9999x9999", which is the fullscreen setting. I can't exactly parse why things work the way they do, but for some odd reason fullscreen is dependent on the display settings, so I had to inject a quick block to force fullscreen when the display mode doesn't match the two hardcoded modes:
diff --git a/src/GraphicsDeviceManager.cs b/src/GraphicsDeviceManager.cs
index 34444c3..2bbc1b6 100644
--- a/src/GraphicsDeviceManager.cs
+++ b/src/GraphicsDeviceManager.cs
@@ -305,6 +305,15 @@ namespace Microsoft.Xna.Framework
new PreparingDeviceSettingsEventArgs(gdi)
);
+ bool modeOne = ( gdi.PresentationParameters.BackBufferWidth == 1280 &&
+ gdi.PresentationParameters.BackBufferHeight == 720 );
+ bool modeTwo = ( gdi.PresentationParameters.BackBufferWidth == 640 &&
+ gdi.PresentationParameters.BackBufferHeight == 360 );
+ if (!modeOne && !modeTwo)
+ {
+ gdi.PresentationParameters.IsFullScreen = true;
+ }
+
// Reset!
game.Window.BeginScreenDeviceChange(
gdi.PresentationParameters.IsFullScreen
In case you're wondering, yes, this is the exact same port for Breath of Death VII and Penny Arcade 3/4. So this is basically four ports in one; the only thing really stopping this from being a neatly packaged in an out-of-the-box experience is that I... uh, don't have AppAdmin access. :shrug:
This is entirely unsupported, but try to enjoy it anyway!
Want an official Linux game?
I'm now working my way back to just making native Linux games, slowly but surely. 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!
Love, flibit
flibitijibibo.com
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!
Bill's Hat TODO
- Automate all this crap
- Steam in-home streaming firewall settings?
Wait, a "plan"?
Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.
In Progress
Proton Performance Analysis Documentation
DK BONGO QUEST
- Reinvestigate multi-joystick device support
Waiting Room
Codename FullCircle
- Need some backend access first...
Codename Swine
- Waiting for content completion
Codename CityVessel
- Not even finished yet, whatever
SDL_GetAudioDeviceSpec
- Oh god I don't even know dude
ScoreRush PC
- Graphics, AppAdmin, strings for PC settings, blah blah blah
Zeboyd Catalog
- Possibly no source, really just need AppAdmin access tbh
Codename SpinnyTokelau
- Assessment coming up in September
Codename FlyingFinger
- A bunch of non-dev stuff happens first
64-bit Panic
- Checking on Waveform, They Bleed Pixels, Proteus, FP, Shogun
- Shogun Steam needs a recompile of Ludosity (seriously)
- Gotta rebuild all MojoSetup packages (F you Canonical)