The MMO Gold RushIt's nothing new, this trend, but it also doesn't seem to be going away as quickly as most fads; perhaps we can accuse World of Warcraft for making this such a huge deal, or maybe it all goes back to Ultima Online and Everquest. We may never know for sure. One thing is definitely clear, though, and that's that a significant contingent of people show up here at GDNet wanting to make their own MMO games. There have been many words bandied about in the past over this subject, and plenty of advice warning newbies not to get their hopes up when it comes to shipping a true MMO. Sure, not everyone is committed to the RPG genre; some people want to make an FPS, or maybe even an RTS. Others might have even more creative and unique ideas for how their game should play. But the real issue here is not the gameplay itself: it's the MMO part. More than that, it isn't even the "multiplayer" or "online" that is really an issue - it's the "massive."
The Real IssueMMOs are expected to host dozens of servers running thousands of players apiece. Successful games may be played by over a million people; some notable ones are played by far more than that. Even a low-grade MMO serves a few hundred thousand players. With modern technology and toolkits, it's entirely in reach of a lone wolf or a small team to create an incredible game that can host even a few hundred players. However, as wiser men than myself have observed, "a difference in quantity can often mean a difference in kind." Consider the original airplane, as developed by the Wright brothers over a century ago: a simple wood and canvas structure with a (relatively) lightweight and effective engine, with some simple control mechanisms. Now consider a jet liner. Both are flying machines; but in order to comfortably handle two hundred passengers, the airplane had to do a lot of changing over the years. Even a fighter jet is a different beast. Just changing one quantity - speed - leads to qualitative differences in many ways. A fighter jet has different engines, different control surfaces, different kinds of fuel, different training to fly, and on and on. Go one step further: a fighter jet that's invisible to radar again has many, many differences (ranging from shape to materials to operating principles) than a traditional jet. Many people have set eyes on the available game-development technologies of today, and noticed that they can put a hundred players in a world and turn them loose. The assumption that you can just twiddle some knobs and tweak some sliders to get an MMO is deeply flawed. As a personal anecdote, I once set out to write a realtime ray-tracing engine. I had experience with a popular graphics package called POV-Ray, back when it was still a relatively fresh spinoff from DKBTrace. Since POV-Ray represented an early incarnation of a model of what we would now call "open source", I had access to the code; my plan was to "optimize" POV-Ray and turn it into a realtime system. What I failed to understand was that the difference in speed I wanted represented a tremendous change in how the code had to be written. I managed to eke out about a 5% speed gain over the original POV-Ray before giving up and writing a fresh engine from scratch. (For the record, I did achieve realtime ray-traced rendering in that project, but it was truly hideous and awful code. I still have it someplace but if I remember correctly I left it in a horribly broken state. It's probably better that way. Overall, though, the experience was incredibly educational.)
The ChallengesIt's a far cry from 16 people playing Halo on a home-rigged LAN to the kind of stuff a real MMO must cope with. Even throwing in something like Xbox Live Matchmaking is incredibly resource-intensive. Companies like Bungie have people whose full time jobs involve doing very little but making sure the matchmaking experience runs smoothly. When a major company has to employ people to do nothing but run their multiplayer system, you can bet it's a good sign that Little Old Joe in his garage or basement isn't going to be up to doing something similar. But wait! Even running a matchmaking system for a few hundred thousand players pales in comparison to what an MMO must do. After all, a matchmaker simply needs to join up different players and get them running on a separate system (usually hosted by one of the players themselves, or maybe a dedicated server for PC games). If dedicated servers are involved, the matchmaker is often really just a catalog of what severs are running. This is the kind of thing that a lone wolf coder could easily accomplish on his own; something like Xbox Live matchmaking, however, is getting past the realm of stuff that one guy (or gal) could ever do alone. So if a solo developer can't really hope to build, deploy, and run a large-scale matchmaking service, what about an MMO? Let's take the demands of a typical matchmaking service and chuck in a handful of complications.
- Persistent Worlds. Instead of just shuffling through a list of players and handing out matchups, which may last a few rounds at the most, an MMO must store data on every player and every action ever made. Sure, many modern games store statistics like how many shots you fired, where you died most often, and so on; but even that is a huge leap of data warehousing beyond what a typical small team can hope to build and maintain by themselves.
- Active Simulation. A matchmaker can often get away with having a player host the game, which is the typical approach used in console games these days. Matchmaking servers don't have to have any code besides the stuff that links people together, making the actual multiplayer portion fairly straightforward by comparison. Again, remember that for up to about a dozen players, off-the-shelf network code is often sufficient to get a decent game experience. It does require some skill to make it happen, but it's at least plausible that a single person (or a small team of people) could get away with building a good low-scale multiplayer game.
- Massive Scale. We're not talking about sorting through a few thousand people to create a 10-man match; we're talking about having thousands of people connected to a single server, all constantly doing things. Combine this with persistence and active simulation, and stuff just got a lot more painful.