Ballerspiel

Run your own server

Ballerspiel ships a dedicated server for Windows and Linux. It needs no graphics card and no player at the machine. The download follows at launch.

How players find it. The online list in the game shows our official servers. Players reach your own server by its address: in the game's multiplayer menu, open the LAN tab, type the address (for example 203.0.113.5:7777) and press Connect. In the same local network the server also shows up in the LAN list by itself.

Start

Linux:

./BallernServer Ballern -log -port=7777 -ServerConfig=/path/to/server.json

Windows:

BallernServer.exe Ballern -log -port=7777 -ServerConfig=C:\Ballern\server.json
Switch Meaning
-port=7777 game port (UDP) - open it in the firewall
-ServerConfig=<file> the configuration below
-saveddirsuffix=<name> own folder for logs, bans and saves - needed for several servers on one machine (each with its own ports)
-nosteam -lan LAN only: no internet, shows up in every player's LAN tab
-log write a log file

Configuration

One JSON file sets the name, slots, bots, the map rotation, loot and admins. The example explains every setting in place (keys starting with _ are comments - the server ignores them, you can keep them):

Download BallernServer.example.json

Without a configuration, or with a broken one, the server still starts: every match fully random, no admins, and the log says what was wrong ([Dedicated] ConfigError ...).

In the game

Admins (listed in the configuration by SteamID64 or EOS:<id>) moderate by chat: /kick, /ban, /unban, /banlist, /mute, /unmute, /map, /nextmap, /setbots, /addbot, /removebot. Players can vote: /votemap, /votenext, /votekick, /voteban (kick and ban votes only while no admin is online). /help lists everything.

The example file

{
  "_help": [
    "Ballerspiel dedicated server - example configuration with explanations.",
    "Start: BallernServer Ballern -log -port=7777 -ServerConfig=/path/to/this.json",
    "Keys starting with '_' are explanations; the server ignores them, so you can keep them.",
    "Everything not set falls back to a sensible default; a missing or broken file starts the server",
    "with a fully random rotation and no admins (the log says why: '[Dedicated] ConfigError ...').",
    "Several servers on one machine: give each its own -port and -saveddirsuffix=<name>",
    "(own logs, bot roster, ban list and skill saves)."
  ],

  "ConfigVersion": 1,

  "ServerName": "My Ballerspiel Server",
  "_help_ServerName": "Shown in the in-game server browser.",

  "SteamAdvertise": true,
  "_help_SteamAdvertise": "true: list the server in the online server browser (Steam master server; with -BallernOnline=EOS an EOS session). false: reachable by IP only.",

  "Lan": false,
  "_help_Lan": "true: announce a LAN session instead - visible in every player's LAN tab, no login and no internet needed. Same as -lan on the command line (use together with -nosteam).",

  "MaxPlayers": 64,
  "_help_MaxPlayers": "Human player slots, 1-64 (default 64). Bots never take one of these slots.",

  "BotCount": 6,
  "_help_BotCount": "Bots per match for every rotation entry that does not set its own. Omit it to keep the game's default. Capped by the server's bot limit (64).",

  "HumanVsAI": false,
  "_help_HumanVsAI": "true: in team modes (TM, CTF, BB) all humans play together against the bots. Also applies to /map and /votemap.",

  "Loot": {
    "_help": [
      "Optional: change what loot crates contain. Only list what differs from the game's defaults.",
      "Crates: per crate, per content: a weight (0 = never, higher = more often).",
      "Mix: how often each crate type appears on the spawn points (default: the three standard crates, equally often).",
      "Crate types: BP_AllCrate, BP_WeaponAmmoCrate, BP_HealArmorBuffCrate, BP_AmmoCrate, BP_ArmorCrate, BP_BuffCrate, BP_HealCrate, BP_WeaponCrate.",
      "This block applies to all rotation entries; an entry with its own Loot block replaces it for that match."
    ],
    "Crates": {
      "BP_AllCrate": { "BP_AtomicBombCannon": 0 }
    },
    "Mix": {
      "BP_AllCrate": 1, "BP_WeaponAmmoCrate": 1, "BP_HealArmorBuffCrate": 1, "BP_BuffCrate": 1
    }
  },

  "Rotation": [
    { "_help": "One match: Map, GameMode and MatchTimeSeconds. Weather and Daytime are optional - left out, they are random every time.",
      "Map": "ZoneZero", "GameMode": "BR", "MatchTimeSeconds": 480, "BotCount": 14 },

    { "_help": "Ballerball on City at night in the rain, with its own bot count.",
      "Map": "City", "GameMode": "BB", "MatchTimeSeconds": 300, "Weather": "rain", "Daytime": "night", "BotCount": 8 },

    { "_help": "Clown-Off on Carnival; weather and daytime random.",
      "Map": "Carnival", "GameMode": "CO", "MatchTimeSeconds": 300 },

    { "_help": "Humans against bots for this match only.",
      "Map": "Camp", "GameMode": "CTF", "MatchTimeSeconds": 420, "HumanVsAI": true, "BotCount": 10 },

    { "_help": "No atomic bombs on the small map: this entry's Loot block replaces the global one.",
      "Map": "Stores", "GameMode": "FFA", "MatchTimeSeconds": 300, "Daytime": "apocalypse",
      "Loot": { "Crates": { "BP_AllCrate": { "BP_AtomicBombCannon": 0 }, "BP_WeaponCrate": { "BP_AtomicBombCannon": 0 } } } },

    { "_help": "Leave out Map and/or GameMode and the server picks them at random for this slot.",
      "MatchTimeSeconds": 300 }
  ],
  "_help_Rotation": [
    "Played top to bottom, then from the start again. An empty or missing list = every match fully random (300 s).",
    "Maps: Ballertopia, Camp, Carnival, City, Motel, Stores, Village, ZoneZero.",
    "GameMode: FFA (free-for-all), TM (team deathmatch), CTF (capture the flag), BR (battle royale), BB (Ballerball), CO (Clown-Off). Every mode works on every map.",
    "Weather: clear, cloudy, fog, rain. Daytime: morning, noon, afternoon, evening, night, apocalypse.",
    "MatchTimeSeconds: length of a match; 0 or missing = 300."
  ],

  "Admins": [
    { "UniqueId": "76561197960287930", "Comment": "Steam player: the SteamID64 (17 digits)" },
    { "UniqueId": "EOS:0002aeeb5b2d4388b9a2e3c4d5e6f701", "Comment": "Epic/GOG player: EOS: plus the Product User ID" }
  ],
  "_help_Admins": [
    "Admins can use these chat commands (type /help in the game to see them):",
    "/kick <player>, /ban <player>, /unban <name|id>, /banlist, /mute <player>, /unmute <player>",
    "/map [map] [mode] [weather] [daytime], /nextmap, /no (cancels a running vote)",
    "/setbots <n>, /addbot [n|name], /removebot [name], /resetbot <name>, /deletebot <name>",
    "Everybody: /help, /maplist, /kill, /stuck, /votemap, /votenext, /votekick, /voteban (votes only while no admin is online), F1 = yes, F2 = no.",
    "Bans and mutes are stored on the server and last until an admin lifts them. The two IDs above are examples - replace them."
  ]
}