Dirty Bomb Dedicated Server - Configuration
So, you’re running a Dirty Bomb server on i3D.net? Presumably, you’d like to customise your Dirty Bomb Server to something a bit more specific than the defaults.
The majority of settings can be configured in a file called ServerConfiguration.json. By editing this file, you will be able to edit things like:
- Game Mode: Objective, Stopwatch or Execution.
- Map Rotation: Don’t like Chapel? Switch it off.
- Friendly-Fire: Because being teamkilled by Proxy is fun.
What is JSON?
JSON is short for “JavaScript Object Notation”. It’s a format that allows you to specify “keys” and “values”, and also be able to nest lists whilst still being human-readable.
There’s just one small “gotcha”. JSON doesn’t (natively) support comments. So you’ll want to keep backups of your configuration if you want to experiment with switching things off.
Why don’t you just give us boxes to fill in?
When we were doing hosting through Multiplay, their control panel had been heavily customised to allow us to fill in boxes to configure game settings in Dirty Bomb. We do not have this option with i3D.net. However, the trade-off here is that you can now easily backup and share your configurations with the community.
Available Settings
Here are the available settings that you can configure:
Setting Name | Description | Values |
---|---|---|
AdminLevel1Password | Sets the password used to log in as a “power user”. Cannot contain spaces. | Text Entry |
AdminLevel2Password | We recommend that you don’t use this - use AdminPassword instead. |
Text Entry |
AdminPassword | Sets the password used to log in as an admin. Cannot contain spaces. | Text Entry |
AllowQuickJoin | Set this to true to make your server joinable via Quick Join. | True/False |
AutoSurrenderEnabled | If enabled, the game will automatically surrender if an entire team disconnects from the server. | True/False |
BadgesEnabled | Allows players to unlock badges while playing on the server. Leave this “true”. | True/False |
CountdownDuration | Sets the countdown (in seconds) until match start once all players are “READY”. | Integer (Seconds) |
DemoPrefix | Sets the prefix of demo files. | Text Entry |
FeaturedMap | If set, this map will always be available for players to vote on when in the Lobby. | Map Object |
FixedWarmupDuration | Sets the fixed warm-up duration (in seconds). | Integer (Seconds) |
FreeDefenseRespawn | Grants the defending team an instant respawn when the attackers complete an objective. 0 = Off, 1 = Objective Mode, 2 = All Modes | Integer (0-2) |
FriendlyFireEnabled | Enables friendly-fire on the server. | True/False |
GameDifficulty | This setting is not used. | Decimal |
GamePassword | Sets a password to join the server. Cannot contain spaces. Leave blank to disable. | Text Entry |
GameReviewDuration | Sets the duration (in seconds) of the post-match summary screen at the end of a game. | Integer (Seconds) |
KillLimit | This setting is not used. Leave this set to 0. | Integer |
LobbyLockInDuration | The duration (in seconds) that players get to select their mercenaries in the Server Lobby. | Integer |
LobbyMapVotingEnabled | This enables map voting on your server. Disable this to rotate through the maps sequentially. | True/False |
LobbyMapVotingTime | The duration (in seconds) that players are allowed to vote on the next map. | Integer (Seconds) |
LobbyReadyPercent | The percentage of the Lobby that should be “READY” if LobbyReadyUpGameStartEnabled is set to true. |
Integer (0-100) |
LobbyReadyUpGameStartEnabled | If enabled, this removes the lobby timer and only starts the match once LobbyReadyPercent is reached. |
True/False |
LobbyTime | The duration (in seconds) that players stay in the lobby after the voting phase. | Integer (Seconds) |
MaxAccountLevelLock | The maximum account level permitted to join the server. Set to 0 to disable | Integer |
MaxPlayers | The maximum number of players allowed to join the server. (Including Spectators) | Integer (1-16) |
MercStackingPenalties | Applies increased ability cooldowns when a team has more than one of the same mercenary in play. | True/False |
MidGameReviewDuration | The duration (in seconds) to show the mid-game summary screen. Only for Stopwatch matches. | Integer (Seconds) |
MinAccountLevelLock | The minimum account level permitted to join the server. Set to 0 to disable | Integer |
MinPlayers | The minimum number of players required to start the game. | Integer (1-16) |
MOTDLong | A long MOTD (Message Of The Day). Useful for displaying community rules or custom server settings. | Text Entry |
MOTDShort | A short MOTD (Message Of The Day). Useful for displaying community rules or custom server settings. | Text Entry |
PingLimit | The maximum permitted ping before a player is kicked from the server. | Integer |
PingLimitGracePeriod | The grace period (in seconds) a player is allowed to exceed the ping limit before being kicked. | Integer (1-120) |
ProgressionSystemEnabled | Not used. Leave this set to 0. | Integer |
ReadyPercent | The perecentage of players that need to be “READY” before the match will start. | Integer (0-100) |
ReservedPlayerSlots | The number of slots to reserve for players who have the reserved slot password. | Integer (0-16) |
ReservedSlotPassword | The password to join a reserved slot. | Text Entry |
RotatingMaps | A list of maps and gamemodes to use in rotation. | List of Map Objects |
RoundLimit | The number of rounds to play when in the Execution Game Mode. | Integer |
ServerName | The name displayed on the server list. | Text Entry |
SpectateOtherTeamProhibited | If true, prevents players from spectating the other team. | True/False |
SpectateWhileDeadProhibited | If true, prevents players from spectating whilst dead. | True/False |
TeamBalanceEnabled | If true, prevents players from freely switching teams to avoid an imbalance. | True/False |
TeamBalanceOnMatchStart | If true, forces a team shuffle on the match start. | True/False |
TimeLimit | If set, overrides the time limit on the map. | Integer |
VoteKickEnabled | If true, allows players to initiate votes to kick other players. | True/False |
VoteKickPassPercent | Percentage of players that must vote “yes” for a votekick to succeed. | Integer (0-100) |
VotePauseEnabled | If true, allows players to initiate a vote to temporarily pause the match. | True/False |
VotePausePassPercent | Percentage of players that must vote “yes” for a pause vote to succeed. | Integer (0-100) |
VoteRestartMapEnabled | If true, allows players to initiate a vote to restart the map. | True/False |
VoteRestartMapPassPercent | Percentage of players that must vote “yes” for a restart vote to succeed. | Integer (0-100) |
VoteRestartMapTime | The duration (in seconds) after the start of the game that the restart option will be available for. | True/False |
VoteShuffleEnabled | If true, allows players to initiate a vote to shuffle all players. | True/False |
VoteShufflePassPercent | Percentage of players that must vote “yes” for a shuffle vote to succeed. | Integer (0-100) |
VoteSurrenderDelay | The duration (in seconds) after the start of the game that the surrender option | Integer (seconds) |
VoteSurrenderEnabled | If true, allows players to initiate a vote to surrender the match. | True/False |
VoteSurrenderPassPercent | Percentage of players that must vote “yes” for a vote surrender to succeed. | Integer (0-100) |
VSayEnabled | If false, prevents players from using the V-say voice prompts. | True/False |
Don’t break your agreement…
Your agreement with i3D.net may influence some of the settings you change. For example:
- Game Password: i3D.net may offer different pricing or different terms for “private” or “passworded” servers. You may be expected to set a password if your agreement is for “private” hosting.
- Max Players: Set this no higher than the number you have agreed with i3D.net - if exceeded, they may suspend or terminate your service.
- Server Name: If your agreement with i3D.net is “branded” or “sponsored”, you may be required to display “hosted by i3D.net” unobscured and unobfusacted. If this is not displayed, they may suspend or terminate your service.
Make sure when you tinker with your server settings that you don’t break your agreement with your game server provider!
Maps
Here are the available maps and gamemode configurations to choose from:
Execution Maps
[
{
"Map": "EXE_Canal",
"GameMode": "ShooterGame.SGGameInfoExecution"
},
{
"Map": "EXE_Gallery",
"GameMode": "ShooterGame.SGGameInfoExecution"
},
{
"Map": "EXE_Overground",
"GameMode": "ShooterGame.SGGameInfoExecution"
}
]
Objective Maps
[
{
"Map": "OBJ_Bridge",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_Castle",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_CanaryWharf",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_Dockyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_DomeRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_Heist",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_TerminalRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_Trainyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
},
{
"Map": "OBJ_Whitechapel",
"GameMode": "ShooterGame.SGGameInfoObjective"
}
]
Stopwatch Maps
[
{
"Map": "OBJ_Bridge",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_Castle",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_CanaryWharf",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_Dockyard",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_DomeRedux",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_Heist",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_TerminalRedux",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_Trainyard",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
},
{
"Map": "OBJ_Whitechapel",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}
]
You can mix-and-match Execution, Objective and Stopwatch maps into your rotation if you wish and allow democracy to decide whether to play Execution or Objective.
Otherwise, if you only want to cycle the maps in one gamemode, you can simply copy-and-paste one of the above lists into your RotatingMaps
key.
Problems?
If you’re having issues getting your custom configuration working as you’d expect it, then make sure your JSON is valid. It may make things easier if you use an editor such as Visual Studio Code to edit your JSON file and format it for easier reading. You can also run your configuration through JSONLint to help you find any mistakes.
In particular, you will want to look for these common mistakes:
- Missing commas. Each “key”:“value” pair needs to be separated by a comma. JSON itself doesn’t care about spaces or line breaks - these only exist to make JSON easier for us humans to read.
- Too many commas. Having a trailing comma at the end of a list of JSON objects can also cause your JSON to break. Run your JSON file through JSONLint to confirm that this is the problem.
- Mixed or mis-matching “Quotation marks”. Try to avoid using text editors like Microsoft Word, as they tend to substitute straight double quotes (") for opening/closing quotes (“ and ”), which will cause issues.
- Invalid setting names. Wrong setting names (or spelling errors) may cause crashes or unexpected behaviour.
- Invalid setting combinations. Certain combinations of settings might not be usable together. If your server suddenly stops working, roll back your settings or revert to a default config, and then re-introduce your changes gradually until you find the culprit.
Example Configs
Here are some example configurations that you can copy-paste and modify for your own purposes. Word of warning: change the Admin Password!
Standard Configuration
This is a fairly standard configuration using Objective Mode only.
Standard Config
{
"AdminPassword": "thisisasecret",
"AutoSurrenderEnabled": false,
"AllowQuickJoin": true,
"BadgesEnabled": true,
"CountdownDuration": 20,
"DemoPrefix": "",
"FixedWarmupDuration": 20,
"FriendlyFireEnabled": true,
"GameDifficulty": "1.0",
"GamePassword": "",
"GameReviewDuration": 20,
"KillLimit": 0,
"LobbyLockInDuration": 25,
"LobbyMapVotingEnabled": true,
"LobbyMapVotingTime": 15,
"LobbyReadyPercent": 100,
"LobbyReadyUpGameStartEnabled": false,
"MaxAccountLevelLock": 0,
"MaxPlayers": 10,
"MercStackingPenalties": false,
"MidGameReviewDuration": 20,
"MinAccountLevelLock": 0,
"MinPlayers": 1,
"PingLimit": 150,
"PingLimitGracePeriod": 120,
"ProgressionSystemEnabled": false,
"RoundLimit": 11,
"ReadyPercent": 100,
"ServerName": "Dirty Bomb Server hosted by i3D.net",
"SpectateOtherTeamProhibited": true,
"SpectateWhileDeadProhibited": false,
"TeamBalanceEnabled": true,
"TeamBalanceOnMatchStart": true,
"VSayEnabled": true,
"VoteKickEnabled": true,
"VoteKickPassPercent": 61,
"VotePauseEnabled": false,
"VotePausePassPercent": 61,
"VoteRestartMapEnabled": false,
"VoteRestartMapTime": 180,
"VoteRestartMapPassPercent": 61,
"VoteShuffleEnabled": true,
"VoteShufflePassPercent": 51,
"VoteSurrenderEnabled": false,
"VoteSurrenderDelay": 180,
"VoteSurrenderPassPercent": 100,
"FeaturedMap": "",
"RotatingMaps": [{
"Map": "OBJ_Heist",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Dockyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Whitechapel",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Trainyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_CanaryWharf",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Bridge",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_DomeRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Castle",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_TerminalRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
}]
}
Execution Configuration
This is basically the same standard configuration, except with an Execution-only map rotation.
Execution Config
{
"AdminPassword": "thisisasecret",
"AutoSurrenderEnabled": false,
"BadgesEnabled": true,
"CountdownDuration": 20,
"DemoPrefix": "",
"FixedWarmupDuration": 20,
"FriendlyFireEnabled": true,
"GameDifficulty": "1.0",
"GamePassword": "",
"GameReviewDuration": 20,
"KillLimit": 0,
"LobbyLockInDuration": 25,
"LobbyMapVotingEnabled": true,
"LobbyMapVotingTime": 15,
"LobbyReadyPercent": 100,
"LobbyReadyUpGameStartEnabled": false,
"MaxAccountLevelLock": 0,
"MaxPlayers": 10,
"MercStackingPenalties": false,
"MidGameReviewDuration": 20,
"MinAccountLevelLock": 0,
"MinPlayers": 1,
"PingLimit": 150,
"PingLimitGracePeriod": 120,
"ProgressionSystemEnabled": false,
"RoundLimit": 11,
"ReadyPercent": 100,
"ServerName": "DB Execution Server hosted by i3D.net",
"SpectateOtherTeamProhibited": true,
"SpectateWhileDeadProhibited": false,
"TeamBalanceEnabled": true,
"TeamBalanceOnMatchStart": true,
"VSayEnabled": true,
"VoteKickEnabled": true,
"VoteKickPassPercent": 61,
"VotePauseEnabled": false,
"VotePausePassPercent": 61,
"VoteRestartMapEnabled": false,
"VoteRestartMapTime": 180,
"VoteRestartMapPassPercent": 61,
"VoteShuffleEnabled": true,
"VoteShufflePassPercent": 51,
"VoteSurrenderEnabled": false,
"VoteSurrenderDelay": 180,
"VoteSurrenderPassPercent": 100,
"FeaturedMap": "",
"RotatingMaps": [{
"Map": "EXE_Canal",
"GameMode": "ShooterGame.SGGameInfoExecution"
},
{
"Map": "EXE_Gallery",
"GameMode": "ShooterGame.SGGameInfoExecution"
},
{
"Map": "EXE_Overground",
"GameMode": "ShooterGame.SGGameInfoExecution"
}]
}
Tournament Configuration
A tourmanent configuration will replace rapid lobby timers for a setup that waits for players to be “ready”. This config demonstrates the following changes:
- Min/Max players are set to “10” for a 5-per-side
- A password is required to join the server.
- Longer map voting and merc “lock-in” times in the server lobby.
- The game will only start once all players are ready.
- Surrendering is enabled after 5 minutes. Shuffling is disabled.
This configuration can obviously be adjusted to better fit the requirements of any tournaments or scrims that you wish to run.
Tournament Config
{
"AdminPassword": "thisisasecret",
"AutoSurrenderEnabled": true,
"BadgesEnabled": true,
"CountdownDuration": 30,
"DemoPrefix": "",
"FixedWarmupDuration": 60,
"FriendlyFireEnabled": true,
"GameDifficulty": "1.0",
"GamePassword": "majorleaguegamers",
"GameReviewDuration": 30,
"KillLimit": 0,
"LobbyLockInDuration": 60,
"LobbyMapVotingEnabled": true,
"LobbyMapVotingTime": 30,
"LobbyReadyPercent": 100,
"LobbyReadyUpGameStartEnabled": true,
"MaxAccountLevelLock": 0,
"MaxPlayers": 10,
"MercStackingPenalties": true,
"MidGameReviewDuration": 20,
"MinAccountLevelLock": 0,
"MinPlayers": 10,
"PingLimit": 150,
"PingLimitGracePeriod": 120,
"ProgressionSystemEnabled": false,
"RoundLimit": 11,
"ReadyPercent": 100,
"ServerName": "Dirty Bomb Tournament Server hosted by i3D.net",
"SpectateOtherTeamProhibited": true,
"SpectateWhileDeadProhibited": true,
"TeamBalanceEnabled": false,
"TeamBalanceOnMatchStart": false,
"VSayEnabled": true,
"VoteKickEnabled": false,
"VoteKickPassPercent": 61,
"VotePauseEnabled": true,
"VotePausePassPercent": 61,
"VoteRestartMapEnabled": true,
"VoteRestartMapTime": 180,
"VoteRestartMapPassPercent": 61,
"VoteShuffleEnabled": false,
"VoteShufflePassPercent": 51,
"VoteSurrenderEnabled": true,
"VoteSurrenderDelay": 300,
"VoteSurrenderPassPercent": 100,
"FeaturedMap": "",
"RotatingMaps": [{
"Map": "OBJ_Heist",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_Dockyard",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_Whitechapel",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_Trainyard",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_CanaryWharf",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_Bridge",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_DomeRedux",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_Castle",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}, {
"Map": "OBJ_TerminalRedux",
"GameMode": "ShooterGame.SGGameInfoStopWatch"
}]
}
Reserved Slots
This is a minor adjustment to the Standard Config with support for reserved slots. You might use this to reserve a slot for your server admins.
Standard Config w/ Reserved Slots
{
"AdminPassword": "thisisasecret",
"AutoSurrenderEnabled": false,
"BadgesEnabled": true,
"CountdownDuration": 20,
"DemoPrefix": "",
"FixedWarmupDuration": 20,
"FriendlyFireEnabled": true,
"GameDifficulty": "1.0",
"GamePassword": "",
"GameReviewDuration": 20,
"KillLimit": 0,
"LobbyLockInDuration": 25,
"LobbyMapVotingEnabled": true,
"LobbyMapVotingTime": 15,
"LobbyReadyPercent": 100,
"LobbyReadyUpGameStartEnabled": false,
"MaxAccountLevelLock": 0,
"MaxPlayers": 10,
"MercStackingPenalties": false,
"MidGameReviewDuration": 20,
"MinAccountLevelLock": 0,
"MinPlayers": 1,
"PingLimit": 150,
"PingLimitGracePeriod": 120,
"ProgressionSystemEnabled": false,
"RoundLimit": 11,
"ReadyPercent": 100,
"ReservedPlayerSlots": 1,
"ReservedSlotPassword": "clanmembersonly",
"ServerName": "Dirty Bomb Server hosted by i3D.net",
"SpectateOtherTeamProhibited": true,
"SpectateWhileDeadProhibited": false,
"TeamBalanceEnabled": true,
"TeamBalanceOnMatchStart": true,
"VSayEnabled": true,
"VoteKickEnabled": true,
"VoteKickPassPercent": 61,
"VotePauseEnabled": false,
"VotePausePassPercent": 61,
"VoteRestartMapEnabled": false,
"VoteRestartMapTime": 180,
"VoteRestartMapPassPercent": 61,
"VoteShuffleEnabled": true,
"VoteShufflePassPercent": 51,
"VoteSurrenderEnabled": false,
"VoteSurrenderDelay": 180,
"VoteSurrenderPassPercent": 100,
"FeaturedMap": "",
"RotatingMaps": [{
"Map": "OBJ_Heist",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Dockyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Whitechapel",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Trainyard",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_CanaryWharf",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Bridge",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_DomeRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_Castle",
"GameMode": "ShooterGame.SGGameInfoObjective"
}, {
"Map": "OBJ_TerminalRedux",
"GameMode": "ShooterGame.SGGameInfoObjective"
}]
}
Other Configurations?
If you come up with any other interesting configurations, or you have any ideas on how to improve the existing ones, then please do share with us.