This is an old revision of the document!
Table of Contents
Basics
Most gameplay settings are now native saved ConVars. On many hosts, including Physgun, these are stored in a large file like:
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.
Notes:
- Stop the server before manually editing
game.json. - All commands can also be executed in console, which is easier and will apply live (with some variance). Setting the command via the console will store/update the value in
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 |
These are most easily modified directly from the console.
Time
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_max_rounds | 6 | Next round / map travel | 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 | Live | Uses distance-limited voice chat for normal alive-player voice. Team voice and dead/alive voice filtering are separate. |
ttt_proximity_voice_range | 800 | Live | 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_include_uncurated | False | Newly-created map votes | Includes uncurated maps in curated map vote pools when available. Dedicated servers should normally use MapVote.Maps instead. |
Visuals
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_allow_player_cosmetics | True | Next round | Allows players to use their s&box headwear. |
Moderation
| ConVar | Default | Applies | Description |
|---|---|---|---|
ttt_auto_afk | True | Live | Automatically marks idle alive players as AFK. |
Moderation Roles
Dedicated servers store Moderator, Admin, and Owner assignments in roles.json in the same data area as server_settings.json.
Use SteamID64 values. Invalid or zero IDs are ignored. Founder is derived from the active host/session and is not written to roles.json.
Example:
- roles.json
[ { "steamId": 76561190000000000, "role": "admin" }, { "steamId": 76561190000000001, "role": "moderator" }, { "steamId": 76561190000000002, "role": "owner" } ]
Useful role commands:
| Command | Persists? | Description |
|---|---|---|
ttt_addadmin STEAMID64 | Yes, to roles.json | Assign Admin. |
ttt_removeadmin STEAMID64 | Yes, to roles.json | Remove Admin. |
ttt_addmod STEAMID64 / ttt_removemod STEAMID64 | Yes, to roles.json | Add or remove Moderator. |
ttt_addowner STEAMID64 / ttt_removeowner STEAMID64 | Yes, to roles.json | Add or remove Owner. |
ttt_setrole STEAMID64 ROLE | Yes, to roles.json | Replace assignable roles with one role. ROLE is mod, admin, or owner. |
ttt_clearrole STEAMID64 | Yes, to roles.json | Remove assignable roles. Founder is not removed. |
ttt_listadmins | No change | Print admin IDs. |
ttt_listroles | No change | Print assigned roles. |
ttt_listadmins prints Admin, Owner, and Founder IDs. It does not print Moderators. Use ttt_listroles to confirm Moderator assignments.
Useful Commands
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. |
map MAPIDENT | Alias for changelevel. |
scene SCENEFILE | Host-only scene change command for scene files. Use map idents for normal server operation. |
Deprecated Or Ignored Settings
| Old Setting | Current Status |
|---|---|
Server.StartupMap | Removed. Use the native +game org.game org.map launch argument. |
Scalar Lobby gameplay fields such as MaxRounds, RoundTimeMinutes, KarmaEnabled, ProximityVoiceRange, etc. | Removed from server_settings.json. Use the matching saved ConVar instead. |
MapVote.Whitelist | Migrated to MapVote.Maps if Maps is missing. |
MapVote.Blacklist | No longer the dedicated rotation model. If only Blacklist is present, defaults are backfilled into MapVote.Maps. |
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=2 lobby=True vote_maps=18
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, curated, 10 vote maps