Overwatch is a fast-paced online multiplayer FPS game. Like many, if not all other games of this genre, Overwatch employs its own client-side prediction. Client-side prediction is responsible for making the game feel responsive and smooth when playing on online environments where there will always be some latency involved. It tells you what is most likely going to happen based on the current state of the game.

If you fire Genji’s shuriken at an enemy, you might see impact visuals before you hear the hit sound that confirms that you have good aim. Your client informs you of the most probable outcome if all else remains constant — your target continues moving in the same direction, no mitigation abilities being used, etc. However, there are other times where you see all the red impact visuals of your shurikens finding their mark, yet you do not hear the hit sounds nor see damage being done to the target. This is one of the downsides of client-side prediction; the client has incorrectly predicted the outcome of the action, leaving the player with frustration of ‘no regs’ shots.

Genji has no chill…

As with all forms of prediction, they can never be perfect. Predictions rely on assumptions, and in this case, the client assumes that the target will travel in the same direction and speed at the time of firing the shurikens. All it takes is for the target to change its movement after you’ve thrown your shooting stars and you could probably see the misleading impact visuals that just barely come out of the target’s model. Prediction errors tend to occur more with projectile weapons as it involves a greater room for error. A projectile aimbot can be made in Team Fortress 2 to almost accurately land every rocket on a target moving in a consistent manner. However, with a player controlled target and air movement, the target can stray off the predicted path, leading the aimbot to miss their mark. The same principle of assuming a constant movement path is used for client-side prediction.

While client-side prediction keeps the game play awesome and playable online, it also results in some vexing and confusing moments, leaving even experienced players mystified. Most notably, with Roadhog’s Chain Hook as it produces the most visible feedback for an incorrect prediction. Example1 where the Hook seemingly detaches from Genji, and Example2 where it awkwardly changes target.

How do we differentiate a prediction error from Chain Hook’s line of sight requirement, you may ask. This is where server reconciliation comes into play. There are a few indicators on the game client to affirm that the server has acknowledged a hit registration from the ability used, such as the ‘x’ hit marker on the crosshair, hit sounds, and the ‘Fire’ points gain. A Chain Hook that successfully lands but disconnects from lack of line of sight would still award the ‘Fire’ points. In Example1, no ‘Fire’ points was awarded, implying that the client predicted wrongly as Genji changed his positioning quickly with Swift Strike just before the Hook landed. The client first assumes that the Hook would land given the situation when the ability was used. However, the server then tells the client that due to additional inputs from the target, the Hook actually misses. The client then tries to correct itself and returns the Hook back to the user, making it look like it detached after landing on its target.

Although prediction errors tend to occur more often for projectile weapons, hitscan weapons are not exempt from it as well. Instead of unexpected input from the target or external influences, prediction errors for hitscan usually happen when the player experiences a connectivity loss. When a player has connection issues, the client would predict the most likely positions of the enemy, and as usual, that isn’t always accurate. As a result, a prediction error by the client would result in the enemy model being drawn in a different place compared to its hitbox. This is where hitscan shots can seemingly connect the target model and yet still miss, as lag compensation in Overwatch empowers the server to make decisions based on what is seen on the server, rather than of the client.

Possible Improvements

Overwatch’s client-side prediction is really great, but I do think there’s some improvement to be made to further enhance the players’ experience. One possible way is to give the player the option to almost completely disable client-side prediction, leaving behind the ones used for player movement and other absolute necessity. However, this would only be useful for players who have low ping and very stable connections, as game play without client-side prediction could get very rough when the connection falls just slightly below the desired level.

Another way could be to give the option to toggle prediction for certain abilities. They could do it for every single ability or leave the option only for specific ones such as Roadhog’s Chain Hook and Reaper’s Wraith Form. These abilities lock the player from carrying out other actions besides movement, and it doesn’t adversely affect the player’s decision making too much regardless of the ability’s success — for example, an experienced Roadhog can probably divert their aim in time after a successful Hook. Turning off prediction would result in a delay in response as to whether they were successful, but it lets players try out what they prefer.

Ultimately, such options empower the players to alter their game play experience to suit their preferences.

Wrapping Up

For those previously unaware about client-side prediction, I hope I’ve managed to shed some light on the matter to help you gain a grasp of this matter. While the implementation of client-side prediction varies from game to game, this general article might interest you as it delves deeper into its intricacies yet remaining very digestible.

Experience Tranquility~

sandshrewz