Dark Souls Mouse Fix – Update to Beta 1.3 – Preliminary Modifiers, Experimental Steam Controller Support

Although I really should do other things right now, I invested some more time into the mouse fix to add some often requested features and fix some annoying bugs.

Beta 1.3 change log:

  • Added preliminary modifier bindings that turn left and right attacks into heavy attacks (see Configuration for details)
  • Made all modifier bindings non-blocking so they can also be used as a modifier in the ingame settings where applicable (see Configuration for details)
  • Added proper Input Mode setting to the config that allows easy switching between mouse and controller input (see Configuration for details)
  • Added experimental Steam Controller support (see Configuration for details)
  • Replaced Toggle Mouse Fix binding with Toggle Input Mode
  • Fixed bug that prevented the number keys from getting bound correctly
  • Fixed bug in the GUI that prevented an action from getting unbound correctly when there was a default binding for it

From the documentation:

Modifier Bindings

Modifiers change the behavior of a binding when they are down. The current implementation is preliminary and has some shortcomings:

  • Modifiers are currently only available for movement as well as left and right attack. The implementation will be overhauled in the future to allow all actions to be bound with a modifier
  • Any key or mouse button can be set as a modifier
  • While a mouse wheel direction can be set as a modifier, it will not work properly, because rolling the mouse wheel cannot be hold down
  • A key or button used as a modifier will not be blocked in the game to make it also usable as a modifier with the ingame keybindings. This also means that it may be necessary to unbind some ingame keybindings to make everything work properly

As you can see there are some drawbacks to the modifiers. Although I am really not happy with the way the modifier keys are implemented right now, I figured it would be better to have them for at least those bindings which seem to be most important to people, rather than not having them at all. But to be honest, I cannot wait to have some free time again to do modifiers and bindings in general properly.

Again from the documentation:

Input Mode:

The input mode specifies the behavior of the fix:

  • Mouse: Enables raw mouse camera and keyboard standard action bindings, deactivates controller input and vibrations
  • Gamepad: Standard controller behavior, disables raw mouse camera and keyboard standard action bindings
  • Steam Controller (experimental): Standard controller behavior with the exception that the raw mouse camera is enabled and the right analog stick is disabled

This point might be surprising to some people, but I had an unanticipated amount of requests to make the fix usable with the Steam Controller. Apparently the new mouse movement is a big improvement to the usual analog controls of the gamepad. I had actually posted an experimental version a few days back in the Steam Controller reddit, which now got fully incorporated into the fix alongside a few bugfixes.

I also took the opportunity to implement a proper input mode, because there previously was no clear divide in the code that specified when which components of the fix should be active or not. As you can see, it is now properly supported to have the fix installed alongside a controller and to switch between the input modes, even on-the-fly, without having to fiddle around with the setup.

This is all I can do for the moment. Although there are still things left to do and also a lot of room for improvements in other areas, most of those things either require a considerable update of the software or another deep look into the engine of the game, both of which I unfortunately currently do not have time for.

As always, let me know if you encounter any problems.

Advertisements

Dark Souls Mouse Fix – Update to Beta 1.2

I just updated the fix to a new version:

Beta 1.2 change log:

  • Added option to bind movement to the config. These differ on a technical level from those in the ingame settings (see Configuration for details)
  • Disabled hardware acceleration for the GUI to avoid conflicts with post-processing injectors such as ReShade or SweetFX
  • It is now possible to resize the GUI in vertical direction to use it with low-resolution displays
  • The GUI now groups options by category

Although I’m sure some people were hoping for something more impressive, the GUI changes were necessary to help people who previously could not really use the fix at all in the intended way.

However, the first point might be more interesting than it seems. There is an issue with the keyboard controls that has been in the game since launch. If the player runs diagonally and does not move the camera at the same time, the character might sometimes not roll in that direction, although the input is correctly performed. Although this problem can be mitigated by moving the camera, it can sometimes happen by accident, when you are not thinking about it. Now, the new keybindings to move the character differ on a technical level from those you can bind ingame and I could not reproduce the rolling problem with them, which was reliably possible with the standard controls. Some people also reported that the new bindings fix the problem of sometimes moving without input after exiting lock-on mode. They might also improve other things regarding the input.

However, further testing is needed before I can say that those problems are indeed gone and that there are no unwanted side-effects. If you try them out I would appreciate the feedback.

Dark Souls Mouse Fix – Initial Reception and Update To Beta 1.1.2

The first release of version Beta 1.0 of the Dark Souls Mouse Fix had kind of a slow start on /r/pcgaming, and at first I was a little bit worried that it might get lost in the stream of news about Ryzen, GDC and Mass Effect: Andromeda. But after a few hours it really gained some traction, also thanks to some additional help from other people who spread the news around. Aside from the expected few people who expressed their disdain to even think about playing the Souls games with mouse and keyboard, the initial reaction was quite positive and it is always nice to see that you’ve helped people to enjoy a game more.

