Risk of Rain 2 multiplayer

AVIA PROPERTY MANAGEMENT LTD and Devoted Studios
successfully empower Risk of Rain 2 with
console multiplayer

Contract duration: 6 months + bug fixing

business context

The client wasn’t happy with how multiplayer worked in the game, so they trusted us to recreate the multiplayer functionality from scratch. 

The multiplayer and network system functionality was already included on the consoles but required additional development assistance, polishing and optimization.

project’s summary

Risk of Rain 2 got a fully functional multiplayer on Steam, PS4, PS5, Xbox One, Xbox Series, and Nintendo Switch.

game reviews

Risk of Rain 2 is fast, fluid and a lot of fun. This is amplified vastly in multiplayer, which works flawlessly and is very enjoyable. If you enjoy roguelikes you will enjoy Risk of Rain 2, even if you don’t, you may want to try something that is quite different from what is currently on the market.

Mitch Vogel - Nintendo Life - based on Nintendo Switch experience
The transition to 3D gameplay has been pulled off flawlessly, and the sheer diversity of gameplay options combined with the strong online multiplayer ensure that this is one you'll keep coming back to for quite some time.
read full review
01
/

what do gamers say

Dragooni — review based on Nintendo Switch gameplay
One of, if not the Best Rougelikes on switch, if not ever. It perfectly combines the Shooter Genre with Rougelikes that gets the best from both allowing for one of the most addictive and satisfying gameplay loops that gaming can offer. 
read full review
01
/

challenge

Challenge 1:

 

Implement the Steam, Xbox, and PlayStation online architecture

The game’s online architecture for Steam and PlayStation was already in place but did not function perfectly, and the client needed to be able to comfortably operate in a code for any platform, so we provided a solution:

Solution:

Pingle’s team researched the project’s entire codebase and sorted out unnecessary legacy code. Then, Pingle created a hierarchical plan for the most necessary functionality and developed it, considering platform-specific features. We developed and implemented a Steam-like online architecture for all the required platforms. It looked like a multiplatform layer, which we adapted for every platform.

We did it from scratch for Xbox because the initial realization was made on outdated XDK technology.

Doing it on PlayStation required an understanding of what causes the delays. We detected a lot of unused code and hid it from the functionality.

Challenge 2:

Choose the platform for the further development of the multiplayer functionality.

 

We needed a functional multiplayer platform similar to what Steam offers, compatible with Unity, and good enough to solve platform-specific challenges without requiring us to contact the plugin developer or the community.

Solution:

First, we agreed on the platform’s criteria: the availability of documentation, popularity, stability, and compatibility with consoles. Based on these criteria, we picked PlayFab by Microsoft. It works on all platforms out of the box. It helped us provide decent multiplayer connections, matchmaking, voice chat, and many other in-game functionalities.  

 

For PlayStation, we considered completely recreating the PS networking on PlayFab without using PS Network so we could develop cross-platform functionality later. 

Challenge 3:

Develop the solution for the proper parallel development.

Developers and QA’s from various teams tended to interrupt each other’s work, especially during the matchmaking development and quickplay testing.

Solution:

The initial plan was to implement the correct settings and architecture, but it would take a lot of time. So, we decided to add a unique ID from the file that wasn’t in the main branch to the name of each lobby. 

In fact, we added a functionality to be able to create local sandboxes for multiplayer testing. 

Developing and implementing the whole solution took 10 minutes. It helped seriously increase the velocity of work for the parallel teams, prevent teams from interrupting each other’s work, avoid the lines for testing, make parallel testing possible, and decrease the number of merge conflicts.

This helped us complete tasks in under one hour instead of five, making the development process faster. 

Challenge 4:

Extend the tool for the assets (models, textures, materials) change functionality for the proper optimization on Nintendo Switch.

The initial project had the required functionality, but it used to pack a lot of unnecessary files and assets, so the whole thing took hours to finish. It also increased the build size, which would have caused certification issues for Switch.

Solution:

We reworked and extended the available custom tool with proper UI and extended functionality. The change time decreased from hours to 40 minutes. This allowed the process to be controlled and the builds to be created without “junk.”

The tool we developed could also be used for further work on other platforms.

Challenge 5:

Provide a performance optimization process monitoring for detecting the changes in the process and reporting to the client.

Since Pingle worked on both multiplayer and optimization, we needed to provide clear reporting on all the results of our work.

Solution:

Since Unity’s performance measurement solution was insufficient for this project, we developed and implemented our own plugin for collecting custom data. Later, we extended its functionality to allow recording data directly from the console to get the most relevant data.  

Our plugin tracked the FPS, CPU, and GPU loads, combined it with QA data, and provided visualized graphs that clearly showed the progress.

We also provided a test scene for the visual changes to be clearer.