Becoming An MMO Game Programmer

March 13, 2011

Over the past couple of years I have been working with a local company that has a MMO game with a long history (10 years) and a loyal almost insane but small audience. It's also been the one game I play regularly for most of those years. Even today I still play a bit every day despite working on the code as well.

I won't mention the name explicitly but it's not hard to figure out.

The code base is not exactly pleasant to work with, a mixture of mostly C, some C++, some javascript and some lua. Originally the game was developed by a mixed crew, some bright and some of dubious ability, all under a great deal of pressure to ship with the usual end result. Currently we have two client coders and one host coder plus me (and an intern). Despite these obvious handicaps the game continues to provide a living for the company, and an addiction for the customers. The code, however, is pretty much a nightmare.

The game is Mac/Windows and requires a reasonably fast machine to play but nothing out of the ordinary. 98% of the code is cross-platform; the major differences are only in sound (OpenAL vs XAudio), the launcher (Cocoa in the Mac version and standalone in the PC version), and the occasional difference. The similarity of both versions is important as besides being the Mac coder I am the profiling and optimization guy. Our PC version is so odd it eats profiling tools for breakfast and using Apple's tools is the only detailed way I can get information. Fortunately over the years I have removed virtually all important differences so the data is valid both ways.

Originally the game had three orders of magnitude less content and the sloppy design reflected that; also it made assumptions about the hardware of the day and with all the pressure decisions were made that worked at the time but failed over the years. Today there are still areas of the application no one understands and won't change except under threat of death. I'm the first programmer who was given the time and expectation to solve the worst issues of the code base instead of simply adding or changing features.

I hope over time to talk about some of these challenges in addition to discussions of other important topics like dealing with hackers, fixing problems without breaking everything, how to measure for optimization and then do it, and other things I find fascinating about game development.