There also was valuable feedback for some problems that were not discovered during alpha testing. I did my best over the course the day to fix the ones that were most severe and updated the fix several times accordingly.

Updates:

Beta 1.0

  • Initial public release

Beta 1.1

  • It is no longer possible to accidentally flip the camera and invert the input by looking too far up or too far down
  • The camera no longer suddenly jumps when exiting lock-on/focus mode
  • The mouse wheel can now correctly be bound to any standard action

Beta 1.1.1 – Hotfix

  • Reverts changes regarding the mouse wheel in the previous update, which introduced a bug that caused buttons and keys to not be usable as a hold

Beta 1.1.2 – Hotfix

  • The mouse wheel can now correctly be bound again to any standard action

This should bring the fix to a level on which it should be comfortable to play for most people.

I’ll definitively continue to work on it, as there are a ton of things that can be improved upon, especially regarding the GUI and implementing additional features, such as truly customizable keybindings, including modifier keys. I was also surprised to see people asking for Steam Controller support, because apparently the mouse fix improves the camera movement with it.

However, I cannot say how much time I can put into it in the next few weeks, because I have to take care of a few other pressing things first.

I’ll maybe write another update on unresolved issues and upcoming features, if people are interested.

Dark Souls Mouse Fix

What is this?

This fix makes Dark Souls use raw mouse input without any additional smoothing or acceleration. It offers a flexible binding system, automatic cursor support for the UI, improved targeting and an easy configuration using a GUI.

Overview

Description

Important: This is a beta version. Although it underwent some thorough testing before the first public release, there might still be some issues that need to be addressed. If you encounter any problems see the Contact And Support section on how to get in touch with me

Although there already is a mouse fix for Dark Souls, which did a great job in helping many people (including me) to play the game with mouse and keyboard over the years, it is not an optimal solution. Because it emulates a controller, there are still some issues with sensitivity, apparent negative acceleration and overall sluggish movement. Using the cursor in the UI is also a hassle, because it has to be manually enabled and disabled via keybindings.

Instead of emulating a controller, this fix injects raw mouse input directly into the game’s camera functions, thereby avoiding any additional transformations. It also provides an auto cursor feature which automatically manages the visibility and capture settings of the cursor depending on the current situation.

Features

  • True raw mouse input without controller emulation
  • No additional smoothing or acceleration
  • Flexible options such as individual horizontal and vertical sensitivities for camera movement and bow aiming
  • Allows any action to be bound to any combination of mouse buttons, the mouse wheel or keyboard keys
  • UI Auto Cursor mode that enables and disables the cursor when in a menu or when switching out of the game
  • Improved target switching
  • Includes a GUI for easy configuration
  • Steam Controller support
  • Compatible with DSFix

Instructions

Supported Versions

This fix only works with the latest, fully patched Steam version.

Important: The fix relies on the layout of the executable. Older versions or ones that otherwise have been tempered with probably won’t work. This also means that if the game were to be patched — which is very unlikely at this point — it might break the fix and require it to be updated.

Install

The fix does not make any permanent changes to the system, the game or the configuration of the game and can easily be removed (see below).

  1. Install Durante’s DSFix if you haven’t already
  2. Extract the contents of the DarkSoulsMouseFix.zip to the same folder. For example: "C:\Program Files (x86)\Steam\steamapps\common\Dark Souls Prepare to Die Edition\DATA"
  3. Look for the dinput8dllWrapper line in DSFix.ini and set it to dinput8dllWrapper DarkSoulsMouseFix.dll. No additional configuration of DSFix is necessary
  4. Start DarkSoulsMouseFixGUI.exe to set mouse setting and keybindings as desired
  5. Start the game normally, for example directly through Steam. If you want to change the settings while in the game, see the Configuration section below on how to do that

A few additional notes on the installation:

  • You should hear a Mouse fix loaded message on game launch when the fix is installed correctly
  • If you currently have DSMFix installed, it is not necessary to remove it. Just replace the dinput8dllWrapper dsmfix.dll entry in DSFix.ini with dinput8dllWrapper DarkSoulsMouseFix.dll
  • It is not necessary to unplug the controller if you have one. You can even enable the controller on-the-fly by using the Input Mode Toggle binding (see Configuration)
  • The GUI requires the Microsoft .NET Framework 4.6.1, which should already be installed on most systems. If you are having problems starting the GUI, you can download the required version here
  • I would recommend increasing the FPS limit to 60 in DSFix for the complete smooth experience. Keep in mind that there are some problems with unlocking the FPS though. You can find more information about that on PC Gaming Wiki here

