System Shock: Enhanced Edition

System Shock: Enhanced Edition

Not enough ratings
System Shock 1 Enhanced Edition Linux Fix (Steam Play / Proton)
By Abn0mad
Getting System Shock 1 Enhanced Edition to run on Linux with Steam Play / Proton
   
Award
Favorite
Favorited
Unfavorite
Introduction
Note: This guide is meant to get System Shock 1 Enhanced Edition to work on Linux, not the original System Shock 1 which works fine on Linux using Dosbox. Personally I strongly recommend playing the Enhanced Edition as it fixes many of the control issues and just makes for a more playable game.

---

Although ProtonDB claims that System Shock 1 Enhanced Edition should be working out-of-the-box, it certainly wasn't for me.

As I play games using Intel HD Graphics there was actually a fair bit of tweaking involved to get the whole thing to run properly - some or all of which may also apply to Nvidia or AMD owners - I haven't been able to check, so I don't know.

The following errors may show up in your attempt to play the game on Linux:

Error 1: Direct3D capabilities not detected properly


---

Error 2: Incorrect OpenGL version


---

Error 3: No music

---

Each of these errors will be dealt with in this guide and we'll have you playing this iconic piece of gaming history in a jiffy :)

---

Step 1: Enable Steam Play / Proton for all games in your library
The first step in making SS1EE work on your Linux machine is to enable Steam Play for all the games in your library.

This one is actually fairly easy; all we need to do is enable it in our Steam settings.

Click on Steam in the upper left corner of the Steam window, where it lists various menu options such as 'Steam, View, Friends, Games, Help'.

Then click on settings, and 'Steam Play' on the bottom of the list in the window that will appear; like so:


Click on OK, restart Steam and Steam Play / Proton will now be enabled for all the titles in your library that normally require Windows to be playable.

---

On to the next section.
Step 2: Fix error 1 (Force the game to use OpenGL)
The first error that many users get is a pop-up window with a long error message that ends with "dhicontextd3d11.cpp" Line 75.

After some digging I found that this is because the game was unable to check the Direct3D (Windows DirectX) capabilities of your graphics card and therefore didn't generate a configuration file.

Easy fix - we make one ourselves:

Open your favourite terminal and create the missing empty file like so:

touch ~/.steam/steam/steamapps/compatdata/410710/pfx/drive_c/users/steamuser/Application\ Data/Nightdive\ Studios/System\ Shock\ EE/kexengine.cfg

Or edit it directly like so:

vi ~/.steam/steam/steamapps/compatdata/410710/pfx/drive_c/users/steamuser/Application\ Data/Nightdive\ Studios/System\ Shock\ EE/kexengine.cfg

Note: I use Vim as my default editor, but any editor will be fine of course. Ubuntu users will probably be more familiar with 'nano'.

Then paste the following into the file and save:

