Engineering

Development

ID:

Comments:

Date:

Chris Roberts on Multiplayer, Single Player and Instancing

I get a lot of questions about how the whole persistent universe works and what I mean when I talk about battle instances.

I’ve given some answers but as it keeps coming up, I thought it would be good to give all of you a longer description in how this all works and fits together.

One of my goals with Star Citizen was to create a huge open world that you could adventure in solo, with your friends, mingling with NPCs and other real people.

Freelancer was built to have up to 128 players in multiplayer, but as a few of you know that was more a theoretical maximum than something that was really practical, especially back in 2003. When I started building Freelancer, partly inspired by the work done on Ultima Online (which was in development when I was still at Origin), the fun I was having playing multiplayer games like Command & Conquer and Diablo I had wanted to bring the Privateer experience into the bold new world of multiplayer. My original vision for Freelancer was to first release a single player game and then follow it up with massively multiplayer version with a dynamic economy and a world that reacted and adapted to the players actions.

I didn’t get a chance to deliver this vision and ultimately while Freelancer was a good game, it fell short of what I was aiming for.

With Star Citizen I was determined to combine what I wanted to achieve with Freelancer, with the personal experience that I think both Wing Commander and Privateer were so strong with.

But me being me, I wanted to combine things I like about the promise of a MMO, but avoid the aspects that I’m not so keen on like splintered player groups, griefing and grinding. I also was really impressed with how Demon’s Souls merged the single player experience with the multiplayer side.

All of this helped form my thinking on how Star Citizen is going to balance the difficult balancing act between multiplayer and single player.

All multiplayer games – whether they are a persistent world massively multiplayer game (MMO) like World of Warcraft or just an online multiplayer game like Battlefield 3 – have a limit to the number of players that can be active in anyone area or level. This number is usually inversely proportional to the amount of data that needs to go between the client and the server. For a game with complex physics and a fully destructible terrain, like Battlefield 3 the number of players that can active in an instance is less than a game with less real time fidelity like WoW, or Eve on Line. But in all cases there are always more players than any one server instance can handle. For a persistent multiplayer world like WoW the solution is to split up the player base into more manageable groups called “shards”, which are a permanent instance of the universe that look after a certain amount of players.

One thing I don’t like about most MMO structures is the fragmentation of the player base between these “shards”. If you had joined much later than a friend of yours, there may not be room on his world instance anymore and you have to join another parallel one and so cannot play together. This is one of the nice things about the Eve Online design – everyone plays in the same universe.

In Star Citizen there is going to be one persistent universe server that everyone exists on. So you will never be separated from your friends, and if you want you’ll be able to join up and adventure together, you can. Due to the fidelity of the dogfighting and physics simulation we can’t however handle thousands of players in the same area of space. Even if you had enough internet bandwidth to handle the data going back and forth and a super computer for the server there’s no PC, even with quad SLI that could render that many spaceships with Star Citizen’s fidelity.

So the “magic” of Star Citizen’s multiplayer design is how we combine a persistent universe with a more traditional (and easier to implement) temporary multiplayer “battle” instance.

The way it works is that the persistent universe server, which we’re calling the Galaxy Server, keeps track of all players’ assets, group relationships and locations inside the Star Citizen universe. As the Galaxy server isn’t handling any realtime action it can handle our complete player base, which right now would be about 45,000 players, but is designed to be able to scale to millions if need be. The other key thing the Galaxy Server does is dynamically place players based on their location, skill level, alignment and player versus player (PvP) preference into battle instances. Think of a “battle” instance like a Battlefield 3 multiplayer session or a World of Tanks Battle with the key difference that the selection of players is done transparently and is “in fiction”.

An illustration of how this would work is like this –

I start out planet side on New Pittsburg. I decide to buy a few tonnes of steel to fly to the shipyards of Terra. I’m currently in the hands of the galaxy server that communicates with my client and handles my purchases and interactions on the planet as these are not real time in the manner that the space action is. We render these in the manner of Freelancer, as detailed 3D environments where we see a third person view of our character in a location and we can click on Non Player Characters (NPCs) or terminals to buy / sell, upgrade your ship, get gossip, hear about a mission and so on. You’ll also be able to interact with other players via a chat interface. We haven’t fully worked out the player avatar handling planet side but the bar or private clubs will be where you can meet / chat to other players. Besides populating the bar with NPCs, the game will also populate the bar with other players. If there are more players planet side than there are slots of avatars in the bar the ones visible to you will be based off your friends list and then it will be based on relevance to you – a player looking for a wingman, one from a similar group, or maybe someone that you’ve been given a mission to find or hunt down. You will also be able to see the full list of players in the room if there are more players than there are slots. Default would be a drop down list for this, but as I hate anything that breaks the immersion, we’ll probably come up with a better in fiction way of seeing the list of players – maybe you tell the bartender who you’re looking for, maybe you can look at the door list for the bar.

