Table of Contents
Basics
Most gameplay settings are now native saved ConVars. These are stored in a large file:
config/convar/game.json
Each value appears under a convar. key. Example:
"convar.ttt_rtv_enabled": {
"Value": "False",
"Timeout": 1781214253,
"DeleteAt": 0
}
Only edit Value. Do not edit Timeout or DeleteAt.
These are most easily modified directly from the console. Commands will apply live (with some variance; see the sections below). Setting the command via the console will store/update the value in game.json.
- Stop the server before manually editing
game.json. - Preserve valid JSON syntax.
- Values are usually stored as strings, even for numbers and booleans.
- Use
True/Falseor1/0for boolean values, matching what your host panel writes.
Gameplay ConVars
The key in game.json includes the convar. prefix. The console command does not.
Example:
| In game.json | In server console |
|---|---|
convar.ttt_rtv_enabled | ttt_rtv_enabled false |
Time
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_max_rounds | 6 | Live | Number of rounds to play before the match ends and a map vote begins. |
ttt_round_time_minutes | 5 | Next round | Round duration in minutes when haste mode is off. |
ttt_haste_mode | True | Next round | Enables haste mode, where the public timer starts shorter and hidden time is added as players die. |
ttt_haste_starting_minutes | 5 | Next round | Public round timer duration in minutes before haste overtime starts. |
ttt_haste_minutes_per_death | 0.5 | Next round | Minutes added to the hidden round limit each time a player dies. |
Gameplay Roles
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_traitor_pct | 0.25 | Next round | Fraction of round players assigned as traitors. |
ttt_traitor_max | 32 | Next round | Maximum number of traitors that can be assigned in a round. |
ttt_detective_pct | 0.13 | Next round | Fraction of round players assigned as detectives when enough players are present. |
ttt_detective_max | 32 | Next round | Maximum number of detectives that can be assigned in a round. |
ttt_detective_min_players | 8 | Next round | Minimum round player count required before detectives can be assigned. |
Karma
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_karma | True | Next round | Enables karma penalties, rewards, and low-karma damage scaling. |
ttt_karma_low_autokick | False | Round end | Kicks non-host players below the low-karma threshold at round end. |
ttt_karma_kick_threshold | 300 | Round end | Karma value below which low-karma auto-kick removes non-host players. Only matters when ttt_karma_low_autokick is enabled. |
ttt_karma_starting | 1000 | New player component | Karma assigned to newly-created player components. |
ttt_karma_damage_threshold | 800 | Live damage checks | Karma value below which outgoing damage is reduced. |
ttt_karma_kill_penalty | 30 | Round end | How harshly friendly damage removes karma before internal scaling. |
ttt_karma_round_increment | 15 | Round end | Karma restored at round end when the player teamkilled nobody. |
Voice
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_proximity_voice_enabled | False | Map travel | Uses distance-limited voice chat for normal alive-player voice. Team voice and dead/alive voice filtering are separate. |
ttt_proximity_voice_range | 800 | Map Travel | Voice range in world units when proximity voice is enabled. |
Map Vote
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_rtv_enabled | True | Live | Allows players to start Rock the Vote map-change votes. Admin-forced map votes are unaffected. |
ttt_mapvote_option_count | 10 | Newly-created map votes | Maximum number of maps shown during a map vote. |
ttt_mapvote_pool | Official;Verified | Newly-created map votes | Source pools used for generated map vote options. Use values such as Official, Verified, and AllCompatible, separated by semicolons. Leave empty to use only MapVote.AlwaysInclude from server_settings.json. |
ttt_mapvote_filter_by_players | False | Newly-created map votes | Prefer maps whose authored size range fits the current lobby size. |
ttt_mapvote_show_tags | True | Newly-created map votes | Shows approved map package tags on map vote cards. |
MapVote.AlwaysInclude and MapVote.NeverShow are not ConVars. They live in server_settings.json because they are package-ident lists.
When AllCompatible is enabled, compatible map discovery is prewarmed once after server/lobby settings apply and cached for the server/lobby lifetime. Map votes still apply the current map, AlwaysInclude, NeverShow, player-count filtering, and random option selection when each vote starts.
Visuals
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_allow_player_cosmetics | True | Next round | Allows players to use their s&box headwear. |
AFK
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_auto_afk | True | Live | Automatically marks idle alive players as AFK. |
Map And Vote Commands
| Command | Description |
|---|---|
rtv | Starts a Rock the Vote map-change vote if ttt_rtv_enabled is true. Players can also type /rtv or !rtv in chat. |
votekick PLAYERNAME | Starts a public votekick. Players can also type /votekick or !votekick in chat. |
ttt_forcemapvote | Admin/host command that forces the map-vote flow. It is not blocked by ttt_rtv_enabled. |
changelevel MAPIDENT | Changes to a map ident. May cause instability! |
map MAPIDENT | Alias for changelevel. |
scene SCENEFILE | Host-only scene change command for scene files. Use map idents for normal server operation. |
t.maps.official | Dedicated-server-console-only command that prints the official map source list. |
t.maps.verified | Dedicated-server-console-only command that prints the verified map source list. |
t.maps.compatible | Dedicated-server-console-only command that discovers and prints compatible unverified map packages. This can take longer than the static source-list commands. |
t.server.mapvote.print | Dedicated-server-console-only command that prints current map vote source settings from server_settings.json. |
t.server.mapvote.pool.set Official,Verified | Dedicated-server-console-only command that updates MapVote.Pool in server_settings.json. Use Official, Verified, AllCompatible, All, Any, or an empty string. |
t.server.mapvote.alwaysinclude.add org.map | Dedicated-server-console-only command that adds a map ident to MapVote.AlwaysInclude. |
t.server.mapvote.alwaysinclude.remove org.map | Dedicated-server-console-only command that removes a map ident from MapVote.AlwaysInclude. |
t.server.mapvote.nevershow.add org.map | Dedicated-server-console-only command that adds a map ident to MapVote.NeverShow. |
t.server.mapvote.nevershow.remove org.map | Dedicated-server-console-only command that removes a map ident from MapVote.NeverShow. |
The t.server.mapvote.* mutation commands write server_settings.json and reject changes while a map vote is already active.
Troubleshooting
If your settings are not applying:
- Make sure
server_settings.jsonis in the correct game ident's data folder. - Make sure ConVars are edited under
config/convar/game.jsonor your host's ConVar panel. - Restart the dedicated server after editing files by hand.
- Check that your JSON is valid.
- In
game.json, edit onlyValue. - Check the server console for
[server.settings]messages. - Check the server console for
[lobby.settings] appliedto confirm the resolved lobby/rule settings. - Check the server console for
[server.launch]messages to confirm the native boot map.
Useful successful load message:
[server.settings] loaded path=server_settings.json schema=3 lobby=True map_pool=Official;Verified always_include=0 never_show=0
Useful default/backfill messages:
[server.settings] missing path=server_settings.json; created active defaults. Edit server_settings.json and restart the dedicated server to customize settings. [server.settings] defaults_backfilled path=server_settings.json
Useful failure message:
[server.settings] failed_to_load path=server_settings.json error=...
Useful launch message:
[server.launch] boot_context game=thieves.terrortown boot_map=thieves.rooftops launch_map=thieves.rooftops source=GameNetworkManager.OnStart dedicated=True
Useful applied settings message:
[lobby.settings] applied public, 6 rounds, 5m, prep 20s, haste 5m +0.5m/death, open catalog, official + verified pool, 10 vote maps
Useful AllCompatible prewarm message:
[MapCatalog] allcompatible_prewarm_complete game=thieves.terrortown maps=11 source=LobbyStartSettingsRuntime.ApplyToSystems