Uninstall

  1. Set the dinput8dllWrapper setting in DSFix.ini to none and delete the files of the fix

Configuration

Although the configuration using the GUI should be easy and straight-forward, there are some things to note:

  • You can change settings while in the game by using the Reload Config binding, which is per default set to the '-' key on the numpad. Just change the settings in the GUI as necessary, press save and then use the binding to reload the config ingame. You should hear a Mouse Fix Reloaded sound message when the reloading was successful
  • You may also want to enable borderlessFullscreen in DSFix for easier switching between the GUI and the game
  • Although it is not necessary to bind a standard action when you are happy with the ingame setting, it is strongly recommended to exclusively use the bindings in the GUI of the fix
  • It is not necessary to unbind a key or button in the ingame settings to use it with the fix
  • The GUI also provides tooltips with additional information about a setting

Binding System

The new binding system allows you to bind any action to an arbitrary combination of keyboard keys, mouse buttons or the mouse wheel. Instead of manually selecting a key from a limited set of predefined keys, the new system works reactively. To bind an action, double left click the corresponding box. When the box turns green, press the combination of keys you would like to assign. The combination is set once any pressed keys are released.

You should be able to use almost any keyboard key, independent of the keyboard type or layout. The key names are dependent on the layout currently set in Windows. If you are using an English layout, the key names will be in English, while an AZERTY layout will lead to French names. Bear in mind that the key names are automatically determined by using a Windows function and not all keys have pleasant display names.

A few additional notes on the binding system:

  • Each key pressed before another acts as a modifier for the next one
  • Any key can be used as a modifier key, not just ALT, CTRL or SHIFT
  • There is no limit to how many keys can participate in a combination. You can set a combination involving half a dozen keys if you want to
  • The order you are pressing the keys in is only important during the binding process to differentiate between bindings that involve the same modifier keys
  • To unbind an action double right click the corresponding box

Auto Cursor Mode

The Auto Cursor mode automatically manages the state of the cursor behavior depending on the current situation:

  • It captures and hides the cursor when ingame and not in a menu
  • It releases and shows the cursor when in the main menu, in a system menu or when the window goes into background, e.g. when using alt-tab
  • It overrides all cursor settings in DSFix

Non-Standard Bindings

Non-standard bindings perform actions that usually have to be performed by using a context-sensitive key or a combination of keys. They are provided for convenience as they could also be implemented by using external tools, such as Auto Hotkey. Although they do not allow anything that cannot also be done manually, purists of the game might not want to use them.

Movement Bindings

The keybindings to move the character differ on a technical level from those you can bind ingame. They should fix the problem of sometimes not being able roll when running diagonally and not moving the camera at the same time, which existed in the game since launch.

Input Mode

The input mode specifies the behavior of the fix:

  • Mouse and Keyboard: Enables raw mouse camera and keyboard bindings, deactivates controller input and vibrations
  • Gamepad: Standard controller behavior, disables raw mouse camera and keyboard bindings
  • Steam Controller: Standard controller behavior with the exception that the raw mouse camera is enabled and the right analog stick is disabled

Note that:

  • The Auto Cursor setting is independent of the input mode. For example, it is possible to play with a controller and only use the mouse for menu navigation if you want to
  • The input mode can be toggled with the Input Mode Toggle binding. The toggle order is the following: Mouse -> Gamepad -> Steam Controller -> Mouse -> …
  • You should hear a corresponding sound message when the input mode is changed by using the binding

Additional Information

What You Should Know

Since the fix consists of an executable DLL-File, I could have put any harmful shenanigans in there. You just have to trust me that the file is clean.

If you don’t — and why should you — feel free to use a meta online virus scanner like VirusTotal to verify the file. Be aware however, that because the fix uses “hacking techniques” such as injection and hooking, it could trigger anti-virus software without being harmful.

Known Issues

The Auto Cursor currently briefly activates the cursor when opening certain doors with keys. This is not easily fixable but should only be a minor issue, due to the short duration and small number of situations where this problem occurs.

Apparently the dialog that pops up when summoning a co-op partner can currently not be controlled with the mouse cursor (unconfirmed).

Acknowledgments

I would like to thank Kaibz for his extensive testing, detailed feedback and valuable suggestions during the development of the alpha versions of the fix. Without him, creating the fix would have taken even longer than it already did.

Additionally, I would also like to give a shout-out to the author of the original DSMFix for Dark Souls, which allowed me to enjoy several playthroughs of the game over the years.

Finally, I would like to thank Durante, author of DSFix, who made the game playable in the first place. Without his work, everything I’ve done would not be worth much.

Contact And Support

If you like this mod and want to support the development or show your appreciation, you can find more information on my website. There you can also find out more about other fixes that I have done and means to contact me if you have a question, want to provide feedback, bug reports or suggestions.

