Well actually I can come up with my experience in writing WoW Bots
Every game is ‘hackable’, at least on Singleplayer, no matter what you do against it. That’s the reason, shazams’ algorithms are Server side.
No matter if you send the keystrokes or not, you’d still need to validate them. This is the same CPU Load but you don’t have a delay.
Pspeeds Article states, though, that they use a delay to match the Players depending on their tickrate.
Imagine you wouldn’t have an delay. You could shoot a Player but infact he already moved further… So you need to Check if he was there at the time of shooting.
You can do simple plausibility Checks:
Get the delta of movement and then you already have speedhacks.
Then you could follow that path with a raytrace, prevents no-collision. Do it for weapons aswell.
For climbing walls, Do a raycast down to the ground, if there is a difference, simply kill the connection.
Just think about all circumstances, track the HP on the Server aswell.
Remember it’s all about thresholds, like, through delays or connection issues you could have bigger Deltas then usual, or due to Physics the Player could fly to some degree (also take jumping into Account).
This means you could cheat to some degree, but it’s all about limiting them correctly.
You will still have some behavior you cannot eliminate though. This is the botting one. WoW has no real chance in elminiating Bots, because they exactly behave like humans. You will have the case where you can’t exactly tell if you face some cheaters or simply a pretty good Player.
You could have heuristics as Empire suggests, but don’t take that as an offense, but I wouldn’t really believe that your game is ‘soo cool’, that somebody writes cheats for it.
You could take that into Account as you see Player numbers go up, but i think it’s too much to use heuristics. Same with the Screenshot. It’s a common technique for esl I guess it was, but it’s not worth the effort.
You would kill my connection. I’d have an 36337373 ms ping. Also, you could automatically check them periodically for always occuring patterns (like gui overlays), but it would be easy to hook your Screenshot library, applying them in the glSwapBuffers (by also hooking).
What I want to say is: Don’t overdo it. Add the functionality of reporting Players. If they have 10? Manually react.
Implement an hidden spectator Mode just like in said valve games.
You could, as Empire said, Check the mouse Deltas aswell and they are uncheatable (as you can trace the view direction and see if the Players mouse Deltas result in nearly the same vector), but as I said, what if the Player has a fast mouse, has increased mouse speed in his OS settings? What if he uses a Joystick (even without native Support)?
You’ll never know. Just play the game actively and maybe spectate your flagged ppl. You might get a feeling for it, but you can never tell 100%. You can then ofcourse chat with him, asking how he became so good, maybe if he has a cheat, but think of the 80-20 principle.
It is 20 percent effort to catch 80 percent of the cheaters but 80 percent effort zo catch the last 20 percent.
Just keep things simple and have a look. If he cheats too good for you to notice by spectating, other Players wont notice aswell.
I can remember playing css for the first time. It felt like everybody was cheating but infact I was simply too lame.
I’d try that Basic stuff and see how it evolves. If you’ve got something just hit us up, maybe one has time to find and report cheat-issues.
Other than that I wish you a big success with your game
Oh and one thing: WoW had an ‘last Hardware Action timestamp’. This would be simply overloading inputmanager or correct treatment in the onAction/onAnalog Calls. They used it to detect when you were going afk, but also to see if somebody injects packets.
Again this could be hacked but it would be a Basic protection against all cheatengine Users.