As of late, there has been a lot of discussion about netcode, why it’s important, why Japanese developers should do better by netcode, and so on. Every now and then, this gets discussed in small pockets of the internet, but (and correct me if I’m wrong) ever since Sajam became vocal about how we as consumers should demand better quality from developers the netcode discussion has only grown louder. Not only that, but the announcement that GGPO has gone open source has also stirred even more conversation. So today, we’re going to talk about netcode. This’ll be more for the group of players that don’t understand why these discussions are happening or why they’re important. For the more informed, have a read and add your own information or let us know if we skipped too much. This discussion is vast, so we’re bound to miss a detail. But we hope everyone leaves this more informed about why netcode is so important and why we should definitely be demanding better or our fighting games.
Before we can talk about the kinds of netcode there are, we need to discuss “ping.” Ping is basically the amount of time it takes for information to be sent from your console/PC to one player and then back to you. It’s measured in milliseconds, and the lower the ping then the better the connection. Ideally, ping around 90ms is the average you’d like to see in a fighting game, as that translates to about 3 frames to send and recieve that information. Ping is affected by your network, so the better your network conditions, the better the ping. This is why you’ll see so many people shame those who use wifi. Even the best wifi conditions aren’t as stable as an ethernet cable. Those are just facts. Even then, chances are the average wifi conditions are not the most ideal for network play. Is it possible to have low ping in wifi? Certainly. But the chances are better with an ethernet cable. However, none of this is neither here nor there, as the purpose of netcode is to do it’s best to make each match feel as close to offline as possible under any network conditions. While it may be understandable to mock those with wifi, ultimately developers have to make the decision to make better netcode to help compensate for those under less ideal network conditions.
Let’s now assume that you and your opponent have great network conditions and are now able to play. Your games are now in a “lockstep network” which basically means your games are talking to each other on how to display the game as accurately as possible. The method of how these games talk is the core of this discussion: the Netcode. How information is gathered, translated, and displayed is all done by the netcode. Most, if not all, fighting games use this more peer to peer method to varying results depending on the netcode. It has to account for spikes and dips, throttling, troubles with the ISP, and so many other factors. You could be fighting someone across the country, increasing the ping between you all. You could be fighting someone in a rural area. You could be fighting someone who has Comcast and it suddenly drops because Comcast is garbage. Network trouble is unpredictable and it isn’t always the player’s fault. Even players with ethernet cables and 10 gigabit internet can have troubles. That’s when the netcode should be able to step in and make the experience as seamless as possible.
One of the methods this happens in is “delay based netcode.” To put it simply, delay based netcode tries to compensate for variable pings by making your inputs delayed by a certain number of frames. The frame threshhold is usually around 3 frames, but can go higher depending on the connection. To the most casual players, the difference may not be immediate. But to those who practice offline, only to then jump online with your muscle memory with timings down pat and be confused as to why the timing feels so weird, this is the reason. Delay based netcode adds frames onto your inputs to compensate for the ping. Some games like Guilty Gear Xrd use this sort of netcode and…well, it isn’t the best experience. In a game like that, reactions are crucial. So being held back 3 frames is already a problem. Then comes the other problem about delay based netcode: it’s really sensitive.
If it detects even a slight hiccup in the network, the frames it delays you by rise significantly or can sometimes halt the game entirely until it can get a handle on how many frames it has to delay it by. Have you played a game of GGXrd and noticed the frame counter is way off? It’ll say 3 frames, but it feels more like 19? Well, at one point it was 3. But the changes happen so fast and so drastically, the counter couldn’t keep up with the dip. Now, if you’ve heard all of this and thought “Wow, delay based netcode sounds like trash” that’s because (compared to the alternative) it is. No one wants to go into a match already having to change timings on the fly to compensate for the added frames because of the netcode. Is it impossible to do? Not really. This netcode is why the option to add network lag in training mode exists in some games. Though, even that isn’t perfect. More often than not, those options are a little too generous on what they think a 3 bar connection feels like versus what one actually feels like. So shoutouts to the games that add specific frames.
Alrernatively, there is “rollback netcode“, a netcode that is preferred in most games because it doesn’t add input lag into your inputs. Every input you put in is the same as offline. Then, what about your opponent? Well, in good conditions, your opponents inputs are sent after your character acts and the netcode performs the rollback, correcting mistakes and putting in the proper inputs. Sometimes it’s visible when you see characters do a bit of a jump in a split second, but more often than not it’s invisible. The only time this gets really bad is when the ping is too high. Then you get those moments where one character is jittering around or when you have a moment where you saw a specific action happen only for it to be undone and something completely different happens. The worst offender for this is Street Fighter V. I cannot tell you how many times I landed a hit only for rollback to happen and oops! They actually blocked. It’s one of the many criticisms of SFV.
Now, while rollback netcode is preferred, it isn’t perfect as evidenced by SFV. Another game that had this was Street Fighter X Tekken, which displays one of the biggest hurdles of rollback: you have to build your game around using that netcode or the online experience will suffer for it. If you’ll remember, SFxT on launch had a host of glitches and bugs relating to sound cues and some animations. That’s because when rollback has to occur, it has to replay sound clips and frames of animation nearly instantly. To compare, there’s Skullgirls. Skullgirls uses GGPO, an open source rollback netcode, that allows it to have one of the best online experiences a person can have. I’ve never played a game of Skullgirls online and it was unplayable and that’s because it was built with GGPO in mind. Capcom, using their own in-house rollback netcode, didn’t seem to take this approach and as a result, they had plenty of issues going forward.
There is a lot more to these different netcodes, but there are much more comprehensive guides and blog posts out there about it. Consider this an intro course into these topics. Now, why this matters to you. Most people these days play online. That’s just a fact. Even those who are tournament players play online as much as casuals do. That experience should be as seamless as possible under as many conditions as possible. However, it seems that Japanese developers especially don’t quite value online as much as the offline experience outside of Japan. Which only hurts us in the end. Some think the solution is making an option to pick out people who play wifi, and I’m on board with that. However, I think the bigger issue at hand should be making a strong enough netcode that wifi players won’t be such a nightmare to play against. From online training modes for people who are far away and want to improve to people who want to run online tournaments, online play matters more than players realize. A bad netcode means no players online. And for those who bought the game solely for the online component, that means this is a useless game to them. Look at GGXrd, Samurai Shodown, KOF 14, and so on. Those online experiences were hot garbage and now their online player base is abyssmal.
I encourage those interested in netcode to read tthis incredible article here that goes more in depth about these different netcodes, how they affect your games, and show examples that are easy to understand. Especially about rollback netcode. I wasn’t able to give all the details, but the design and implementation is impressive to say the least. It may help you understand more what I’ve tried to say here in a more digestible format because that article is extremely in-depth. But here are the takeaways I want you all to have from this: an understanding of the netcodes at work, why we should press developers to do better by us, and why people don’t like playing the wifi players. As I said, if you have anything you wanna add or any questions, feel free to reach out to us and let’s keep up this discussion so we can get better online one of these days.