by Sandra Powers
Social interactions between players are very important for most MMO games – after all, the multiplayer aspect is one of our big attractions. Maintaining a good level of social interaction is especially important after the game has shipped. Live development is all about keeping your subscribers playing, and a strong social network is amazingly effective in accomplishing that. Today I want to talk about some of the engineering considerations behind social interaction.
When we talk about social interactions in an MMO, we often mean a gathering of avatars at one in-game location. Maybe it's a guild getting everyone together in the guild hall to talk about the news of the week. Maybe it is players meeting up in the town square to celebrate the Winter Festival, hand out cookies, and trade volleys of snowballs. Or maybe it's just everyday business as usual as half the world converges on the marketplace to display their treasures and the other half turns up to buy them.
All of these gatherings are valuable to the long life of a game, but all of them can also have severe performance implications (e.g. lag). If we want to encourage social interactions like these, then we need to ensure adequate performance for the participants. So let's take a look at some of the factors that go into supporting a smooth social experience for our players.
Game performance can be roughly broken down into client-side performance (how the client handles tracking and displaying all the information it gets) and server-side performance (how the server handles coordinating and controlling all the action). Client performance is often the more noticeable to players – a bad framerate can turn the entire game into a nausea-inducing slideshow. And yet ensuring good client performance is tricky. No matter what your recommended machine spec a goodly number of your players will try to get away with less. You have no control over the client environment, and yet your players will hold you responsible for the quality of their experience.
Bad client performance at large social gatherings is often intimately related to the graphics engine. Unfortunately, the client is one place where MMO game teams may suffer from a single-player game mentality – they want the most amazing, sexy, cutting-edge graphics available because how else can they prove that they are part of the next generation? But those graphics can inflict a major cost on client performance, which in turn imposes major limits on social interaction.
Now don't get me wrong – it's important for your game to look good, especially if you are aiming for recognition from the mainstream gaming press. But your game can look good without using every single new bell and whistle on the newest top-end video card. World of Warcraft serves as an excellent example of restraint: they kept their client requirements quite reasonable and yet still look pretty damn sexy, largely due to talented art direction. Just remember your end goals when you sit down to make graphical decisions: you are making an MMO; MMO games benefit from social gatherings of avatars; so make sure you choose a style and an engine that can support gatherings.
One of the trickiest tradeoffs between graphics and performance, at least when we're talking about social support, involves avatar customization. Highly customizable avatars are a boon for socialization: customization helps players distinguish themselves both conceptually and visibly, and even gives them something to talk about. But customization tends to mean more graphics resources in the client (and more art resources on the team, but that's another discussion). There isn't one right answer to this tradeoff – the proper balance will depend on your game – but it pays to be thinking about the question early on.
Server performance, on the other hand, is generally a little easier to deal with than client performance, at least with regards to social gatherings. You can often add more or better hardware to you server farm to deal with hotspots, whereas convincing all your players to upgrade their home machines can be difficult. But the server side has some limitations too.
For example, if your game is zone-based then you will probably have the limitation that you cannot split one zone across multiple subservers. This can be a real pain when planning large cities, especially if you want to keep the entire city as one zone for immersion reasons but also need to support one or more areas of dense player population.
Even if your game isn't technically zone-based, this can still be a problem. Asheron's Call 1 defines its geography as a grid of landblocks, each about a thousand square meters, which get dynamically load-balanced between subservers. But each landblock is load-balanced as a unit, so AC1 has a similar limitation in that a landblock cannot be split across multiple subservers.
This means that any at some point you will hit a limit on how many player avatars can be in a single zone or landblock at once. Generally speaking it is cheaper and easier to deal with this limitation with clever world design than it is to try to engineer your way around it. But before you start building your world, it pays to give some thought to the smallest unit of processing that a single machine might handle and how many people you might want to cram into that space before server performance degrades.
Of course, you can bypass some of the performance limitations on social gatherings by supporting interactions that don't require all the players to be in the same place at the same time. A solid chat system, for instance, is immeasurably valuable for allowing players to form social bonds while also going out and actually playing your game. Offline communication and trading can help tie the community together without raising the specter of lag. But as great as these are, very little compares to the thrill of getting together with fifty or so friends and strangers to pelt each other with virtual snowballs. This is one of the great attractions – and the great curses – of MMO games.
Unfortunately, the underlying support for social gatherings is largely something that needs to be built into your game from the beginning. Performance can be improved after launch, but improvement can only go so far. So if you mean to run a thriving game for the next ten years, consider these things before you begin and design your engine around your requirements.