API-Hooking and rendering framework for DirectX-based games.
Indicium-Supra
consists of a self-contained library (DLL) which exposes a minimalistic API for rendering custom content in foreign processes eliminating the need for in-depth knowledge about Direct3D and API-hooking. The most common use-case might be drawing custom overlays on top of your games. The framework takes care about pesky tasks like detecting the DirectX version the game was built for and supports runtime-hooking (no special launcher application required).
- DirectX 9.0
- DirectX 9.0 Extended (Vista+)
- DirectX 10
- DirectX 11
- DirectX 12 (implemented but untested)
- Visual Studio 2017 (Community Edition is just fine)
- Windows SDK
- .NET Core SDK 2.1 (or greater, required for building only)
- MinHook (referenced as submodule)
Building should be pretty straight-forward since the POCO libraries get installed via Vcpkg and MinHook is built within the solution. You have multiple choices for getting things done.
Just open the solution file Indicium-Supra.sln
and start the build from there.
If Visual Studio can't load one or more projects the first time you launch it, you might need to restore the NuGet packages. Open the Package Manager Console and hit Restore:
Navigate to the solution directory on the command line and invoke:
powershell .\build.ps1 -configuration release
Now if you're really in a hurry you can grab pre-built binaries from the buildbot. Boom, done.
Inject the resulting Indicium-Supra.dll
into the target process first using a DLL injection utility of your choice (you can ofc. use mine as well). To do anything useful you also need one or more host libraries injected as well. The following example loads the imgui sample:
.\Injector -i -n hl2.exe Indicium-Supra.dll Indicium-ImGui.dll
Just make sure to inject Indicium-Supra.dll
first or you'll get a LoadLibrary failed
error because of the missing dependency.
The core library logs its progress and potential errors to the file %TEMP%\Indicium-Supra.log
.
The following screenshots show imgui getting rendered in foreign processes using different versions of DirectX.
Half-Life 2, 32-Bit
Castlevania: Lords of Shadow, 32-Bit
Bioshock 2, 32-Bit
Ryse: Son of Rome, 64-Bit
Road Redemption, 64-Bit