Game Development Community

Multiple maps in 1 server

by Robin Degen · in Technical Issues · 08/12/2005 (2:59 am) · 14 replies

I'm creating an MMORPG with about 14 other people. To speed things up, i was thinking about having seperate maps for each area (even when you go inside a building). Why? Well our houses are about 10.000 poly's each (i used the 3ds resource)

This needs the possibility of torque having multiple maps loaded in 1 server. And it shouldnt send client position info from a client to a client that is in another map (that should boost the speed a lot).

Before I start with this, Is there something like this allready? (didnt find anything usefull in the resources). If not,... any ideas where to start? I'm the only c++ programmer of the project, and i'd call my c++ knowledge ok, i dont understand the whole engine, but enough to add some new features.

#1
05/30/2006 (12:23 pm)
This is quite something, I'm curious to know how blizzard does it. I am thinking obviously splitting the world up is logical especially if the world is large and well the zones/areas are not very related. Loading multiple maps could be a problem, i understand the terrain(heightmap) is a hardcoded feature.

Perhaps running more than 1 server, 1 for each area and then having a backend server for ur rpg logic. This would be annoying though.
#2
05/31/2006 (7:16 am)
It seems they just have a server that supports multiple maps at once. Maybe it ARE more servers (one for each area) but just multi threaded. I wonder if this is possible for torque. Say you have 5 maps... each in a seperate thread of the server process
#3
05/31/2006 (7:53 am)
Maybe I didn't get the point, but you could simply run multiple dedicated servers on one machine and create "teleports" on the map that lets you jump between those different dedicated servers.

And you should definately reduced the poly count on the houses... :-) What kind of house would eat up 10.000 polys?
#4
05/31/2006 (8:17 am)
Yes, but that's not really... fast enough. If you have about 50 maps.. you'll have way to much "overhead".. using ram for the same things twice.. etc. Not really fast enough.

And it's not the poly count that's a problem for a server.. only for the client. The server doesn't really care what's in the map.

Also, you need a seperate port for every server. And you have something link them.. and make sure people are not just connecting to another port to get somewhere else.
#5
05/31/2006 (8:47 am)
Right, it's not realtime.

Well, I didn't mean the polycount for the server. Sure it's a client thing. But for the clients one house with 10.000 is really high. But your application may demand it.

Yes, sure, one port for each running instance. But you could tell your application that it knows which world and port to connect to. I'm using this technique together with a self written lobby/chat server. In my special case the lobbyserver tells the client which server to connect to.
#6
05/31/2006 (8:52 am)
I will use the multiple server thing when all else fails. But i will still keep trying on my attempt to support multiple maps in just 1 server.
#7
08/02/2006 (4:10 pm)
Not 100% on this(not an netcode guru) so no flaming please....

But Servers don't detailed maps, only the grid locations(plus which direct siad is moving) of the players, items, buildings and mobs. This is just and basic hight map setup so server knows 3D locations, so one serever could support a full world, it's the extra details of the player(current damage, weapon, etc..) that brings the amount of data up.

So would it not be better to host maps on one server (with maybe an backup server) which just tracks locations and movement of game items, and another that handles the interaction of items (damage, attacks, equipment, etc...) and have these to interacting together with a client login server type?

This has been one topic I've thinking about and trying to find a good answer too. My problem is to get a full world map onto an server/s with as little as possible portal requirements when moving from one world map grid to another. Reason is I plan to have aircraft in my game, which as you know by pass the normal methods of map changing, eg. tunnel and valley portals.
#8
08/03/2006 (5:31 pm)
Since this idea is more focussing on mmo/rpg kind of games, the current weapon and damage wont be the real problem on the netcode. An mmorpg attack is basicly a set of random numbers (damage) send from the server to the client. There's no aiming involved etc. like there would be in an FPS.

Your idea to have the server load simpler objects could speed up the server however... and maybe speed up the collision detection on it to. It would require some changes to torque however.. since it'll crc check them, and tell the client his version of the shape/interrior is not the same. For non-static things it's possible to disable the crc (for example weapons and playerdata).

Now the only problem is.. the big sized terrain. Lets just assume we're simplyfying things by using atlas and having a huge terrain allready. How would the client handle all this? Your idea works for the server... but.. how would you solve it on the client? I've been thinking of methods to load interriors on the fly once they're close to the players view (the view was set to 1000.. and it loaded them up at about 1200). This worked.. but sometimes was a little shocky. I also manually did this for the interriors i tested. It would require some code changes to do it automaticly for every building.

