Large Seamless World

Started by
5 comments, last by robirt 21 years, 5 months ago
This is for a persistent world game existing on multiple servers. Basically I have areas of the world seamlessly connected and an object can move from one area to another and it will move to a different server. So, when processing the physics on separate servers, an object moving from one area to another could collide with an object in that zone and not be detected because the server calculating physics on the first object would know about the other object. So, how can i prevent this from happening? The only idea i have is get the max distance an object could move between frames and overlap the areas a server covers, but i dont know if that would have any problems. I cant think of any. what do you guys think?
Rodger
Advertisement
I see the problem. You''d have to separate collision detection and object propogation into two exclusive phases; that is, you move all objects, updating the servers, and then you enter the collision detection phase whereby each server checks for collisions in its zone.
That would work if the collisions didnt affect the movement. I wouldn''t want to let thing collide and wait a frame to make them respond appropriately.
Basically my physics calculations get the movement, then detect collisions, and if they exist it changes the movement and checks if that causes more collisions and then responds to those. and it just keeps iterating until all collisions are handled. So, i really cant separate my collision stuff from my movement stuff.
And I thought about the overlapping zones and i think it wont work perfectly either.
Can you explain how i could use your idea and have accurate collision detection? It would make things much easier if I could do that.

I know Asherons Call had a seamless world. Does anyone know what they did?
Rodger
Putting the physics part of this issue aside, how are you handling your characters "seeing" objects that exist on other servers? Do you run into the same problem, where objects in one "world" don''t know about objects in the other "world" because they can''t see them?

Solve this problem, and it may help you solve your physics problem.
The physics server changes the data on DataBase servers representing the zones. And the players get world info from the DB servers, so they just download info for the zones they can see. That has not much to do with my current problem.

The zones can be pretty big, so a player might only see stuff in the zone he is standing in, but if he sees past it he just gets info from both zones.

I guess the problem im having with physics is the calculations need to know about every object in the world and they cant, because of how it is divided up. I guess I could have the servers for adjacent zones communicate a lot and tell each other when they send over an object. Then the server receiving the object adds that into its calculations. It think that would work, but might cause a bottleneck.

I guess I could just go for less accurate physics. I cant think of any mmogs that have accurate physics. I might just experiment and decide to use less realistic physics if it is too slow. Unless anyone has any other good ideas.
Rodger
Mmm...this is a problem that has seen numerous threads.

Oh well, specifically with regard to your problem: simply have each server mirror a small "common" zone between the two zones that they keep state with; unless lots and lots of players crowd in there it won''t introduce too many overheads in server-server communications.

On a more general note having server that simply control zones is woefully inefficient; imagine all your players spend 90% of their time in the "deathmatch zone" for example: the other servers spend most of the time idle; what a waste.

To eliminate that problem distribute the entire zone-information (for all zones) over the servers using caching algorthims and sql servers with dynamic load adjustment to pass players around to servers with the lowest ping and lowest usage.

Hope that helps...
Well my zones are never idle, even when players are not there. Although, you make a good point becuase some zones will be more active than others. But, i can''t completely stop processing them. Also, there is no "deathmatch zone" lol, but i know that was just an example. BTW i was already planning to use SQL.

I guess your idea would work, though. Instead of calculating things in predefined zones i could do it as a whole. I just need to break down my physics into a few steps and i think i can get it to work. Thanks for the responses. I have it figured out now.

-Robert
Rodger

This topic is closed to new replies.

Advertisement