Difference between revisions of "Game Window Cursor Clipping"
LordOf Xen (talk | contribs) (→Summary) |
LordOf Xen (talk | contribs) (→Summary) |
||
Line 3: | Line 3: | ||
This implementation allows you to clip the cursor to the game window such as in [https://en.wikipedia.org/wiki/Doom_(2016_video_game) DOOM] and '''[https://en.wikipedia.org/wiki/Doom_Eternal DOOM Eternal]''' (id Tech [https://en.wikipedia.org/wiki/Id_Tech_6 6] - [https://en.wikipedia.org/wiki/Id_Tech_7 7]), also brings some fixes to various bugs on VGUI. | This implementation allows you to clip the cursor to the game window such as in [https://en.wikipedia.org/wiki/Doom_(2016_video_game) DOOM] and '''[https://en.wikipedia.org/wiki/Doom_Eternal DOOM Eternal]''' (id Tech [https://en.wikipedia.org/wiki/Id_Tech_6 6] - [https://en.wikipedia.org/wiki/Id_Tech_7 7]), also brings some fixes to various bugs on VGUI. | ||
{{Note|This works only when the window is active, otherwise, the cursor will be unlocked automatically just as in the games specified above.}} | {{Note|This works only when the window is active, otherwise, the cursor will be unlocked automatically just as in the games specified above.}} | ||
+ | |||
<gallery widths="420px" heights="370px" perrow="2" mode="packed"> | <gallery widths="420px" heights="370px" perrow="2" mode="packed"> |
Revision as of 13:47, 6 January 2021
Contents
Summary
This implementation allows you to clip the cursor to the game window such as in DOOM and DOOM Eternal (id Tech 6 - 7), also brings some fixes to various bugs on VGUI.

Requirements
- Knowledge of C++
- Knowledge of Source Engine
- Source SDK Base 2013 - Currently tested on Source SDK Base 2013 Multiplayer.
Getting the Implementation/Code
First of all, you'll need the following files from the following GitHub repository:
Which you will copy to src/game/client/. You can also create a subfolder if you wish to, and copy these files there.
Implementation
Now head over to cdll_client_int.cpp' and include
#include "CCursorClipManagement.h"
Anywhere before
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

In the same cpp, find CHLClient::PostInit() and add this to the end:
CCursorClipManagement::Init();
Lastly, find void OnRenderEnd() and add this to the end:
g_pCursorClipManager->Think();
Conclusion
You're all set! Compile your client project and check if it works.
Notes
If you start the game/mod with one of the following parameters:
- -tools
- -dev
- -developer
- -nocursorclipping
Or if you're compiling into a different platform, else than WIN32, the cursor clipping will be disabled and won't work by default.
This behavior can be changed by modifying CCursorClipManagement::Think().
You can also add a ConVar to enable or disable this dynamically in-game, all you'll need to do is adding one more check on CCursorClipManagement::Think().