Version History

Beta 1.4.1 – Hotfix:

  • The GUI no longer loads a local dxgi.dll to prevent conflicts with SweetFX

Beta 1.4:

  • Replaced the binding system with an entirely new one, which allows the binding of arbitrary key combination with almost any key on any keyboard (see Binding System section for details)
  • Added Manual Targeting options that allow the switching of targets by flicking the mouse instead of using a binding (also available in Steam Controller input mode)
  • Added non-standard bindings for Kick, Leap Attack, Dash Only, Roll Only and Auto Run actions (see the corresponding tooltips or the Non-Standard Bindings section for details)
  • Added a custom mouse cursor that should be more suitable for the game. The cursor is enabled by default but can be disabled in the GUI
  • Added audio feedback for certain status changes, such as loading of the mouse fix, reloading the config or changing the input mode
  • Multiple changes to the usability of the GUI, including a revision of the labels and tooltips
  • The GUI no longer loads a local d3d3.dll to prevent conflicts with certain mods/injectors, such as DSPW or SweetFX/ReShade (thanks to SeanPesce for his feedback and research on the issue)
  • The Auto Cursor will no longer enable the cursor and lock the camera when UI elements are shown that cannot be controlled with the mouse, such as subtitles or certain floating messages
  • Fixed a bug that caused the Auto Cursor to not recapture the cursor correctly after having switched out of the game
  • Added a complete initial default config that should be decently intuitive for most player that are not familiar with the game

Beta 1.3:

  • Added preliminary modifier bindings that turn left and right attacks into heavy attacks (see Configuration for details)
  • Made all modifier bindings non-blocking so they can also be used as a modifier in the ingame settings where applicable (see Configuration for details)
  • Added proper Input Mode setting to the config that allows easy switching between mouse and controller input (see Configuration for details)
  • Added experimental Steam Controller support (see Configuration for details)
  • Replaced Toggle Mouse Fix binding with Toggle Input Mode
  • Fixed bug that prevented the number keys from getting bound correctly
  • Fixed bug in the GUI that prevented an action from getting unbound correctly when there was a default binding for it

Beta 1.2:

  • Added option to bind movement to the config. These differ on a technical level from those in the ingame settings (see Configuration for details)
  • Disabled hardware acceleration for the GUI to avoid conflicts with post-processing injectors such as ReShade or SweetFX
  • It is now possible to resize the GUI in vertical direction to use it with low-resolution displays
  • The GUI now groups options by category

Beta 1.1.2 – Hotfix:

  • The mouse wheel can now correctly be bound again to any standard action

Beta 1.1.1 – Hotfix:

  • Reverts changes regarding the mouse wheel in the previous update, which introduced a bug that caused buttons and keys to not be usable as a hold

Beta 1.1:

  • It is no longer possible to accidentally flip the camera and invert the input by looking too far up or too far down
  • The camera no longer suddenly jumps when exiting lock-on/focus mode
  • ~~The mouse wheel can now correctly be bound to any standard action~~

Beta 1.0:

  • Initial public release

Mass Effect Mouse Fix

What is this?

This fix makes Mass Effect use raw mouse input and removes the game’s mouse acceleration. It is easy to install and use and does not require any external configuration.

Overview

Description

While the mouse controls are pretty responsive, the first Mass Effect suffers from mouse acceleration, which can’t be turned off via the ingame settings or with the usual approaches for other Unreal Engine 3 games.

This fix removes the acceleration by acquiring raw mouse input and injecting it directly into the game’s input function.

Important: This is an experimental fix. Although I tested all supported versions for some time, I played none of them all the way through. There might be crashes or other issues that I’m not aware of that may require further updates.

Features

  • Raw mouse input
  • No additional smoothing or positive/negative mouse acceleration
  • Configuration via the ingame settings as usual
  • Simple installation and usage without any external configuration

Instructions

Supported Versions

Important: This fix relies on the latest, fully patched executables of the supported versions. Older versions or ones that otherwise have been tempered with won’t work. This also means that if a game were to be patched — which is very unlikely at this point — it would break the fix and require it to be updated.

  • Steam
  • Origin
  • Retail, v1.02

Note: All available versions of the game can be enabled on Origin one way or another. See this link for details.

Install

Note: The fix does not make any permanent changes to the game or the system and can easily be removed (see below).

  1. Extract the file dinput8.dll to your main game folder. For example: "C:\Program Files (x86)\Steam\steamapps\common\Mass Effect\Binaries\"
  2. (Optional) If you want to use the fix with other fixes/mods that also use a dinput8.dll, rename the file to xinput1_3.dll
  3. Start the game like you would normally, for example directly through Steam or Origin

Uninstall

  1. Remove or rename the dinput8.dll from the folder of the game.

How To Use

