In our latest Livestream, our online services team talked about the major challenges to launching an online game and how SpatialOS works to mitigate them.
If you missed our previous three Livestreams, we looked at an overview of the latest version of SpatialOS for Unreal 2019.1, dived deep into computational offloading with Midwinter Entertainment, and explored iterating online games quickly, with Improbable Edmonton.
There are two main kinds of issues at launch that SpatialOS is currently trying to help mitigate. First, technical problems - the bugs that you need to iron out before launch day if you don’t want to be crunching to deal with player complaints. Secondly, the tools and services that are needed to manage at scale - matchmaking, analytics, backend databases to persist game data across game sessions - but which are time-consuming to build.
For those technical problems, we provide a live development environment and testing tools from day one, meaning you won’t face new bugs when you launch and scale. For the tools and services, we provide customizable, scalable starting points so you can spend more time on game development. Let’s go a layer deeper.
One of the key things about building with SpatialOS is that you’re always working in your final development environment - the data centre hardware and software infrastructure that you’re working with on the first day of development is the same one that you’ll release the game on. You’re getting representative feedback on the latency your players would be encountering, using the same RAM and CPU configurations the server has, on the same operating system, and so on. This means that you uncover bugs earlier in development, not when you test the live environment for the first time in the final weeks before launching when.
And because you can easily share game deployments from day one, you can test with your team, friends and family, to find the fun in your game earlier, and spend less time setting up playtest workflows.
We also provide a simulated player testing service. This helps you stress test a game session with fake players throughout your networking stack. These aren’t just AIs running on the same server in your game session. These are AIs that have been spun up on a different set of cores in that data centre and they connect to your session just like real players, so they can accurately stress test your entire system at scale. (Our free tier allows you to run two sets of cores like this.)
You can use this service to test your whole backend, not just a single game session. The above diagram shows how you can use simulated players to test your game authentication service, the matchmaker, connecting to the correct game instance, and saving relevant player data to a backend database. Launch with confidence in your backend’s ability to scale.
The service can also plug into your CI system so every time you update your game code, this service can be used run to continuously identify bugs and system changes.
One of the biggest challenges in launching a live game is that you either have to build or buy in many of the services required to operate your game. The largest online games available today are run as games-as-a-service - that is, they update regularly, with new levels, maps and content, and give players a sense of progression with unlocks and so on. These elements require lots of services - distribution, analytics, matchmaking and so on - to run to allow developers to build gameplay that exists outside of day-to-day sessions - we call these online services.
We build all our online services to be fully customizable and un-opinionated. For most of these services, we’ve built a framework and pipeline that we’ve tested for scale and stability, and examples of working logic, whilst you provide the particular logic you need for your game.
Every online service is also built to scale, utilizing proven technologies such as Kubernetes and Redis. And they all work with our GDKs for Unreal and Unity, or even if you’re integrating your own engine. And, of course, you don’t have to use our online services. You can use PlayFab or GameSparks, or just bring your own, connecting them into our Platform SDK
Our Player Auth Service maps player IDs within SpatialOS to, for example, a PlayFab account, to keep track of the player life cycle across multiple sessions. This enables you to track and drive player engagement and retention.
Our database integration is an easy way to move data and events from within a game session to a backend SQL database. This allows for longer term storage and analysis of important game events.
In development, this is a pipeline and an endpoint to store in-game event data in an SQL database. We provide some pre-instrumented events relating to our online services, for example when the matchmaker connects players to a deployment. Developers can also define their own gameplay events, such as tracking player actions.
A deployment in SpatialOS is a single game world, an instance, match or a game session. The deployment pooling service keeps a certain number of free or empty deployments running at any one time, so there’s no wait for players whilst a new deployment spins up, and queue times are kept low. This service is also built to work with our new Matchmaker.
The Matchmaker hosts our framework and your custom game logic to get your players in the right deployment, whether using ranks, IP addresses, or time counters.
‘Metagame’ is the word we’re using for any game logic that exists outside of your game sessions - for example, leaderboards or inventory unlocks, or even the seasonal campaign map in For Honor. We’re providing a coding environment specifically designed for these metagame environments.
In this coding environment, a developer can program the gameplay loop outside of your moment to moment experience. As our online services talk to this environment, a developer can define things such as when instances are created, how players are allocated, and the outcomes of individual sessions to influence metagame results.
Our metagame services package is still a work-in-progress, which we’re working on over the next year.
That’s it for our ‘Get started with SpatialOS’ series. But, fear not, we will have more dev content coming soon. In the meantime, if you missed them, you can catch up with the previous Livestreams by following the link below:
If you had the chance to watch one of the Livestreams, we would love your feedback. Let us know by joining our Discord.