bind backspace "clear_fullscreen" bind enter "fire" bind escape "toggle_options" bind space "jump" bind slash "keyhelp" bind 0 "side_icon 9" bind 1 "side_icon 0" bind 2 "side_icon 1" bind 3 "side_icon 2" bind 4 "side_icon 3" bind 5 "side_icon 4" bind 6 "side_icon 5" bind 7 "side_icon 6" bind 8 "side_icon 7" bind 9 "side_icon 8" bind a "slideleft" bind a "bankleft" bind c "leanright" bind c "rollright" bind d "slideright" bind d "bankright" bind e "toggle_freelook" bind f "crouch" bind p "pause" bind q "cycle_weapons 1" bind r "stand" bind s "back" bind s "thrust" bind v "prone" bind w "forward" bind w "climb" bind x "leanup" bind x "dive" bind z "leanleft" bind z "rollleft" bind caps_lock "toggle_speed" bind f1 "mfd_button 0" bind f2 "mfd_button 1" bind f3 "mfd_button 2" bind f4 "mfd_button 3" bind f5 "mfd_button 4" bind f6 "mfd_button 5" bind f7 "mfd_button 6" bind f8 "mfd_button 7" bind f9 "mfd_button 8" bind f10 "mfd_button 9" bind f11 "change_gamma -1" bind f12 "change_gamma 1" bind pageup "invent_page 0" bind pagedown "invent_page 1" bind kp_1 "keypad 1" bind kp_1 "diveleft" bind kp_2 "keypad 2" bind kp_3 "keypad 3" bind kp_3 "diveright" bind kp_4 "keypad 4" bind kp_5 "keypad 5" bind kp_6 "keypad 6" bind kp_7 "keypad 7" bind kp_7 "climbleft" bind kp_8 "keypad 8" bind kp_9 "keypad 9" bind kp_9 "climbright" bind kp_0 "keypad 0" bind lshift "speed" bind lalt "dclickmod" bind shift+q "cycle_weapons -1" bind ctrl+backspace "reload_weapon 1" bind ctrl+quote "select_grenade" bind ctrl+period "audiolog_cancel" bind ctrl+semicolon "select_drug" bind ctrl+a "map_view" bind ctrl+d "normal_view" bind ctrl+f "full_view" bind ctrl+h "toggle_olh" bind ctrl+l "load_game" bind ctrl+m "toggle_music" bind ctrl+s "save_game" bind alt+backspace "reload_weapon 0" bind alt+quote "arm_grenade" bind alt+4 "lantern_change_setting" bind alt+5 "shield_change_setting" bind alt+semicolon "use_drug" bind alt+left_brack "invent_page 0" bind alt+right_brack "invent_page 1" bind alt+h "hud_color" bind alt+o "showhelp" bind alt+v "toggle_view" bind alt+x "quit" bind mouse_left "click1" bind mouse_middle "+quickpickup" bind mouse_right "click2" bind mouse_wheel_up "cycle_weapons -1" bind mouse_wheel_down "cycle_weapons 1" seta developer "0" seta con_alwaysShowConsole "0" seta con_showfps "0" seta con_stickySpeed "500" seta cl_interpolation "1" seta cl_engineFPS "60" seta cl_engineHZ "60" seta cl_maxlatetics "16" seta sv_map "levels/mp/city-5.map" seta g_showintromovie "1" seta mission "archive" seta language "english" seta r_antialiasing "3" seta invert_freelook_y_axis "0" seta all_fire_frames "0" seta dos_shade_table "0" seta persistent_freelook "1" seta freelook_smoothing "0" seta freelook_sensitivity "26" seta sensitivity "50" seta r_filter "1" seta ui_motion_cursors "0" seta r_software "0" seta cutscene_type "2" seta ui_scale_cursor_pos "0" seta vmail_freeze "0" seta popup_cursors "1" seta double_click "500" seta music_vol "100" seta digi_vol "100" seta audiolog_vol "100" seta stereo_reverse "0" seta terseness "0" seta detail "3" seta gamma "37" seta audiolog_setting "2" seta online_help "0" seta g_width "640" seta g_height "480" seta r_view_radius_cyber "13" seta r_view_radius_real "18" seta r_gameThreadRenderCommands "0" seta r_brightness "0.000000" seta r_fov "80.000000" seta r_resolutionscale "1" seta r_resolutionscale_fixedscale "1.000000" seta r_resolutionscale_dynamicscale "0" seta r_resolutionscale_targetdrawtime "18" seta r_resolutionscale_gooddrawtime "10" seta r_resolutionscale_lowerspeed "0.150000" seta r_resolutionscale_increasespeed "0.200000" seta r_resolutionscale_numframesbeforeraising "30" seta r_d3d_compileShaders "0" seta r_gl_useUniformBuffers "1" seta r_gl_forcePipelineSync "0" seta r_maxocclusionunit "0.010000" seta r_rhimaxanisotropic "0" seta r_rhirenderfamily "opengl" seta g_dumpmapscripts "0" seta playername "" seta in_joystick_xaxis "2" seta in_joystick_xinvert "0" seta in_joystick_yaxis "1" seta in_joystick_yinvert "1" seta in_joystick_strafeaxis "0" seta in_joystick_strafeinvert "0" seta in_joystick_lookaxis "3" seta in_joystick_lookinvert "0" seta jobs_prioritize "1" seta jobs_concurrentThreads "3" seta in_nojoy "0" seta in_gamepad "XInput Controller" seta in_laxisdeadzone "0.250000" seta in_raxisdeadzone "0.250000" seta v_width "1024" seta v_height "768" seta v_windowed "0" seta v_borderless "1" seta v_refresh "60" seta v_vsync "0" seta v_depthsize "24" seta v_stencilsize "8" seta v_buffersize "32" seta v_displaymonitor "0"

After that the game may work for you - if Steam is enabled using OpenGL 3.1 or higher. On machines with Intel HD Graphics however it is not and starts in OpenGL 3.0 mode by default. Leading to yet another error. The error may also show up on machines with Nvidia or AMD graphics cards however (depending on driver version etc).

We'll deal with that in the next section :)

---
Step 3: Fix Error 2 (Incorrect OpenGL version)
On some machines - primarily the ones using open source graphics drivers - Steam may start up and report a much lower version of OpenGL enabled than is actually supported by your hardware.

We can check that by clicking on 'Help' on the top left corner of the window, followed by clicking on 'System Information'. Scroll down to the 'Video Card' section and you may see something like this (in my case Intel HD 615):

---
---

This means we will need to force Steam to use a higher version number of OpenGL - at the very least version 3.1 - preferably version 4.4 though, which should be supported by most Intel HD 4xx chips and up.

Note: this probably doesn't apply to older chipsets such as Intel Graphics 4000 etc. In which case I suggest you play it safe and force OpenGL 3.3 instead.

If you right-click on the Steam Icon on your desktop or the icon in your 'start menu' - it will likely display something like this:


---

Meaning Steam will try to auto-detect the appropriate OpenGL version.

We don't want that, so we change it to this instead:

OpenGL 3.3:

env MESA_GLSL_VERSION_OVERRIDE=330 env MESA_GL_VERSION_OVERRIDE=3.3 /usr/games/steam %U