After the installation the fix does not require any additional treatment. Just launch and configure the game as usual.

Upon start the fix will detect which version you are using and immediately alert you via a dialog box and terminate the process if something goes wrong. This is to ensure that users don’t assume the fix is loaded when they are actually using an unsupported version.

Additional Information

What You Should Know

This fix is essentially a hack and relies on the layout of the specific executable. There may be crashes or unexpected issues. Feel free to provide feedback so that the problems can get fixed.

Since the fix consists of an executable DLL-File, I could have put any harmful shenanigans in there. You just have to trust me that the file is clean.

If you don’t — and why should you — feel free to use a meta online virus scanner like VirusTotal to verify the file. Be aware however, that because the fix uses “hacking techniques” such as injection and hooking, it could trigger anti-virus software without being harmful.

Known Issues

There are currently no known issues with using the fix.

Contact And Support

If you like this mod and want to support the development or show your appreciation, you can find more information on my website. There you can also find out more about other fixes that I have done and means to contact me if you have a question, want to provide feedback, bug reports or suggestions.

Version History

Beta 0.6:

  • The camera will no longer move when the player is in a menu
  • The fix will now respect the inversion setting of the y-axis

Beta 0.5.1 – Hotfix:

  • Fixed bug that caused the Steam and retail version to crash on start

Beta 0.5:

  • The fix should now correctly work with Origin versions from any region

Beta 0.4:

  • The DLL can now also be renamed and used as xinput1_3.dll. This is to make the fix compatible with other fixes/mods that also use a dinput8.dll for loading

Beta 0.3:

  • Patching a supported version to be large address aware no longer prevents it from being detected correctly. This is to ensure that the fix works with certain mods

Beta 0.2:

  • Added support for retail version of the game

Beta 0.1:

  • Initial release

id5 Tweaker

What is this?

The id5Tweaker is a small mod that allows additional configuration of id Tech 5 games. Its features include the option to change the FPS limit, force the value of CVars and additional game specific settings.

Overview

Description

Although the id Tech 5 engine offers a surprising amount of flexibility in regards to configurations through its CVar system, it is inconvenient to use because some CVars won’t be saved, are restricted or have too narrow bounds (e.g. the FOV in the Wolfenstein games).

Additionally, there are some problems that can’t be fixed by CVars at all, such as the limit of 60 FPS. While there are some methods out there which supposedly should unlock the FPS, they don’t seem to work or ceased to work after the games were patched.

This mod aims to make the overall configuration easier while at the same time to offer additional options for certain problems. The mod is used through a set of new console commands which can either be directly entered into in the in-game console or applied by using an optional config file. The Tweaker can change the FPS limit, force restricted CVars without having to use workarounds such as the cvaradd command and push some CVars out of their bounds. It also offers some game specific options.

Features

All Games

  • Change FPS limit
  • Force restricted or read-only CVars
  • Push some CVars out of their bounds (e.g. FOV)
  • Bind opening the console to any key
  • Bundle configuration in a single config file
  • Easy to install

RAGE (32-/64-Bit)

  • Bind the use of items to individual keys
  • Bind toggle versions of aim down sights or sprint
  • Disable parts of the HUD (e.g. crosshair or minimap)

Instructions

Supported Games

Important: This mod relies on the latest, fully patched executables of the supported games. Older versions or ones that otherwise have been tempered with very likely won’t work. This also includes versions of the games from other regions which I don’t own myself. For example, the German versions of the Wolfenstein games probably currently won’t work with the mod.

  • RAGE [32-/64-Bit, Global]
  • Wolfenstein: The New Order [Global]
  • Wolfenstein: The Old Blood [Global]

Note: You can find out what version of a a game you have by using one of the methods stated here.

Install

Note: The mod does not make any permanent changes to the game or the system and can easily be removed (see below).

  1. Download this zip-file from PC Gaming Wiki
  2. Extract the file dinput8.dll to your main game folder. For Steam this in most cases is "Steam\steamapps\common". For example: "D:\Games\Steam\steamapps\common\Wolfenstein.The.New.Order".
  3. (Optional) Place the id5Tweaker.ini config file in the game directory and edit as necessary (see below).
  4. Start the game like you would normally, for example directly through Steam or a desktop shortcut.

Note: There are two versions of the DLL in the zip-file. Since the default version of RAGE is a 32-Bit executable, it needs a separate DLL. The 64-Bit version of RAGE as well as both Wolfenstein games can use the same DLL.

Uninstall

  1. Remove or rename the dinput8.dll from the folder of the game.

How To Use

After the installation, the mod gets loaded automatically when you start a supported game. You can interact with the mod by using one of the corresponding console commands (see below). They behave like original commands and can either just be entered into the console or bound to a key by using the bind command. You can also use the optional config file to bundle commands and CVars, which are executed and set each time a level is loaded.

