MMO has 2 big parts
- Graphics engine
- UI and controls
- Network stack
Server side in turn typically consists of
- Front end (for example load balancer + acct mgmt server .those handle initial logins and directs client to appropriate shard, they do little else.
- Application Servers - those are ones handling the actual game, sometimes its several different type of applications (chat ,combat , scripts (mob and events) ,individual zones)
- Backend storage (typically SQL db servers) - handling long term storage (such as player characters, banks , static zone information etc)
- Various glue in between systems (such as object caching, message transport etc)
Server communicates to client information about actors ( other players ,mobs, script events) , client communicates information about player action (character coordinates and actions).The trickiest part in client-server is designing good system to handle many concurrent players interacting at same ,all with variable amount of latency without artifacts such as lag and rubberbanding. Planetside has probably one of the best examples of network stack as it allowed twitch combat with hundreds of players
Some good read network stack shows some insight on actual implementation :http://unreal.epicgames.com/Network.htm
Some people may think that server is most important part, downplaying the importance of client. But its actually not correct.Client is probably most resources intensive part to develop (art assets ,graphics etc -this is all client side development) and one of most important for success of the game -as its the part players actually interacts with . Server side has to be stable and perform well it is very important and not a trivial problem to solve, and can bury the project if not done right, but on its own even the most perfect server does not make a game
Realistically one cannot make a complete MMO engine from scratch all on its own. Its takes a team of experienced professionals working many years -that means hefty payroll costs .And then comes the content cost (which are typically many more times the engine cost)
What are options for making MMO? - you can take license existing engine (for $$$) then concentrate on creating content and tailoring it to your needs. Typically licensings costs are high though, there are 2 mainstream commerical offerings :
Costs are pretty high and you don't get access to source code unless paying for most expensive licensing options (in a range of hundreds thousands of dollars). Licensing engine is very attractive option as engine is taken care of and one can concentrate on gameplay and content .Downsides are is that you are limited in what you can do by what engine can (or cannot do)
One of the first examples of successfully developing AAA mmo using this approach is DaoC. At that time there was no mmo engines so they used gamebryo game engine with custom tailored network stack and custom server side.
SWTOR uses hero engine, and lobby based world of tanks uses big world. So 3d party engines are certainly proven and mature enough to be a good foundation
Downsides are that there are significant costs upfront, and while it become much more affordable lately it still looks a bit out of reach of small indy teams.Costs keep falling though so one day it could become affordable for basically anyone.
In next post I ll cover the "open sores" side of the equation :)