Is it possible to make a Peer-to-Peer MMORPG in BGE?

I have this idea, about an open source game project. Is it possible to make a MMORPG in BGE but only Peer-to-Peer, totally without a central server, so there are no costs involved on the side of the project developers. It’s just an idea, I’m not yet thinking of how the game-play would be or the story, just technically, is it possible. Well, I was thinking that each Peer would run it’s own world in-game, and then Players would travel or teleport to someone else’s Peer-world and could play there as long as someone is online, if he goes offline, the Player would be teleported back to his own world, and could then connect again to another world and play there, so it would be MMORPG, but different. It could be interesting in terms of Player interaction. But the main reasoning, is that there are no costs involved, no server.

sure … I do not see a problem in that. You need to develop everything in Python by your own.

Could you explain in broad steps, how to do it technically? Just in major steps, so I have an overview. I’m mainly interested in, if there is no server, how do the peers actually find each other, how should it be done?

They don’t. You can’t scan all the internet just to see who is listening for guests that want to play in a given world (technique used in local networks), so you need to centralize at last the IP adresses. That however shouldn’t cost you anything since there are a lot of free hostings out there that support databases and php (and with that you have enough to make a script that mantains a list of IP adresses). Or you may even find a service that does that for you (doesn’t steam do this?)

Now on the other side, unless you happen to have a team of engineers and professional artists with you, I doubt you’ll ever finish such a game (not if it’s supposed to have a minium of quality).

You need a lobby.
That is basically a server, but the purpose of a “dictionary”. Each single peer could act as lobby too, knowing other hosts. But for initial “finding” you should provide some public available address to a lobby.

Hint: have a look at Open Cobalt. It uses an open world peer to peer architecture.

I tried to make peer-to-peer game and it is not easy. The biggest problem is symmetric NAT because it uses random port to connection with every different IP. You can use hole punching but it is really hard if you have more than 2 clients. In my opinion the best and the cheapest way is using VPS as proxy server. It cost only few dollars per month, but i found hosting in Poland where you pay only 0,01PLN per hour end you pay only when you using it (you can every time save a backup and delete VPS to save money). Sorry for my english.

This does not matter. A lobby would you provide with address and port.

@Monster, I don’t think so. About 70% of NAT has protected by advanced firewall. It means you can receive packets only from address where you sent something. For example: if you send packet to client A, NAT will open free (mostly one of the highest) port like 62114 to connecting only with this client (client A have to send packets only to this port or it will be blocked by NAT’s firewall). To connecting with client B NAT will open another non-used port. Sometimes it is next one (62115) but sometimes not. Lobby has only informations about clients IP addresses and ports used to connect with it, but probably they won’t be able to connect each other. Lobby will works only when clients have static IP or forwarded ports (but sometimes it don’t work).
Peer-to-peer is possible but is hard to connect more than 2 clients each other without any problems. In my opinion proxy server is the best solution.
I know my english is really weird but i hope You understand what i wrote.

typically you connect to the lobby to tell that your peer it available. This establishes a connection already. I’m sure this can be used to establish a connection between other peers too.

But I’m not into this topic. I just know that connections between different peers is possible. You might need to configure a proxy.

Anyway this are facts to keep in mind.