The netcode attacker advantage in PUBG

My strategy in PUBG is carefully analyzing the map, looking for safe spots (away from plane path, in buildings with lot of doors, away from buildings that have flat tops where players can go, away from School and co.). When none can be found, I just collect medicine outside of the circle that let me outheal it until the 4th shrinking is complete. So when the circle includes safe spots, I finish #3-6, when not, I finish #12-18, slowly gaining rating.

It works well and I will publish it when I reach top 100. But after some rather successful fights, I decided that I am skilled enough to just go to the safest spot in the circle, even if it’s not really safe and just defeat whoever comes to it.

That idea pushed me from #160 to #600 in 24 hours. However it netted me a revelation. Not just by dying constantly in fights I was absolutely sure I’ll win, but winning two that I had no business winning. PUBG is favoring the attacker extremely over the defender.

The first way is that movement barely decreases weapon accuracy and turning (which has infinite speed) doesn’t chance accuracy at all. Just test it at the starter island. Grab a gun and try to hit running players. Then try to hit standing players while you’re running. The difference will be extreme.

But that’s just the smaller problem. The bigger is the lazy netcode that makes it practically impossible for a not totally noob attacker to lose. To understand what it is, meet Adam and Betty. Adam is about to step forward, being unaware that Betty is around. He’ll look around when he’s at the grey circle. Betty is expecting Adam to go that path and aims at the grey circle :
adbe
Isn’t the system symmetrical? Why does it favors Adam? Theoretically it doesn’t. Betty’s client is just as aware of Adam’s location at the red circle as Adam’s about Betty at the green. But the players (unless cheating) don’t see each other from the wall. Since Betty is stationary, her old location info is still valid. Since Adam is moving, Betty constantly sees him 2x latency behind where he is. I guess the game has some motion prediction, so if Adam runs in a straight line, this isn’t that bad. But if Adam stands at the red and then suddenly steps forward, no prediction helps. The moment Adam steps to the grey circle, he’ll instantly see Betty, while Betty will only see him after Adam’s location info reaches the server and then the updated location reaches Betty’s client.

To be exact, the advantage is 2x the latency of Betty, Adams latency doesn’t matter (it increases the time till Betty sees him, but also increases the time his shot reaches the server), this is why Chinese hackers can cheat themselves up to the NA toplist. When WG-QUN-123456 with 1000ms latency steps to the grey circle, he instantly fires an autoaim shot. 1000ms later the server gets the info of both the movement and the shot and 60ms later Betty learns that WG-QUN-123456 is at the grey circle and that she is dead.

Besides complete rewrite of the netcode, there isn’t anything that the devs can do about that. They can mitigate the problem by seriously gimping movement, just like World of Tanks does (Movement instantly ruins gun accuracy and it regenerates slowly after stopping. Also, turning damages accuracy). But they won’t do that. Now I think this laziness helped a lot to make PUBG successful. Why? Because it gives a huge advantage to the mindlessly rushing idiots and make them feel winner: “omg he was waiting for me but i haz reflexes of a hawk and ownd hiz @ss lolol” (instead of “I fired my shot before his client rendered me for him”).

Does that mean “don’t play PUBG”? Far from it. I’ve reached top 200 just by good strategy, so I can get back my rating, just by being careful and not contesting. But there is more: knowing that sudden movement gives advantage, I can lay better traps and kill players. If I aim at a door to shoot him when he opens, I’ll die, because he sees me 2x latency before I see him. But if I stand by the door and jump into the doorway when I see it opening from the side, I win, because he will see an empty doorway (and his client knows that I’m in the room by the wall), while my client will see me jumped at the doorway and him standing in it. The game doesn’t favor the attacker in a moral sense, it favors the player who moved into the line of sight of the other first. It can be a trap-laying defender, who reacts to a door opening or footsteps.

.

PS: does anyone know how can one display FPS and latency in PUBG?

Author: Gevlon

My blog: https://greedygoblinblog.wordpress.com/

