Cheating has always been a problem in FPSs, and it likely won't go away. That's why premier competitions have always been on LAN.
[1] https://www.pcgamer.com/introducing-gameref-the-anti-cheat-h...
[2] Hard to fully obfuscate audio sources, hard to obfuscate hitboxes since you still need them for collision checking (e.g. if a grenade bounces off an enemy player behind a wall—the server does not do all physics for all clients), and this is on top of the engine itself sometimes requiring actual entities, so you're stuck with these dummy entities in memory, and so on.
And even then I heard of aimbots included in the gamer mouse that would 'infect'the computer when it's wired in.
[1] https://en.wikipedia.org/wiki/MDY_Industries,_LLC_v._Blizzar....
Various platforms even made it stricter. It was not uncommon to see enemies teleport from behind walls on Faceit as their settings were very strict.
However, Source 2 is more of a mesh based engine and so they just never bothered to implement this particular feature back in.
A. Smooth and consistent client experience, where bullets hit what you aim at (client-side prediction) where aimbots and wallhacks work.
B. Jittery/laggy client experience, where aimbots still work, but wallhacks are disabled?
You can only choose one option.
Generally, everyone agrees "A" is the best option and cheaters will be dealt with at game time. It's annoying, but that's the cost of online video games.
Implementing a more conservative anti wallhack cheat where player positions start streaming in slightly earlier still significantly cuts down on the efficacy of wallhacking, while entirely avoiding the jitter problem. Characters in CSGO move at a fixed speed, so you can calculate exactly how many ticks in advance you need to start sending that data in, before they will become visible to another client around a corner - and add a margin
There's also no excuse for sending player positions through a smoke for example - the server should be performing visibility culling
With the two combined you could cut the utility of wallhacks by 80%, in a way that would be completely unnoticeable. The real reason that this has never happened is that valve's investment into anticheat has always been pretty minimal compared to what's necessary for it to be effective (VAC has generally been the least effective anticheat). They're a small company which largely develops steam as a platform, not VAC or anticheat solutions for games
This is the reason why Valorant is the least playable among all competitive shooters if your internet is anything lesser than Google campus fiber, ironically in spite of having even-slower-than-CS movement physics on its side to mask the problem.
Riot conveniently cherry picks the best case scenario and handwaves the actual technical tradeoffs in their smug "we solved peeker's advantage!" engineering blog posts that are really just barely-disguised monorail Gish gallop.
> We built Riot Direct, our own internet backbone, to minimize network routing delays and processing time across the internet.
> We’re standing up VALORANT servers around the world, ultimately aiming to deliver 35ms ping to 70% of our player base.
> We optimized our servers to provide a smooth 128 server tickrate to all players.
> We optimized the VALORANT game client to run at 60FPS on most machines from this decade and higher framerates for players with high refresh rate monitors.
> We run clients and servers running with minimal buffering, targeting one buffered frame of movement data for clients and an average of half a frame of movement data on servers.
This seems like basic stuff that every other game does.
This stuff i way harder than people imagine. I think League eventually got it somewhat figured out, but it took a couple of years from what i recall.
[0]: https://www.reddit.com/r/GlobalOffensive/comments/35zwwy/opt...
Always confuses me why people speak so authoritatively on topics they aren't versed in. PVS culling is not even remotely comparable to occlusion culling, mainly because wallhacks are not relevant accross the map; in fact they are only useful when opponents are always well into your PVS range.
FYI: there are also some clever ways to get around PVS culling (mostly by inferring opponent position based on other indicators, like gunfire).
PVS culling solves the informational/strategic advantage aspect provided by wallhacks, but not the pre-aiming reaction-time advantage in a peeker vs holder scenario.
When it comes to cheating in video games, I subscribe more to the Dune philosophy than the LOTR philosophy. The ends (experience) definitely justify the means. Making sure that all cheaters are punished ~equally regardless of the effect of their infractions is fantastic in principle, but I'd rather if we could simply remove the ones that are obviously & openly ruining the experience.
False positives suck, but there is no reason to pander to the .01% performers if you are trying to keep a multiplayer game community alive. Esports has demonstrated this is a terrible approach. We had community servers that would ban people simply for being too good before all the matchmaking stuff started up. The anti-cheat was vibes based and arguably superior to anything going on today. It wasn't "fair", but it was generally a much better experience as a player.
>CS2FOW uses static baked map geometry. Dynamic occluders such as doors, breakables, props, smokes, particles, and projectiles are intentionally out of scope for now.
Market window on Mirage just became more powerful on these servers :)
Very cool project nonetheless.
The screenshot in this repo is kind of similar to wallhacks, but you could imagine this could easily be extended to show dropped items and the 3D audio location: https://github.com/ryanjpwatts/esp-analysis
There are plenty more questions like paying for mods/review, securing the money, paying for servers, etc.. but my basic question is if cost of entry exceeds cost of reward from cheating has ever been attempted in a game.
Apparently buying a new copy of a $10-20 game isn't enough to keep people away from cheats. Less so when there is prize money on the line or skins (e.g. CS2) worth $100k.
I've seen private cheats for games with less-than-terrible anticheats charge that monthly, if not weekly. You're underestimating how much people are willing to pay to play with cheats, and overestimating how much regular people are willing to pay to play against players without them.
> Does it cause pop-in when peeking?
The goal is early reveal, not exact last-millisecond reveal.
CS2FOW predicts using movement and ping, reveals enemies slightly before exact visibility, and keeps revealed enemies visible briefly. This intentionally leaks a small near-corner window to avoid late pop-in.
This fails to address the main point of the "pop-in" issue relevant to fog of war systems, which is that it is the victim of the peek that gets the worst pop-in effect, the peeker much less so. The aggressive peeker gets the benefit of the early-prediction from the server since they're the initiator of the movement, whereas the victim only begins to receive the information after the peeker has already gotten two network roundtrips worth of early prediction."Fixing" this would make movement sluggish: any movement would need to be validated by the server. Meaning delay between pressing keys and actual movement.
So it's sort of a "relativistic" temporal system, not a linear "oh now you're at t=1, now you're at t=2" kind of timeline. And there's all kinds of complicated ways you create concensus between multiple clients, between server and clients, etc. (A lot of this remains an active research area.)
So a server, of course, does send updates (player position, etc.) every "tick," but that doesn't matter. Even assuming zero dropped packets (suppose we're playing over TCP), it would feel like shit (stuttering, rubber-banding, pop-in, jittery physics, etc.) to play a game over a ~60ms latency that updates ~60 times a second vs other people that also are ~60ms from the server, so game engines do a lot of interpolation and servers are in charge of concensus. Hence, it's a bit of a misdirection to say: "can't you just send everyone the right player data every server update?" because servers obviously already do that (and that's not really the hard part, anyway).
Local interpolation and remote concensus is the hard part, and games handle this differently. In CS, for example, two players cannot kill each other (with guns) simultaneously. Valve's engine requires that someone always wins a gunfight (which sometimes can feel random). However, I would argue that feels way better than, e.g. in Halo, where you can headshot each other (and both players die), which feels dumb and frustrating.
So when building these servers, there are lot of tradeoffs to consider (a lot of which might change the feel of the game).
Some games still do this. RTS games notably, but hide it with mouse and sound effects. If anyone remembers the Starcraft 1 option of "extra high latency", it would work by increasing the delay.
To solve this, the fog of war would need to use purely positional near-edge tolerances, which defeats the entire purpose of fog of war to begin with, which is the pre-aiming reaction time advantage of tracking the peeker through walls in addition to having a farther lever point from the cover than the peeker.
Ultimately the server must decide when to "pop" players, regardless of client interpolation which can only happen after the pop. So why would the server delay the pop for one player?
>– Added trace-based visibility checks to prevent networking invisible enemy players.
I don't play multiplayer games anymore for that reason. Too easy to go on an emotional tilt where you feel like you're suffering from paranoia and suspecting too many players of cheating. It's absolutely ruined competitive games for me.
There is only one 'fps' I play, it's called holdfast and is about Napoleonic warfare. Muskets are so inaccurate that having a wallhack or an aimbot would be complete nonsense.
There are still people who cheat in other way, but it's extremely limited.
Cheaters killed 90% of the multiplayer game to me.