The mod also uses the in-game console to print status information every time a command is executed. This output is color coded in super stylish cyan. So if something does not work as intended, look into the console to see if for example the specified command or CVar could not be found.

List Of Commands

All Games

id5Tweaker_SetFpsLimit value

  • Changes the FPS limit to value
  • Example: id5Tweaker_SetFpsLimit 140
    Note: There are some known issues with unlocking the FPS (see below)

id5Tweaker_ToggleFps

  • Enables or disables the above FPS limit
  • Can be used to play sections of a game that have issues with high FPS
  • Is in the default config file bound to the '*' key on the numpad

id5Tweaker_ForceCVar name value

  • Forces a CVar with name to value
  • Can be used to set restricted or read-only CVars
  • Extends the bounds for certain CVars (e.g. g_fov)
  • Example 1: id5Tweaker_ForceCVar g_fov 110
  • Example 2: id5Tweaker_ForceCVar r_postProcessDofMode -1

id5Tweaker_Reset

  • Reloads the id5Tweaker.ini config file executing and setting all commands and CVars
  • Is in the default config file bound to the '-' key on the numpad

id5Tweaker_ToggleConsole [0.0-1.0]

  • Toggles the state of the in-game console
  • The optional argument specifies the fraction of the screen being covered by the console
  • Obviously only makes sense when bound to a key

RAGE (32-/64-Bit)

id5Tweaker_RAGE_Bind key action

  • Binds an action to key
  • For a full list of actions use the id5Tweaker_RAGE_ListActions command
  • For a full list of keys use the id5Tweaker_RAGE_ListKeys command
  • Example 1: id5Tweaker_RAGE_Bind F use_grenade_he
  • Example 2: id5Tweaker_RAGE_Bind MOUSE2 toggle_zoom

id5Tweaker_RAGE_ListActions

  • Lists all valid actions for the id5Tweaker_RAGE_Bind command in the console

id5Tweaker_RAGE_ListKeys

  • Lists all valid key names for the id5Tweaker_RAGE_Bind command in the console
  • Most key names should be intuitive, such as X, ENTER, MOUSE2 or KP_2

id5Tweaker_RAGE_HideCrosshair [0,1]

  • Hides the crosshair
  • Does not remove interaction info (see below)
  • Works as a toggle when used with no argument

id5Tweaker_RAGE_HideInteractionInfo [0,1]

  • Hides information of interactable things (e.g. bodies you can loot)
  • Works as a toggle when used with no argument

id5Tweaker_RAGE_HideMiniMap [0,1]

  • Hides the minimap
  • Works as a toggle when used with no argument

id5Tweaker_RAGE_HideWeaponInfo [0,1]

  • Hides all weapon information in the lower left including quick items
  • Works as a toggle when used with no argument

Using The Config

Instead of manually entering the commands into the console, you can use the id5Tweaker.ini config file.

The config file gets read and applied every time a level is loaded. You can also manually trigger a reload of the config by using the id5Tweaker_Reset command. This can be useful when trying to find the right settings. Just edit and save the file and reload the config. By default, this command is bound to the '-' key on the numpad.

There are two sections in the config file:

  • [CVARS]

    In this section you can specify any console variable (CVar) available in the respective game. The value of the CVar is forced directly via the internal CVar system. This is equivalent to using the id5Tweaker_ForceCVar command.

  • [COMMANDS]

    Every line in this section gets send to the command system of the game as if it were manually entered into the console. Therefore, anything you can enter into the console of a specific game can also be used here.

The default config already contains the most important CVars and commands. However, most of them are disabled because they are a matter of personal preference or the hardware. To enable them, uncomment the corresponding line by removing the ';'.

You might encounter areas of the game that don’t work with high frame rate (see Known Issues below). If this happens, use the id5tweaker_ToggleFps command in the console to toggle the FPS unlock. By default, this command is bound to the '*' key on the numpad.

Optimizing Performance

Maintaining a rock-solid 144 FPS is difficult, even on high-end hardware. Although the usual options, such as resolution and anti-aliasing, have an impact on the overall frame rate, other, more obscure settings, have a greater impact on stability — i.e. frame times. Because the virtual textures continuously have to be transcoded and streamed, the frame times may fluctuate depending on the configuration and level geometry. Because many of the corresponding CVars have an effect on each other, their overall impact on performance is not as easy to assess as traditional options such as anti-aliasing.

Important CVars

From my experience, the following CVars are the most important:

  • vt_pageImageSize* [4096, 8192, 16384]
  • vt_uncompressedPhysicalImages [0,1]
  • vt_maxPPF [1, 2, 4, 8, 16, 32, 64, 128]

