Hello everyone,

In the wake of the last few weeks of posts by our community highlighting some of the issues they are currently (and have been for a long time) experiencing in the alpha we felt we needed to explain to you all what is being done in order to fix them. We therefore asked Philipp - the other part of our programming team not focusing on the artillery, to explain what he primarily has been up to since the alpha was released on Steam Early Access.


The Platform System

Hey, I am Philipp and one of the Programmers on the War of Rights Team.
I have mainly worked on core systems like Game rules, Spawning or Networking to name a few.
For quite a while now, since January last year, I have been focused on a rather large and difficult undertaking that we deemed necessary to make developing War of Rights easier and allow us to deliver a viable online multiplayer experience. That being a completely new Platform / ”Lobby” system.

What is it?

The job of the Platform system is to handle all functionality relating to a “Platform” the game is currently running on.

Some of the crucial features being:

- Authentication
- Matchmaking and Server discovery
- Connection handling between client and server
- Platform related data exchange (Usernames, Clans, etc.)
- Chat

And some of the less crucial ones:

- Friends/Clans/Groups
- Ability to join games your Friends/Clan/Groups are on
- Rich status display about what you are doing to other (i.e. “Attacking on map x for side y”)
- Statistics
- “User generated content” (Icons, server banners, etc.)

Why is it?

Right now, our online functionalities are being handled by a library that was designed for ps3/xbox360 era p2p style gaming, onto which we added the functionality required for steam servers. Since we released into early access this has been an ongoing headache. It makes it far too difficult for our small team to debug issues relating to connection failures and other connectivity issues. Adding new functionality is also a pain every time and might cause more issues down the line. In short, our current solution is not viable if we want to keep expanding on it.

What does it solve?

A completely new implementation allows us to separate all online functionality into its own module and focus on solving issues that have plagued the game since early access release, which we so far are barely even able to reproduce, let alone debug.

Some of the issues that this will fix or help us fix are:

- Stuck on establishing context
- Random disconnects
- Failure to reconnect to a server
- Failure to connect to a server
- Server mass drops
- Servers not showing up in the list
- Connections to other players staying active after disconnecting
- Lighten the load on the game networking module and thread

What does it allow us to do?

Apart from allowing us to properly debug and fix all our connection issues, it also allows us to implement some planned features as well as hypothetical features down the line so we don’t need to rip everything apart each time we want to add something.

Some of the planned features are:

- Proper error messaging for networking related issues. This includes a description of why a join attempt my have failed or a message that tells you why you have been kicked/banned of a server.
- Integrate with steams friend system so that you can join your friends and groups directly from the steam client.
- Integrate with a backend service that allows us to supplement user data with our own persistent data. This makes it possible to integrate the company tool into the game itself.
- Backer reward cosmetics

Some hypothetical features this system allows us to implement without an insane amount of work:

- Cross battle persistent data
- Game events
- Server slot reservation based on company or event
- Expanding to other platforms in the future (Epic, xbox, playstation, switch, phone, microwave)
- Platform cross-play

Why is this taking so long?

As you might imagine, this is a huge amount of work for a small team like ours and involves threading, networking, serialization, and other fun stuff.
The key here is to get it right and build a sustainable framework that is maintainable as well as extensible. This includes designing it to allow for easy integration of the different Platform Apis. (Steam being the main one, but lan also needs to be implemented for internal testing).

So, finding a combination of tools and learning them has been quite a challenge, but we hope to release the first iteration of this soon, and alleviate some of those ongoing connectivity woes.