Skip to content

v1.8.1

Choose a tag to compare

@petergeneric petergeneric released this 03 Jul 17:07
· 24 commits to master since this release

This mod aims to provide native-feeling controller support for Thief 1, Thief 2, and all FMs.

Since I played Thief as a kid, my ability to use a keyboard+mouse for games has degraded to the point where I need to use a controller, and I wanted to replay the game (and The Black Parade) but the experience with using controller configs with external tools felt too complex for my simple brain: I wanted a simple "plug and play" option. This mod adds d-pad navigation to all menus right from game launch (except for the FMSel UI, obviously!)

Installing

Install the gamepad.zip mod with DMM, the Dark Engine Mod Manager.

Once installed, go to MODS/gamepad, and copy dinput.dll into your game folder (you can also simply run GamepadConfig.exe, which will do this for you and provide customisation options).

If the mod doesn't appear to work in-game with FMs (e.g. The Black Parade), you likely need to edit the FM's fm.cfg to remove the apply_dbmods 0 line (this is the FM instructing the game not to load any .dml/.osm mods - ordinarily to prevent texture replacements, etc. from messing with the FM)

By default, on launch the mod will enable joystick and set joybutton bindings in your user.bnd. If it makes a change it will make a backup of your old settings in user.bnd.bak.

Make sure you're running NewDark. You may wish to install it via RoguePatcher, TFix, or manually download 1.28

Once you have installed, you will want to either reduce the in-game mouse sensitivity (low in-game sensitivity allows the mod to provide more precise movements and limit juddering), or add use_raw_mouse_input 1 and raw_mouse_sens_scale 0.5 to cam_ext.cfg (to tell the engine we're a high-dpi mouse)

Features

  • Analog movement with the left stick (with a custom curve that tries to make it easier to sneak very slowly)
  • Radial menu inventory selection by holding RB. Weapon wheel has a fixed layout (until you have more than 9 weapons). Items appear in the order they are in the inventory. My goal in the future is to improve the UI to allow adding favourites for quick-select.
  • World slows down while menu is up (on supported NewDark engine versions)
  • D-Pad navigation in all menus that describe their clickable areas. Remembers your button selection as you go back through the menus
  • A/B and both sticks work in all menus for mouse emulation
  • Customisation of button bindings (via gamepad.ini, not in-game: too many contextual actions for that)
  • Optional automatic unlocking of doors if you have the key (N.B. if you have J4FKeyring mod installed, this feature of my mod is disabled). Enable in MODS/gamepad/gamepad.ini

The beautiful pixel art icons for the core items in the radial menu was created by Plutonia.

There's a lot more that could be done better and more reliably with some support from NewDark if they are listening (especially around menu navigation and slowdown - I've had to do some reverse engineering and scanning/writing to engine memory directly, which is somewhat fragile!)

Steam Deck, Proton, Wine

If you're running under Proton/Wine, you'll need to mark dinput.dll as "native then built-in", since I use this DLL to adapt DirectInput to modern XInput APIs, as well as to supply other core engine hook features. In Steam, this is Launch Arguments: WINEDLLOVERRIDES="dinput=n,b" %command%
If you're running on Steam Deck, remember to set the game to use Joystick mode.

Changelog

Version 1.8

  • Change dpad up/down logic in main/sim menu to allow cycling through all buttons with dpad up/down.
  • Add logic to allow gamepad mod to run even if apply_dbmods 0 is set in a FM
  • Minor bugfixes to cam_mod path processing and sequencing
  • Don't enable gamepad mod if the user runs dromed to avoid risk of interference
  • Update overlay mechanism so it uses Present as long as any other services hooking Present are cooperative (and defensively falls back on EndScene hook alternative in the face of bad overlays like RivaTuner)

Version 1.7

  • Change D3D hooking mechanism to better tolerate races with other services hooking it
  • Add placeholder icons to weapon wheel
  • Include crypto libraries rather than relying on system for signature validation (Steam Deck crypto libraries missing required algorithm)
  • Fixed an issue with parts of the mod loading even if not enabled in cam_mod.ini
  • Fixed an issue with the Save/Load panel detection sometimes failing by retrying memory scans if panel is slow to load
  • Changed Dark Hooky version to 6.0.0, and improved in-game error messages on version mismatches

Version 1.6

  • Improve Save/Load Menu navigation, especially in NewDark 1.27
  • Add subtle rumble on radial selection change
  • Change weapon wheel default size to 9 with tweaked reserved layout
  • Fix #20, #22, #23

Version 1.5

  • Fix some issues with the keychain mod feature when the desired item was already selected but engine had timed it out ("defocused"). This prevented the mod from auto-selecting the item again.
  • Fixed a regression where the player could put a bulky item (like a body) into their inventory.

Version 1.4

  • Keyboard/mouse support for the item radials. Open with Tab (dismiss with Tab/Escape)
  • Amend right stick sensitivity defaults; these are too high by default, this is intentional so that a player will turn down in-game sensitivity slider (which allows us to supply more precise inputs). Best solution is to add use_raw_mouse_input 1 and raw_mouse_sens_scale 0.5 to cam_ext.cfg (to tell the engine we're a high-dpi mouse)
  • Add auto-update capability in Config .exe
  • Reduced per-frame CPU overhead and memory allocations