An auto-aim/recoil assist program for Counter-Strike: Global Offensive (CS:GO) written in C++ using the Windows API, openFrameworks, Valve's Game-State Integration, and Crow, a Flask-inspired micro web framework for C++.
Counter-Strike is a first-person multiplayer shooter game. For my project, I will focus on manipulating, analyzing, and interacting with the recoil mechanics of weapons in the game.
In CS:GO, every gun recoils in a set pattern. For example, every time a player fires an M4 rifle in-game, the gun will recoil in a pattern that looks like a flipped-seven. To compensate for recoil, players move their mouse in such a way that the mouse movement mirrors the weapon's spray pattern across the y=x axis.
Because the spray pattern for a given weapon is constant, it is theoretically feasible to record a set mouse movement path[1] for a pattern once (ideally with perfect recoil control) and have a program exactly replicate it (i.e. simulating mouse movements using coordinates/paths) every time the particular gun is fired by the user in the game.
By simulating mouse movements in place of the user (through the Windows C++ API), the program will automatically control in-game weapon recoil and maintain accurate aim without human error whenever the player fires a gun while playing Counter-Strike. More specifically, the user would be able to trigger the program's aim-assist by pressing a certain key (say Mouse1) while playing the game.
Also, the program would (ideally) automatically load the appropriate weapon spray pattern by detecting which the gun the player has equipped in real-time. Thus, whenever the user fires any gun in-game, the program would automatically compensate for the recoil using the correct pattern. To accomplish this, the program will use Crow and Valve's game-state integration to receive JSON payloads from the CS:GO client that contain real-time information about in-game events, including the current gun equipped by the player.
openFrameworks, more specifically its addons ofxGui and ofxDatGui, will be used for the front-end interface of the program. The GUI will allow users to record individual spray patterns and switch between aim-assist and recording modes/states.[2] This GUI will be the "window" requirement of the project.
In the past, I have used CS:GO's game-state integration service to create an in-game performance/statistics tracker for players using Python, Flask, and SQL. Regarding my experience in Counter-Strike, I have 1400+ hours played in-game.
1. I plan to base the recording part of my program on MouseMeat, a program that prints raw input from the mouse to console.