Evaluating MMO Engines

619 words.

Before I embark too far on the insane idea of writing my own MMO engine, I thought it would be instructive to peek at some open source engines out there (gathered from the first few pages of a Google search).

At this point I am mainly interested in the specifics of their network implementation, because that is really the foundation on which everything else is built.  For reference, my design so far is leaning toward UDP sockets with variable-length packed binary structures, conceptually similar to the Quake network protocol if I remember right.  The idea is to maximize CPU efficiency (by avoiding expensive serialization and parsing routines) and minimize bandwidth requirements (by avoiding bloated serialization and parsing routines).

Black-Crystal.  (C#.)  No code releases that I can find, which is too bad, because I would have loved to see their .NET implementation.

Genecys.  (C, CVS Repository.)  The source code is not very easy to read and not very well commented, but I gather (from server/network.c and server/ninterface.c) that the design uses simple text commands over TCP streams.  This is precisely what I don’t want to use, because I don’t think it will scale very well.

OpenMMOG.  No code releases that I can find.

PlaneShift.  (C++, SVN Repository.)  This is an actual MMO that you can play, which makes it a compelling test case.  After perusing the source repository, it looks to be using UDP sockets (see common/net/netbase.cpp) and message structures similar to my design.  I am validated!  (Although, honestly, it’s not so much mine as it is John Carmack’s idea from the 1990s.)

Ryzom (NeL).  (C++, SVN Repository).  I can’t tell what it’s doing because the repository gives me internal server errors (“Rails application failed to start properly” — figures :).  Based soley on the filenames in the source code, there appears to be UDP and TCP code.  I’m very interested in seeing what it does because it purports to be able to update hundreds of entities in an area with modest bandwidth usage.  I have a number of ideas of my own in that department, and I’m curious if they are similar.

Torque MMO Kit.  (Python, Repository).  (I am not positive, but I think this is actually descended from the original Tribes game engine.)  This appears to be one of the most mature codebases around, but I’m not a Python guy, so much of this is foreign to me.  I can’t find any specific network layer — I think it’s probably embedded in whatever application parses the .cs files, but there’s no source code for that.  In any case, an entire implementation of an MMO game is there, so it’s a good reference to have handy.  It would be interesting to try Minions of Mirth to see how well the engine works.

vbGORE.  (VB6, Downloads.)  Yeah, I know, it’s written in VB6, but I downloaded it anyway.  It actually looks surprisingly mature.  Digging into the GOREsock\GameClient\GOREsock.ctl code reveals they’re using TCP byte streams.  I can’t make much sense of the rest of the codebase, but there might be something useful in there somewhere.  I’m not going to install VB6 again to look at it in depth, though.

WorldForge.  (C++, Downloads.)  WorldForge appears to be well-known, but I can’t find any real games based upon it.  It’s broken into a number of distinct libraries — the network library is called “Atlas,” and it appears to be a highly generalized API, which usually means scope creep from trying to be everything to everybody.  It looks like it’s using a TCP stream and serialized objects, encoded as XML or “packed” (see the Atlas::Codecs namespace).  Unfortunately, the code looks like it’s getting close to the “big ball of mud” stage of entropy. :)

Related

This page is a static archival copy of what was originally a WordPress post. It was converted from HTML to Markdown format before being built by Hugo. There may be formatting problems that I haven't addressed yet. There may be problems with missing or mangled images that I haven't fixed yet. There may have been comments on the original post, which I have archived, but I haven't quite worked out how to show them on the new site.

Sorry, new comments are disabled on older posts. This helps reduce spam. Active commenting almost always occurs within a day or two of new posts.