Game Developers – Stop Failing at Online Multiplayer

Independent video games are all the rage lately. Minecraft and Angry Birds are the premiere examples of how games developed outside of the big commercial industry can become huge successes. This is mostly because of platforms like Steam and other digital stores allowing these games to get vast exposure. This is great because after years of genre cookie cutters we finally have a new fountain of ludic innovation in the video game world.

Despite the greatness in the indie video game scene, there is also a great deal of fail. Because indie developers lack the resources of giant corporations like Nintendo or Electronic Arts, there are certain flaws in their games that we have to accept. The controls won’t be as polished and smooth. There might be graphical glitches on certain video cards. The game might crash under weird circumstances. Without the money or time for thorough testing, this is just a reality of life we must accept. I forgive the indie games for these kinds of flaws.

That being said, there is one area in which failure is absolutely not acceptable. That area is online multiplayer. It seems that just about every week a cool new multiplayer game comes out on Steam, but the networking is a complete disaster. This is absolutely unacceptable. If it’s primarily a single player game with a small online component, then it’s no big deal if that part doesn’t work. However, if it’s primarily an online game then the game may as well not exist if the networking is busted.

As a programmer I know full well how difficult it is to write netcode that works. There are so many factors to balance including latency, synchronization, cheating, firewalls, etc. It’s no doubt a huge pain to write good net code. To those that have succeeded in this task, I salute you.

Even worse, writing netcode is a distraction from making your game. A game developer wants to make their game as good as possible. In a competitive online multiplayer game that means working on things like balance, controls, user interface, level design, and adding more modes of play. Every minute spent working on netcode is a minute a developer is distracted from the game itself. It’s no wonder that developers don’t spend much time on it.

That being said, if your game is primarily an online multiplayer game, it may as well not even exist if the netcode doesn’t work. I acknowledge that it is difficult code to get right, and that it distracts from the task of actually making the game. I just don’t accept those as valid excuses. Networking is hard, not impossible.

In 1996 Id software released QuakeWorld. The original Quake had netcode that was only suited for LAN play. QuakeWorld fixed it so that Quake could be played beautifully over the Internet. Tribes 2 was released in 2001. The netcode was so amazing that the game was playable with a 56k modem. We are living in the year 2011. No matter how hard the netcode problem is, it’s been a solved problem for fifteen years. I’m sorry. There is absolutely no excuse for getting it wrong.

One reason people fail is because they try to do something other than the classic dedicated server model. In my opinion, this is the way all non-MMO games should do online play. It’s a design that works beautifully for over a hundred thousand Counter-Strike players every second of every day. I’m all for trying new things. Rotary engines are pretty cool because they actually work. If you want to try to make a new kind of network engine, that’s great, but it had better work.

Not following this advice is how we get games like Frozen Synapse trying to use centralized servers that they can’t keep available. It’s a turn-based game, and they can’t even keep the server up. We also get games like Ace of Spades which wants to launch the game from in-browser links instead of typing IP addresses into the game itself. Most times when you try to play you just get a connection error. If these developers had done things the old fashioned way, they might be in better shape.

Another mistake developers make is they don’t build the networking in from the ground up. Having online play affects the overall design of your game in many ways. If you don’t code your game with networking in mind from the very beginning, it will be enormously difficult to properly add it later on.

Minecraft has this problem, and that’s why so many people keep making all sorts of server mods for it. Even with the mods I consider the Minecraft multiplayer too awful to be even worth playing. Notch has the money now. If he wants multiplayer to not suck, he should build a new Minecraft that is designed for networking from the start. They can call it Multicraft.

Civilization V is a massive failure in this regard. Not only are their lag and connection issues, but the actual game mechanics actually don’t hold up in multiplayer. The simultaneous turns give a huge advantage to the first mover in combat. When Civ IV came out, people stopped playing Civ III. The fact that many people are still playing Civ IV after Civ V has been out for months shows you they really messed something up.

