Advertisement

Open source p2p MMORPG - feasible?

Started by April 12, 2003 05:02 PM
28 comments, last by Vodex 21 years, 8 months ago
Hm.
I was just reading about parallel computing and this kind of strikes a bell.

Couldn''t you write some kind of "virtual supercomputer" and keep everything hooked up to that...realm(for lack of a better name).
So you could have say a p2p deal where there are 512 people per realm, all keeping track of local conditions and piping them out to the couple close people who in turn fan thenm out...


would THAT be feasible ?

~V''lion

Bugle4d
~V'lionBugle4d
If you send any data to someone, to send out to another, couldn''t it theoretically get editted somewhere along the line? That would be bad for security, right?
Peon
Advertisement
quote:
Redundant routes, reroutes.


And how many redundant routes are needed ? 2 ? 5 ? 20 ? And what if all of these routes are lagging ? A player with an excellent connection in the middle of 10 people lagging would be lagged to hell too ?

Y.
P2P MMORPG? Yes, if it''s text-based or turn-based. Real-time, even 2d? Not likely with today''s technology. All the issues have been raised.
I think it would work if it was turn based (Some sort of system would have to make it so that it was more then one persons turn at a time, otherwise you''d have to wait forever with alot of people)

The problem that came to mind was since your creating a chain of players your going to be relying on the weakest link or the slowest connection, I think a game like this would work in a LAN because the connections would be fast enough to keep up (maybe), but as a large scale it would have problems.. the other thing would be if someone signs in and is able to recieve messages but doesn''t send anything... they could break the connection and take the system down..

Please visit Turt99 Productions
FOLLOW ME ON TWITTER OR MY BLOG
Here''s the loose ideas I was having.

The idea for how gameplay could present itself came from Dungeon Siege. It''s not a very entertaining game :\ but it has a ''seamless world'' - you have to walk everywhere and the system only bothers with what''s around you. (Teleporters are few and take several seconds to use, giving time for game state to be determined.) It also has ''fire and forget'' play - click on an enemy and it will automatically keep attacking, rather than you having to swing and aim each blow.

The main influence on architecture is being open source.

You''ll get a lot of modifications, extra equipment, and so on. Ideally, the client should have an extremely modular design, so that if someone produces code to, say, ride horses, this could either be included in the client very easily, or better yet downloadable through the network.

I have the idea of a background file-sharing service, similar to that in eDonkey, etc. All content has a hash which is used to uniquely ID it. Upon finding, that, say, model HumanMale3 is invoking a ''cry'' animation, the hash is given to the client, who then proceeds to download it from nearby clients. How the system would cope with updated content - the model possessing the cry anim in the first place - not sure

Security becomes the main concern. Open source will lead to rapid dev but also wide open for exploits. The only way to do it, as others have noted, is to farm out all game-critical processing to another client, preferably as unrelated to the first client as possible (to avoid a party of defecting clients sticking together and handling functions for each other).


The content system will require a lightweight hashing mechanism. If you include a signing/encrypting mechanism too, you can have the client safely store backup data about itself and current state data about the world/other players without tampering. Messages can be piped through the system by use of public/private keys.

Nodes would take on primary redundant data storage for player/game state. Say current state in two adjacent nodes, with backups to randomly chosen leaves every few seconds. Computation (eg. hit/damage) is sent from leaf client to node, which then farms it out to more than one leaf (maybe dedicated to processing?) and confirms that both results are the same. (Although it may be simpler to just assume that if the node is legit to process the results correctly, you may as well trust it to do the calculations in the first place). Whatever, the task is calculated, game state updated, and client informed.

Rather than having many clients all trying to keep tabs on each other, you''re only dealing with an ad-hoc server, which is just receiving state updates and propagating its own. State updates would only exist for the local cluster (architecture stresses ''seamless local world'') rather than hundreds of spam updates. Once a node determines that a state update is too far away in the game world, it simply drops it. (Content distribution is not subject to this, though hopefully local leaves will be enough to get it.)

Each node keeps list of which node is handling which game area, laid out similar to network topology. It may work best as an interconnected set of small areas- similar to Ravenloft in D&D.

Each area is derived from a seed in a deterministic process. In principle, enough state data is redundant so that if a node goes offline before it can ensure its state data is mirrored, other clients can seamlessly (yeah, right!) take up the slack.


As for game balance, what''s to stop someone creating an uber weapon? Well, there could be pre-defined formulas, that works out minimum level depending upon game effects, or hardcoded client factors. Perhaps the best way is to update the main client with knowledge of all the mods and how to price/set requirements as needed. Imagine seeing in your inventory an item drop only for it to say ''Unrecognised Item - please upgrade client'' - that would help get version consistency!


Disjointed I know, but I''m not in the best of health.

Comments?
Advertisement
quote: Original post by Vodex
Comments?

Open Source and control are antiparallel concepts. If you want code contributions, exploits are part of the package. On the other hand, you could have people only contribute assets (and script snippets to give the assets some dynamism)... but that wouldn''t be Open Source.

Good luck.
p2p MMORPG is just impossible, it would requiere that every player has the equivalent of a server as their computer.

a server in every computer, eh?

No, just part of the functionality. Nowhere near enough to have dozens of clients connecting. The most computation would be storing/verifying state updates, transmitting state update requests (playing!) and a slice of processing for each player. The most bandwidth, receiving state updates, like the client of a normal MMORPG, with a bit more for state updates and process requests. In the background, content distribution as available. Most players will be leaves, and not required for much. Buff PCs/connections would be nodes, and they would be scaled to take as much as they can handle.

Consider eMule, a file sharing app that typical broadband users have 1000 connections to other users, dynamically reading, writing, and tracking upload & download process of hundreds or maybe thousands of shared files. Yet it has no noticeable performance hit & apparently can run alongside demanding games.

IMHO at some point, a system like above will become feasible with typical or even low end power/bandwidth. I''m a newbie but I see no real reason you could not do it now if you restrict players to ADSL or higher. Admittedly it would require the creation of tools I''m not sure exist yet - high perf signing/encryption, modular/tree-based game content, reliable traffic-balancing and seamless recovery from a distributed state.
Does anyone have any more comments on this? I''d just like to restate ;D that I have no C++ experience and do not intend to produce this in the near future - maybe a couple of years from now.

This topic is closed to new replies.

Advertisement