How are MMORPG maps created?

Sorry if this’s posted in the wrong place. It’s actually my first time asking a question.

I don’t understand how MMO maps are created. Do we create one single map/level as huge as possible with multiple types of terrains (snow area, lava area, etc…) in it, and the player can only play within that huge level? Or is there a way to link multiple levels (each with only one type of terrain) and make them feel like a continuous world map?

For more details, I’m using Gaea to create terrains. Each time, the final product is just a single kind of giant terrain (either forest, lava, or something). How do I from there, end up with a map in UE4/my game with multiple types of terrains (snow, forest, water, etc…) that feels like a continuous world? I just can’t imagine the workflow…

You can see here the product from Gaea, they feel like they are just “a single block in a world” with one single type of terrain. How do I from here create a continuous map with multiple types of terrains in UE4? Do I have to connect these Gaea terrains together somehow?..


Thank you so much in advance for your reply!

You might be better off separating each area as an level that you have to teleport to.

Having that much traffic isn’t exactly healthy unless you’re using some high-end equipment.

1 Like

Great idea. My guess is that teleporting would be like loading each level separately.

Still, is there any way I can create a map for the player to be actually able to run from one place to another (with different terrains) like in common MMOs? Do I create one single big levels with all kinds of terrain, or how do I do that? Right now Gaea just output like 1 type of terrain in the form of a square, do I have to somehow connect them/concatenate them to each other or something?

I really need a complete workflow from Gaea to Unreal that creates an MMO maps with multiple types of terrain that players can explore. I can’t seem to find that anywhere though…

Each map doesn’t need to be “large” in an MMO. In fact, keeping many, smaller, maps may be beneficial for gameplay design, because a “yell” for the zone won’t affect too many users, and a single server process won’t have to process too many players. Designing content where players naturally spread out in the world, is one of the key differentiators for a MMO design versus a single-player RPG.

Separately, for large, seamless, words, that’s really hard to do server-side in Unreal. World Composition lets the client load/unload different parts of the world as they walk around, but the server side needs to have everything loaded, because players will be everywhere. The best way to structure that, may be a combination of world composition and server sharding. If you split your world in squares, each server might load a 5x5 set of squares, and determine that it’s authority for anything happening in the center 3x3 set of tiles, keeping the other tiles as a view into its neighbors. As actors move between the tiles, they may need to get handed off between the server processes. This is not built-into Unreal itself, but has to be built by you. Or use some library that claims to solve this for you – but, beware, generally, you’ll need to tune this to your game, so hiring people who know how to do it and building your own might still be best.

1 Like

Thank you so much for the reply!

Your answer draws me another question: How I can render a 5x5 to be responsible for the center 3x3 players/objects, etc…? Where can I look for algorithms or technique to implement this? If not then can you point me in a direction? I’m an SWE myself so please feel free to explain it in deep technical terms if that’s more convenient!

You really just follow the World Composition path: World Composition User Guide | Unreal Engine Documentation

The trick is to have each server process know what zone it’s interested in. You can for example pass this in on the command line when starting each server process. (The cluster management of which servers you need to run to run a world is yet another interesting area to solve, btw.)

Set the “interesting area” for the world for each zone to some box that goes from center to center of the neighboring corner boxes, so the “interesting” border goes
(You can also load a 3x3, and only handle the center 1x1 yourself, but that leads to a little more unnecessary data being loaded.)
You’ll want each tile to be small-ish, because the size of tiles specifies the area that must be handled by one server process, and there’s a limit to how many players can be handled by a particular server.

I’m basically suggesting a concrete implementation of this suggestion:
World Composition User Guide | Unreal Engine Documentation.

Another option would be to build explicit sub-levels, and explicitly load/unload them as appropriate on each server (and the client.) You can still build multiple terrains that line up, by creating new terrain actors for each sublevel.

Option 1: “build your own server,” is not unreasonable, BUT it has the problem that server-side logic can’t easily re-use all of the engine editor features for things like collision detection, scripted events, etc. You might be able to still use the editor and export to your custom server format – there’s lots of work here.

Also beware that the built-in origin shifting doesn’t really work for multiplayer.
And finally, UE5 brings us World Partition | Unreal Engine Documentation

MMOs are hard, both in technology, and in game design :slight_smile: I’m assuming you’re a small independent developer, either one person, or a small team. You really won’t have time to address all of the things that need addressing to get to the state of the art with large open worlds, server scalability, and all the rest. Even “the simplest thing that could possibly work” for each of these areas, is too much for something less than a full, funded, multi-year team effort.

You may indeed be better off building a smaller-scale “ORPG” with traditional levels that load as you “zone” between them. That’s reasonable to think about as a small independent developer.

1 Like

Thank you so much for the reply!

Yea I really have to rethink about the scale of my project, probably will switch to ORPG as you mentioned, or even something that’s smaller…

I understand that building a server requires a deep understanding of node balancing, availability, system design, etc… which probably will just drive me nuts xD I did think of renting out a server solution but I guess it would be better off to prototype on something smaller first!

Really appreciate the advice, saves me tons of time and effort!

I also wanna ask if this ‘shifting-origin’ enable us to go pass the WORLD_MAX size?
I’m understanding WORLD_MAX as the max size for one single map. Does World Composition allow us to concatenate/connect multiple max size maps together, or is it just for managing one max-sized?

World Composition doesn’t work with origin shifting, unfortunately.

Once “large coordinates” (essentially, using “double” instead of “float” for actor positions) merges into the 5.x branch, perhaps they will have a better solution.

Btw, World Partition works very similarly to the system I suggested you’d build manually – except now they’ve built that for you. They don’t do the networking part automatically; you’d still need to spin up a central “here’s the tiles that are interesting to this server” thing in a different place on each server, but it seems like it could generally help.

If you are using C++, you could do worse than following through rebus’ YouTube and Pateron classes: Unreal Engine C++ Survival Game Course Trailer - YouTube
Not everything he does is perfect, but it gives a pretty good insight into what the bits and pieces are and you can take it further and improve from there. Highly worth it, IMO!

1 Like

thank you so much for the answer! I’ll definitely look into it :smiley:

It did last time I checked.
In fact, it’s a feature you enable in world composition levels…

I was being incomplete: World Composition, Origin Shifting, and Unreal actor networking don’t work together. If your game is not networked, that’s less of a problem. Most MMOs are networked, though.

The official docs have the following to say:

Right now world origin shifting is not supported in the multiplayer games. Here are two solutions that can be implemented for your specific needs:

  1. Implement your own server solution. MMO licensees mostly do this.
  2. Implement some layer between clients and unreal dedicated servers which will transform shifted absolute positions from the clients and route them to the right dedicated server, which only holds part of the world where client is.

True. but to handle networking IMHO you would need a custom origin shifting system.
I think @MaximeDupart had something going for this with networking included?

1 Like