Magicka is a game with a ton of network problems. Even after tons of patches, the game still gets out of sync. Diablo II was perfect in 2001, so why is Magicka flawed? The Torchlight guys have the right idea. They have no networking whatsoever in Torchlight. If you can’t do it right, don’t do it at all. They are making Torchlight II with networking in mind from the start. I have high hopes for them doing a good job.

Natural Selection is my second favorite FPS of all time after Tribes 2. It’s a Half-Life mod, so the networking just works perfectly. I was very excited for Natural Selection 2, and I pre-ordered it immediately. The developers started out on the Source engine, but abandoned it to write their own. While their engine is very impressive, they have failed at networking. Their experience comes from making mods, so they had no experience with networking. Perfect netcode was provided for them by the underlying engine. Natural Selection 2 is still in beta, but the networking is awful. There is insane lag. It gets better with every patch, but it is still nowhere near satisfactory. At least we’ll always have NS1.

You might argue that some of these games are commercially successful despite their sub-par networking. That is true, but they are very lucky. Introversion software released a great RTS called Multiwinia. When it was first released many people could not connect to any servers due to network errors. I don’t know if they eventually fixed it because I stopped playing. The broken online play prevented a community from forming around the game, and the game died. Compare that to Defcon, another Introversion game that has working online play, which still has a community to this day.

I’m sure everyone is also familiar with the Nintendo way of failing at online multiplayer. Friend codes and other weird systems create a huge barrier to online play, even if the netcode works. Borderlands has fine netcode, but reliance on GameSpy accounts makes it annoying as hell to get it running. Steam and XBox Live are both perfect. Every single game should integrate as much as possible with one or both of those systems. Why would you intentionally create a barrier to entry for your game?

Networking is hard, so it is obvious why so many game developers fail at it. It’s just incredibly frustrating for us as gamers to spend money on a multiplayer game that has broken online play, where there is really no excuse. Almost every game should use the standard model of dedicated servers integrated with XBox Live and/or Steam as fully as possible. It’s bad enough that so many games with big potential die out from lack of interest, it’s an even greater shame if it’s due to technological failure.

Right now I’m at a point where I buy all kinds of cool indie games only to be disappointed when the networking doesn’t function. I’m at the point where I’m not even going to buy games now until I have confirmation that they work. With more technological failures more people might take on this attitude, and it could be a serious blow to indie game developers, and thus a serious blow to video game innovation. Nobody wants to see that, so just make the networking work. There’s no valid excuse.

This entry was posted in Technology, Video Games. Bookmark the permalink.

2 Responses to Game Developers – Stop Failing at Online Multiplayer

  1. kc brass says:

    Pocket empires is an android market app only available on android platforms. This game is a great game in so many ways but is riddled with glitches and problems I’m sure due to what this article refers to. And the donations are ridiculous too. 10$ being cheapest one. There is little support and little response from an understaffed admin. Worse is critical part of game play is troop orientated but troops keep missing from game and response team is completely aloof when reeking to restore them. Which complicates things as a player playing hours a day. To be without crucial componants. Very frusterating because game is so good but there’s so many problems that if you are unlucky to face will ruin game for you.

  2. hcsama says:

    I would totally agree with your comment here
    – network code is not trivial
    – there are good working implementations
    – there is no excuse for not getting it to work properly
    The issue with the failures you are seeing is probably the usual “not invented by me” phenomenon. While people have long accepted the fact that instead of doing OpenGL or DirectX calls directly, they are much better of using graphics engines, this insight has not come for all areas of game development.
    We are convinced that in the same way that you have engines for many things already today, you also need an engine for multiplayer development. I am purposely not saying “network engine” because that is jumping a bit too short. There are network libraries but they really only move the problem up a few layers. You still have to worry about sending messages and the like. We are convinced that there is a much more productive productive way of looking at communication by simply abstracting it away as part of your game’s object model.

Comments are closed.