Styx: Master of Shadows (2014)
— A Modding Guide for OLED

This comprehensive, standalone guide outlines how to take Styx: Master of Shadows (Steam Version) on Windows 11 and completely reconstruct its lighting system. By implementing these manual adjustments, you will eliminate washed-out lighting, bypass broken texture-streaming limits, and use advanced math to force true, pitch-black ink levels on an OLED monitor while keeping the environment bright and vibrant.

Phase 1: Sourcing Files & Bypassing System Filtering Layers

1. The Gameplay Enhancement Mods

Go to your web browser and assemble this text line to reach the files:

For the Agility Mod (Fixes mid-air jump physics & player movement speed):
https://www.nexusmods.com/styxmasterofshadows/mods/4 Click Here to Open the Agility Mod Page on Nexus
For the Amber Mod (Restores passive amber energy regeneration):
https://nexusmods.com/styxmasterofshadows/mods/5 Click Here to Open the Amber Mod Page on Nexus

2. Marty McFly's Standalone Shadow Scripts (qUINT MXAO)

Assemble these text strings in your browser address bar to access Marty's standalone shadow shaders:

Once on the page, make sure qUINT_mxao.fx is selected on the left column index, then go to the top right of the interface and hit the download button before the pencil icon ("Download raw file")

File A (The Core Shadow Shader File):
https://github.com/martymcmodding/qUINT/blob/master/Shaders/qUINT_mxao.fx Click Here to Download qUINT_mxao Shaders Mod on Github File B (The Background Code Library Dependency File):

Once on the page, make sure qUINT_common.fxh is selected on the left column index, then go to the top right of the interface and hit the download button before the pencil icon ("Download raw file")

https://github.com/martymcmodding/qUINT/blob/master/Shaders/qUINT_common.fxh Click Here to Download the background dependency for the MArty McFly Shaders Mod on Github

3. The ReShade Framework Homepage

Assemble this text line to reach the core engine site:

https://reshade.me Click Here to Download Reshade with Full Mod Support
⚠️ THE CRITICAL GITHUB DOWNLOAD PITFALL: When looking at the GitHub pages for File A and File B above, do NOT copy the text displayed on the screen.

Look closely at the layout bar sitting directly above the code window on the right-hand side. You will see a small button with a downward-pointing arrow icon (when you hover over it, it says "Download raw file").

Phase 2: The ReShade-to-ZIP Manual Conversion

