Heroes of the Storm Stuttering Explanation and Fix
Heroes of the Storm Stuttering Explanation and Fix by Electr0freak
First, I want to clarify the scenario we’re talking about here. This is the stutter that occurs usually when you’re connected to specific servers like ORD1 or US8 (press Ctrl-Alt-F in-game to see the server and your ping times) and is usually accompanied by a flashing Ethernet port symbol in the upper-left. Ping times are usually over 100ms when this is happening.
Warning: This is long.
Try to bear with me, or you can skip through to the TL;DR at the end. Seriously though, if this is hurting your game, it’s worth it to read through, isolate the cause, and investigate your options.
Why does this happen?
HotS is based upon the SC2 engine, and thus uses the deterministic lockstep netcode model common to RTS games (and some MOBAs, in fact). What this means is that as the game is played, all that is exchanged between game clients and the server are player inputs. The server and the clients run in lockstep, or absolute sync, at an internal “frame rate” for player actions. I don’t know what this rate is, but in many lockstep games I’ve read that it’s around 10 fps, or 100ms.
UPDATE: TyaArcade says that “…assuming it’s the same as SC2, it’s 62.5ms . The engine ticks every 1/16th of a game second.”.
UPDATE 2: barrett777 (owner of HotsLogs and coder of the system that reads replay files) has confirmed the HotS engine indeed still runs at 16 FPS.
When a player initiates an action, that action is displayed immediately on screen, but is actually performed server-side (and on all synchronized clients) during the next possible action frame. A good way to actually witness this is via the new HotsLogs in-browser match replays. This is effectively the replay file, which is a recording of player actions during the game, being played back to show the data contained within the action frames.
So why does it make my game stutter?
If a client doesn’t get any updates from the server or any acknowledgement that its own updates have been received for each action frame, the game effectively halts until any necessary information is received. It can’t render anything new and so it freezes until it has something to work with.
If this happens for long enough, your client is effectively no longer in sync with the game and you get the “Server is xx:xx ahead” message. During this time your game is trying to collect all of the actions it’s missing and simulate them at an accelerated internal rate until it comes back into sync with the server and the rest of the clients. HotS puts a server-controlled bot in place to input actions on behalf of your client until you return.
For those wondering why Blizzard, other MOBAs and most RTS would choose to netcode this way, the answer is simple: absolute fairness. Everyone always sees exactly the same thing, though obviously those with a lot of latency or packet loss can miss bits and pieces as the game stutters due to getting only intermittent action data.
A potential programming solution to the network-latency stuttering might be for the game to try to fill those gaps between action frames that are missing data by using a form of visual interpolation (prediction based upon past trends) to display to the player what it thinks is happening instead of just sitting still. Many games implement something like this to a certain degree to ensure smoothness, but it’s a double-edged sword. If the prediction isn’t accurate (and it can never be 100% correct, particularly in the clickfest of a team fight or objective battle) then ultimately you could witness scenarios where a skillshot appears to connect but does not, or a player teleports / rubber bands to a new position as more accurate information comes in to update the game.
However, this kind of visual inconsistency is generally unacceptable in a latency-sensitive competitive game environment and can be exploitable. It could spell the death of the competitive scene for HotS and this subreddit would be flooded with a whole different kind of rage! So before you blast Blizzard’s decision to netcode the game this way, consider the alternatives. I’m not saying there isn’t room for improvement, but we’d need to know a lot more details about HotS netcode (Blizz, plz?) before we could criticize much further.
Why are there networking problems?
- This can be for a few different reasons. One could simply be a local networking issue between your PC and your router. If you’re on WiFi, interference or overlapping channels with other WiFi networks could be a big cause of the issue. The capacity of your connection between your router and your ISP could be maxed out because of someone doing heavy downloading or uploading on your network.
- It could be an issue on your ISP’s network. Traffic leaves your router and heads to your local ISP’s CO, or Central Office, to get told where to go next. If you’re seeing a lot of packet loss between your router (probably 192.168.x.x) and the CO, either there’s an issue somewhere out on the wire, something is maxing out the capacity of your service with your ISP, or your ISP has too many people sharing the same network resources in your neighborhood.
This type of oversubscription is common and can particularly be a problem if you’re on a cable connection, as your modem will spend a lot of time jumping between frequencies on the cable to try to find ones that aren’t really busy. Past that even, your ISP may have issues with capacity or routing performance past the CO as traffic goes to an internet gateway where it’ll be handed off to another service provider to take to Blizzard.
- Thus it might also be an issue with internet latency between your ISP and Blizzard. The key word here is between. This may not be an issue with your ISP, it may not be an issue with Blizzard, but somewhere in-between. For example, there’s a known issue currently between some service providers like TWC and the ORD1 server because of internet transit link congestion issues over intermediary service-provider XO Communications. These issues tend to manifest during the busiest hours for that link.
- And lastly it could be entirely on Blizzard’s end, or their service provider (AT&T in the US from what I’ve seen). While certainly possible, if this was commonly the cause, it’d be a problem foreveryone. Since it’s usually just a portion of players having the issue, it’s usually the first two scenarios that are the root cause.
How do I find out exactly what’s causing my problem?
First, try playing in Try Mode, which runs completely client-side. If everything is great there, proceed. If you still get some hitching / latency, try:
- Delete your shader cache by deleting the
C:\ProgramData\Blizzard Entertainment\Heroes of the Storm\Versionsfolder (hidden directory, paste into Windows Explorer or Run line) and then allowing the Battle.net launcher to update
- Switching HotS to 32-bit client mode via the Battle.net launcher options
- Ensuring your PC/laptop is not in any power-saving mode
- Reducing graphics settings to lowest (for example disabling shadows)
- Set sound quality to low (it eats up a surprising amount of system resources).
Assuming Try Mode works great, the best way to investigate further would be to run a MTR test from http://us-looking-glass.battle.net/ to the HotS servers and diagnosing the results. However, recently that looking glass has not been working well.
Alternatively, you can run a pathping/WinMTR test from your side (open command prompt aka “cmd” and type pathping followed by the appropriate IP listed below) while your performance to that server is being consistently poor and while you have no other downloads or uploads running anywhere on your local network.
US8: 220.127.116.11 ORD1: 18.104.22.168 SG1: 22.214.171.124 SA1: 126.96.36.199 AU1: 188.8.131.52
Use the MTR Analysis article guidelines to evaluate your pathping (principles are the same) or download WinMTR if you want to be able to follow word-for-word. Please do not use Blizzard’s pathping article as a guide. Compared to the MTR article it’s garbage and contains blatant misinformation that could send you barking up the wrong tree.
Essentially, look for a point on the path to the server in question where you see latency or packet loss jump up and remain that way all the way to the end. That last part is key; some devices on the internet respond to the pings sent to them by these tests at their leisure, but will still transmit pings sent anywhere else as quickly as possible. Thus you should be looking for a point where latency or packet loss occurs and remains consistently bad at all subsequent hops. Again, that MTR Analysis article does a pretty good job demonstrating what you should be looking for.
What do I do with this to actually improve my game performance?
- So if it’s an issue occurring on your local area network (any packet loss or double-digit latency on the first hop or any IP starting with 192.168.x.x), you should switch to playing from a wired connection if you’re not already and stop all other heavy network usage while you’re playing (people watching NetFlix, torrent streams, watching HD cat videos on YouTube, etc). Some people may suggest QoS as a solution, and it may be if the type of traffic maxing out your connection is TCP and your router supports per-user or per-connection bandwidth limits, but things like streaming video are difficult to throttle effectively inbound.
If you’re on a wired connection and there’s no other downloading / uploading going on on your local network, and you’re still seeing a lot of packet loss to your router at hop 1, consider swapping your ethernet cables and making sure they’re not sitting on power cables, upgrading your router firmware, or possibly replacing your router completely. If you need to rule out your router and your local network, plug your PC directly into your modem and see how your game performance is then. Don’t leave your PC this way though; it’s just asking for a botnet to discover a security vulnerability on your PC to exploit.
If it’s an issue occurring between you and Blizzard as indicated by your pathping or WinMTR, you have a few options:
- Call your ISP if the latency and packet loss is happening between your router and another service provider. Please be sure that you’ve run the pathping or WinMTR when your service isn’t under load by heavy utilization like large downloads, streaming HD video, etc. Otherwise they’ll just laugh at you and try to sell you more bandwidth. Consider a DOCSIS 3.0 cable modem if packet loss and latency between your router and your ISP’s CO happens consistently during certain hours of the day; DOCSIS 3.0 has the ability to utilize multiple channels simultaneously which could reduce the impact of your ISP oversubscribing its userbase in your area.
Also remember that 1 hop here or there on your pathping or WinMTR with high packet loss or latency doesn’t mean there’s a problem; those are simply network devices configured with a security mechanism against DDOS. It’s when you see multiple hops in a row with the same packet loss or high latency that you can be sure you’re seeing something that’s actually impacting your performance. However, if the problem is happening on another service provider’s network, good luck getting your ISP or anyone else to do anything about it; you should turn your attention to the further options below.
- Play during off-peak hours. If the issue is related to internet congestion, playing in the middle of the night for your region when the rest of the world is asleep or early in the AM should mean less congestion. Keep in mind though that if you’re on the east coast, 11 PM is still 8 PM on the West Coast; lots of people are still watching NetFlix and filling up internet pipes. This graph (though a little dated) can give you a good idea as to when internet congestion issues may occur.
- VPN into another service provider that follows a different path to the server. I’m not going to explain this further, Google can take it from here. Tricky part is finding a public VPN that isn’t already slammed with use. This can also significantly average latency to the servers, but as long as it doesn’t go up into the hundreds of milliseconds it should be an improvement.
- Completely block the servers you are having issues connecting to via settings in your router, using Windows Firewall, or a 3rd-party firewall. A lot of people would link this common thread on this subject, but I don’t think the IP range listed there works anymore.
You can block the IP using the list previously provided above, or by running command prompt as administrator while you’re in-game connected to the laggy server and typing netstat -bn. Look for the Heroes of the Storm client IP, finish your game (don’t be a jerk) and then block that IP. The downside to this method is that the game may still continue to try to connect you to the server in question over and over, so it may take a number of tries to get connected to another server that works. Supposedly this method is safe to use without gaining leaver status. NOTE: Apparently the party leader is the one that decides the server everyone connects to, so if you’re using this method or the next one, you should be party leader (otherwise everyone else might connect to a server you can’t join).
- An alternative method I’ve heard is to fool the game into connecting to different servers. I’d heard this method wasn’t working right (the file contents would change match-to-match), but my guess would be that setting the file in question to Read-Only would address that issue. The original thread got deleted, so I’m not sure if that’s why or if Blizz isn’t happy about the prospect of players messing with game files. File this one under use-at-your-own-risk/may-not-work.
- The final option is to switch to another ISP. Sound crazy and over-reactive? Not really. You probably already have 2 ISPs… your cable service provider and your cell service provider. I address my ORD1 problem currently by setting my phone up as a hot-spot and connecting to it. Average ping times tend to sit at a solid 70ms and my game is buttery smooth when I do this, as my traffic routes through non-congested internet links. The only thing to be careful of is your usage; most cell providers have limits in place, and while the average match is 5-10 MB of data, it can add up quickly.
Wall of text, gimme the TL;DR!
- When network latency happens, HotS game engine can’t display anything further until the necessary information comes in. This is caused by latency on your LAN, or out on the interwebs (either on your ISP or potentially past it on some other intermediary service provider).
- If it happens in Try Mode, it’s something specific to your PC. I list some things you can try.
- If not, you can run a test to find out where latency is happening. If it’s on your LAN, I list some things you can try.
- If it’s out on the internet, you can fix it by VPNing to another ISP, blocking the servers you’re getting latency to so you can play on the ones that perform better, trying to trick the game into connecting you to better servers to begin with, or connect using a cell-service provider or some other alternate connection.
- Basically, if you’re a Stuttering Stanley, stop reading the TL;DR and go read the whole thing!
I hope this helps some of you out there. GL, HF!