Skip to content

Repository files navigation

ThiefVR

Experimental OpenXR VR mod for Thief (2014), 64-bit 1.7 build 4158.21.

  • Native same-frame stereo: both eyes render in one game frame. No AER.
  • Head-tracked gameplay with positional movement and asymmetric headset projections.
  • Current headset-recommended render resolution, queried before each launch.
  • Widescreen HUD and virtual screen, adjustable HUD scale, and level recentering.
  • Full VR enabled automatically in gameplay.
  • Optional mouse/gamepad vertical-look lock, enabled by default.

Keyboard/mouse and conventional gamepad controls remain available. Motion controllers are not implemented.

Install and launch

Download the ZIP from Releases, extract it, and keep the extracted folder. The release includes binaries and corresponding source; GitHub's automatic source archives require building first.

Start Steam and connect the headset to an active OpenXR runtime. Quest Link has been used for headset testing. Close Thief before installing. In PowerShell, from the extracted mod folder, replace the example path with your actual Steam library path:

$game = 'D:\SteamLibrary\steamapps\common\Thief\Binaries2\Win64'
.\install.ps1 -GameDirectory $game
.\launch.ps1 -GameDirectory $game

Use Binaries2\Win64, containing the actual 64-bit Shipping-ThiefGame.exe. The game's small launch wrappers in Binaries may redirect to the 32-bit game. Launch through this mod's script each time.

The installer supports executable SHA256 BE1BACBB1A6BC67657A91D32C12CE09861CCA57A9FA4AC52BE34BF32A10EA11D. It preserves existing DLLs in ThiefVR-backup. The launcher queries headset resolution, backs up and applies stereo graphics settings, and preloads the local graphics proxy before adapter enumeration. It does not patch the game executable or change the system OpenXR runtime. Resolution changes take effect on the next launch, not during a running session.

Controls and settings

Full VR starts automatically when entering gameplay. Menus without a gameplay camera use the stereo screen.

Key Action
F6 Toggle full VR / stereo screen
F7 Toggle HUD correction for comparison
F8 Save both eye images and diagnostics locally
F9 Recenter position and horizontal heading, keeping the horizon level

Edit ThiefVR.ini beside Shipping-ThiefGame.exe, then restart:

[VR]
UIScale=1.0
StartInVR=1
LockVerticalLook=1
  • UIScale: full-VR HUD size, from 0.25 to 2.0. Try 0.8 for smaller or 1.2 for larger. Invalid values use 1.0. The HUD stays on a 16:9 plane two metres away; this setting does not resize the fallback screen.
  • StartInVR: 1 enables tracked gameplay automatically; 0 starts with manual F6 activation.
  • LockVerticalLook: 1 blocks mouse/gamepad camera pitch in full VR. Headset pitch and horizontal turning remain available. 0 restores vertical look input; switching to F6 screen mode also restores it. This filters the game's Camera_Pitch axis, not scripted camera animation or menu cursor input.

Installation preserves an existing INI. Missing options use their defaults; add new options to the existing [VR] section to override them.

Validation and limitations

Quest Link testing has confirmed native stereo depth, head turns and leaning, HUD fusion, map behavior, level recentering, widescreen presentation, and automatic full-VR startup. The mouse/gamepad vertical-look lock, preserved horizontal turning and headset pitch, and menu navigation were also confirmed in game. Build, eye-copy, camera transform, recentering and HUD geometry checks have passed during development. Other missions, cutscenes, effects and headset runtimes need broader testing. Game interactions and aiming retain the original input behavior; this is not a motion-controller conversion.

F8 captures and diagnostic logs stay in the game directory. They are not included in releases. The desktop mirror is windowed; OpenXR controls headset presentation.

Restore

With Thief closed, use the same game path:

.\configure-stereo.ps1 -GameDirectory $game -Restore
.\uninstall.ps1 -GameDirectory $game

Original graphics settings and DLLs are restored from ThiefVR-backup. The INI, backups and local diagnostics remain available.

Build from source

Requires Visual Studio 2022 C++ x64 tools, Windows SDK, CMake 3.24+, and Git. In an x64 developer shell:

cmake -S . -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build build --target atidxx64 atiadlxx d3d11_proxy ThiefVRProbe ThiefVRLauncher ThiefVRDisplay ThiefVRCameraTest
.\build\bin\ThiefVRCameraTest.exe

Stage atidxx64.dll, atiadlxx.dll, d3d11.dll, and ThiefVRLauncher.exe in dist; stage ThiefVRDisplay.exe in dist/tools with no graphics proxy DLLs beside it. Run ThiefVRProbe.exe from a separate directory without proxy DLLs to validate D3D11 eye-array copies. --xr runs a short red/green headset test. Tests do not replace gameplay/headset validation.

The bridge transfers complete native HD3D pairs to a two-slice OpenXR swapchain. Guarded camera hooks replace both eye transforms before visibility construction and submit the exact poses used for those images. HUD correction remaps final raster viewports and clipping rectangles for each eye, restoring the original state after drawing.

Credits and license

Adapted from DeusExHRVR and the effcol/wiz3D stereo proxy sources. LGPL 2.1; see LICENSE and THIRD_PARTY_NOTICES.md. Pinned OpenXR and MinHook dependencies retain their licenses. No game code or content is distributed.

About

Native same-frame stereo OpenXR VR mod for Thief (2014), with headset tracking and a corrected widescreen HUD.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages