How to make an MMO

Introduction

A lot of websites say that making a MMO by yourself is hard work. And I fully agree with each and every one of them. Creating a MMO is indeed incredibly difficult.  If you were to build an MMO yourself you will need experience in everything from 3D graphics, networking, website design, scripting engines and much much more. This is no easy task, but it is very interesting.


There are many ways of developing your own MMO. You could use some of the free or commercially available engines that are already on the market (HeroEngine, Multiverse or Eclipse) but my interest is not actually in how to make the Game but more in how to make the technology behind the game and to also share that with you, my reader.



These articles will not be about the design of an MMO game itself, that being the imaginative creation of amazing story lines, plots with exciting adventures and quests.  Rather they will contain information about the technology behind an MMO and how you can put it all together to build a platform for developing your own MMO. While putting together this technology stack I will overview various different solutions that you could choose, and you should be able to freely swap out any one of these, with something of your choosing, in place of what ever component I end up using in my final design.


Next I will briefly outline what an MMO actually is and then various bits of technology that are required to build an MMO. I will then list some companies that provide all in one solutions before going into more detail investigating each separate part of the technology stack.

What is an MMO and how is it different from an MO?

Before I get started on the requirements for an MMO we need to clarify what an MMO is. There is some confusion about what exactly an MMO is and also what an MO is, and how they are different. The main difference, in my mind,  between an MMO and an MOG is the following...

An MMO has a Persistent World

A Massively Multiplayer Online game is usually based in some massive open world where characters can wander around for hours. Everything in that world is stored in some sort of database or filesystem so that next time you log into the game everything is still how you left it (unless some other character comes along and destroys your village and steals all your gold). An MO on the other hand (something like Halo or Quake) just lets users all connect to a game world, run around and do your thing, but no game state is saved. When you have finished the game a new one starts up with a fresh new world/level to begin your game anew.

The first letter in MMO

The first letter being the letter M, which stands for Massively. This means the game can handle alot of users at any one time, supporting hundreds or thousands of users all logged onto the same server at the same time. An MO on the other hand may only handle 32 players per map, and might even be able to do this via P2P networking and not even require a server.

Economy

An MMORPG usually has some form of economy in it. You have virtual money that you can use to buy goods and trade with people or NPC characters in the game.

Support and Servers

An MMO requires constant ongoing support and updates to the world. There could also be many game servers scattered around the world with massive databases and advanced replication and backup systems all running. An MMO game can never go down, the servers must always be online. To keep an MMO game on its feet takes a lot of effort.
For some more information you could check out the wikipedia definitions of an MMO and an MO.

Whats required for an MMO?

This is a very simplistic and brief outline of what the main parts required for developing a MMO are.

Client side 3D Game Engine

A 3D engine will be required to display your 3D content, animations, sound etc for your MMO world. Users will move around the world, interact with other players and game objects within the world.

Game Server

A game server will be running somewhere that will provide updates to all the clients to let them know where other players are and also the current state of the world. The server is also responsible for storing the current state of the world, either in a file system or a database.

Game Logic

Somewhere there must be some game logic. This could either be on a client machine with game object and player states sent to the server or you could have the game logic on the server with states sent to each client. This is what drives your game. Is it a game with magic, spells and treasure or is it a first person shooter where they run around and shoot rockets at each other?


Note: This part of the requirements will not be discussed in detail in this document as it is very subjective to the type of MMO that you are creating. The type of MMO that I will be creating with this technology stack is going to be an MMORPG so any discussions on this topic will be related to that genre, albeit in a very simplistic way.


Your game logic could be created with a Drag and Drop type interface, programmed in a scripting language like Python, Lua or Ruby, it could be hard coded in C++, C# or Java or you could use some generic approach where all the logic is encapsulated in XML files and read in by some game logic engine written in any language you feel like (I should also point out that you can use also use C, C# or Java as a scripting language also if you wish, depending on the technology you use, see the note below). There is also nothing stopping you from writing your own language and compiler of your own if your up to it.


Note: You could use AngleScript, a C like scripting language in your engine or embed a JVM into your engine and support Java or Javascript, or use Mono within your engine and use any of the languages it supports such as C# and Boo.

Content

You will need some 3D characters, environments/levels, sounds and objects for swords, treasure for your MMO. This content will most likely be created in a 3rd party application such as Cinema4D, Maya, Max or XSI. Note that some game engines do come with their own content generation systems (including procedural models which have a very low bandwidth) and some also ship with alot of royalty free content ready for you to use in your very own MMO.

Networking Engine

