The MadBomber API will provide public information to complement the game.

Features

  • Player Registration
  • Public Gameserver List
  • Public Map & Game Type Repository
  • Global Statistics

Validations

  • Ensure MBDS is reachable when server is registered and updated
  • Ensure Player is authenticated before joining public server lobby
  • Ensure joining Player does not exceed the servers player limit
  • Ensure Server is online when match is submitted
  • Ensure Server is authenticated when match is submitted
  • Ensure submitted match duration is shorter than the time between last submitted match and now
  • Ensure first submitted match duration is not absurdly long (>30 minutes)
  • Ensure all participating players are on the server when match is submitted
  • Ensure Player does not join two public lobbies at the same time
  • Ensure unique names for Maps & GameTypes
  • Ensure User Agent makes sense for the Request that is being made

Data Structure

Objects

Server

Stores a Server that has registered itself on the MadBomber API.

Type Name Description
string name The Name of the sever as configured by it’s Admin.
string ip The IP of the server for clients to connect to. Taken from the Header of the registration request.
integer port The Port of the server for clients to connect to as reported on registration.
string client_version The Game Client version expected by the server.
string uuid The UUID assigned to the server on registration. Effectively used like a Username for authentication.
string auth_key 512-bit Key used like a password for authentication. Stored as an argon2 hash.
integer max_players Player Limit as reported by the server.
integer current_players Currently active player count as reported by the server.
integer trust_requirement The minimum Trust Score required for Players to join this server.
string lobby_state A string to indicate the state of the lobby. Can be either Idle, Initializing or Ingame.
integer map_count The amount of loaded maps as reported by the server.
integer game_type_count The amount of loaded gametypes as reported by the server.
string region A string to indicate the physical location of a server for the purpose of selecting a nearby server.
boolean online Set to true if the server is reachable by the API. If this is set to false, the server will not be listed on the server list.
datetime last_update The last time an update from the server has been received. Used to ensure server aren’t offline for too long.
datetime register_time The time at which the server was first registered on the API.
datetime online_since The time at which the server reporter its startup. Effectively contains the last restart time. Can also be used to calculate uptime.
Player owner The player who owns this server.

Player

Stores a Player that has registered themselves on the MadBomber API.

Type Name Description
string name The players chosen nickname. Uniqueness is enforced.
string uuid The UUID assigned to the player on registration. Effectively used like a Username for authentication.
string auth_key 512-bit Key used like a password for authentication. Stored as an argon2 hash.
string last_ip The Last IP the Player has logged in with.
integer submission_limit The maximum combined amount of unique Maps and GameTypes that the player is allowed to upload.
bool global_ban Can be set to true to globally ban a player. A global ban prevents players from joining public lobbies and submitting maps/gametypes. Reserved for emergencies.
bool admin Defines this user as an API Admin. This will grant some minor benefits such as not being able to get reported and getting Nickname validations bypassed. Reserved for RFX.
bool bypass_ip_limit This will bypass the IP Check for this player, effectively allowing another account to be registered from the same IP as this player.
datetime register_time The time at which the player was registered on the API.
datetime last_activity The last time anything has been done by the player. Updated any time the player is successfully authenticated.
Server connected_server If the player is currently in a public server lobby, this will contain the server the player is currently connected to.

Match

Stores the outcome of a ranked match played on a public server.

Type Name Description
decimal playtime The total length of the match in seconds.
datetime submitted_at The time at which this match result was submitted.
Player winner The Player who won this match. Set to null if the match was tied.
Map map The map this match was played on.
GameType game_type The game type this match was played with.
Server server The server this match was played on.

JoinToken

Stores a token that is used for validating Players every time they attempt to join a public lobby.

Type Name Description
string token A 192-bit Hex string representing the token.
bool validated If the player authenticates themselves within a valid timeframe, this will be set to true.
Player player The player who reported themselves to the server.
Server server The server that requested the JoinToken.
datetime valid_until Defines when the Token will expire. Typically set to a few seconds after the creation time.
datetime created_at The time at which the Token was requested.

MatchPlayer

Stores a players participation in a Match along with some stats.

Type Name Description
Match match The match the player participated in.
Player player The player who participated in the match.
integer painted_tiles The amount of tiles painted by the player. Only used for Paint Bomb GameTypes.
integer broken_tiles The amount of tiles broken by the player.
integer placed_bomb The amount of bombs placed by the player.
integer used_abilities The amount of abilities used by the player (counter per use).
integer collected_powerups The amount of powerups collected by the player.

MatchKill

Stores a kill that occurred during a match.

Type Name Description
MatchPlayer match_player The MatchPlayer object of the killing player.
Player killed_player The Player object of the killed player.
decimal kill_time The time at which the kill occurred in seconds.

Map

Stores a map submitted to the API by a player.

Type Name Description
string name The filename of the map (including the File Extension). Uniqueness is enforced.
string description A description provided by the mapper to store additional information about the map.
string uuid A UUID assigned to the map used for identifying map objects across versions. Can be referenced in the server configuration to download the map automatically.
string checksum Contains a SHA256 Checksum of the map stored as a Base64 string.
integer version A number representing the Map Version. Starts at 1 and is incremented for every new version.
string mbm_file This field is used to store the MBM File using ActiveRecord.
integer size_x The Size of the map on the X Axis
integer size_y The Size of the map on the Y Axis
integer spawn_count The amount of SpawnPoints on the map.
string image_file This field is used to store the preview image using ActiveRecord.
datetime submitted_at The time at which this version of the map was submitted.
Player creator The player who created the map.
Map new_version References the new version of the map. Set to null on the latest version.

GameType

Stores a GameType submitted to the API by a player.

Type Name Description
string name The filename of the Game Type (including the File Extension). Uniqueness is enforced.
string description A description provided by the creator to store additional information about the GameType.
string uuid A UUID assigned to the GameType used for identifying GameType objects across versions. Can be referenced in the server configuration to download the map automatically.
string checksum Contains a SHA256 Checksum of the GameType stored as a Base64 string.
integer version A number representing the GameType Version. Starts at 1 and is incremented for every new version.
string xml_file This field is used to store the XML File using ActiveRecord.
datetime submitted_at The time at which this version of the GameType was submitted.
Player creator The player who created the GameType.
Map new_version References the new version of the GameType. Set to null on the latest version.

ServerBan

Stores a ban of a player submitted by a server admin.

Type Name Description
Player player The player who was banned from the server.
Server server The server the player is banned from.
string message A message provided by the server admin as the ban reason.
datetime banned_at The time at which the player was banned.
datetime banned_until The time at which the ban will be lifted. Limited to 10 years in the future.

PlayerReport

Stores a report against a player submitted by another player.

Type Name Description
Player reporting_player The player who submitted the report.
Player reported_player The player who got reported.
text message A message to explain why the report was submitted.
integer trust_impact How much Trust Score is deducted for the report. This deduction is only applied if the report has already been acknowledged.
bool is_acknowledged Used to confirm that RFX took a look at the report and deemed it valid. When this is set, the report will negatively affect the reported players trust score.
bool is_false Used to flag false reports. If RFX deemed a report to be false or abusive, this will be set and negatively affect the reporters trust score.
datetime report_time The time at which the report was submitted.
datetime acknowledge_time The time at which the report was acknowledged.

Table of contents