Real-Time Illusionists: The State Of Shooter Netcode
The state of shooter netcode
On the surface, the core netcode of your average online shooter hasn’t changed a whole lot in recent years. But dig a little deeper, and there’s a wealth of tweaks, improvements and, in some instances, backward steps that greatly impact the all-important feel of playing shooters online.
Back when we were all high-ping bastards (HPBs), online multiplayer required players to take their latency into account to hit players running across their aim. Even for shooters that used hitscan ballistics, like Counter-Strike of old, a player with, say, 200 latency would have had to lead their target by 0.2 of a second to ensure a hit.
As HPBs became low-ping bastards, developers advanced netcode technologies to further push the illusion of real-time interaction between players. In reality, even though fast broadband connections facilitate interactions measured in milliseconds, all players connected to a server are effectively interacting with the recent-past ghosts of other players.
It’s easier for comparatively slower-paced games, such as realtime or even turn-based strategy games, to sell this illusion. But for fast-paced genres such as shooters that require constant authoritative validation (from the server) to maintain the illusion, things can start to fall apart.
Basically, your average online shooter is constantly sending and receiving updates about your individual input and measuring it against other player’s input and, most importantly, what the server accepts to be the true state of the game world at a particular point in time. For input that doesn’t clash with other players, such as movement commands, this tends to be handled client-side (on your gaming machine) and is automatically accepted as true.
The only time it’s rejected, and usually after the fact, is if the server determines that your movement contradicts with an intersecting input from another player. This might be as simple as colliding with another player. It also might mean you had already jumped off a ledge on your screen, but you’d been headshot on another player’s screen before or during the jump. Remember: you’re interacting with the recent history of other players, so it’s actually less important about what you see now on your screen as it is compared to where you were milliseconds ago.
This is also why it feels like you take damage behind cover in certain games. Counter-Strike: Global Offensive uses 64Hz tick rate as standard, and even offers the option of 128Hz tick-rate servers. Tick rate is a fancy term for describing the amount of times the server sends updates to players every second. It’s complemented by the player update rate, which is how frequently updates are sent from player to server. Generally speaking, the higher the tick rate, the smoother and more accurate the online experience.
The Battlefield series was, not so long ago, forced to overhaul its netcode, including its tick rate, because of the disastrous launch of Battlefield 4. At launch, Battlefield 4 players suffered from unreliable servers, rubber banding, and other related netcode issues that ruined the online experience. Fastforward to years after release, and Battlefield 4’s tick rate was doubled
Hitscan vs projectile
In basic terms, projectile-based ballistics modelling is used in games that require players to take into account real-life factors such as bullet drop and the time it takes for a round to reach a target. Basically, bullets are modelled as objects in the world. Hitscan games or weapons hit the target instantaneously. from 30Hz to 60Hz as part of a netcode renovation.
Battlefield 4 also introduced clever technologies that tamed the otherwise overwhelming information that comes from 64-player servers that involve infantry, vehicles, and destructible environments. Basically, an invisible field-of-view cone in front of infantry, and a larger one in front of vehicles, updates at a faster rate, and everything outside that cone, which is less likely to impact the player, updates at a slower rate. This helps maintain the real-time illusion and reduces server demand.
Server demand was a hot talking point for Rainbow Six Siege, which recently pushed back a core DLC drop to prioritise Operation Health: a back-end refurbishment designed to improve online play. One of those issues was server demand, which resulted in crashes (both client and serverside), higher-than-normal latencies, and problematic hit registration.
Hit registration is one of the most complained about factors for online shooters. When Call of Duty games dynamically switch between dedicated servers and peer-to-peer (P2P) hosts, assumedly to facilitate faster matchmaking, they create issues. CoD’s client update rate is so low
– a mere 10 updates per second in P2P matches – that it can create a phenomenon called ‘super bullets’.
Super bullets occur when a gun’s fire rate is faster than the game’s update rate, which can result in players taking double damage from fast-firing weapons. One of the bigger issues with P2P matches, though, is the player who’s automatically designated host effectively has zero latency, because their machine is acting as the server.
The host player has a distinct advantage over other players whose inputs must be sent to and confirmed by the host machine. On top of this, automatic host selection may pick a player in a different region or with a lowbandwidth internet connection. Additionally, there’s no control over the performance of that hosting player’s machine (which is more important on PC), whether they’re using Wi-Fi to play online (which can cause packet loss), or other networking factors that can impact the real-time illusion.
Even games that use dedicated servers aren’t free from netcode issues that impact the smoke and mirrors required for an online game to feel responsive. Anecdotally, smoke is one of the hardest things to keep fair online, because client-side smoke propagation is often different between players. This is true of Playerunknown’s Battlegrounds, which also wrestles with other netcode issues.
There’s noticeable lag at the beginning of matches, which isn’t so bad if you don’t land with enemy players, but is immediately and frustratingly noticeable when input commands don’t register, despite a client-side animation playing on-screen.
One of the more concerning issues is that Battlegrounds uses a 20Hz tick rate, which is likely the
PLAYERS ARE EFFECTIVELY INTERACTING WITH THE RECENT PAST GHOSTS OF OTHER PLAYERS
cause of some of the hit registration issues, synchronisation concerns, and also why it appears that players take damage behind cover. This latter point is particularly egregious because of Battlegrounds’ unique sound design that already makes it hard to pinpoint the location of the player shooting at you.
If you take damage behind cover from a shot that actually hit before you reached cover, you might be fooled into believing the enemy is behind you. It’s something that Blizzard addressed not so long ago in Overwatch by bumping the tick rate from 20Hz to 63Hz.
Regardless of the online shooter, the reality is that no matter how fast an internet connection is, players are at the mercy of a game’s netcode and the network models supporting it. Netcode has improved in more recent years, but there’s still room for refinements. A push for network-model uniformity across online shooters would make them feel closer to the responsiveness of a single-player shooter.
The higher a game's tick rate, the smoother the online experience.