17 thoughts on “The netcode attacker advantage in PUBG”

  1. Hey Gevlon, long time no see. Can’t wait for the guide, I haven’t started playing Pubg yet and always appreciate playing with you since our reroll times

    Like

  2. @Gevlon

    The advantage you speak of, regarding netcode, could simply be a difference in machine spec and internet connection. As far as PC’s are concerned, there are several variables that could explain what you are experiencing. Client-side games have always favored the gamer with the higher framerate and lower ping. If player “A” is playing on a PC that can only display say 20-30fps, he/she will be at a disadvantage if playing someone on a PC that can display 60+fps. Also, if someone is playing on a server with a 100+ms ping time, he/she will be at a disadvantage when playing against someone with a sub 50ms ping. If both players hit the fire button at the same time, the lower ping player will register the hit first at the server. Add in packetloss or line quality issues and it gets worse from there.

    Though it really all depends on how the netcode works in PUBG. Older FPS games relied on the ability to update each and every frame that is rendered on the client-side machine. Most of the older FPS games like Quake, Doom, Unreal…etc…were optimized to be played on a LAN, where ping times were the same for everyone. Then when the internet came along, something called “client-side prediction” was introduced to “mask” the high latency issues many players experienced. The problem was then made worse as PC technology advanced with higher end video cards, faster CPU’s and better internet connections(DSL) gave serious advantages to players who could afford them.

    The other issue is server co-location. The games I mention above allowed players to run their own “servers”, so the server hosts connection speed played a HUGE part in how competitive you could be on any given server. But, if a server host joined their own server in a match, they would do so with an almost -zero- ping time. PUBG uses developer-hosted servers through either Amazon or Microsoft’s Azure, and if I’m not mistaken, the switch to Microsoft’s Azure server clusters is being done to allow cross-platform play for the X-Box exclusivity deal PUBG is working on with MS.

    Also, lag isn’t necessarily an issue of the internet, it can be introduced on the clients side if they have an older machine where the CPU is being burdened to the point that it simply cannot update each and every frame that is being displayed. It causes the famous “I saw him, but then I was dead” issues that many players experience on lower spec machines.

    Like

  3. It’s a standart way to implement shooting in multiplayer shooters. Server usually checks where players were in past when one player shoots another and resimulate everything after that. But server should kick players with too big lag so they won’t have an advantage. Or limit how far in past he will rewind.

    Like

  4. @Noguff, vv: this is how it should be, but it’s not. This is why Chinese hackers can compete on other regions, where their lag is huge. Please note that if the server could calculate when Betty saw Adam, it might as well use this ability for server-side visibility calculations. There is no need to rely on the client if the server does the calculation anyway.

    In PUBG, if my client registers a hit before yours, I killed you. This is why the “punch from the distance” hack can work. If the server would do any kind of resimulation, it would realize that the hacker was too far to punch.

    Like

  5. This is the unsolvable problem. Until the network infrastructure can deliver sub 20ms pings everywhere, all the time, this issue will always be there.

    Sure, you can bandaid it by doing things like artificially defeat aiming while moving, but players will just get cheat programs as all that is STILL on the client.

    The only way to “fix” this so it’s “fair” is to slow down the rate of change for the player’s movement vector by ramping up speed and reducing turn rate as velocity increases so the server can propagate your position and send accurate data.

    But if you do that, the players won’t like it because it’s “Too slow” and they will quit your game for whatever hack fest delivers faster action.

    This is why there are no actual, ‘realistic’ client – server online flight sims. It basically cannot be done while keeping the speed fast enough to be exciting. You have to slow the ships down to the point that they feel like they’re mired in molasses or otherwise completely game the mechanics.

    Like

  6. @Gevlon: FPS: Steam Settings->In-Game->In-Game FPS counter

    There is unfortunately no way to display latency/ping in-game, however there are 3rd party sites like this one, or you can just ping the server you’re currently connected to yourself.

    Like

  7. @Smokeman: this problem is already solved by World of Tanks: server side visibility detection. Adam’s client should be unaware of Betty’s location until the server decides that Adam sees Betty. Ergo:

    Start: Adam presses forward button. To make the game fast, on his client he reaches the grey circle immediately, but DOESN’T SEE BETTY.
    1 ping later: the receives the movement info and updates Adam’s position. It calculates that Adam and Betty are in line of sight.
    2 pings later: the clients receive this information. Betty sees Adam moving to the grey circle and Adam sees Betty appearing from nowhere.

    Hey, we just fixed half of the cheats too!

    I understand that this is very CPU intensive and the WoT server does this 90+% of its CPU time. But it’s not necessary, just in case of damage. If Adam and Betty doesn’t shoot each other, who cares if they were out of sync. Ergo: after damage is done, the server back-calculates the visibility and recognizes that Adam was the one who moved into the visibility of Betty and that Betty has disadvantage. Then simply add this time to Adam’s shots to Betty. If Betty’s shots arrived before Adam’s delayed shots, Betty won.

    Like

  8. Gevlon:

    WoT solves it by using tanks. Tanks are expected to be slow and take a while to accelerate.

    Here’s what’s going to actually happen if you designed a FPS like that: Adam turns the corner and doesn’t see Betty. Betty suddenly appears behind him and shoots him in the back. See, Adam went 5 more feet in the time it took the server to resolve all that and present Betty with a turkey shoot. Adam would have to stop and wait for the server to “catch up” whenever he ran past a corner. Or a tree. Or any thing, really. But Adam doesn’t want to do that, because it’s too slow.

    Adam then goes on reddit and whines about the shitty hackers on this shitty game.

    If you do what you need to do, have characters accelerate slowly and turn more slowly as the go faster, you allow the client to better predict where they will be. But then players will go on Reddit and bitch about the game being so slow.

    Now, look at this game, made when 14.4 modems were how you connected to online games:

    It’s spaceships, so you can get away with something you can’t do in a game where a “person” is the avatar, you can spin your ship around without affecting your direction vector. And as you thrust, your vector changes only gradually. This allows the server to do all the propagation and control of weapons. This was written in the late 1990’s and the entire game, with multiple arenas holding 64 players each, running on a single 386 class computer. Let’s just say I’m intimately familiar with the code that makes that game run.

    So CPU isn’t the problem, it’s the network. A factor I call the “Nyquist barrier” is how fast you can alter a vector’s propagation without having it result in wild variations on the other clients. The fastest way to break that law is to allow instantaneous direction changes in a system where the object travels many times it’s own footprint every ‘ping.’

    The tragedy here is that if player EXPECT the avatar to be quick on it’s feet, they will rebel if your game can’t do that. Unless the avatar is a vehicle that don’t have that expectation for.

    Like

  9. @Smokeman: you aren’t answering to my second suggestion. Namely, that the server should calculate the visibility after the shot (not minutes later, but one ping later) or simply accept equal input from Betty’s client. Ergo, if Betty saw Adam 200 ms after Adam saw Betty, then all Adam’s shots should be delayed by 200s in the calculations about who killed who.

    Simple example, with 100ms latency:
    Adam passes the corner, at 0 second, sees Betty and starts aiming
    100 ms later the server learns his new position and sends it to Betty
    100 ms later Betty receives this update and she can start aiming.
    250 ms after zero (and 50 ms after Betty received the update), Adam delivers a headshot that should kill Betty.
    400 ms after zero (and 200 ms after Betty received the update), Betty also delivers a lethal headshot.
    The server recognizes that Betty shot 200ms after visibility, while Adam shot 250ms after, so Betty shot first, Adam died.

    Like

  10. @Smokeman: also, instant spins are not how soldiers move. Try to deliver a headshot on the run for real! Or try to turn back while running. You fall over. Why can’t the game just use normal human body acceleration capabilities?

    Like

  11. First one: That favors high ping players.

    Second one: Because that’s what is expected. It started with the first FPS games, and continues. FPS games are like “flight sims” ala Chis Roberts’ games back in the day: Simple weapon mechanics, but exciting because of the fast action. Remove the fast action and you have a really boring game. Change the simple weapons to complex mechanics and you get a RPG.

    A Flight Sim game needs the motion to be on the edge of the brain’s ability to see and react for maximum “flow”, where as a RPG game is more about complicated attacks.

    Let’s look at Star Citizen as an example of what happens when the desire and reality clash badly. Chris Roberts made great games back in the day, but they worked because they were stand alone games. He thought he could do that with an online title, he was wrong. You can’t have the expectation of the fast action of his original games with the forced net latency of online as it exists today. The list of people buying ships for it is stunning, though. There is a lot of denial of reality going around.

    Now, back to the game I showed you earlier… why did it work? Because it wasn’t a flight sim per se, since it had an overhead view, the fourth wall was broken and the game became a hybrid of FPS and RPG games, The weapons were simple, but you could apply strategy in the choices of gear you put on the ship, and shots went slow enough such that your choice of direction to fly mattered as much as your strategy in selecting your gear.

    I agree with you, designers should slow it down. Soldiers don’t work that way except in movies, where they can get instant head shots from any position because of their super badness, so that is the expectation. If you don’t put that in your game, you risk it being rejected for the next hack fest that comes along. Then people that love the concept and think they can make it work come along and fail to deliver as well. It just never ends.

    Like

  12. @Smokeman: Why would the first one favor high ping players. In case of both players it calculates when the player could see the other and subtract that from the time of kill. Whoever kills the other faster from the time the other is in his line of sight wins.

    About the second: do you really call PUBG a fast-paced game? 25 mins gametime with 2-3 kills even for active players. Most of the game, even on streams of players who purposefully want to be entertaining you see nothing just guy walking around and picking up stuff.

    Do you think that if instant turns would be removed, people would get bored?

    Like

  13. @Gevlon

    The “perfect” scenario would be that the server/client updated each and every frame like it did in the games I mentioned earlier. The problem with that is that the game would be relegated to LAN only play. PUBG only uses somewhere between a 17hz tick rate and 30hz, which is painfully low even by todays standards, but it seems to be a necessity in a game with 100 players.

    Also, a lot of players make the false assumption that one-server equals one-game, or “instance” of the server software, which is not true. There could be multiple “instances” of PUBG servers on one server machine. Which makes sense seeing as the 17-30hz tick rate allows for more server overhead, hence more “instances” of the server can be run on the same machine. A definite cost saving measure.

    If, in the future, PUBG releases the server files and allows for players to host their own games, I can see how custom CVARS/server settings would allow for reduced player counts, which by default would allow for much higher tick rates and improve the gameplay tremendously. I don’t really see how they can get around not doing this, considering the devs have repeatedly said they are aiming at an e-sports venue.

    Like

  14. Its something I’ve observed for a long time in FPS games like Call of Duty: the person moving has the advantage of attack. Combine it with any form of intel: whether legitimate sensor pings or team-mates calling out a target or illegitimate hacks that let you see where everyone is despite obstacles, then the person moving and thus constantly changing their location/position has the advantage. A sniper popping up is more likely to be the killer than the sniper carefully looking for their target.

    Its why I prefer playing Mechwarrior Online: much of the BS you get from games like Call of Duty is negated by more realistic factors such as turn speed, torso twist speed. You see some of the problem start to creep up with smaller, fast mechs like the Locust, but then that is why Streak SRMs and LBX’s were made.

    Note: I only care about one game mode in Call of Duty: Capture the Flag. Most hackers fail to play the objective and thus lose, despite their amazing KDRs. They usually stick to Team Death Match as it allows them to have amazing KDRs and win too. AOE weapons also mitigate some of the “dead before I saw him in front of me” situations and thus I am a proud noob tuber in the game.

    I had toyed with the idea of getting PUBG, but after seeing it was Death Match or Team Death Match, I decided to avoid it. Now if I could find some BF2 servers actively monitored for cheaters I would be playing that rather than CoD:BO2 to get my CTF fix… though honestly a real dedicated CTF game would be ideal in my book.

    Like

  15. if i recall, Counterstrike has server-side hit detection (at least pre-Source), which is probably why its felt so amazing . lots of <60ms servers/players, server side calculations, and no BS.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s