SpecialK Mod on Linux
Table of Contents
Introduction
I have tested SpecialK Mod on Linux for Bayonetta and successfully unlocked FPS of this game. In this pose, I'd like to share how I installed SpecialK Mod on steam on linux.
Links
- SpecialK Mod
- An Unofficial Guild to SpecialK (Steam Community)
Screenshot
Disclaimer
I have not yet tested stability and have tested only on Bayonetta. I'm not sure if this will work on other games but anyway share how to. If you try things written below, do it at YOUR OWN RIST.
My System
- OS: Arch Linux
- Kernel: Linux 5.7.6-12-tkg-pds (fsync enabled)
- CPU: Intel Core i7-8700
- RAM: 16GB
- GPU: NVIDIA GeForce GTX 1060 6GB
- Graphic Driver: NVIDIA 440.66.17 (proprietary/vulkan dev)
- DE: none
- WM: i3-wm
- Compositor: picom
Prerequisites
-
Install
protontricks
to system wide.- For Arch Linux, there is AUR Package.
-
Install tkg-version of proton into Steam.
-
I used default
proton-tkg.conf
andProton-tkg 5.11.r11.gb6c28187
. -
DXVK version was
v1.7
.
-
-
Set the game to use installed proton-tkg.
- I'm not sure if necessary, but I disabled steam overlay for the game.
-
Launch the game once with proton-tkg and check if it work property.
-
Check if the game is 32-bit or 64-bit.
-
Go to the game directory (
~/.local/share/Steam/steamapps/common/[gama-name]
by default) and runfile [game-name].exe
. -
Then you will see output like
Bayonetta.exe: PE32 executable (GUI) Intel 80386, for MS Windows
for 32-bit games orNieRAutomata.exe: PE32+ executable (GUI) x86-64, for MS Windows
for 64-bit games.
-
Optionally, you can use MangoHud to check FPS and frametime. I strongly recommend to use MangoHud or DXVK HUD (dxvk's builtin hud) to check game FPS and frametime.
Install SpecialK Mod for the Game
-
Check steam app-id for the game by
protontricks -s [game-name]
.- For example, in case of Bayonetta, run
protontricks -s Bayonetta
and get app-id as460790
.
- For example, in case of Bayonetta, run
-
Install
vcrun2017
andd3dcompiler_47
for the game prefix byprotontricks [app-id] vcrun2017 d3dcompiler_47
.d3dcompiler_47
may not need for SpecialK, but it would be necessary for the bundled ReShade.
-
Download SpecialK v0.8.66 (
SpecialK_0_8_66.7z
) from github repo.- NOTE: This is not the latest version. Latest version did not work on linux at least I have tested.
- NOTE: If you are using AMD GPU, v0.9 series may work.
-
Extract downloaded file and copy SpecialK64.dll and SpecialK64.pdb (for 64-bit game) or SpecialK32.dll and SpecialK32.pdb (for 32-bit game) into the game directory where
[game-name].exe
exists. The game directory is~/.local/share/Steam/steamapps/common/[game-name]
by default. -
Rename copied dll file to
d3d9.dll
ordxgi.dll
depending on API used by the game.- For example, Bayonetta is 32-bit and using DirectX9, so copy SpecialK32 files and rename
SpecialK32.dll
tod3d9.dll
.
- For example, Bayonetta is 32-bit and using DirectX9, so copy SpecialK32 files and rename
-
Launch the game once. It will crash soon but necessary to auto-generate
.ini
file to configure the mod. -
Edit
d3d9.ini
ordxgi.ini
file created in the game directory as below:-
Under
[NVIDIA.API]
section, setDisable=true
. -
Under
[Steam.Log]
section, setSilent=true
. -
To unlock FPS, set
RefreshRate=0
under[Render.FrameRate]
section.
-
-
Run the game with FPS/Frametime watcher.
-
If you use MangoHud, set steam launch option like
mangohud %command%
. -
If you use DXVK HUD, set steam launch option like
DXVK_HUD=full %command%
-
-
Then you'll see the game is running under the unlocked FPS.
-
If frametime is not stable, or shows periodic spikes (this is shown in Bayonetta), make dxvk config file to unlock vsync on DXVK as below:
-
For DirectX9 games:
d3d9.presentInterval = 0
. -
For DirectX11 games:
dxgi.syncInterval = 0
.- WARN: DirectX11 games are not tested by the author.
-
Below screenshot is MangoHud of Bayonetta's title scene, without any dxvk configuration. There are periodic spikes in the frametime graph:
-
- Set the steam launch option to load dxvk config file like
DXVK_CONFIG_FILE=/path/to/config/file.conf %command%
and then launch the game. Hopefully the frametime issue will disappear and the game will be smoothly rendered as below screenshot (compare the frametime graph with the previous screenshot):
-
(optional) If you'd like to use ReShade, copy
PlugIns
folder in the extracted SpecialK folder into~/.local/share/Steam/steamapps/compatdata/[app-id]/pfx/drive_c/users/steamuser/My Documents/My Mods/SpecialK/
and enable ReShade plugin from the in-game menu of SpecialK. Menu can be opened by pressingCtrl
+Shift
+Backspace
. Then check ReShade inPlug-Ins
->Unofficial
and restart the game. -
(optional) If you'd like to use newer ReShade or custom ReShade not bundled with SpecialK, replace
ReShade32.dll
orReShade64.dll
in thePlugIns/Unofficial/ReShade
directory by that version.
Issues
-
SpecialK OSD shows higher FPS than DXVK HUD/MangoHud by twice on Bayonetta (see left-side bottom of the first screenshot). Maybe correct FPS is shown by MangoHud's or DXVK HUD's one.
-
Not measured precisely, but I feel longer loading or stuttering on scene transition than plain version on Bayonetta.
Uninstall
Remove or rename d3d9.dll
or dxgi.dll
file in the game directory.