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.

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:

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