Skip to content

SpecialK

Eamonn Rea edited this page Nov 18, 2023 · 40 revisions

(Project Website) (GitHub Repository) (PCGamingWiki Article)

Overview

Special K is an extensive game modifying framework allowing for various forms of in-depth tweaking of a game.

WARNING: Using SpecialK can lead to a ban, so make sure to check this Compatibility List before using!

SpecialK can be enabled on the Game Menu by checking the USESPECIALK checkbox (as well as explicitly setting USESPECIALK=1 directly in the Game Config). You can also add your game(s) to a SpecialK Steam Collection.

Features

When SpecialK is enabled for a game, SteamTinkerLaunch will perform the following:

  • Download and extract the corresponding Special K version (stored in SPEKVERS variable internally) if not downloaded before
    • NOTE: This requires a package that provides 7zip to be installed on your system
    • You can also download Special K from the SteamTinkerLaunch Command Line options)
    • SpecialK Nightly option will download directly from GitHub Actions and may have improvements over the stable channel releases.
  • Use custom SpecialK version which can pick up custom SpecialK32.dll and SpecialK64.dll files, or extract them from a given SpecialK installer executable, from the ~/.config/steamtinkerlaunch/downloads/specialk/custom folder (or Flatpak equivalent).
  • Checkbox option to automatically download and use the latest SpecialK
  • Determine the architecture of the game executable to know what SpecialK DLL to use
  • Download/update the SpecialK Compatibility List to know which rendering API to use
  • Copy the matching 32bit/64bit SpecialK DLL under the correct name into the same directory as the game executable (depending on the rendering API this could be dxgi.dll, d3d9.dll or opengl32.dll, similar to ReShade)
    • The fallback DLL name is d3d11.dll, if the game is not in the PCGamingWiki list
    • If the game is known but the rendering API is not, we will use dxgi.dll
  • Auto-enable the SpecialK UsingWINE configuration option, in case it is not picked up manually

DLL naming

As noted, by default the SpecialK DLL name is determined automatically by SteamTinkerLaunch. However, you can set a custom DLL name in case SteamTinkerLaunch gets this wrong, and this works very similarly to the custom ReShade DLL name except that you are limited to only one DLL name. You can choose from a dropdown of preset DLL names, or set your own custom DLL name -- Though you will probably need to specify a manual DLL override so the executable will load the DLL, unless you know the executable will look for and load this automatically. You can add your DLL name as a DLL override from the SteamTinkerLaunch Game Menu under Wine options.

If you encounter issues with SpecialK showing an invisible window when ReShade is enabled, or causing game crashes, or in general unexpected behaviour, one common workaround that I have found in testing is to rename the SpecialK DLL. For example, if it defaults to dxgi.dll, renaming to d3d11.dll ends to fix issues in games I tried (NieR:Automata, HoloCure). The vice-versa case may also work.

If you change the name of a DLL, the previous one will NOT automatically be removed from the game files! You will need to manually remove these files, or disable SpecialK, launch your game, then re-enable Special from the SteamTinkerLaunch Game Menu.

Tested Games

Below is a list of tested games, with the approximate date they were tested on

  • Witcher 3 (November 2021)
  • Alien: Isolation (November 2021)
  • Saints Row The Third Remastered (November 2021)
  • Bayonetta (November 2021)
  • Dishonored 2 (November 2021)
  • Fallout 4 (November 2021)
  • Thief (November 2021)
  • NieR:Automata (September 2023)
  • NieR:Replicant ver.1.22474487139... (September 2023)

However, there is no fundamental reason why a game from the Compatibility List should not work, as the install process is generic.

Versions

steamtinkerlaunch distinguishes between three different SpecialK versions (tracked in SPEKVERS):

  • stable - The default version available from the project page
  • nightly - The latest GitHub Actions build from the GitHub Actions Builds workflow
  • custom - A custom version can be placed in the ~/.config/steamtinkerlaunch/downloads/specialk/custom (or Flatpak equivalent path), either by placing BOTH the SpecialK32.dll and SpecialK64.dll files, or an executable that contains these files (such as a Discord Beta executable). You may have to create this folder if it doesn't exist.

(See also #894 and #897)

SteamTinkerLaunch v14.0.20230909-1 and above support using ReShade and SpecialK together. In testing, ReShade v5.4.2 was found to be the latest compatible release, newer versions seemed to not work with most games. There is a Global SpecialK ReShade version which will be used by default when SpecialK+ReShade are enabled together, right now this defaults to 5.4.2. You can change this value, or disable it entirely. When disabled, the ReShade version will fall back to the Global ReShade version, or the ReShade Override version if enabled and set on the Game Menu.

If you have already installed ReShade and want to update it, you can remove the existing ReShade DLLs from the game files, or change the version and enable the "ReShade Update" option on the Game Menu. Existing ReShade DLLs will NOT be updated by default.

For more information, see the SteamTinkerLaunch ReShade Wiki Page section on Using ReShade and SpecialK together for more information.

Caveats

Older SpecialK Releases

Older versions of SpecialK may require a Proton version which ships at least the api-ms-win-crt-string-l1-1-0.dll, which is typically older Proton 7.0 versions, or some games (i.e. XCOM 2) may ship this DLL in their game files. This used to be a requirement for using Special K on Linux but this has since changed.

Crashes with only GE-Proton/Valve Proton/etc

When installing SpecialK, SteamTinkerLaunch will copy over d3dcompiler_47.dll (32bit or 64bit depending on game architecture, or the alternative selected EXEs architecture), but only if this DLL is not already present in the game files. Some games (such as XCOM 2) already have this DLL present in the game files, so it will be skipped in cases like this. Otherwise we copy it over and write it out to our tracked DLL files list.

If a specific Proton version causes a crash, it could be related to d3dcompiler_47.dll. In my testing, I found that in the past, Valve Proton required this DLL and would crash without it, but GE-Proton did not require this DLL and would crash if it was present. As a result, there is a checkbox with the SpecialK options on the Game Menu to control whether this DLL should be used (defaults to ON).

If you are having issues, you can try disabling this checkbox (USESPEKD3D47 in per-game config file). When disabled, the DLL will be removed from the game files, and remove from the DLL tracking text file.

Otherwise, it may just be that SpecialK is not compatible with this game under Wine.

Clone this wiki locally