The size of the page images determines the overall texture quality. The bigger the images are, the better the textures look and the more VRAM the game needs. Using uncompressed physical images further increases image quality at the expense of even more VRAM. The maxPPF option determines how many pages are transcoded (i.e. “loaded”) per frame.

Bigger textures mean that it is more costly to transcode the textures. At the same time, not being able to transcode the textures fast enough will result in the notorious “pop-in” of the id Tech 5 games.

Overall, it comes down to a balance of visual fidelity and frame time stability, while at the same time minimizing texture pop-in.

Many people should be able to set the page sizes to 16384. This leads to a VRAM usage of around 3GB for RAGE and 4GB for the Wolfenstein games. However, I would disadvise from enabling the usage of uncompressed images. Not only does this increase the VRAM usage in conjunction with big page sizes to about 5GB for RAGE and up to 8GB for the Wolfenstein games, it may also introduces micro-stutter in many areas of all games.

The value of the max pages per frame should be set as low as possible. Fortunately, playing at high FPS also means that more textures can get transcoded more quickly, making the pop-in much less noticeable and in most cases even a non-issue. This is primarily a CPU-heavy setting.

Warning: Even with CUDA-Transcode enabled, a large amount of the work will be done on CPU and the engine is very efficient in using the all available cores. Setting the maxPPF to values of 64 or higher with high FPS might load even high-end CPUs to 100%.

Recommended Approach

My recommendation to approach the best settings would be the following:

  1. Set all four vt_pageImageSize* CVars to 16384, vt_uncompressedPhysicalImages to 0, and vt_maxPPF to 4
  2. If you experience noticeable pop-in, double the vt_maxPPF value until the pop-in is no longer noticeable/bothersome
  3. If you can’t find a good balance between stability and pop-in or are experiencing severe stutter due to a lack of VRAM, set the page image sizes to 8192
  4. If you are satisfied by the performance, have at least 6GB of VRAM and want to further push image quality, set vt_uncompressedPhysicalImages to 1

For The Tech-Savvy and Adventurous

The main bottleneck of the engine seems to be the streaming of the virtual textures. By default, this means a lot of reads on the drive the game is installed on. The game also allows to set a path for a cache file. Playing the game from a slow, fragmented HDD may prevent players entirely from achieving high FPS. If your SSD is too small to install the whole game, you can at least set the cache path to it. The path can be set by adding +fs_cachepath "" to the command-line of the corresponding game.

If you have enough RAM, you can also use a RAM-Disk for the cache file or even install install the whole game to it, although this might only be feasible for RAGE, even for the vast majority of high-end systems.

Finally, although I spent a fair amount of time analyzing the various CVars and their impact on FPS and stability, the approach above might not be the best. Feel free to experiment to search for better combinations and share your experiences. Remember that you can use the find command in the in-game console to search for CVars and commands.

A starting point could be to enable the usage of CUDA to transcode the textures, which for me seems to make very little difference in FPS or stability and appears to introduce micro-stutter in some situations. Use vt_useCudaTranscode to enable the usage of CUDA. If you enable CUDA you should also set vt_cudaBudget to a value below your frame time. Remember that CUDA only works on Nvidia GPUs.

Additional Information

What You Should Know

This mod is essentially a hack and relies on the layout of the specific executable. There may be crashes or unexpected issues. Feel free to provide feedback so that the problems can get fixed.

Also, beware that some of these games were not optimized for such a high frame rate. Although the games generally perform well, I ran into sections were the FPS would drop significantly, even on a very powerful machine.

Finally, since this mod consists of an executable DLL-File, I could have put any harmful shenanigans in there. You just have to trust me that the file is clean.

If you don’t — and why should you — feel free to use a meta online virus scanner like VirusTotal to verify the file. Be aware however, that because the mod uses “hacking techniques” such as injection and hooking, it could trigger anti-virus software without being harmful.

Known Issues

There are some known problems when unlocking the frame rate in certain parts the games. Some of these problems are more severe than others. Remember that you can toggle the FPS unlock with the id5tweaker_ToggleFps console command, which by default is bound to the '*' key on the numpad.

This might not a complete list and probably will be extended in the future. If you encounter any problems, feel free to provide a description of the corresponding section in the style seen below.

RAGE

Various Locations [type: visuals, severity: minor]

  • A few physics animations like cloth or the turn rate of turrets are running faster than normal. As far as I can tell this has no effect on gameplay and is in most cases barely noticeable unless you look for it

Wolfenstein [Both Games]

Various Locations [type: interface, severity: medium]

  • Some players reported that the subtitles are lagging behind the audio in some cases, though I did not have time to verify this yet

Wolfenstein: The New Order

Chapter 1 – Deathshead’s Compound [type: performance, severity: medium]

  • Some players reported very low FPS on the first cutscene when starting a new game, although I could not confirm this on my end

