Hacker News new | ask | show | jobs
by dvt 22 days ago
This has been done before in both 1.6 as well as Source. I helped with some of these implementations back in the late-2000s when I was playing professionally and I even tried to kickstart an anti-cheat hardware solution about a decade ago[1].. spent way too much time working on some of these problems. The main issue with occlusion was slightly increased latency, visual jitter because of interpolation (especially around corners), and a few other more technical problems[2]. It's good enough for public servers, but not tenable in serious competition.

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.

8 comments

I was on the other side of this in League of Legends. They used to have packets leak information to the client about player position. The classic examples are for stuff like particle emission or spell usage. Well at some point they decided that they had enough and did a pretty major rework of their netcode to only send player positions when you were supposed to have vision on them (plus a tiny extra radius). That absolutely wrecked the determinism of the game, as small jitters would cause skill shots to hit you before they even drew in your game, players would become invisible as the packets arrived out of order. Particle emitters would bug out.

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.

I wonder why similar methods haven't been employed in MMO servers to help curb botting/cheating there. The impact of jitter and loss of smoothness in a tab-target game like WoW would be minimal (even in PvP), because it's always had a noticable level of artifacts like rubberbanding.
Well, if you cheat in WoW, Blizzard might just sue you[1], so that tends to be quite effective :)

[1] https://en.wikipedia.org/wiki/MDY_Industries,_LLC_v._Blizzar....

I don't know how it'd be a huge advantage in MMOs, but in Ragnarok the bots used a re-implementation of the client and custom servers tested for differences and culling of entities by the original game client to ban bots (as they'd try to interact with entities that should've been culled)
I haven't played WoW, but I played other third-person MMORPGs, and usually by design you can freely rotate the camera and see behind walls. The "fog of war" is simply a distance around the player. So they do implement this, it's just not nearly as complicated to implement as in an FPS.
How would it help? MMOs generally don't need to know where things are right now since it's mostly static, no?
WoW has a lot of mechanics involving line of sight (eg a spell you begin casting when the target was in LOS will fail when the casting time finishes if the target moves out of LOS) and positioning (AOE spells, spell ranges, NPCs/objects you can interact with only within a certain range, among many others)
Has been implemented in mobas such as lol
Why on earth don't the producers of the game implement this? It sounds trivial to do?
Because what do you think matters more in an online game:

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.

It isn't an unsolvable problem though, there's only jitter because the implementation isn't very good

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

> They're a small company which largely develops steam as a platform, not VAC or anticheat solutions for games

If anyone can afford to develop effective anti-cheat, Valve can.

They’d need to either poach folks from other firms or go for a third party solution.

Cursed timeline: Valve pays Epic for good EAC build on CS2 + whatever encryption solution they have for Fortnite executable, 99.9% P2Cs disappear day 1

Valve is rich. They can afford to develop in-house expertise.
Also even if it worked perfectly, there'd still be other practical ways to cheat. In a way it's better to detect cheats than prevent them, because you waste a lot more of their time sticking them into a pool of cheaters and can also undo it. Though afaik Counterstrike tells you when you're low-trust.
C. give everyone wall hack and aimbot.
They've actually unimplemented this. CS:GO being a source 1 game meant the maps used BSPs and got visibility checking essentially for free.

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.

The many tradeoffs involved are not trivial, this can only feasibly work well on LAN.

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.

Yup, I just reread the post you are talking about (https://www.riotgames.com/en/news/peeking-valorants-netcode) and it really seems like just endless fluff and no real solutions. Reading this post is almost unbearable and it all just comes down to this part:

> 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.

Hah, this reminds me of my "ancient past".

This must have been CS 1.4 or 1.5 times. I had terrible internet. 36k modem times, super high (ish - 150+ms at the very least, been a while, don't quote me, maybe it was way higher even?) ping to a server that had all the custom maps I loved.

I got accused of cheating.

I didn't.

Simply a result of CS/HL netcode. I was able to "run circles" around others. Something in that version favored my local client view of things I suppose. I literally just went around corners and if there was an enemy I circled them while driving bullets into them w/ my P90. They died without even really seeing me (from what they were saying). On my end everything looked smooth and normal.

This tactic never worked all that well on servers where I had the usual <120ms ping. I guess never mind at <15ms :)

CSGO already added this over a decade ago.
> 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.

And even then I heard of aimbots included in the gamer mouse that would 'infect'the computer when it's wired in.

That's the infamous "word.exe" CSGO scandal.
my first thought was to have lots of hidden players running around that only you can see. The grenade thing kinda ruins it.
i remember you man, sad ur project didn't get much support, you're david titarenco if i'm not mistaken
Except when the professionals are doing the cheating. LAN won’t save you. Word.exe
Valve also implemented this on CS:GO back in 2015 [0], and enabled by default in competitive servers, so I would consider it absolutely tenable (FACEIT, the platform used by competitive variants, had their own hand-rolled SMAC implementation, before using the 1st party solution, albei,t that solution was buggy). Why Valve didn't port this over to CS2, I will never know.

[0]: https://www.reddit.com/r/GlobalOffensive/comments/35zwwy/opt...

> so I would consider it absolutely tenable

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-based culling is very different from the kind of fog of war system in discussion here. The cases that these FoW systems purports to deal with would all be "pass" cases for PVS culling.

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.