Are there any techniques for achieving secure shooting mechanics for multiplayer from a coding perspective (i.e. not from anti-cheat tools scanning memory etc.).
For movement there are well known techniquese like client replay (e.g. as in the character movement component) that if implemented properly prevent stuff like speed hacking, going through walls and so on. This works because the directional input of the client doesn't hold a lot of potential for cheating. If I modify my executable to move my character left when I press right that could theoretically be considered cheating but it doesn't give me much of an advantage in the game. However, in multiplayer shooters the input control rotation holds a lot of potential for cheating.. The server also needs my control rotation to know where I am shooting/looking so the control rotation has to be sent. The server can prevent some cheats by retracing the shot and check whether I actually hit somebody (server-side hit detection) or can check whether the shot was blocked by something so I can't shot through walls etc. But if I inject code so that for example my control rotation always points in the direction of the nearest pawn's head (which is very easy to do) the server has no way of knowing whether I cheat or not because that is actually a valid input. I don't see any way to prevent cheating in that scenario. Am I missing something here? Is that the reason why games like Valorant use such an intrusive anti-cheat program, because there is no way to make shooters safe through careful coding?
For movement there are well known techniquese like client replay (e.g. as in the character movement component) that if implemented properly prevent stuff like speed hacking, going through walls and so on. This works because the directional input of the client doesn't hold a lot of potential for cheating. If I modify my executable to move my character left when I press right that could theoretically be considered cheating but it doesn't give me much of an advantage in the game. However, in multiplayer shooters the input control rotation holds a lot of potential for cheating.. The server also needs my control rotation to know where I am shooting/looking so the control rotation has to be sent. The server can prevent some cheats by retracing the shot and check whether I actually hit somebody (server-side hit detection) or can check whether the shot was blocked by something so I can't shot through walls etc. But if I inject code so that for example my control rotation always points in the direction of the nearest pawn's head (which is very easy to do) the server has no way of knowing whether I cheat or not because that is actually a valid input. I don't see any way to prevent cheating in that scenario. Am I missing something here? Is that the reason why games like Valorant use such an intrusive anti-cheat program, because there is no way to make shooters safe through careful coding?
Comment