Skip to content

Instantly share code, notes, and snippets.

@heinezen
Last active January 29, 2020 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save heinezen/2063a05f4ad590a5bd8657f4e88118f5 to your computer and use it in GitHub Desktop.
Save heinezen/2063a05f4ad590a5bd8657f4e88118f5 to your computer and use it in GitHub Desktop.

Decentralized multiplayer ranking

Motivation

With unlimited modding capabilities there are inevitably unlimited possibilities for arguments over which mods destroy the game's balance and which mods are harmless. A prime example of this is the Advanced Idle Pointer mod for Age of Empires 2 by Gallas and linetyreborn. While it is inherently useful for new players, it might be considered just too useful by purists. In a centralized ranking system these disagreements can ultimately lead to a community split.

image

Idle Pointers: Genius idea or the downfall of civilization?

The community model

The community model operates on the premise that players organize themselves in communities. A community provides services to its members, for example:

  • registration for new players
  • game servers
  • databases for recordings
  • community hubs, forums or chat lobbies

The latter two are unimportant for ranking, so we will leave them out for now.

Interaction between communities

To connect the various communities their game servers are registered at a masterserver. The masterserver acts as a dedicated server registry for public lobbies and a matchmaking platform as well as supervising the distribution of match result between communities. It also ensures that players registered in different communities can play games together. This also means that players only need one account to play in any community connected to the masterserver. We will call the registered game servers and their corresponding communities the realm of the masterserver.

A community may register at more than one masterserver. This can be helpful when an organization, most likely a commercial game release based on the same engine, decides to employ their own public lobby system. Players in the community will not have to re-register and can play games in different realms.

Ranking inside the community

Each community can decide for themselves which game configuration or mods are allowed for a ranked game. The ruleset could consist of a whitelist/blacklist of mods, a list of allowed scripts, a set of permitted game settings and other similar tools.

It is important to stress that the rules must not be imposed directly on the players as players should be allowed to play unranked games. This is necessary to ensure that players can play games on servers of other communities without having to fear breaking the rules of their community.

Ranking inside the realm

Let us assume that a game's ruleset qualifies for ranking in two different communities. It is desirable that the players participating in this game are able to gain ranks in both communities. However, this requires some prerequisites to work.

  1. match results have to be securely stored inside the realm
  2. match results must be attributable to a community
  3. communities need to trust each other to not cheat

(1.) can be achieved by using a decentralized transaction database base on a blockchain while (2.) is solved by having the communities sign match results with cryptograhic signatures. (3.) can be done by letting each community decide which other communities they trust. A central authority that issues certificates, similar to a PKI infrastructure is also possible. We will discuss the former approach now.

If community A trusts community B, we will call that a verification (community A verifies community B). A verification does not require communication between the communities. It merely indicates that community A is sure that community B does not manipulate its servers or encourages cheating. As a result of the verification, a ranked match played on the servers of community B will also be ranked by community A, provided that the game settings would have been accepted for ranking in community A.

Example

As an example we will introduce the two communities Wobbly and AoKZone which both host servers for Age of Empires 2. Wobbly allows the infamous Idle Pointer mod for ranked matches, while AoKZone does not.

Setup 1: Wobbly verifies AoKZone

Wobbly => AoKZone

Woobly ranks all ranked matches played on AoKZone if the game settings would have qualified for a ranked game on Wobbly as well. Since Wobbly does not impose more restrictions than AoKZone on what games are considered ranked, all ranked games on AoKZone will also be ranked by Wobbly.

Server location Idle Pointer? Ranked on Wobbly? Ranked on AoKZone?
Wobbly No Yes No
Wobbly Yes Yes No
AoKZone No Yes Yes
AoKZone Yes No No

Note that the last game played on a AoKZone server will not be ranked by Wobbly. The reason for this is that Wobbly will only consider ranked games of AoKZone. As AoKZone does not allow games with the Idle Pointer mod to be ranked, it will always be considered an unranked game by the server.

Setup 2: AoKZone verifies Wobbly

AoKZone => Wobbly
Server location Idle Pointer? Ranked on Wobbly? Ranked on AoKZone?
Wobbly No Yes Yes
Wobbly Yes Yes No
AoKZone No No Yes
AoKZone Yes No No

Setup 3: Both verify each other

Wobbly <=> AoKZone
Server location Idle Pointer? Ranked on Wobbly? Ranked on AoKZone?
Wobbly No Yes Yes
Wobbly Yes Yes No
AoKZone No Yes Yes
AoKZone Yes No No
@glouw
Copy link

glouw commented Jan 29, 2020

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment