How to play System Shock using Shockolate on Linux

2020-02-23

(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_2.0.0.3.exe should be 16ba71c5f5211bbf8df95169c1b990e1

$ md5sum setup_system_shock_classic_2.0.0.3.exe

Install innoextract.

Extract the content.

$ innoextract -Lm setup_system_shock_classic_2.0.0.3.exe -d /path/to/Games/System\ Shock

Shockolate

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!

blogimg

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

$ ./systemshock

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!

$ ./systemshock

Happy gaming!