Having bought my cargo I launch into space. If there are players already in orbit there will be an orbit instance already created. If it’s not full then I will be placed into that. If it is full then a new one will be dynamically created. All orbit (and battle) instances reserve slots for friends and persons of interest (POI), which can be NPCs or other players, so if you’ve launched and there are multiple orbit instances and you have friends already in orbit you should be placed into that instance. This is also the dynamic that will be applied if you want to follow another player – you can “tag” them as a POI and then the game will do its best to place you in the same instance as your POI. For instance if you tagged someone planet side and they launch your PDA with its future version of Siri will notify you that your POI is leaving, giving you a window to launch into space too.

Once in orbit I can pull up my Navigation computer and set a course for my destination. If its several systems away like Terra, the nav computer will chart a course through the relevant jump points. You will be able to adjust this like on Google maps, so if you click a different jump point on the system map it will then re-route you on the shortest path to your destination with that jump point as the first “jump”.

Once I’ve plotted my nav course I would then engage auto-pilot and head towards my first “way” point on the path to my destination (a jump point, an interim space feature, like an asteroid belt and so on). At this point I’ve been handed back to the Galaxy Server, which is determining whether I will encounter a hostile, someone that has tagged me as a POI, or a predetermined encounter on the way, or if I’m going to run across ongoing battle instance that is relevant to me (some members of the instance are aligned against or with me). These encounters could be with an NPC or a live player(s) and are sorted on skill level and also – which is important to all of you that like a more single player experience and don’t want to deal with griefers – based on your player versus player (PvP) preference. So if you’ve set your game settings to be low PvP and you’re in a relatively safe area, you’ll likely have an NPC (PvE) encounter as opposed to a PvP one. Of course your ranking and any reputation you earn won’t be the same with a PvE encounter versus a PvP. My hope for this dynamic is that it will allow people to first play Star Citizen in a safer more single player open world style, but as they grow in confidence and want to test their mettle against other real players they can take the training wheels off and get into battles with real players. There will also be areas of the universe that no matter what your PvP setting is, will be PvP. These will be systems that are on the fringes of the policed galaxy and will be notorious for pirate and other illegal activity. They will also be the most lucrative areas – if you can survive.

Now if you’re flying with your friends, who you can link to via the game POI “tagging” system, they will be with you when you’re pulled into a battle instance, whether it is against NPCs, real players or a combination of both.

Once the Galaxy Server has determined that you will have an encounter based on the above criteria it either dynamically creates a battle instance, or puts you in one if one already exists at the encounter point, and that instance has room for new players. To exit this instance you either have to resolve the hostilities by defeating who’s targeting you, negotiating an exit or just outrunning them. Once in an instance you can put out a distress call to your friends. There are two ways people on your friends list (or squadron as we’re going to call it) can help. We save slots in all instances for friends to warp in to fight. To do this they need to be in the same system. If they are they can autopilot in to your rescue and will be dropped into the instance. If they’re not in the star system, if they can get to your system before the battle is over then they can join (but will only be able to join once they’ve reached your system). The second way for your friends to help out is by “dropping in” on your ship. This only works if it’s a multi person vehicle like the RSI Constellation. In this scenario they don’t need to be in your system, they just will drop in inside your ship and will be able to move around in first person, climbing into a turret to man it, or jumping in you P52 to fly it in combat while you fly the main ship (or they could fly your main ship and you pilot the fighter)

Once the hostilities or the event (sometimes you could be pulled into an instance because you came across a derelict ship or space station and we want to give the player a chance to explore) that triggered the drop out of auto-pilot has been resolved, you can hit auto-pilot again, get handed back to the Galaxy Server and go about your way on the nav course you’ve plotted.

You will always drop out at jump points and planets, where you will need to either make a jump to another system or land.

This process is continued until you reach your final destination, which in my example would be Terra, where I would use my comm system to negotiate a landing slot, which would take me down to the planet’s surface via an in-engine cinematic. Once planet side I’ll be able to sell my cargo, replenish my supplies and look for new opportunities via the third person planet side interface.

The advantage of this system is that is allows you to tailor your experience towards your preference – solo, co-op or full PvP. It also doesn’t partition you into different, parallel versions of the Star Citizen universe as everyone is kept on the persistent server. Because our battle or orbit / space instances are temporary, you’re never stuck with one group over the long term and due to our heavy emphasis on friends and co-op, there will always be room for your friends to join you on your adventure; whether it’s against other players or NPCs.

The same instance system underpins the single player Squadron 42. If you’re playing off-line, your computer will be acting as the server and client, there will be no opportunities for friends to join and everyone will be an NPC. But if you play Squadron 42 through the Galaxy Server, even though your missions and space areas are pre-determined (you don’t get to pick where in the galaxy you are flying if you’re in the military) we will allow your friends to drop in / drop out to take over NPC wingmen and if you want extra skill ranking you can allow other players to drop in and take over enemy ace characters. This system is pretty similar to the Demon’s Souls setup where people could drop in as a Blue Phantom to help you kill a boss monster or fight off another invading player, or you could drop in as a Black Phantom to someone else’s world and try and kill them for XP and other gamerewards.

The key to all this is to allow player choice – you want to play alone you can, want your friends to join you in co-op we allow that and if you want to be challenged by other real players you can do that. The special part is that it can all happen in the same holistic universe.

I hope this helps in terms of understanding how we’re balancing the aspects of multiplayer as well as making the game fun.