Because we are combining Special K and ReShade together as a team (so that we can run a borderless fullscreen mode, and to benefit from Special K's kernel level frame timing) - running the default ReShade installation setup wizard will fail. The installer will see Special K in the folder, panic, flash a giant "X" graphic on your screen, and block you from finishing the download. We must extract the file engine manually.

  1. Go to the main address reshade.me and download the standard launcher application (e.g., ReShade_Setup_6.8.0.exe).
  2. Click Here to Download Reshade with Full Mod Support
  3. Go to your Downloads folder. Right-click the ReShade_Setup_6.8.0.exe file and select Rename.
  4. Completely delete the .exe file extension from the very end of the name, and replace it with .zip (so the file name reads exactly: ReShade_Setup_6.8.0.zip). Click Yes when Windows asks if you are sure.
  5. Right-click that newly renamed zip folder and select Extract All.... Open up the newly unzipped folder.
  6. Look inside and look for the specific binary file named ReShade32.dll. Copy this single file and paste it safely onto your Desktop. (We specifically isolate the 32-bit version because our gameplay mods force the game to run inside a 32-bit engine container).

Phase 3: Navigating the Left-Column "Win32 Folder Index" Split

When you open your local game directory, you will find that the developers compiled two entirely separate execution loops for the game: a Win32 folder and a Win64 folder. Because Windows 11 is a 64-bit operating system, Steam automatically defaults to launching the un-modded Win64 executable. This means if you leave the folders alone, Steam will completely ignore your 32-bit gameplay mods, and your Special K engine banner will never pop up.

We solve this permanently by pulling off a manual directory folder swap trick:

  1. Open your Windows File Explorer and head straight to your local Steam installation layout path:
    C:\Program Files (x86)\Steam\steamapps\common\Styx\Binaries\
    (Note: If you tell Steam to store your games on a second hard drive like a D: or E: drive, start with that letter instead).
  2. Inside this Binaries folder, you will see your two target directories: Win32 and Win64.
  3. Right-click the original Win64 folder, select rename, and change it exactly to: Win64_Backup
  4. Right-click the Win32 folder (which contains our target StyxGame.exe game core) and rename it exactly to: Win64

You have now successfully tricked Steam. When you hit "Play" in your Steam client, it will enter the folder named Win64 like it always does, but it will actually run our modded 32-bit folder layout

Phase 4: Setting Up the Chain-Loading Engine Pipeline

Open up your newly renamed Win64 folder (the one containing your true 32-bit StyxGame.exe). Drop your extracted mod core binaries into this directory following these exact tracking steps:

1. Take your downloaded 32-bit Special K library file (from your Special K raw download asset zip) and drop it into this folder. Rename it exactly to: d3d9.dll

2. Take the ReShade32.dll file sitting on your desktop and paste it right next to it. Leave its name exactly as ReShade32.dll.

3. Run your TFC Mod Installer application for the Agility and Amber mods. When the tool asks you to locate the "Mod Folder," click browse and point it to the unzipped download package folder (e.g., Downloads\Agile_Styx_Mod).

⚠️ THE TFC MOD INTERPOLATION PITFALL: The mod folder you highlight must contain a folder named Game inside it, but do NOT click on or go inside that Game folder itself. Highlight the parent folder right above it, or the tool will map the configuration file paths wrong and fail to update your files.

4. Launch the game through Steam once to let Special K initialize, then close it out.

5. Look inside your game folder. Special K has generated a text file named d3d9.ini. Open it with Notepad, scroll down to the absolute bottom line, create a fresh blank line, and paste this exact instructions script to bridge the two programs without crashing:

[Import.ReShade32]
Architecture=Win32
Filename=ReShade32.dll
Role=ThirdParty
When=Lazy


Phase 5: Building Custom Self-Contained Shaders in Notepad

You will build your lighting tools yourself using your Windows Notepad app.

First, right-click inside your game directory and create a new folder named reshade. Open it, and create two subfolders inside it named Shaders and Textures. Your path structure must look like this:
...\Styx\Binaries\Win64\reshade\Shaders<;/p>

File 1: AmbientLight.fx (The Color-Bounce Engine)

1. Open your Windows Start Menu, type Notepad, and open the application.

2. Copy and paste this exact self-contained code block into the blank text window:

texture2D ReShade_BackBufferTex : COLOR;
sampler2D sBackBuffer { Texture = ReShade_BackBufferTex; };

uniform float Intensity <;     ui_type = "slider";     ui_min = 0.0; ui_max = 10.0;     ui_label = "Ambient Light Intensity"; >; = 3.0;

void FullscreenVS(in uint id : SV_VertexID, out float4 position : SV_Position, out float2 texcoord : TEXCOORD)
{
    texcoord.x = (id == 2) ? 2.0 : 0.0;
    texcoord.y = (id == 1) ? 2.0 : 0.0;
    position = float4(texcoord * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0, 1.0);
}

float4 PS_Ambient(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
{
    float4 color = tex2D(sBackBuffer, texcoord);
    return color * (1.0 + Intensity * 0.1);
}

technique AmbientLight
{
    pass { VertexShader = FullscreenVS; PixelShader = PS_Ambient; }
}

⚠️ THE NOTEPAD EXTENSION TRAP: Click File >; Save As.... Look at the box named "Save as type". It defaults to Text Documents (.txt). You MUST click that dropdown and change it to "All Files (.*)". If you don't, Windows will secretly name the file AmbientLight.fx.txt, and ReShade will never see it.

3. Name the file exactly AmbientLight.fx and save it inside your new reshade\Shaders\ folder.

File 2: OLED_Fix.fx (The Lift-Gamma-Gain Pivot Tone Mapper)

1. Open a brand-new blank Notepad file.

2. Copy and paste this exact mathematical color-reconstruction script:

texture2D ReShade_BackBufferTex : COLOR;
sampler2D sBackBuffer { Texture = ReShade_BackBufferTex; };

uniform float BlackClip <;     ui_type = "slider";     ui_min = 0.0; ui_max = 0.1;     ui_label = "1. OLED Pure Black Floor Lock"; >; = 0.02;

uniform float MidtoneLift <;     ui_type = "slider";     ui_min = 1.0; ui_max = 2.0;     ui_label = "2. Midtone Brightness (Gamma Lift)"; >; = 1.35;

uniform float HighlightGain <;     ui_type = "slider";     ui_min = 1.0; ui_max = 1.5;     ui_label = "3. Highlight Peak White (HDR Pop)"; >; = 1.15;

uniform float SaturationRecovery <;     ui_type = "slider";     ui_min = 1.0; ui_max = 2.0;     ui_label = "4. OLED Saturation Balance"; >; = 1.45;

void FullscreenVS(in uint id : SV_VertexID, out float4 position : SV_Position, out float2 texcoord : TEXCOORD)
{
    texcoord.x = (id == 2) ? 2.0 : 0.0;
    texcoord.y = (id == 1) ? 2.0 : 0.0;
    position = float4(texcoord * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0, 1.0);
}

float4 PS_AdvancedOLED(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
{
    float4 color = tex2D(sBackBuffer, texcoord);
    color.rgb = max(0.0, color.rgb - BlackClip) / (1.0 - BlackClip);
    float luma = dot(color.rgb, float3(0.2126, 0.7152, 0.0722));
    color.rgb = pow(abs(color.rgb), 1.0 / MidtoneLift);
    color.rgb *= HighlightGain;
    float newLuma = dot(color.rgb, float3(0.2126, 0.7152, 0.0722));
    color.rgb = lerp(newLuma, color.rgb, SaturationRecovery);
    return saturate(color);
}

technique OLED_Blacks_Fix
{
    pass { VertexShader = FullscreenVS; PixelShader = PS_AdvancedOLED; }
}


Phase 6: Editing Hidden Unreal Engine 3 Core Configurations

To stop the game engine from throwing an ugly pale gray film of screen-fog over your maps, and to open up the VRAM data streaming paths so textures stop downscaling into blurry "watercolor painting" blobs, we must edit the configuration profile documents.

1. Open your Windows File Explorer and go to your hidden profile folder path:
C:\Users&;lt;YourUsername>;\Documents\My Games\Styx\StyxGame\Config<;/p>

2. Dismantle the Fog Layer: Open the file named StyxSystemSettings.ini with Notepad. Scroll down to the absolute bottom of the document text, create a blank line, paste these two lines, and click save:

bAllowFog=False
r.Fog=0

3. Uncap the Texture Memory Pool: Open the file named StyxEngine.ini with Notepad. Press Ctrl + F, search for the word PoolSize, and look inside the [TextureStreaming] category block. Change the allocation limits to match this exact matrix to allocate 4GB of your card's VRAM budget:

[TextureStreaming]
PoolSize=4095
MemoryMargin=512
HysteresisLimit=30
bAllowSwitchingStreamingSystem=False
UseDynamicStreaming=False

4. Scroll further down inside StyxEngine.ini, locate the [SystemSettings] category header, and paste these fade-speed regulators right below it to force native resolution maps to load instantly:

MipFadeInSpeed0=0
MipFadeOutSpeed0=0
MipFadeInSpeed1=0
MipFadeOutSpeed1=0
OnlyStreamInTextures=True

5. Save the file and close Notepad.


Phase 7: Final In-Game Synchronization & Tuning

1. Launch the game. Go into the main Styx video options menu and reset your Game Brightness slider back to 50% (Default). If it is kept lowered to 1/3, the game engine will compress the midtones before our code can run, leaving the game looking dim and washed out.

2. Open your ReShade menu interface overlay by pressing the Home key.

3. Go into the Settings tab at the very top. Click the + icons to manually assign your folder pathways: link Effect Search Paths to your handmade reshade\Shaders folder, and link Texture Search Paths to your reshade\Textures folder.

4. Wipe Corrupted Cache Lines: Head back to the main Home tab. Hold down the Ctrl key on your keyboard and click the "Reload" button at the very bottom of the overlay interface. This clears any broken cache memory blocks and forces the 6.8.0 engine to compile your scripts perfectly.

5. Your shaders will pop up in clean white text! Click the checkboxes and drag their lines into this precise top-to-bottom execution order:

6. Select OLED_Blacks_Fix to reveal its configuration sliders in the bottom panel. Set your Pure Black Floor Lock between 0.02 and 0.04 to make dark corners turn off your OLED display's pixels entirely, and lift your Midtone Brightness up to around 1.40 to make the room textures look bright, sharp, and highly saturated!



Phase 8: Final File Location Verification Checklist

Before completing your final launch, walk through this structural checklist to ensure that every manual script, mod file, and configuration document is placed inside its exact required subfolder location. Missing or misaligned assets will break the loading chain and cause compilation errors.

1. Target Game Binaries Directory

Navigate to your local Steam game installation directory path:
C:\Steam\steamapps\common\Styx\Binaries\Win64<;br> (Note: This is the true 32-bit folder that was manually swapped and renamed to Win64).

Verify that ONLY these exact four core engine assets are sitting directly in this folder root:

2. Handmade Shaders Subfolder

Navigate deep inside your handmade custom shaders directory path:
...\Styx\Binaries\Win64\reshade\Shaders

Verify that exactly these five structural script files live together inside this folder root:

3. Handmade Textures Subfolder

Navigate inside your handmade image directory path:
...\Styx\Binaries\Win64\reshade\Textures

Verify that all your visual mod image assets conform to this strict structural rule:

4. Unreal Engine 3 Windows Profile Configurations

Navigate out of your Steam folders and head to your local user documents environment path:
C:\User\~YourUsername~\Documents\My Games\Styx\StyxGame\Config

Verify that your custom engine modifications are locked cleanly into these two configuration files:



Fixing Blurry Texture Pop-In (Texture Streaming Fix)

Why this edit is required: Legacy 32-bit Unreal Engine 3 titles utilize an aggressive "Texture Streaming" optimization pass designed for systems with very low video memory. When run on ultra-modern high-VRAM graphics cards, the engine's memory allocator gets confused by the massive available pool and incorrectly downscales your textures into a low-resolution "watercolor" blur.

By adjusting the [TextureStreaming] variables inside your StyxEngine.ini file, you can explicitly force the engine to recognize your GPU's overhead capacity, completely eliminating the blurry asset pop-in.

Option A: RTX 5090 Configuration Profile

Use this profile if you have 24GB+ VRAM. This completely deactivates the streaming pipeline, caching all 4K upscaled textures directly into your memory pool during loading screens.

[TextureStreaming]
bUseTextureStreaming=False
LowPicMip=0
HighPicMip=0
MinTextureResidentMipCount=7
PoolSize=4096
MemoryMargin=20
MemoryLoss=0
HysteresisLimit=20
DropMipLevelsLimit=16
StopIncreasingLimit=12
StopStreamingLimit=8
MinEvictSize=10
MinFudgeFactor=1
FudgeFactorIncreaseRateOfChange=0.5
FudgeFactorDecreaseRateOfChange=-0.4
MinRequestedMipsToConsider=11
MinTimeToGuaranteeMinMipCount=2
MaxTimeToGuaranteeMinMipCount=12
UseTextureFileCache=TRUE
LoadMapTimeLimit=5.0
LightmapStreamingFactor=0.04
ShadowmapStreamingFactor=0.04
MaxLightmapRadius=2000.0
AllowStreamingLightmaps=True
TextureFileCacheBulkDataAlignment=1
UsePriorityStreaming=True
bAllowSwitchingStreamingSystem=False
UseDynamicStreaming=True
bEnableAsyncDefrag=False
bEnableAsyncReallocation=False
MaxDefragRelocations=256
MaxDefragDownShift=128
BoostPlayerTextures=3.0
TemporalAAMemoryReserve=4.0

Option B: RTX 4080 Configuration Profile

Use this profile if you have 16GB VRAM. This keeps the streaming mechanism active to protect system stability while expanding the target memory pool to ensure full-resolution 4K textures load instantly.

[TextureStreaming]
bUseTextureStreaming=True
LowPicMip=0
HighPicMip=0
MinTextureResidentMipCount=7
PoolSize=3072
MemoryMargin=20
MemoryLoss=0
HysteresisLimit=20
DropMipLevelsLimit=16
StopIncreasingLimit=12
StopStreamingLimit=8
MinEvictSize=10
MinFudgeFactor=1
FudgeFactorIncreaseRateOfChange=0.5
FudgeFactorDecreaseRateOfChange=-0.4
MinRequestedMipsToConsider=11
MinTimeToGuaranteeMinMipCount=2
MaxTimeToGuaranteeMinMipCount=12
UseTextureFileCache=TRUE
LoadMapTimeLimit=5.0
LightmapStreamingFactor=0.04
ShadowmapStreamingFactor=0.04
MaxLightmapRadius=2000.0
AllowStreamingLightmaps=True
TextureFileCacheBulkDataAlignment=1
UsePriorityStreaming=True
bAllowSwitchingStreamingSystem=False
UseDynamicStreaming=True
bEnableAsyncDefrag=True
bEnableAsyncReallocation=True
MaxDefragRelocations=256
MaxDefragDownShift=128
BoostPlayerTextures=3.0
TemporalAAMemoryReserve=4.0


NVIDIA REFLEX low latency
+
SpecialK kernel level Frame Delivery Times


1. The NVIDIA Control Panel Setup

Open your Nvidia Control Panel, navigate to Styx: Master of Shadows , and assign these exact parameters:

• Low Latency Mode: Set to ON (Do not use Ultra). Setting it to On restricts the GPU render queue to exactly 1 frame, which stops the CPU from building input lag without applying an aggressive driver frame cap that fights your other tools.
• Vertical Sync: Set to ON.
• Monitor Technology: Set to G-SYNC / G-SYNC Compatible.


2. The Special K Advanced Injection Setup

Because Styx doesn't natively support modern Nvidia Reflex, Special K has a hidden feature that allows it to inject true driver-level Nvidia Reflex directly into older games. This completely replaces the need for old "Ultra" toggles.

  1. Launch Styx and open the Special K overlay panel (Ctrl + Shift + Backspace).
  2. Find the Framerate Limiter box on the dashboard and toggle it ON, typing your target 117 directly into the box.
  3. Look right below the frame pacing graph inside that section and click the small ▶ Advanced text line.
  4. Look down into the NVIDIA Driver Black Magic section that pops up.
  5. Find NVIDIA Reflex Mode and click the dropdown to change it from Off to Low Latency (or Low Latency + Boost).

Why This Combination Is Great for Your Setup

By turning Low Latency Mode to On in your Nvidia panel and letting Special K handle both the 117 FPS frame cap and the Reflex driver hook, you create a perfect loop.

Special K will hold your frame-delivery times to an absolute dead-flat 8.54 milliseconds, keeping your G-Sync module perfectly synchronized. At the exact same microsecond, Special K's Reflex injection tells your RTX series GPU to sample your mouse movements at the absolute latest possible moment before drawing the frame.

This completely bypasses the Windows desktop composition lag, giving you the immediate, raw response feel of Exclusive Fullscreen with the seamless Alt-Tabbing convenience of Windowed mode