You will need a way to communicate between the Client side Game Engine and the Server. To do this you will require some kind of networking engine do all of this communication. This is a vital part of the system and should be looked at very carefully. There are alot of good resources on the net today to help you write your own. Or you could use a 3rd party solution such as RakNet, NetDog or Photon. A great resource on Networking can be found at GameDev.

Digital Asset Management System

Making an MMO will involve thousands (or tens/hundreds of thousands) of files for everything from the  3D models, textures, scripts, documentation, language files, sound effects, voice sound clips (perhaps in multiple languages). And not only do you have to store the original content (such as the Maya, Max, Cinema4D files for 3D graphics) but you will also need to store content produced from these files in optimized formats for your game engine like 3D Mesh, Animation Files, Skeletons, compressed sound files, special textures in OpenGL format for fast loading etc... etc...


You will need a system to store the original files, easily access these files in applications like Maya, Max, Cinema4D and system to convert these into actual game assets to load into your engine. As well as a nice administration management system for accessing the files. You may also want this same system to be used as the delivery mechanism that clients will use to download patches from for the games. When a new asset has changed it is published, which in turn converts it to game assets and then send it through to the clients during their next update.


This is a very big topic and will be covered extensively in a later topic, just keep it in mind for now that storing your assets in a bunch of folders on your computer will not work once your game starts gaining momentum. For now here are a couple of examples...




Unity3D also has their own Asset Server. But you have a pay $499 per client to use it.
You could build your own Digital Asset Management system based on something like Apache Jackrabbit or Apache Sling. This will be covered in alot more detail in later tutorials as this is the approach that will be used for this project.

Source Code Management System

In addition to storing the digital assets for your game you will also need a place to store the source code for your game. It is vital that you have a good version control system in place. You should also ensure that you back up the source (and all your game assets) regularly and have an off-site storage somewhere. The last thing you want is to loose 3 years of work because of someone breaking into your house and stealing a laptop and a couple of harddrives. Version control systems and source code management will be discussed in more detail later, for now you could look at the following...


Website

If you are going to make an MMO you need to have a web presence. By making a website to advertise your game, build a community around your game and perhaps sell online subscriptions to let people play your game. The website can also be used to communicate with your game server to provide running statistics on the game, player profiles and various other bits of information you may wish to share with your users. A website can also be used by you, the administrator, to check up on your game and keep running statistics for your own purposes.

A good idea.

If you are going to make an MMO then you need an idea. You will need to spend alot of time on this topic if you want to make your MMO appealing to the many millions of players out there. Since I am more concerned with the technology I will not be discussing this topic in much detail. There are numerous books and web resources on game design to look at.

A lot of time

OK now I am not going to lie to you here. Like every other piece of MMO information out there I will say the same thing. Its going to take you alot of time to develop an MMO. In fact its going to take you alot of time to do even one small part of what it takes to make an MMO. If you are going to go down this path then be fully prepared to never ever get this project finished. But in saying that you will learn a lot and it will not be wasted knowledge at all. Give it a try, even if you only get to the point of playing around with a graphics engine, or experimenting with sounds or particles. Anything you learn and can take knowledge away from can't be a wasted experience.

MMO Development Suites

Before I start on all the technology required lets first have a look at some other technology that allows you to get up and running with your own MMO without too much effort, and if you wish you can skip reading this article and jump straight into development using one of these tools. But if you are actually interested in the design and development of how the technology stack is actually made, and how they work, then you can keep on reading.


The following is by no means an extensive list of current engines that are out there on the web today. This is just a small selection of what I have found to be the most talked about engines out there that let you jump straight into creating your own MMOG with out too much effort. You can find a list of such search engines in the links section on the website.




There are also some others in my links section.


For a good survey of other engines you can checkout this link at devmaster


Summarize

This chapter has given you a very quick and brief look at some of the parts that are required to develop an MMO. Next we will go more into what is required for each part. Follow on to the next section Selecting a Game Engine to find out more.




For more information you might want to read some other articles about developing an MMO...
Here is a great article on the inside look at how World of Warcraft was made. There are some great statistics in there which can just show you how huge this game is in terms of development and support http://www.gamasutra.com/php-bin/news_index.php?story=25307
Up until now the only information on the internet about building an MMO, that came up via many different google searches, was the following article written by Radu Privantu. This is worth reading... http://www.devmaster.net/articles/building-mmorpg/
This article goes over some issues you will encounter while developing your MMO  http://www.gamedev.net/reference/design/features/mmog/
Another article, that is a few years old now but still interesting to read, can also be found here... http://www.onrpg.com/boards/13038.html
And also an interesting thread in the gamedev.net forums titled For everyone who wants to make an MMO.


Comments

Popular posts from this blog

Creating a renderer using a video post plugin

Selecting a Game Engine

A C++ library for communicating with Amazon S3