or this for OpenGL 4.4:

env MESA_GLSL_VERSION_OVERRIDE=440 env MESA_GL_VERSION_OVERRIDE=4.4COMPAT /usr/games/steam %U

Like so:


---

Note: If your desktop environment allows you to edit menu entries directly then do so, if not then copy the link to your desktop, right click and select 'edit launcher' instead.

---

After that, we restart steam and click on 'Help' in the left corner of the window, followed by 'System Information'. After a bit of scrolling we should see:

---
---

This means our operation was a success - and the game should now be able to start. Yay! - wait... what? No Music? -- we'll fix that in the next section :)
Step 4: Enable Music
While the original release of System Shock is powered by Dosbox on Steam - which handles old-school MIDI music reasonably well by default (although not beautifully) - System Shock Enhanced Edition requires a bit of tinkering on our part as it is running in 'Windows' mode instead.

The problem is that modern on-board audio systems don't have hardware based MIDI components anymore, nor does Linux have a way to handle MIDI music by default. Why not? Well primarily because Linux is what we might call an "industrial" operating system, meaning it is used for all manner of things - from Super Computers, Mainframes and Servers to toasters, mobile phones and workstations, but until recently it hasn't been used as a Desktop and Gaming system by many people (except for devoted enthusiasts and professionals).

So whereas Windows carries the legacy of old DOS games with it (albeit exceptionally poorly and with little or no respect whatsoever to true backward compatibility) - and therefore has a fallback for old-school MIDI music, Linux does not - at least not by default.

Back in the day MIDI was the go to solution for music in games as well as being a tool for musicians and music studio professionals. In this day and age however MIDI is almost exclusively used by people in the music industry.

Why is this relevant? -- Well if there is anything being used by professionals - the GNU / Linux community will have made some attempt to address the problem :)

So the solution is: Timidity and the Fluid3 General Midi SoundFont. (quite a mouthful..)

---

Note: I'll be assuming the reader is using either Debian or a Debian derivative like Ubuntu - if not then do a Google search on how to install "timidity" and "fluid3 soundfont" on your Linux distribution.

On Debian, Ubuntu and derivatives its a simple matter of typing:

sudo apt update

sudo apt install timidity fluid-soundfont-gm

Then we stop Timidity from loading by default like so:

sudo systemctl disable timidity

And we stop it from running in the background in the current session like so:

sudo systemctl stop timidity

---

Finally we edit the timidity configuration file like so:

sudo vi /etc/timidity/timidity.cfg

and add the following line to the end:

soundfont /usr/share/sounds/sf2/FluidR3_GM.sf2

Followed by saving and exiting the editor.

---

Now we're almost there :))

In the terminal of your choice, paste the following and press enter / return:

sudo bash -c 'cat > /usr/bin/timidity_steam' << EOF #!/bin/bash F=\$(echo \${1} | sed 's/ /\\\ /g') timidity -iA & eval "\${F}" EOF

Followed by:

sudo chmod +x /usr/bin/timidity_steam

---

On to the final step:

Go to your game library and right click on System Shock 1 Enhanced Edition, followed by clicking on properties.

The following Window should appear:

---


---

(I have enabled "Force the use of a specific compatibility tool" for testing, but it shouldn't be necessary.)

Now click on launch options and paste the following:

/usr/bin/timidity_steam && %command% && killall timidity

Like so:

---
---

Click on OK on both screens - and now you should be ready to go :)

System Shock 1 Enhanced Edition on Linux - with music enabled :)

Hope it works for you and hope you can enjoy this great game and pillar of gaming history :)





6 Comments
taint 18 Dec, 2024 @ 8:57pm 
What does that %command% thing do?
General Furry 9 Aug, 2023 @ 6:35pm 
this is odd, I have a windows 10 and also have no music. It says just "invalid" in the audio device selection. How can I re-enable the default windows 10 midi, I dont wanna use that one coolsoft midi tools or any soundfont, I want the original soundfont in the original windows midi handler so it sounds pretty much like the classic version
Onyx Blackstone 1 Nov, 2021 @ 5:52am 
For anyone reading this years later - the DX / OpenGL errors are no longer a problem as far as I can see, music is and it does require tinkering, I used a different method but I'd assume this still works fine as well.

HOWEVER - don't use the latest Proton! At the time of writing Proton is at version 6.x but anything above and including 5.0 has mouse polling issues. Use Proton 4.2-9 to get mouse working properly and you should be golden! This might of course change in the future, but for now anything above this version causes issues.
Abn0mad  [author] 26 Aug, 2019 @ 2:18am 
@Vrána - You're very welcome, happy it worked for you - enjoy the game, it's a little dated but still awesome ^^
Vrána 25 Aug, 2019 @ 1:41pm 
Thank you very much. It works.
After ~25 years I will play this game :)
Evgueni [Linux user] 25 Feb, 2019 @ 7:20pm 
Link to guide is included in Games, Linux, Steam, reviews.