[DEVELOPMENT / NETWORK ] idTech4 Masterserver

Why this project?

During the 2000’s, I have enjoyed many games using the idTech4 engine, such as Doom 3 or Quake 4. Those games still look impressive today, especially when it comes to its truly realistic lightning rendering.

However, I was curious about the status of those games in multiplayer, and I noticed most of these games have its masterservers either buggy, or simply dead. Worse, some games cannot be reactivated due to deep authentication encryptions that haven’t been reverse-engineered yet (Wolfenstein 2009 and Enemy Territory: Quake Wars using the demonware technology). Thankfully, all of these games could still be analyzed, both in the binaries and the packets that were recorded by the community for the past years.

After hours of studing the packet patterns, and testings, I recreated an almost-universal idTech4 masterserver, purely written in Golang and SQLite3, while also fixing some security flaws. The masterserver is currently hosted on the BaseQ gameservers and can be freely used by everyone.

Games supported

DOOM 3 (And DHEWM3-based projects)

Quake 4

PREY (2006)

Features

This masterserver recreation can:

  • List and register servers created by the community.
  • Authenticate people, ban people according to their CDKey or IP.*
  • Attribute an unique GUID to clients that can be used to track stats serverside.
  • Check in real time if games/engines using the masterserver are up to date.
  • Automatically remove servers if not receiving heartbeats after a certain period of inactivity.
* Please note that CDKey verification was not reverse-engineered, but some basic protection exists, so that people can still enjoy the supported games.

Using the Masterserver

In order to be properly registered on the masterserver, you will have to open the console (CTRL + ~ by default) and type the following written in italics:

  • seta net_master0 « idtech4-ms.baseq.fr »

You will have to restart the game to properly apply the changes. If successfully entered the command, you should be able to see a message in the console that a GUID was set.

 

Sourcecode

Not distributed until iD software / Bethesda / Zenimax / Microsoft allows me its publication.