Tuesday, February 10

My perfect MMO Part 1: Instancing

I'll be working out some idea's I have about how to go about setting up the perfect MMO.
This will of course be purely subjective, though I will try to design an MMO that more people besides me may enjoy. Consider this one long brainstorm.

The first aspect I'd like to tackle is Instancing.
There's always this divide between people who like instances and those who want a seamless world, pretty much the same way there's this line between hardocre and casual players. In both cases the definition of each side of the divide depends on whom you are talking to and how they see themselves. One argument often encountered is that a seamless world is more immersive, it doesn't burst the magic circle as much as the inevitable loading-screens of instances.
The counter to that is that a lot of people find it breaks their immersion to 'hitch' every so often when they cross one of those seams in the world that aren't there in seamless worlds. Especially when fleeing from a Big Baddy who takes the 10-20 second hitch to leisurely nibble upon the player. For them the world usually is seamless.

What I'd like to do is try to use instancing to create the illusion of a seamless overland world but in the form of public instances and /or sub-instancing and use private instances (for solo / group adventures and raids) in such a way that the laoding screens do not occur in the heat of the moment/battle but at moments where they make sense. At the same time I'd like to tackle an often encountered problem on MMORPG servers, that of the overcrowded starter area at game launch and the ghost-town starter area 6 months later. By instancing everything, you can scale to population, regardless of where that population is at the moment and in days of low population for certain zones (like lowbie zones) they won't feel so desolate as all players present in them will be clustered together in a single or possibly two instances.

Essentially what I'm thinking about is an improved version of the Guild Wars instancing scheme.
For those of us not familiar with Guild Wars, everything is instanced here. There's towns, which are shared instances. I.e. you bump into othe rplayers all the time who are busy doing their own thing. Depending on crowdiness additional instances of the town appear and it's quite easy to pop between them. Load times are way below a minute when switching instances. Loading a town takes about a minute. Everything else, from missions, PvP maps to the overland world is group instanced. Guild Wars' use of henchmen makes those private instances when only one player is involved. Now what if you'd turn the overland world into zones which are publicly shared instances? You'd end up with something remarkably like EverQuest II which in some ways is clsoer to what I envision, but hopefully without Lag-City and Lag-Port as your main starting area's.

The main thing I'd like to steal from Guild Wars is the single Server/Universe/Shard whatever concept. With Guild Wars you only pick your Region (Europe - Asia - America's - maybe more) which establishes your default NOC (server-farm) location, but you essentially sign up to the single world server shared by everyone. There are some inherent problems with this, and you immediately need global instancing to even make this work, but I think that's good and serves to prevent the problem I mentioned before. Overcrowded starter area's at launch and ghost towns a half year in.
If you were to start a character in any of the MMO's that came out before say 2007, you'll find every starting zone a near desolate area. This is why many games implemented a newbie island sometime after launch. Most notably each and every MMO made by SOE. This is to cover the empty starter area as much as to keep trial accounts from spamming the heck out of the established playerbase with RMT messages. With Global Instancing you don't need this.

The Background I have in mind is more a City of Heroes-like city sprawl than a classic High Fantasy world in which case. Imagine a City of Heroes without the security walls that are really the edges of shared instances. It's not posisble for that game due to the way the infrastructure is set up and the game designed. But imagine a similar city, with slightly less rapid transportation maybe and with a denser Stuff to Do ratio, where you do travel from instance to instance via seams. I.e. not the hitch-kaboom-crash crap of Vanguard Saga of Hitches but more something along the lines of an unobtrusive instance selector whenever you near the boundaries of a zone/instance. A smart Instance Selector Algoritm (more on that later) will get you to the next zone but not immediately. The idea is you need to confirm you wish to go to the next zone, at which time a connection is being established and the next zone is slowly loaded in the background of your client. When you hit the seam, you pass through. Now if you didn't confirm the transfer, this'll be the invisible wall that seamless world enthusiasts hate so much.

