===== 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'' / ''False'' or ''1'' / ''0'' for 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 | 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. | ===== 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. | ====== Troubleshooting ====== If your settings are not applying: * Make sure ''server_settings.json'' is in the correct game ident's data folder. * Make sure ConVars are edited under ''config/convar/game.json'' or your host's ConVar panel. * Restart the dedicated server after editing files by hand. * Check that your JSON is valid. * In ''game.json'', edit only ''Value''. * Check the server console for ''[server.settings]'' messages. * Check the server console for ''[lobby.settings] applied'' to 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