I'm working on an mmo.. and we have a special guy working on our netcode. However.. we still have found no good sollution to support the seamlessly large maps. Even though we have all ground stuff.. tunnel/valley portals just wont do for us. We want open spaces. This is going to be problematic... if not nearly impossible.

The only way i'm currently seeing is what i mentioned before.. asumming using atlas and having the terrain all done. Then just go optimize that.
#9
08/12/2006 (11:33 pm)
With some pretty decent LOD skills and some poly conservation, you could probaly do pretty big maps in TGE and not have to take to bad a hit on the ol FPS
#10
08/13/2006 (5:54 am)
What about the large terrain? I know you can increase the "gridsize".. but that just makes the terrain really cuby and ugly.
#11
08/13/2006 (11:31 am)
I had an angle that was working on multiple missions in one server for a game I'm working on, and it was working... but then I was discussing the technical merits with Stefan and he pointed out something very important to remember - There are limits to how many datablocks and NetObjects you can have in one server instance. This means that the more missions you have running in one server, the fewer actual things you can have in any given zone.

The technical issues in getting a server to support multiple missions without severe limitations are incredible, and are most likely not worth the effort at all.

Oh, BTW... regarding Blizzard's server structure, they do not run a ton of zones on one server. What you think of as a server (say Hyjal or Cenarius, for example) is actually a server farm all by itself... there is generally one server dedicated to each major zone, along with a separate server just for the chat system, several servers dedicated to instances, and so on. WoW does not run on one single computer for each "server" that the players see. The term server is being used in a manner there that confuses the issue.
#12
08/14/2006 (6:40 am)
That is an interresting thing you bring up there about WoW. It explains a lot of things for me. How are these invisible server switches handled? My personal idea would be a main server that just acts as a sort of router forwarding packets to the right server and back to the right client.

If that's so, i think it is easier to create multi-zone torque servers. You dont have to worry about the client just connecting to another port (so he'll end up in a zone he doesn't belong), because that main program prevents that from happening. Offcourse you can handle it on each server by itself, but it's not really a good idea opening tons of ports to run a big server.

edit:
maybe that's why they're referred to as Realms rather then servers.
#13
08/26/2006 (3:45 pm)
*cough*

Right, I think you're thinking in the wrong direction.

Firstly, you are likely to be connected to symultaneus (?) servers. One is the chat server, one will be the login-server, you'll be connected to an instance server (holds all of the locations of players, etc, this one is most like a TGE server, but stripped down). (This is how I'd do it, variations happen here.)

It is possible that you forward data, like you said, via some kind of proxy server, but I have no idea how to do that.

Most MMORPGs are powered by "data-only servers" AFAIK, which means there isn't an instance of any of the models in the world on the server and such, which is why most mmorpgs dont have physics. It is entirely data-based. (Not database'd, though all MMOs need databases!).

If you want to see what I mean, go and check out RunUO, and emulator for Ultima Online, its written in C#, but is a good example of an MMORPG server IMO. Each player has a map id and location associated with them, and the server ghosts only the correct items.

TGE is based from an FPS point of view. For the best efficiency and lowest overhead, you'll probably need to make you're own networking and a data-based server. Client prediction is a biggie here, it makes the game nice and smooth.

If you want to make it an easier way, you'll have to figure out how to mess with TGE's zoning system or something in order to allow multiple missions, its not the simplest task.

Sorry if I've lowered your hopes on making an MMO nice-and-easy, but this is how it has to be done (sanely).

(I did get a short way into making a test 2D mmo in C# and a server-emulator in C#. Not got far with my real mmo yet... :( )

BTW, not all of this is "fact" per se, it's how I'm gonna try and make my game!

-- Ricky
#14
11/06/2006 (7:09 am)
There is some good talk of servers for mmo's in the MoM blog, also if you ever get to gamasutra.com they have postmortems where developers talk about what went right and wrong with their project. There is a good one by one of the guys who worked on Asheron's call (and a DAoC one too) and he talks about how they split the world up onto different servers but one thing they realised is they had to do it a little different because if you just split it purely by the map then if everyone was to go to one server's section you'd get a huge overload on that server and idle on all the others. So they worked out a way for them to share the work no matter where the people were.