Get SpatialOS

SpatialOS

Company

Careers

Sites

A Mini-MMO manifesto

Trond Fasteraune is an independent developer from Norway, who worked on games including Among The Sleep, and is currently experimenting with a prototype small-scale MMO on SpatialOS. Here, he explains what he hopes to achieve.

Back in January 2017, two of us at Krillbite made a small prototype of an MMO in 7 days. It was an attempt at making a game around the subject of xenophobia – we wanted to see whether players would be hostile towards other players who simply looked different. It was a fun little experiment called Rainbow and you can read more about here.

It’s worth saying that we were two developers making this with no released multiplayer games in our portfolio – Rainbow was our first attempt at diving head first into multiplayer technology. And at a game jam you have a tight deadline, so we had to learn it quickly. Today, with the SpatialOS GDK for Unity, I believe we could have done it in a few days.

“I’m making an MMO”

MMOs are often created by huge teams with a lot of resources. That’s why some of the most popular games are massive games like World of Warcraft, EVE Online and Guild WarsThese games have huge, massive worlds with tons of assets, story and thousands of hours of content to explore. Often when people hear the acronym “MMO”, those are the games they think about.

There are several blockers to creating these kinds of games – but the biggest is actually coding the thing. Programming the networking part of an online game has, for a very long time, been reserved for the most experienced developers. For that reason, not many multiplayer games have been made from scratch by smaller studios. But over time, packages or “networking solutions” have made it possible to make these games faster. With the introduction of Improbable’s SpatialOS, design and implementation is now the main focus, as the programming can be done even by junior programmers. Network compression, security and optimization are automatically handled for you. The work is now, more or less, high-level programming.

For six more weeks, I’m going to be making a small scope MMO to test out the new SpatialOS GDK for Unity and to give feedback on the process as it goes into Alpha. The first thing I had to do was to write a high concept document to detail the core mechanics in my game. With that in mind, I discovered that I keep making my game mechanics fulfil certain criteria. They’re not a random mush of “cool ideas”. So I made this short list – some kind of a design manifesto.

 

Trond’s design manifesto

I want to be able to change and affect the world I play in.

I want my goals to be reachable with my limited available playtime.

I want my performance to not be a burden to anyone.

I want maliciousness to not be able to grow.

I want to instantly be able to play with my friends.

I want the population of players to not affect gameplay in a negative way

Rust, a game with player-driven persistent buildings.

Designing for persistence

I want to be able to change and affect the world I play in.

SpatialOS allows your actions to stay in the world forever. If the game is designed with that in mind then this means that if you drop your items on the ground, or if you build a structure in the world, they might stay there forever. For a player, this means that they will feel that they have an impact on the world around them – that the game is not just about building your character, but also about building the world.

Players tend to gravitate towards other players. If they can build structures in the world that persist forever then this might become a problem. Without a proper system to counteract this, you’ll end up with more and more “things” in the world.

Eventually, you’ll run into a problem of having too many things in one place. Depending on the type of game you’re making this might be is something you want. But if this is not something desirable, you might end up with players making an impenetrable fortress given enough time and resources. That’s not fair to new players, is it?

There are many different ways to solve this. The best solutions tie well into the design of your game and/or lore so that they blend into the game themselves. Here are some examples.

  • Your game is round based and there is a winner at the end. The world restarts.
  • Your game has an eye of the storm, shrinking to one point in the world, then expanding again, every two weeks. Similar to how Fortnite does it. Wiping out every structure it consumes.
  • You capture or place an energy stone in a location you want to build your base at. Your structures are powered from that stone. There is a limit to how much power you can drain.
  • Older structures become a permanent part of the world and hence public spaces.

Planetside 2 was designed to let players of all levels contribute quickly.

Designing for quickplay

I want my goals to be reachable with my limited available playtime.