Chapter 2 – Asylum – Yard [type: gameplay, severity: game-breaking]

  • The two drones that are released from the truck that crashes through the gate get ejected faster than normal and can get stuck in the ground, making them unkillable

Contact And Support

If you like this mod and want to support the development or show your appreciation, you can find more information on my website. There you can also find out more about other fixes that I have done and means to contact me if you have a question, want to provide feedback, bug reports or suggestions.

Version History

Beta 0.3:

  • RAGE: Toggling the HUD elements can now be done without having to reload the game
  • RAGE: Hiding the crosshair no longer hides the interaction info
  • RAGE: Added command to hide the interaction info
  • RAGE: Fixed bug that some items could not be correctly bound to a key (e.g. bandages)
  • RAGE: Binding an item to a key now also works with the advanced versions (e.g. Advanced RC Bomb Car)

Beta 0.2:

  • All functionality can now be accessed via in-game commands
  • Added command to open the console which can be bound to any key
  • Added some game-specific commands for RAGE

Beta 0.1:

  • Initial release

Direct Input FPS Fix

What Is this?

The DirectInputFpsFix fixes a bug that causes the FPS to severely drop after a few minutes of play. This problem is probably most widely known in regards to the game FEAR and often occurs in conjunction with the usage of Logitech devices.

However, the problem also pops up in other games using the same engine, such as the FEAR expansions or Condemned: Criminal Origins and with non-Logitech hardware configurations. A similar problem has also been reported to occur in other games, such as Prototype.

Although this problem can often be fixed by disabling most/all HID-Devices in the device manager, it is bothersome to do so and lately some people reported that that solution doesn’t even work at all anymore, especially on machines running Windows 10.

Instructions

  1. Download this zip-file
  2. Extract the file dinput8.dll to the folder containing the executable of the game. For Steam in most cases this is "Steam\steamapps\common'. For example: 'D:\Games\Steam\steamapps\common\FEAR Ultimate Shooter Edition"
  3. Start the game like you would normally, e.g. through Steam or GOG-Galaxy.

Note: This fix makes no permanent changes to the system or the installation of the game. To uninstall the fix just remove or rename the dinput8.dll file.

Supported Games

This is a list of games for which the DLL has either been confirmed to fix the problem or might fix the problem. Feel free to provide feedback if the DLL works on other games as well.

The fix is agnostic towards the game that uses it and should therefore work with all versions of a supported game, including teh Steam, GOG and retail versions.

  • Confirmed:
    • FEAR and its expansions
    • Condemned: Criminal Origins
  • Supposedly:
    • Prototype

What You Should Know

Since this fix consists of an executable DLL-File, I could have put any harmful shenanigans in there. You just have to trust me that the file is clean.

If you don’t — and why should you — feel free to use a meta online virus scanner like VirusTotal to verify the file. Be aware however, that the file could trigger anti-virus software without being harmful.

How This Works

The fix is implemented using a common technique known as DLL hooking.

User input in games like FEAR can be realized via DirectInput, an API by Microsoft for interacting with HID-Devices. The library is ancient and should no longer be used today, because there are other ways to get mouse and keyboard input, especially for games.

The FPS drops happen because the thread that runs DirectInput massively slows down after a while (as can be seen in tools like ProcessExplorer).

If an application uses a library like DirectInput, it needs a so-called DLL (dynamic-link library) where the functionality of the library is stored. In many cases, especially for libraries provided by Microsoft, these DLLs usually reside in the Windows folder.

However, there is an order of how an application searches for the DLLs it needs. Since the DLL of the fix gets copied into the main folder of the application and has the same name of a DLL needed by the game (the one of DirectInput), it gets loaded instead of the one in the Windows folder.

This means that all calls to DirectInput go through the Hook-DLL and can either be directed to the original DLL in the Windows folder or changed as necessary. This also allows some insight in how exactly the library is used by the game.

It turned out that some games not only unnecessarily register all HID-devices, they also call several functions every frame that usually only should be called once during initialization. The latter seems to apply only to devices that are not keyboards or mice. This eventually leads to circumstances where a lot of time is spent opening and closing device connections.

The fix changes the DirectInput initialization in such a way that only keyboard and pointer devices get registered.

Reported Problems

Up to this point I have no reports that the fix doesn’t work for anyone. But since PCs offer a wide variety of hard- and software configurations, I cannot say for sure that there will not be some unexpected problems.

However, in theory the problem should be fixable with the approach I used, regardless of whether the current implementation works flawlessly or not.

If you have any problems don’t hesitate to provide feedback.

I really love these games and I think they deserve to be preserved.

Version History

Beta 0.2:

  • Statically linked the Microsoft Visual C++ Runtime so that users no longer have to install the corresponding Visual C++ Redistributable package.

Beta 0.1:

  • Initial release