conturn provides alternative +left/+right/+speed
commands for CS:GO & CS:S with in-game cl_yawspeed
, cl_anglespeedkey
control.
These convars, which control the turning speed for the +left/+right
commands, exist in previous games in the series (1.6, CS:S), but are inaccessible in CS:GO, forcing useless unchangable defaults (cl_yawspeed 210
, cl_anglespeedkey 0.67
). This program aims to fill this gap, as these commands are essential for movement game modes like surf.
conturn works by simulating mouse movement based on the game's console output, captured using con_logfile
.
New convars/commands +_left
, +_right
, +_speed
, _cl_yawspeed
, _cl_anglespeedkey
can be used in-game to turn and control the turning speed, and keys can be bound as usual through the console and .cfg files.
1. Download and run conturn.exe
The program will run as Administrator in order to be able to create symlinks.
Settings are stored in <exe-name>.ini
.
To use with multiple games, copy conturn.exe
to different names (conturn-csgo.exe
, conturn-cstrike.exe
...) so that different settings files are used.
2. Select your game .exe
file (csgo.exe
/hl2.exe
)
On first run, conturn will ask for the location of your game .exe
file. The program is external to the game and does not patch it in any way, the path is needed to know where to create 2 files - a log file (<game>\conturn.log
) and a .cfg file (<game>\cfg\conturn.cfg
). These are automatically deleted when you exit conturn.
3. Attach to the game using exec conturn
Once conturn is running (icon in the tray), you'll need to attach it to the game by running exec conturn
in console. This will not make any permanent changes to your configuration.
You'll have to run exec conturn
every time you open the game. You can add it to your autoexec.cfg
, but that won't work for when you launch the game first. Another option is to rebind the console key as follows: bind ` "exec conturn; toggleconsole"
Once conturn is running and attached to the game, the following new convars/commands will be available in-game:
+_left
- bind this instead of+left
+_right
- bind this instead of+right
+_speed
- bind this instead of+speed
(or with, but keep in mind+speed
scales down airaccelerate)_cl_yawspeed
(default 90.0) - turning speed for+_left/+_right
_cl_anglespeedkey
(default 0.33) - factor by which_cl_yawspeed
is scaled while in+_speed
More
conturn_off
- turn off conturnconturn_freq
(default 0.001) (notify after changing) - maximum frequency of simulated mouse moves; lower values decrease CPU usage in favor of turn smoothnessconturn_sleep
(default 0.0000005) (notify after changing) - main loop sleep duration; higher values decrease input polling rate and overall CPU usage
The values of _cl_yawspeed
, _cl_anglespeedkey
, sensitivity
, m_yaw
are used to calculate the speed by which the program moves the mouse cursor.
conturn has to be notified when they change - changing a convar will have no effect until conturn is notified of the new value. You do that by simply writing the variable name to print its value after each time you change it. For example:
toggle _cl_yawspeed 80 160 240; _cl_yawspeed
surf.cfg
exec conturn
bind MOUSE1 "+_left"
bind MOUSE2 "+_right"
bind SHIFT "+_speed"
_cl_yawspeed 120; _cl_yawspeed
comp.cfg
conturn_off
bind MOUSE1 "+attack"
bind MOUSE2 "+attack2"
bind MOUSE5 "use weapon_flashbang"
surf_tronic_njv.cfg
exec surf
# Initial yawspeed
_cl_yawspeed 140; _cl_yawspeed
# Use MOUSE5 to change yawspeed
bind MOUSE5 "toggle _cl_yawspeed 70 140 210; _cl_yawspeed"
# Use SHIFT for fast spins
_cl_anglespeedkey 3.0; _cl_anglespeedkey
The program does not patch or inject anything into the game.
Apart from simulating mouse input, it doesn't really do anything suspicious.
It would be fair to say it's as VAC bannable as an AutoHotkey script.
Anti-cheat software (FACEIT AC, ...) can easily detect the simulation of mouse movement though, and either prevent it or prevent the program from running completely. This is expected, just don't actively try to use this program in unintended scenarios.
conturn provides some benefits over turnbinds:
- It uses in-game configuration - you can use aliases, binds, and manage your configuration in (per-map) .cfg files
- It doesn't need to monitor input alongside the game - conturn operates on the input captured by the game, which results in less CPU usage and better input consistency
- No need to
Alt+Tab
- there's no UI, everything happens in-game
Game console output is read through a named pipe. The command con_logfile
can be used to write console output to a file. There are no checks on the path before opening it, so a symlink can be used instead of a file. conturn creates a symlink to a named pipe through which it receives the console output. Named pipes writes are fast, also due to the fact that there's no disk I/O (it's worth noting that the game flushes the file after every console message, which means using con_logfile
with an actual file is not great for performance).
exec conturn
will:
- Create the relevant aliases and convars
- Connect the console output to the named pipe using
con_logfile
- On first run, set
_cl_yawspeed
,_cl_anglespeedkey
values from settings - Notify conturn of the current in-game values of
sensitivity
andm_yaw
conturn uses convar prints (for example "_cl_yawspeed" = "90.0"
, generated by running _cl_yawspeed
) as "notifications" of convar changes, which signal when to start/stop turning or update the turning speed. This makes external input monitoring unnecessary (keyboard hook/raw input) - the game tells us when buttons are pressed.
conturn is active only when the foreground window belongs to the process connected to the pipe (the game), and the mouse cursor is hidden (do not want to move the cursor when the menu/console are open).
Relevant console commands:
setinfo
- create a new convar (FCVAR_USERINFO
)alias
- print all aliasescvarlist <name>
- print convar infokey_listboundkeys
- list bound keys- Console filtering - the program uses console filtering (
con_filter_enable
,con_filter_text_out
) to filter the in-game console spam it creates
Run ./build
on a Linux machine with Docker installed.