In many competitive online games where levels and playtime ties into how powerful your character is, alienation of casual players is a problem. A large portion of adult gamers have less time on their hands to play than the younger gamers, and as a result of that, they feel that competing in online games is a waste of time.

Why even try when you know that hardcore players will be better than you? Just because they have spent thousands of hours upgrading their character? So the challenge is designing a game in a way so that it evens out the odds.

In my future games, I want players to be able to join in and have fun at the same level as hardcore players. Some MMOs have attempted this, like Planetside, making veterancy about an expanded selection of the same skill-set, without necessarily increasing the power of that player. The PvE-focused City of Heroes had a side-kicking system, where low-level or new players could play alongside higher-level friends. In that situation, new players can contribute at the same level as veterans.

Guild Wars 2 has a design manifesto centred on social gameplay.

Happy to contribute

I want my performance to not be a burden to anyone.

You should always feel happy when you see another friendly player. You should always feel the need to welcome them into your group of players trying to accomplish a task. There should never be a fight over rewards, and if you try your best, you should get good rewards. Players should also not feel like they can be replaced if they perform poorly.

ArenaNet talks a lot about their design manifesto when it comes to social gameplay in their newest game Guild Wars 2. You can read more about their manifesto here.

Team-killing is punished in World of Tanks - but that doesn't always stop it.

Team-killing is punished in World of Tanks – but that doesn’t always stop it.

Designing against griefing

I don’t want maliciousness to grow.

Sadly, in all online video games, there are people who just want to ruin other people’s fun. You could have people in your own community working against you, sabotaging, obstructing, destroying your work. These people make a game of disruption and the game enables it. Whether you’re team-killer in World of Tanks or a ganker of low-level players in World of Warcraft, you’re getting your pleasure from spoiling somebody else’s fun. Imagine teaming up with a player to build a base together only to have that player open the doors to the enemy. That’s no fun.

This is a tricky point that I want to try my best to design my games around. How I do that will truly be a challenge, but at the core I want trust to be earned and sabotage to affect yourself more than the people around you.

SpatialOS games like Rainbow can have instant drop-in, drop-out gameplay.

SpatialOS projects like Rainbow can have instant drop-in, drop-out gameplay.

Community play

I want to play with my friends.

This is a point that touches many other points. I want my friends to be able to play with me almost instantly, either by spawning next to me or near me. I also want them to not feel useless as a newly spawned character. I need to design around the fact that some friends have less time on their hands to play than other friends, and that they should be allowed to enjoy the same content as their other friends.

There should be some limitations in place in order to make sure that players can’t invite a whole community at once. A twitch streamer with 20,000 viewers shouldn’t be allowed to flood an area by inviting all their viewers to spawn next to them. Maybe add a cost to summoning a friend? A cooldown? Maybe, by spawning a friend, it takes a portion of your player experience? Maybe a whole level? As long as you design around the fact that some people have a lot of friends and that it shouldn’t be used to gain a big advantage, it’s fine.

How do you scale gameplay elements in games like Mavericks?

Scalable Multiplayer

I want the population of players to not affect gameplay in a negative way

This is maybe the most important point I wish to design around. Your game should be just as fun to play with 50 players than 10000 players. SpatialOS makes it possible to scale your game world endlessly, so the challenge is designing content to fill that space. Procedural generation might be the key here.

By using procedural generation and randomness, one might be able to make the world a truly living world. What if animals were introduced to the world? Strong animals might live far away from other players, enticing other players to go seek them out for bigger rewards. In order to keep players together, animals might become more hostile towards low-density populations, making it so that players want to stay together in one area of the world if the population is low.

More than just words

I don’t think I’ll be able to fully make all the systems I want to make in my game in the coming weeks due to time constraints, but I’m aiming for something small and polished. A vertical slice or a minimum viable product. Knowing that I mostly have to focus on high-level programming, implementation and design makes it easier for me to cut ideas early to fit within the scope of the project. Let’s see how far I get!