How to play System Shock using Shockolate on Linux
(last time edited: 2020-04-06)
tags: linux, games
Just like any other open source game engine out there, you need the original assets which can't be replicated because of copyright. Some enthusiast developers take the time to create custom assets (music, textures, etc) but that's exactly what we are not looking for. We are looking for a free, open and customizable way to play the game we like, instead of wasting time creating ugly assets that look and sound nothing to the original crafted game, with the plus of not relaying in a propietary shady engine.
The original System Shock source code engine was released on April 5th, 2018 by Nightdive Studios and Shockolate is an open source take on the released engine. For more open source engines like Shockolate you can read this amazing website, Open Source Game Clones. For other interesting info, kind of related, take a look at the latest dispute on Grand Theft Auto reverse-engineered engine to understand the incredible mess about the industry, rights and freedom of owning software, making changes to it, etc.
Download the original System Shock game
We need the original assets, so we need to buy or grab from the Internet a Windows DRM-Free GOG copy of System Shock: Enhanced Edition (this version comes bundled with the Classic Edition). Then download the System Shock: Classic Edition .exe and check its integrity.
The md5 hash for setup_system_shock_classic_184.108.40.206.exe should be 16ba71c5f5211bbf8df95169c1b990e1
$ md5sum setup_system_shock_classic_220.127.116.11.exe
Extract the content.
$ innoextract -Lm setup_system_shock_classic_18.104.22.168.exe -d /path/to/Games/System\ Shock
Shockolate is a cross platform source port of System Shock, using SDL2. This runs well on OSX, Linux, and Windows right now, with some missing features that need reviving due to not being included in the source code that was released. The end goal for this project is something like what Chocolate Doom is for Doom: an experience that closely mimics the original, but portable and with some quality of life improvements including an OpenGL renderer and mod support!
Download the latest Shockolate binary release from here. At the time of this guide I'm using version 0.8.2 released on Jan 18th, 2020.
Create a Games directory.
$ mkdir /path/to/Games
Extract the content.
$ tar -xf /path/to/Downloads/shockolate-linux-64bit.tgz -C /path/to/Games
If everything went correctly you should have a directory called shockolate inside Games dir
Now copy or move the game data and sound files from the original SS:CE to the res directory inside shockolate.
$ cp -r /path/to/Games/System\ Shock/app/sshock/data /path/to/Games/shockolate/res
$ cp -r /path/to/Games/System\ Shock/app/sshock/sound /path/to/Games/shockolate/res
Either run the game by executing the binary or optionally run the bash script that loads the libraries installed by install_sdl.sh (we skipped that because we are using our own system libraries. You are supposed to have SDL2 and SDL2_mixer already installed in your system. I also add the -nosplash argument to disable the intro screen.
$ cd /path/to/Games/shockolate
Play System Shock from compiled source code
Download the latest Shockolate source code release from here. At the time of this guide I'm using v0.8.2
Extract the content.
$ tar -xf /path/to/Downloads/systemshock-0.8.2.tar.gz -C /path/to/Games
If everything went correctly you should have a directory called systemshock-0.8.2 inside Games directory.
Now copy or move the game data and sound files from the original SS:CE to the res directory inside systemshock-0.8.2
$ cp -r /path/to/Games/System\ Shock/app/sshock/data /path/to/Games/systemshock-0.8.2/res
$ cp -r /path/to/Games/System\ Shock/app/sshock/data ~/Games/systemshock-0.8.2/res
First modify the build_deps.sh script, change the SDL version variable for a newer release.
$ sed -i 's/^SDL_version=.*/SDL_version=2.0.12/' /path/to/Games/systemshock-0.8.2/build_deps.sh
Go to the systemshock-0.8.2 directory.
$ cd /path/to/Games/systemshock-0.8.2
Run the build_deps.sh script in order to build dependencies.
$ bash build_deps.sh
Now compile shockolate.
$ cmake .
$ make systemshock
Play the game!