This post here gives a good understanding of where we’ve been.

But here I want to discuss the technical issues that have plagued the built in MP match-making.

I’m going to start this by sounding like a weasel but it is also the truth: The Demigod MP match-making is basically the same as nearly every other RTS out there. It’s no better or worse. The difference – the fatal difference – is the demographic of who is trying to play multiplayer is radically different and the number of people playing multiplayer is radically different. In short, Demigod’s built in MP, as it is today and has been since launch, is no better or worse than other RTSs on the market today.

Now, before some of you hit the flame key, let’s talk about why the experience of people using the built in MP match making has sucked so bad.

First person shooters vs. Real-Time Strategy Games

In games like Call of Duty or Counterstrike or Left4Dead, you are largely dealing with people picking a server from a list, typically based on ping time, and joining it. The only connection one needs to make is to that server and that server has typically been set up to be as easy to connect to as possible.

In a real-time strategy game, like Supreme Commander or Company of Heroes the connections are peer-to-peer. Each player has to connect to each other player.

GPGNet (Supreme Commander)

In Supreme Commander, Gas Powered Games developed GPGNet. The way it worked is that a person would create a game. Subsequent people would connect to the host and then enter the lobby. The game would then try to connect each of the players up and if they failed to connect to one another, they would get a yellow ping and the host would have to eject them.

However, the demographic of Supreme Commander is significantly different from the demographic of Demigod (as SupCom players here can probably tell you). Casual players of SupCom played mostly single player and the people who played SupCom online tended to be technically savvy and knew to port forward 6073 (that’s the port it used). And people who didn’t know what they were doing either quickly got ejected from games or learned to set up their routers.

Demigod

Demigod’s setup is similar to GPGNet with a couple critical differences. First, to get into the lobby you currently have to connect to everyone who is in the lobby before getting into the lobby. However, if you enter the lobby at the same time as someone else, you will get a yellow (or red 0) ping to them. If you can’t connect to them, someone will have to leave and try again or need to be booted out.

Super NAT

To improve connectivity we worked with RakNet to develop a kind of Super NAT Facilitator. The idea is that we would make it so that everyone could connect to each other and avoid the whole "people need to open their ports” thing entirely because we knew Demigod would be a multiplayer heavy game. Unfortunately, the system developed is resource intensive on the servers and when thousands of people showed up, the system started to fall apart.

The result is that people could not connect to people easily inside of the lobby because of the increasing lag (not ping lag but lag from the servers being overloaded) and users would just sit there waiting in frustration to get into a game.

During the first week, we basically lost out because of the well known warez users hitting validation and check for updates so we couldn’t even begin to dig into the issue of the NAT servers being overwhelmed until last week.

Super NAT fails

But we have encountered edge cases that have turned out to be catastrophic. Over the past year it seems, an increasing number of ISPs (we believe, we don’t have proof so I’m not naming names here) are trying to shape their bandwidth use and doing things that make peer-to-peer connections more problematic (bit torrent uses P2P).

The net effect is that some people can only literally connect to 1 or 2 people and are then blocked by their ISP. So what happens? Other people try to join a game and they cannot connect to that guy who is in the lobby because that guy can’t accept any more connections. So then the Super NAT goes into play to try to find a way which in turn takes more and more resources on the NAT. You get even a handful of those types of users and it gets to be a real problem.

Blocking Port 6000

Then we find out that some routers block incoming traffic to port 6000. If you very quickly get a “NAT connection failed” that is why. You will need to tell your router to knock it off – port forward UDP traffic from port 6000 to your IP (or just have it unblock that port). I only know of a few routers that do this (Some Dlinks for instance).

So why is this taking so long to fix for those people?

The reason we have to connect to players in the lobby before putting them into the lobby is because Demigod, not us, handle the in game connections. We hand off the connection (the socket) to Demigod once users are connected. So we’ve had to spend time developing something that will let us connect people who are in the lobby even which is some very specialized coding.

We have also had to work on setting up Proxy servers for people who just can’t connect and that’s been no trivial thing either.

The build we put up tomorrow is expected to let people get into the lobby as long as they can connect to the host and then connect people once they are in the lobby first by trying direct connect (that’s if you port forward 6000 to 6200 to your PC’s IP) and then if that doesn’t work to use NAT facilitation and if that doesn’t work Proxy servers. But it’s complex with a lot of moving parts being developed by a team that has been working non-stop for weeks.

Will everyone be happy?

No. Because there are people out there for whatever reason just can’t connect to other people on the Internet. There aren’t many of them but at least we can work with them and see what we can do without those users impacting everyone else.

So that’s where we’re at.

Personally, I think this kind of stuff should be built into the OS. As a game developer, I can’t even begin to express how frustrated I am that we have to do all this. If this were an Xbox game or a PS3 game, we wouldn’t have to do any of this. We’d simply hand the user off to the manufacturer’s already included super mega system and it would take care of it. I could rant for hours on (as you can imagine, I’m extremely tired) how ridiculous that our reputation, game reviews, and our technical competence are being brought down based on how quickly we can implement something that should already exist by the OS maker (maybe Games for Windows Live will eventually evolve into this I hope).

We expect to put up a new BETA of this tonight and if all goes well release it tomorrow afternoon. That’s the plan. It’s not a promise. Given what I’ve learned in the past 3 weeks, when it comes to Windows networking, router manufacturers, and ISPss never assume anything.