I envision this as an indicator that lights up hitting a key, assignable but let's use "I" for Isntance for the time being even though that's usually mapped to Open Inventory, will start a background progress that'll incur a minor performance hit, but prevents the use of extenisve loading screens.
Clicking the Indicator with your mouse will allow you to select your instance and bypass the Instance Selector Algorithm. The one downside to this is that people may seem to disappear into thin air, but this can be circumvented by a 'model continues on last vector and starts to fade after 10 seconds to disappear 45 seconds after transition' system. We'll even include an option where you autoconfirm every transition and only need to hit the key if you don't want to.

In terms of level design, it should be possible to set things up in such a way that generally speaking there isn't much to do the last 100 feet from the boundaries of any zone, further alleviating any immersion breaking effects. Similarily you can have such an Indicator appear when nearing a sub-instance. Places like Auction Houses will in this way not destroy your game client's performance just because you pass by in front of the door, unless you confirm that you want to enter it, and in that case you won't be standing there with 50 odd people killing your bandwidth and memory, but a maximum of 10. Actual numbers subject to extensive stress testing during Beta of course.

There's several benefits to this kind of system.
When you set up your architecture right, you can more efficiently use your available server capacity. You'll have to start thinking along the terms of cloud computing for this. You don't really need servers dedicated to one single zone. I'm talking actual physical servers now, not the Universe/Shard/Server/World selections. If you set it up right you can have each server be able to serve each instance, though Beta Testing will undoubtedly show that some guestimates can be made as to which zones need more instances at any given time and have your servers pre-load those instances so you don't run into the problem of an instance actually needing to be initialized because you're the only person to visit it in months. Each zone should naturally have one instance running. A central Zone manager should keep track of load/capacity and have a second instance fired up as capacity fills up.
For example, a new instance is initiated if capacity reaches 60% (either based on nr of players or resources used depending on which makes more sense during development and after stress testing). When capacity of instance #1 reaches 70% new entree's are automatically assigned to the new instance, unless the entree uses the cklick-the-indicator manual override to enter the more busy instance. From 90% capacity, no new entries to that instance are allowed. The instance becomes locked and you are directed to the new one regarldess of personal choice.

The Instance Selector Algorithm, of which I'm not sure if this will be client-side or part of the Zone manager deamon, also has the chore of keeping groups together. I.e. in passive mode (you do not actively select which instance you go to) you're always directed to the instance the group-leader is in. I'm not tech savvy enough to determine what'd be more resource hogging, a client side algortim polling instance load then deciding on its own or a client that just says "Hi, coming up on zone #34562, please provide instance nr for me" and have the daemon figure it all out. I suspect the latter can do with fewer network transactions, which is generally a Good Thing™.

Content will mainly be instanced and or sub-instanced (more on sub-instancing later) in the manner of City of Heroes and Age of Conan both. The door-to-mission from the former, and something similar to the Night time Destiny Quests in Tortage of the latter. Essentially the Cityscape (my new term for the overland map) will be publicly shared, and I got some idea's for fun generic content in the form of encounters and farming gameplay, and be as seamless as possible, with quest / story arcs in a more private setting. But all that will have to wait for the post about content and or gameplay.


  1. Although I do like some of your ideas, I don't really see how this makes or breaks anything. It is sort of the icing on the cake if done right. But nobody quits a game because how the instancing works. Pehaps it speeds up their decision to quit. Or it is used as an excuse.

    If we ever get to develop our MMO I will leave this to you at first. And afterwards complain that you did it wrong regardsless.

  2. You are aware there's droves of people who will actually not play a game at all because it has instancing? Of course they're stuck playing EverQuest or Vanguard as a result.

    But the idea behind this is more about having a single server, than instancing itself. People do and will and have quit because they rolled a toon on a 3 month old server with resulting starter ghost towns. Even Blizzard is now experimenting with character classes that can start at level 55 rather than level 1. It's a real issue and the only way to address it is by using instancing. So far only Guild Wars has caught on to that, albeit in a manner that can be improved upon.