Cross-platform play is the current holy grail of gaming, and recent concessions from Sony allowing all PS4 games to do cross-platform gameplay is a good indication of where the trend is heading, thanks to big-name games such as Fortnite, Rocket League, Minecraft, and Roblox.
If you would like to ride the wave of cross-platform gaming but are not up to speed with the nuts and bolts of building them into your game, you’re in luck!
First things first - let’s go over two basic concepts in Cross-Platform Gaming that often get mixed up: Cross-Platform Progression vs Cross-Platform Play.
- Also called Cross-Save
- Letting players play in one device (in one platform), and pick up where they left off in another device (which may be in different platform)
- Applicable for Single-Player as well as Multiplayer Games.
But wait, what about Steam Cloud Save or Xbox Cloud Save?
A lot of platforms support the ability to backup your local Save Game to their Cloud, so you can save your progress in one device, and picks it up again in another device. However, it only works on the same platform.
So, say that you’ve spent hundreds of hours slaying monsters in the PC version of The Witcher 3, and you’re thinking of resuming your adventure in your brand new PS4, you’re out of luck.
Alright, I want the best for my players. How can I enable Cross-Save for my game?
At a high level, you need to do two steps: Identify your players and let them store platform-agnostic save game data.
Step 1: Identify your Players using Single Identity across all Platforms
The first crucial piece for any Cross-Platform capabilities is to identify your players. Simply put, your game needs to know that whenever I log in with my Xbox account (Gamertag “Chuck Norris”) or from my PSN account (Gamertag “Raygolas”), they both map to the same user in your system.
For that, you need a central Identity and Account Management (IAM) system that can store account linking information to various Gaming Platforms, such as Xbox Live, PSN, Steam, Epic Game Store, and so on.
When a player logs into your game, it will initiate account linking to establish a connection between your IAM and the platform where your game is, via Service-to-Service API call. Each platform generally provides a set of backend APIs you can use, from authenticating users to performing various activities on behalf of the player.
After you authenticate with the platform where your player originated, you can now identify the player with your own unique ID.
Example: Linking Account to Steam
This is a high-level example of how to have your IAM service to do account linking in Steam, and perform S2S (Server-to-Server) calls on behalf of your players on Steam.
First things first, you need to register as a Steam Web API Publisher here, to get your own AppID and Secret token.
After that, you can follow this flow on how to exchange the Steam ticket with your own authentication ticket, to be used for your other Services.
All of these can be done without player interactions.
Step 2: Save player progressions
After you identify the Player in your system and perform the ticket exchange as listed in Step 1, you can direct your game to your service that handles storing player progressions.
Depends on your game design, you can choose to go with a binary-save upload/download mechanism, or you can go with a more granular, less opaque player inventory and progression storage. Or both.
A few things to consider
As you will be enabling Read and Write of Player Progression Data from multiple platforms, it is best to restrict “how many devices can be running at any given time for the same Player” to one active session at a time. The term for this is Single Point of Presence (SPOP).
- This is what people have in mind when they talk about “Cross-Platform Gaming”
- The idea is to let players from multiple platforms play together in the same multiplayer session.
Sweet. Can I use Xbox Matchmaking or Steam Matchmaking?
No, because platform-specific services will not recognize other players from outside of the platform, i.e. Xbox Live matchmaking does not recognize PlayStation players.
Aha, this sounds familiar. Does that mean that I need the IAM system discussed above?
Yes, in fact, a unified IAM is the foundation of any Cross-Platform activities, since you need to be able to identify your players, regardless of which platform they are coming from.
So, the steps are:
Step 1: Identify your players (IAM)
Exact same steps as above
Step 2: Get them playing together
Once you can identify your players, now you can build multiplayer capabilities that work for your game, such as Matchmaking, Multiplayer Session Management, Stats, Leaderboard, Achievements, and so on.
A few things to consider
Keep in mind that you still need to respect each Platform’s Certification Requirements. For instance, you need to implement and handle Xbox Party matchmaking.
Unlike Cross-Save, you technically don’t need to enforce Single Point of Presence. However, if there is data that you need to write per Player, such as Post-game match data or ELO Ranking data, you probably do want to enforce one active login per Player ID.
When you are designing the network architecture for your Cross-Play multiplayer session, keep in mind that most likely, peer to peer connection will not work, due to the incompatibility of various platform-specific networking libraries (for instance, Xbox One’s Secure Device Association is not compatible with PS4 networking construct). The most straightforward path is to use the Dedicated Game Server model.
Lastly, when designing your Cross-Platform Matchmaking system, consider supporting a Server-driven Ruleset where you can configure and change matchmaking scenarios and rules from your service without needing a client patch. For instance, if you need to isolate Keyboard/Mouse players from the Console/Gamepad players due to a game-breaking balancing bug, simply by adjusting the matchmaking rules on the server-side.