Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views


Sign in to follow this  


Asheh told me about an interesting idea he'd had last night, and I'd like to post it here because it's a good one. I hope he won't kill me too much.

The basic idea is this: in an MMO game, situations can arise where your party is the only one in a situation (e.g. Final Fantasy style battles). Furthermore, people in a party may sometimes be physically/geographically near one another - at the same university, for example, or working at the same office.

When that happens, you can 'isolate' that group of players and nominate one of them as a temporary server - turning the game from a high-latency MMO into a low-latency LAN game. So you can have realtime FPS-style battles within the game world.

The major issue is security. If someone hacks their copy of the game and is then nominated as a host, they (or their entire party) could gain unfair advantages - invincibility, choosing the items that monsters drop, etc. The sensible solution, IMO, is a transaction log that the host records and sends to the master server after (or during) the local session. The master server can then check that log for both viability (are players teleporting around? Is that jump a reasonable height? Was that damage appropriate for that weapon?) as well as probability (what's the chances that every member of the party will have scored a Double Star Strike on every one of 20 moves?). If anything looks suspicious the system can flag the log for review by a GM, and action can be taken, from banning that particular account from ever being a host, to banning the account entirely.

Sure, there's going to be a bit of latency there, and if someone /does/ try something they might get away with it for a couple of hours. But I don't think that's too much of a problem.

If you extend the idea a bit, you get database replication. Several of the people here at work play World of Warcraft over lunch. To my knowledge, they meet up in the game world from time to time but spend much time doing their own things. That doesn't mean that one of their machines - the most powerful one, presumably - couldn't replicate data for all of those players.

Of course, at that point it all breaks down because the replicated database isn't read-only. Oh well.
Sign in to follow this  

1 Comment

Recommended Comments

I've been working on such an idea for some time now, with a few differences.

First of all, i coded a program to simulate a game world in 3D, spawning "dots" (the players) more or less randomly. After a while, however, the players had an increased probability to spawn near other players (in order to simulate groups, or points of interests like cities).

Every second the program analyzed the positions of all the players and tried to form "clusters". When a cluster was small enough (threshold of N players max), it switched them in a "peer-to-peer" model. Instead of sending/receiving updates to the server, the players started to communicate directly with each other.

In order to lessen the security issue, i still kept at least one update per second to the server, so that the server can keep an eye on what's going on and if everything is still coherent.

The system seemed to work pretty well (although it was still a simulation), and i found that the bandwidth reduction, for most of the tests, was near 50%.

One thing i didn't take into account, but that should in a real implementation, is the latency between the players in a cluster. Imagine a cluster of 2 players: maybe they will both have a latency of 100 ms to the server, but due to their localization, a latency of 400 ms between each other. The server should detect that case to not switch into peer-to-peer mode.

That idea is pretty much useless near points of interests, where clusters tend to be of large sizes (tens of players). In my tests i used a cluster size of 5 (i think, it was a long time ago).


Share this comment

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!