using Content.Shared.Maps; using Content.Shared.Roles; using Robust.Shared; using Robust.Shared.Configuration; using Robust.Shared.Physics.Components; namespace Content.Shared.CCVar { // ReSharper disable once InconsistentNaming [CVarDefs] public sealed class CCVars : CVars { /* * Server */ /// /// Change this to have the changelog and rules "last seen" date stored separately. /// public static readonly CVarDef ServerId = CVarDef.Create("server.id", "unknown_server_id", CVar.REPLICATED | CVar.SERVER); /// /// Guide Entry Prototype ID to be displayed as the server rules. /// public static readonly CVarDef RulesFile = CVarDef.Create("server.rules_file", "DefaultRuleset", CVar.REPLICATED | CVar.SERVER); /// /// Guide entry that is displayed by default when a guide is opened. /// public static readonly CVarDef DefaultGuide = CVarDef.Create("server.default_guide", "NewPlayer", CVar.REPLICATED | CVar.SERVER); /* * Ambience */ /// /// How long we'll wait until re-sampling nearby objects for ambience. Should be pretty fast, but doesn't have to match the tick rate. /// public static readonly CVarDef AmbientCooldown = CVarDef.Create("ambience.cooldown", 0.1f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// How large of a range to sample for ambience. /// public static readonly CVarDef AmbientRange = CVarDef.Create("ambience.range", 8f, CVar.REPLICATED | CVar.SERVER); /// /// Maximum simultaneous ambient sounds. /// public static readonly CVarDef MaxAmbientSources = CVarDef.Create("ambience.max_sounds", 16, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// The minimum value the user can set for ambience.max_sounds /// public static readonly CVarDef MinMaxAmbientSourcesConfigured = CVarDef.Create("ambience.min_max_sounds_configured", 16, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); /// /// The maximum value the user can set for ambience.max_sounds /// public static readonly CVarDef MaxMaxAmbientSourcesConfigured = CVarDef.Create("ambience.max_max_sounds_configured", 64, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); /// /// Ambience volume. /// public static readonly CVarDef AmbienceVolume = CVarDef.Create("ambience.volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// Ambience music volume. /// public static readonly CVarDef AmbientMusicVolume = CVarDef.Create("ambience.music_volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// Lobby / round end music volume. /// public static readonly CVarDef LobbyMusicVolume = CVarDef.Create("ambience.lobby_music_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// UI volume. /// public static readonly CVarDef InterfaceVolume = CVarDef.Create("audio.interface_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); /* * Status */ public static readonly CVarDef StatusMoMMIUrl = CVarDef.Create("status.mommiurl", "", CVar.SERVERONLY); public static readonly CVarDef StatusMoMMIPassword = CVarDef.Create("status.mommipassword", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); /* * Events */ /// /// Controls if the game should run station events /// public static readonly CVarDef EventsEnabled = CVarDef.Create("events.enabled", true, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Average time (in minutes) for when the ramping event scheduler should stop increasing the chaos modifier. /// Close to how long you expect a round to last, so you'll probably have to tweak this on downstreams. /// public static readonly CVarDef EventsRampingAverageEndTime = CVarDef.Create("events.ramping_average_end_time", 40f, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Average ending chaos modifier for the ramping event scheduler. /// Max chaos chosen for a round will deviate from this /// public static readonly CVarDef EventsRampingAverageChaos = CVarDef.Create("events.ramping_average_chaos", 6f, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Minimum time between meteor swarms in minutes. /// public static readonly CVarDef MeteorSwarmMinTime = CVarDef.Create("events.meteor_swarm_min_time", 12.5f, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Maximum time between meteor swarms in minutes. /// public static readonly CVarDef MeteorSwarmMaxTime = CVarDef.Create("events.meteor_swarm_max_time", 17.5f, CVar.ARCHIVE | CVar.SERVERONLY); /* * Game */ /// /// Disables most functionality in the GameTicker. /// public static readonly CVarDef GameDummyTicker = CVarDef.Create("game.dummyticker", false, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Controls if the lobby is enabled. If it is not, and there are no available jobs, you may get stuck on a black screen. /// public static readonly CVarDef GameLobbyEnabled = CVarDef.Create("game.lobbyenabled", true, CVar.ARCHIVE); /// /// Controls the duration of the lobby timer in seconds. Defaults to 2 minutes and 30 seconds. /// public static readonly CVarDef GameLobbyDuration = CVarDef.Create("game.lobbyduration", 150, CVar.ARCHIVE); /// /// Controls if players can latejoin at all. /// public static readonly CVarDef GameDisallowLateJoins = CVarDef.Create("game.disallowlatejoins", false, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Controls the default game preset. /// public static readonly CVarDef GameLobbyDefaultPreset = CVarDef.Create("game.defaultpreset", "secret", CVar.ARCHIVE); /// /// Controls if the game can force a different preset if the current preset's criteria are not met. /// public static readonly CVarDef GameLobbyFallbackEnabled = CVarDef.Create("game.fallbackenabled", true, CVar.ARCHIVE); /// /// The preset for the game to fall back to if the selected preset could not be used, and fallback is enabled. /// public static readonly CVarDef GameLobbyFallbackPreset = CVarDef.Create("game.fallbackpreset", "Traitor,Extended", CVar.ARCHIVE); /// /// Controls if people can win the game in Suspicion or Deathmatch. /// public static readonly CVarDef GameLobbyEnableWin = CVarDef.Create("game.enablewin", true, CVar.ARCHIVE); /// /// Controls the maximum number of character slots a player is allowed to have. /// public static readonly CVarDef GameMaxCharacterSlots = CVarDef.Create("game.maxcharacterslots", 30, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Controls the game map prototype to load. SS14 stores these prototypes in Prototypes/Maps. /// public static readonly CVarDef GameMap = CVarDef.Create("game.map", string.Empty, CVar.SERVERONLY); /// /// Controls whether to use world persistence or not. /// public static readonly CVarDef UsePersistence = CVarDef.Create("game.usepersistence", false, CVar.ARCHIVE); /// /// If world persistence is used, what map prototype should be initially loaded. /// If the save file exists, it replaces MapPath but everything else stays the same (station name and such). /// public static readonly CVarDef PersistenceMap = CVarDef.Create("game.persistencemap", "Empty", CVar.ARCHIVE); /// /// Prototype to use for map pool. /// public static readonly CVarDef GameMapPool = CVarDef.Create("game.map_pool", "DefaultMapPool", CVar.SERVERONLY); /// /// The depth of the queue used to calculate which map is next in rotation. /// This is how long the game "remembers" that some map was put in play. Default is 16 rounds. /// public static readonly CVarDef GameMapMemoryDepth = CVarDef.Create("game.map_memory_depth", 16, CVar.SERVERONLY); /// /// Is map rotation enabled? /// public static readonly CVarDef GameMapRotation = CVarDef.Create("game.map_rotation", true, CVar.SERVERONLY); /// /// If roles should be restricted based on time. /// public static readonly CVarDef GameRoleTimers = CVarDef.Create("game.role_timers", true, CVar.SERVER | CVar.REPLICATED); /// /// Override default role requirements using a /// public static readonly CVarDef GameRoleTimerOverride = CVarDef.Create("game.role_timer_override", "", CVar.SERVER | CVar.REPLICATED); /// /// If roles should be restricted based on whether or not they are whitelisted. /// public static readonly CVarDef GameRoleWhitelist = CVarDef.Create("game.role_whitelist", true, CVar.SERVER | CVar.REPLICATED); /// /// Whether or not disconnecting inside of a cryopod should remove the character or just store them until they reconnect. /// public static readonly CVarDef GameCryoSleepRejoining = CVarDef.Create("game.cryo_sleep_rejoining", false, CVar.SERVER | CVar.REPLICATED); /// /// When enabled, guests will be assigned permanent UIDs and will have their preferences stored. /// public static readonly CVarDef GamePersistGuests = CVarDef.Create("game.persistguests", true, CVar.ARCHIVE | CVar.SERVERONLY); public static readonly CVarDef GameDiagonalMovement = CVarDef.Create("game.diagonalmovement", true, CVar.ARCHIVE); public static readonly CVarDef SoftMaxPlayers = CVarDef.Create("game.soft_max_players", 30, CVar.SERVERONLY | CVar.ARCHIVE); /// /// If a player gets denied connection to the server, /// how long they are forced to wait before attempting to reconnect. /// public static readonly CVarDef GameServerFullReconnectDelay = CVarDef.Create("game.server_full_reconnect_delay", 30, CVar.SERVERONLY); /// /// Whether or not panic bunker is currently enabled. /// public static readonly CVarDef PanicBunkerEnabled = CVarDef.Create("game.panic_bunker.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); /// /// Whether or not the panic bunker will disable when an admin comes online. /// public static readonly CVarDef PanicBunkerDisableWithAdmins = CVarDef.Create("game.panic_bunker.disable_with_admins", false, CVar.SERVERONLY); /// /// Whether or not the panic bunker will enable when no admins are online. /// public static readonly CVarDef PanicBunkerEnableWithoutAdmins = CVarDef.Create("game.panic_bunker.enable_without_admins", false, CVar.SERVERONLY); /// /// Whether or not the panic bunker will count deadminned admins for /// and /// /// public static readonly CVarDef PanicBunkerCountDeadminnedAdmins = CVarDef.Create("game.panic_bunker.count_deadminned_admins", false, CVar.SERVERONLY); /// /// Show reason of disconnect for user or not. /// public static readonly CVarDef PanicBunkerShowReason = CVarDef.Create("game.panic_bunker.show_reason", false, CVar.SERVERONLY); /// /// Minimum age of the account (from server's PoV, so from first-seen date) in minutes. /// public static readonly CVarDef PanicBunkerMinAccountAge = CVarDef.Create("game.panic_bunker.min_account_age", 1440, CVar.SERVERONLY); /// /// Minimal overall played time. /// public static readonly CVarDef PanicBunkerMinOverallMinutes = CVarDef.Create("game.panic_bunker.min_overall_minutes", 600, CVar.SERVERONLY); /// /// A custom message that will be used for connections denied to the panic bunker /// If not empty, then will overwrite /// public static readonly CVarDef PanicBunkerCustomReason = CVarDef.Create("game.panic_bunker.custom_reason", string.Empty, CVar.SERVERONLY); /// /// Allow bypassing the panic bunker if the user is whitelisted. /// public static readonly CVarDef BypassBunkerWhitelist = CVarDef.Create("game.panic_bunker.whitelisted_can_bypass", true, CVar.SERVERONLY); /* * TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future. */ /// /// Whether the baby jail is currently enabled. /// public static readonly CVarDef BabyJailEnabled = CVarDef.Create("game.baby_jail.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); /// /// Show reason of disconnect for user or not. /// public static readonly CVarDef BabyJailShowReason = CVarDef.Create("game.baby_jail.show_reason", false, CVar.SERVERONLY); /// /// Maximum age of the account (from server's PoV, so from first-seen date) in minutes that can access baby /// jailed servers. /// public static readonly CVarDef BabyJailMaxAccountAge = CVarDef.Create("game.baby_jail.max_account_age", 1440, CVar.SERVERONLY); /// /// Maximum overall played time allowed to access baby jailed servers. /// public static readonly CVarDef BabyJailMaxOverallMinutes = CVarDef.Create("game.baby_jail.max_overall_minutes", 120, CVar.SERVERONLY); /// /// A custom message that will be used for connections denied due to the baby jail. /// If not empty, then will overwrite /// public static readonly CVarDef BabyJailCustomReason = CVarDef.Create("game.baby_jail.custom_reason", string.Empty, CVar.SERVERONLY); /// /// Allow bypassing the baby jail if the user is whitelisted. /// public static readonly CVarDef BypassBabyJailWhitelist = CVarDef.Create("game.baby_jail.whitelisted_can_bypass", true, CVar.SERVERONLY); /// /// Make people bonk when trying to climb certain objects like tables. /// public static readonly CVarDef GameTableBonk = CVarDef.Create("game.table_bonk", false, CVar.REPLICATED); /// /// Whether or not status icons are rendered for everyone. /// public static readonly CVarDef GlobalStatusIconsEnabled = CVarDef.Create("game.global_status_icons_enabled", true, CVar.SERVER | CVar.REPLICATED); /// /// Whether or not status icons are rendered on this specific client. /// public static readonly CVarDef LocalStatusIconsEnabled = CVarDef.Create("game.local_status_icons_enabled", true, CVar.CLIENTONLY); /// /// Whether or not coordinates on the Debug overlay should only be available to admins. /// public static readonly CVarDef DebugCoordinatesAdminOnly = CVarDef.Create("game.debug_coordinates_admin_only", true, CVar.SERVER | CVar.REPLICATED); #if EXCEPTION_TOLERANCE /// /// Amount of times round start must fail before the server is shut down. /// Set to 0 or a negative number to disable. /// public static readonly CVarDef RoundStartFailShutdownCount = CVarDef.Create("game.round_start_fail_shutdown_count", 5, CVar.SERVERONLY | CVar.SERVER); #endif /// /// Delay between station alert level changes. /// public static readonly CVarDef GameAlertLevelChangeDelay = CVarDef.Create("game.alert_level_change_delay", 30, CVar.SERVERONLY); /// /// The time in seconds that the server should wait before restarting the round. /// Defaults to 2 minutes. /// public static readonly CVarDef RoundRestartTime = CVarDef.Create("game.round_restart_time", 120f, CVar.SERVERONLY); /// /// The prototype to use for secret weights. /// public static readonly CVarDef SecretWeightPrototype = CVarDef.Create("game.secret_weight_prototype", "Secret", CVar.SERVERONLY); /// /// The id of the sound collection to randomly choose a sound from and play when the round ends. /// public static readonly CVarDef RoundEndSoundCollection = CVarDef.Create("game.round_end_sound_collection", "RoundEnd", CVar.SERVERONLY); /// /// Whether or not to add every player as a global override to PVS at round end. /// This will allow all players to see their clothing in the round screen player list screen, /// but may cause lag during round end with very high player counts. /// public static readonly CVarDef RoundEndPVSOverrides = CVarDef.Create("game.round_end_pvs_overrides", true, CVar.SERVERONLY); /// /// If true, players can place objects onto tabletop games like chess boards. /// /// /// This feature is currently highly abusable and can easily be used to crash the server, /// so it's off by default. /// public static readonly CVarDef GameTabletopPlace = CVarDef.Create("game.tabletop_place", false, CVar.SERVERONLY); /* * Discord */ /// /// URL of the Discord webhook which will relay all ahelp messages. /// public static readonly CVarDef DiscordAHelpWebhook = CVarDef.Create("discord.ahelp_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); /// /// The server icon to use in the Discord ahelp embed footer. /// Valid values are specified at https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure. /// public static readonly CVarDef DiscordAHelpFooterIcon = CVarDef.Create("discord.ahelp_footer_icon", string.Empty, CVar.SERVERONLY); /// /// The avatar to use for the webhook. Should be an URL. /// public static readonly CVarDef DiscordAHelpAvatar = CVarDef.Create("discord.ahelp_avatar", string.Empty, CVar.SERVERONLY); /// /// URL of the Discord webhook which will relay all custom votes. If left empty, disables the webhook. /// public static readonly CVarDef DiscordVoteWebhook = CVarDef.Create("discord.vote_webhook", string.Empty, CVar.SERVERONLY); /// URL of the Discord webhook which will relay round restart messages. /// public static readonly CVarDef DiscordRoundUpdateWebhook = CVarDef.Create("discord.round_update_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); /// /// Role id for the Discord webhook to ping when the round ends. /// public static readonly CVarDef DiscordRoundEndRoleWebhook = CVarDef.Create("discord.round_end_role", string.Empty, CVar.SERVERONLY); /* * Tips */ /// /// Whether tips being shown is enabled at all. /// public static readonly CVarDef TipsEnabled = CVarDef.Create("tips.enabled", true); /// /// The dataset prototype to use when selecting a random tip. /// public static readonly CVarDef TipsDataset = CVarDef.Create("tips.dataset", "Tips"); /// /// The number of seconds between each tip being displayed when the round is not actively going /// (i.e. postround or lobby) /// public static readonly CVarDef TipFrequencyOutOfRound = CVarDef.Create("tips.out_of_game_frequency", 60f * 1.5f); /// /// The number of seconds between each tip being displayed when the round is actively going /// public static readonly CVarDef TipFrequencyInRound = CVarDef.Create("tips.in_game_frequency", 60f * 60); public static readonly CVarDef LoginTipsDataset = CVarDef.Create("tips.login_dataset", "Tips"); /// /// The chance for Tippy to replace a normal tip message. /// public static readonly CVarDef TipsTippyChance = CVarDef.Create("tips.tippy_chance", 0.01f); /* * Console */ public static readonly CVarDef ConsoleLoginLocal = CVarDef.Create("console.loginlocal", true, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Automatically log in the given user as host, equivalent to the promotehost command. /// public static readonly CVarDef ConsoleLoginHostUser = CVarDef.Create("console.login_host_user", "", CVar.ARCHIVE | CVar.SERVERONLY); /* * Database stuff */ public static readonly CVarDef DatabaseEngine = CVarDef.Create("database.engine", "sqlite", CVar.SERVERONLY); public static readonly CVarDef DatabaseSqliteDbPath = CVarDef.Create("database.sqlite_dbpath", "preferences.db", CVar.SERVERONLY); /// /// Milliseconds to asynchronously delay all SQLite database acquisitions with. /// /// /// Defaults to 1 on DEBUG, 0 on RELEASE. /// This is intended to help catch .Result deadlock bugs that only happen on postgres /// (because SQLite is not actually asynchronous normally) /// public static readonly CVarDef DatabaseSqliteDelay = CVarDef.Create("database.sqlite_delay", DefaultSqliteDelay, CVar.SERVERONLY); /// /// Amount of concurrent SQLite database operations. /// /// /// Note that SQLite is not a properly asynchronous database and also has limited read/write concurrency. /// Increasing this number may allow more concurrent reads, but it probably won't matter much. /// SQLite operations are normally ran on the thread pool, which may cause thread pool starvation if the concurrency is too high. /// public static readonly CVarDef DatabaseSqliteConcurrency = CVarDef.Create("database.sqlite_concurrency", 3, CVar.SERVERONLY); #if DEBUG private const int DefaultSqliteDelay = 1; #else private const int DefaultSqliteDelay = 0; #endif public static readonly CVarDef DatabasePgHost = CVarDef.Create("database.pg_host", "localhost", CVar.SERVERONLY); public static readonly CVarDef DatabasePgPort = CVarDef.Create("database.pg_port", 5432, CVar.SERVERONLY); public static readonly CVarDef DatabasePgDatabase = CVarDef.Create("database.pg_database", "ss14", CVar.SERVERONLY); public static readonly CVarDef DatabasePgUsername = CVarDef.Create("database.pg_username", "postgres", CVar.SERVERONLY); public static readonly CVarDef DatabasePgPassword = CVarDef.Create("database.pg_password", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); /// /// Max amount of concurrent Postgres database operations. /// public static readonly CVarDef DatabasePgConcurrency = CVarDef.Create("database.pg_concurrency", 8, CVar.SERVERONLY); /// /// Milliseconds to asynchronously delay all PostgreSQL database operations with. /// /// /// This is intended for performance testing. It works different from , /// as the lag is applied after acquiring the database lock. /// public static readonly CVarDef DatabasePgFakeLag = CVarDef.Create("database.pg_fake_lag", 0, CVar.SERVERONLY); // Basically only exists for integration tests to avoid race conditions. public static readonly CVarDef DatabaseSynchronous = CVarDef.Create("database.sync", false, CVar.SERVERONLY); /* * Interface */ public static readonly CVarDef UIClickSound = CVarDef.Create("interface.click_sound", "/Audio/UserInterface/click.ogg", CVar.REPLICATED); public static readonly CVarDef UIHoverSound = CVarDef.Create("interface.hover_sound", "/Audio/UserInterface/hover.ogg", CVar.REPLICATED); /* * Outline */ public static readonly CVarDef OutlineEnabled = CVarDef.Create("outline.enabled", true, CVar.CLIENTONLY); /* * Parallax */ public static readonly CVarDef ParallaxEnabled = CVarDef.Create("parallax.enabled", true, CVar.CLIENTONLY); public static readonly CVarDef ParallaxDebug = CVarDef.Create("parallax.debug", false, CVar.CLIENTONLY); public static readonly CVarDef ParallaxLowQuality = CVarDef.Create("parallax.low_quality", false, CVar.ARCHIVE | CVar.CLIENTONLY); /* * Physics */ /// /// When a mob is walking should its X / Y movement be relative to its parent (true) or the map (false). /// public static readonly CVarDef RelativeMovement = CVarDef.Create("physics.relative_movement", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef TileFrictionModifier = CVarDef.Create("physics.tile_friction", 40.0f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef StopSpeed = CVarDef.Create("physics.stop_speed", 0.1f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// Whether mobs can push objects like lockers. /// /// /// Technically client doesn't need to know about it but this may prevent a bug in the distant future so it stays. /// public static readonly CVarDef MobPushing = CVarDef.Create("physics.mob_pushing", false, CVar.REPLICATED | CVar.SERVER); /* * Music */ public static readonly CVarDef LobbyMusicEnabled = CVarDef.Create("ambience.lobby_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef EventMusicEnabled = CVarDef.Create("ambience.event_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); /* * Specific Sounds */ // Round end sound (APC Destroyed) public static readonly CVarDef RestartSoundsEnabled = CVarDef.Create("ambience.restart_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); /* * Admin sounds */ public static readonly CVarDef AdminSoundsEnabled = CVarDef.Create("audio.admin_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef AdminChatSoundPath = CVarDef.Create("audio.admin_chat_sound_path", "/Audio/Items/pop.ogg", CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); public static readonly CVarDef AdminChatSoundVolume = CVarDef.Create("audio.admin_chat_sound_volume", -5f, CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); public static readonly CVarDef AHelpSound = CVarDef.Create("audio.ahelp_sound", "/Audio/Effects/adminhelp.ogg", CVar.ARCHIVE | CVar.CLIENTONLY); /* * HUD */ public static readonly CVarDef HudTheme = CVarDef.Create("hud.theme", 0, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef HudHeldItemShow = CVarDef.Create("hud.held_item_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef CombatModeIndicatorsPointShow = CVarDef.Create("hud.combat_mode_indicators_point_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef LoocAboveHeadShow = CVarDef.Create("hud.show_looc_above_head", true, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef HudHeldItemOffset = CVarDef.Create("hud.held_item_offset", 28f, CVar.ARCHIVE | CVar.CLIENTONLY); public static readonly CVarDef HudFpsCounterVisible = CVarDef.Create("hud.fps_counter_visible", false, CVar.CLIENTONLY | CVar.ARCHIVE); /* * NPCs */ public static readonly CVarDef NPCMaxUpdates = CVarDef.Create("npc.max_updates", 128); public static readonly CVarDef NPCEnabled = CVarDef.Create("npc.enabled", true); /// /// Should NPCs pathfind when steering. For debug purposes. /// public static readonly CVarDef NPCPathfinding = CVarDef.Create("npc.pathfinding", true); /* * Net */ public static readonly CVarDef NetAtmosDebugOverlayTickRate = CVarDef.Create("net.atmosdbgoverlaytickrate", 3.0f); public static readonly CVarDef NetGasOverlayTickRate = CVarDef.Create("net.gasoverlaytickrate", 3.0f); public static readonly CVarDef GasOverlayThresholds = CVarDef.Create("net.gasoverlaythresholds", 20); /* * Admin */ public static readonly CVarDef AdminAnnounceLogin = CVarDef.Create("admin.announce_login", true, CVar.SERVERONLY); public static readonly CVarDef AdminAnnounceLogout = CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY); /// /// The token used to authenticate with the admin API. Leave empty to disable the admin API. This is a secret! Do not share! /// public static readonly CVarDef AdminApiToken = CVarDef.Create("admin.api_token", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); /// /// Should users be able to see their own notes? Admins will be able to see and set notes regardless /// public static readonly CVarDef SeeOwnNotes = CVarDef.Create("admin.see_own_notes", false, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// Should the server play a quick sound to the active admins whenever a new player joins? /// public static readonly CVarDef AdminNewPlayerJoinSound = CVarDef.Create("admin.new_player_join_sound", false, CVar.SERVERONLY); /// /// The amount of days before the note starts fading. It will slowly lose opacity until it reaches stale. Set to 0 to disable. /// public static readonly CVarDef NoteFreshDays = CVarDef.Create("admin.note_fresh_days", 91.31055, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// The amount of days before the note completely fades, and can only be seen by admins if they press "see more notes". Set to 0 /// if you want the note to immediately disappear without fading. /// public static readonly CVarDef NoteStaleDays = CVarDef.Create("admin.note_stale_days", 365.2422, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// How much time does the user have to wait in seconds before confirming that they saw an admin message? /// public static readonly CVarDef MessageWaitTime = CVarDef.Create("admin.message_wait_time", 3f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// Default severity for role bans /// public static readonly CVarDef RoleBanDefaultSeverity = CVarDef.Create("admin.role_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Default severity for department bans /// public static readonly CVarDef DepartmentBanDefaultSeverity = CVarDef.Create("admin.department_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Default severity for server bans /// public static readonly CVarDef ServerBanDefaultSeverity = CVarDef.Create("admin.server_ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Whether a server ban will ban the player's ip by default. /// public static readonly CVarDef ServerBanIpBanDefault = CVarDef.Create("admin.server_ban_ip_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Whether a server ban will ban the player's hardware id by default. /// public static readonly CVarDef ServerBanHwidBanDefault = CVarDef.Create("admin.server_ban_hwid_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Whether to use details from last connection for ip/hwid in the BanPanel. /// public static readonly CVarDef ServerBanUseLastDetails = CVarDef.Create("admin.server_ban_use_last_details", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Whether to erase a player's chat messages and their entity from the game when banned. /// public static readonly CVarDef ServerBanErasePlayer = CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); /// /// Minimum players sharing a connection required to create an alert. -1 to disable the alert. /// /// /// If you set this to 0 or 1 then it will alert on every connection, so probably don't do that. /// public static readonly CVarDef AdminAlertMinPlayersSharingConnection = CVarDef.Create("admin.alert.min_players_sharing_connection", -1, CVar.SERVERONLY); /// /// Minimum explosion intensity to create an admin alert message. -1 to disable the alert. /// public static readonly CVarDef AdminAlertExplosionMinIntensity = CVarDef.Create("admin.alert.explosion_min_intensity", 60, CVar.SERVERONLY); /// /// Minimum particle accelerator strength to create an admin alert message. /// public static readonly CVarDef AdminAlertParticleAcceleratorMinPowerState = CVarDef.Create("admin.alert.particle_accelerator_min_power_state", 5, CVar.SERVERONLY); // strength 4 /// /// Should the ban details in admin channel include PII? (IP, HWID, etc) /// public static readonly CVarDef AdminShowPIIOnBan = CVarDef.Create("admin.show_pii_onban", false, CVar.SERVERONLY); /// /// If an admin joins a round by reading up or using the late join button, automatically /// de-admin them. /// public static readonly CVarDef AdminDeadminOnJoin = CVarDef.Create("admin.deadmin_on_join", false, CVar.SERVERONLY); /// /// Overrides the name the client sees in ahelps. Set empty to disable. /// public static readonly CVarDef AdminAhelpOverrideClientName = CVarDef.Create("admin.override_adminname_in_client_ahelp", string.Empty, CVar.SERVERONLY); /// /// The threshold of minutes to appear as a "new player" in the ahelp menu /// If 0, appearing as a new player is disabled. /// public static readonly CVarDef NewPlayerThreshold = CVarDef.Create("admin.new_player_threshold", 0, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); /// /// How long an admin client can go without any input before being considered AFK. /// public static readonly CVarDef AdminAfkTime = CVarDef.Create("admin.afk_time", 600f, CVar.SERVERONLY); /// /// If true, admins are able to connect even if /// would otherwise block regular players. /// public static readonly CVarDef AdminBypassMaxPlayers = CVarDef.Create("admin.bypass_max_players", true, CVar.SERVERONLY); /* * AHELP */ /// /// Ahelp rate limit values are accounted in periods of this size (seconds). /// After the period has passed, the count resets. /// /// public static readonly CVarDef AhelpRateLimitPeriod = CVarDef.Create("ahelp.rate_limit_period", 2, CVar.SERVERONLY); /// /// How many ahelp messages are allowed in a single rate limit period. /// /// public static readonly CVarDef AhelpRateLimitCount = CVarDef.Create("ahelp.rate_limit_count", 10, CVar.SERVERONLY); /* * Explosions */ /// /// How many tiles the explosion system will process per tick /// /// /// Setting this too high will put a large load on a single tick. Setting this too low will lead to /// unnaturally "slow" explosions. /// public static readonly CVarDef ExplosionTilesPerTick = CVarDef.Create("explosion.tiles_per_tick", 100, CVar.SERVERONLY); /// /// Upper limit on the size of an explosion before physics-throwing is disabled. /// /// /// Large nukes tend to generate a lot of shrapnel that flies through space. This can functionally cripple /// the server TPS for a while after an explosion (or even during, if the explosion is processed /// incrementally. /// public static readonly CVarDef ExplosionThrowLimit = CVarDef.Create("explosion.throw_limit", 400, CVar.SERVERONLY); /// /// If this is true, explosion processing will pause the NodeGroupSystem to pause updating. /// /// /// This only takes effect if an explosion needs more than one tick to process (i.e., covers more than tiles). If this is not enabled, the node-system will rebuild its graph /// every tick as the explosion shreds the station, causing significant slowdown. /// public static readonly CVarDef ExplosionSleepNodeSys = CVarDef.Create("explosion.node_sleep", true, CVar.SERVERONLY); /// /// Upper limit on the total area that an explosion can affect before the neighbor-finding algorithm just /// stops. Defaults to a 60-rile radius explosion. /// /// /// Actual area may be larger, as it currently doesn't terminate mid neighbor finding. I.e., area may be that of a ~51 tile radius circle instead. /// public static readonly CVarDef ExplosionMaxArea = CVarDef.Create("explosion.max_area", (int) 3.14f * 256 * 256, CVar.SERVERONLY); /// /// Upper limit on the number of neighbor finding steps for the explosion system neighbor-finding algorithm. /// /// /// Effectively places an upper limit on the range that any explosion can have. In the vast majority of /// instances, will likely be hit before this becomes a limiting factor. /// public static readonly CVarDef ExplosionMaxIterations = CVarDef.Create("explosion.max_iterations", 500, CVar.SERVERONLY); /// /// Max Time in milliseconds to spend processing explosions every tick. /// /// /// This time limiting is not perfectly implemented. Firstly, a significant chunk of processing time happens /// due to queued entity deletions, which happen outside of the system update code. Secondly, explosion /// spawning cannot currently be interrupted & resumed, and may lead to exceeding this time limit. /// public static readonly CVarDef ExplosionMaxProcessingTime = CVarDef.Create("explosion.max_tick_time", 7f, CVar.SERVERONLY); /// /// If the explosion is being processed incrementally over several ticks, this variable determines whether /// updating the grid tiles should be done incrementally at the end of every tick, or only once the explosion has finished processing. /// /// /// The most notable consequence of this change is that explosions will only punch a hole in the station & /// create a vacumm once they have finished exploding. So airlocks will no longer slam shut as the explosion /// expands, just suddenly at the end. /// public static readonly CVarDef ExplosionIncrementalTileBreaking = CVarDef.Create("explosion.incremental_tile", false, CVar.SERVERONLY); /// /// This determines for how many seconds an explosion should stay visible once it has finished expanding. /// public static readonly CVarDef ExplosionPersistence = CVarDef.Create("explosion.persistence", 1.0f, CVar.SERVERONLY); /// /// If an explosion covers a larger area than this number, the damaging/processing will always start during /// the next tick, instead of during the same tick that the explosion was generated in. /// /// /// This value can be used to ensure that for large explosions the area/tile calculation and the explosion /// processing/damaging occurs in separate ticks. This helps reduce the single-tick lag if both and are large. I.e., instead of /// a single tick explosion, this cvar allows for a configuration that results in a two-tick explosion, /// though most of the computational cost is still in the second tick. /// public static readonly CVarDef ExplosionSingleTickAreaLimit = CVarDef.Create("explosion.single_tick_area_limit", 400, CVar.SERVERONLY); /// /// Whether or not explosions are allowed to create tiles that have /// set to true. /// public static readonly CVarDef ExplosionCanCreateVacuum = CVarDef.Create("explosion.can_create_vacuum", true, CVar.SERVERONLY); /* * Radiation */ /// /// What is the smallest radiation dose in rads that can be received by object. /// Extremely small values may impact performance. /// public static readonly CVarDef RadiationMinIntensity = CVarDef.Create("radiation.min_intensity", 0.1f, CVar.SERVERONLY); /// /// Rate of radiation system update in seconds. /// public static readonly CVarDef RadiationGridcastUpdateRate = CVarDef.Create("radiation.gridcast.update_rate", 1.0f, CVar.SERVERONLY); /// /// If both radiation source and receiver are placed on same grid, ignore grids between them. /// May get inaccurate result in some cases, but greatly boost performance in general. /// public static readonly CVarDef RadiationGridcastSimplifiedSameGrid = CVarDef.Create("radiation.gridcast.simplified_same_grid", true, CVar.SERVERONLY); /// /// Max distance that radiation ray can travel in meters. /// public static readonly CVarDef RadiationGridcastMaxDistance = CVarDef.Create("radiation.gridcast.max_distance", 50f, CVar.SERVERONLY); /* * Admin logs */ /// /// Controls if admin logs are enabled. Highly recommended to shut this off for development. /// public static readonly CVarDef AdminLogsEnabled = CVarDef.Create("adminlogs.enabled", true, CVar.SERVERONLY); public static readonly CVarDef AdminLogsQueueSendDelay = CVarDef.Create("adminlogs.queue_send_delay_seconds", 5f, CVar.SERVERONLY); // When to skip the waiting time to save in-round admin logs, if no admin logs are currently being saved public static readonly CVarDef AdminLogsQueueMax = CVarDef.Create("adminlogs.queue_max", 5000, CVar.SERVERONLY); // When to skip the waiting time to save pre-round admin logs, if no admin logs are currently being saved public static readonly CVarDef AdminLogsPreRoundQueueMax = CVarDef.Create("adminlogs.pre_round_queue_max", 5000, CVar.SERVERONLY); // When to start dropping logs public static readonly CVarDef AdminLogsDropThreshold = CVarDef.Create("adminlogs.drop_threshold", 20000, CVar.SERVERONLY); // How many logs to send to the client at once public static readonly CVarDef AdminLogsClientBatchSize = CVarDef.Create("adminlogs.client_batch_size", 1000, CVar.SERVERONLY); public static readonly CVarDef AdminLogsServerName = CVarDef.Create("adminlogs.server_name", "unknown", CVar.SERVERONLY); /* * Atmos */ /// /// Whether gas differences will move entities. /// public static readonly CVarDef SpaceWind = CVarDef.Create("atmos.space_wind", false, CVar.SERVERONLY); /// /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. /// public static readonly CVarDef SpaceWindPressureForceDivisorThrow = CVarDef.Create("atmos.space_wind_pressure_force_divisor_throw", 15f, CVar.SERVERONLY); /// /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. /// public static readonly CVarDef SpaceWindPressureForceDivisorPush = CVarDef.Create("atmos.space_wind_pressure_force_divisor_push", 2500f, CVar.SERVERONLY); /// /// The maximum velocity (not force) that may be applied to an object by atmospheric pressure differences. /// Useful to prevent clipping through objects. /// public static readonly CVarDef SpaceWindMaxVelocity = CVarDef.Create("atmos.space_wind_max_velocity", 30f, CVar.SERVERONLY); /// /// The maximum force that may be applied to an object by pushing (i.e. not throwing) atmospheric pressure differences. /// A "throwing" atmospheric pressure difference ignores this limit, but not the max. velocity limit. /// public static readonly CVarDef SpaceWindMaxPushForce = CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY); /// /// Whether monstermos tile equalization is enabled. /// public static readonly CVarDef MonstermosEqualization = CVarDef.Create("atmos.monstermos_equalization", true, CVar.SERVERONLY); /// /// Whether monstermos explosive depressurization is enabled. /// Needs to be enabled to work. /// public static readonly CVarDef MonstermosDepressurization = CVarDef.Create("atmos.monstermos_depressurization", true, CVar.SERVERONLY); /// /// Whether monstermos explosive depressurization will rip tiles.. /// Needs and to be enabled to work. /// WARNING: This cvar causes MAJOR contrast issues, and usually tends to make any spaced scene look very cluttered. /// This not only usually looks strange, but can also reduce playability for people with impaired vision. Please think twice before enabling this on your server. /// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing. /// public static readonly CVarDef MonstermosRipTiles = CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY); /// /// Whether explosive depressurization will cause the grid to gain an impulse. /// Needs and to be enabled to work. /// public static readonly CVarDef AtmosGridImpulse = CVarDef.Create("atmos.grid_impulse", false, CVar.SERVERONLY); /// /// What fraction of air from a spaced tile escapes every tick. /// 1.0 for instant spacing, 0.2 means 20% of remaining air lost each time /// public static readonly CVarDef AtmosSpacingEscapeRatio = CVarDef.Create("atmos.mmos_spacing_speed", 0.15f, CVar.SERVERONLY); /// /// Minimum amount of air allowed on a spaced tile before it is reset to 0 immediately in kPa /// Since the decay due to SpacingEscapeRatio follows a curve, it would never reach 0.0 exactly /// unless we truncate it somewhere. /// public static readonly CVarDef AtmosSpacingMinGas = CVarDef.Create("atmos.mmos_min_gas", 2.0f, CVar.SERVERONLY); /// /// How much wind can go through a single tile before that tile doesn't depressurize itself /// (I.e spacing is limited in large rooms heading into smaller spaces) /// public static readonly CVarDef AtmosSpacingMaxWind = CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY); /// /// Whether atmos superconduction is enabled. /// /// Disabled by default, superconduction is awful. public static readonly CVarDef Superconduction = CVarDef.Create("atmos.superconduction", false, CVar.SERVERONLY); /// /// Heat loss per tile due to radiation at 20 degC, in W. /// public static readonly CVarDef SuperconductionTileLoss = CVarDef.Create("atmos.superconduction_tile_loss", 30f, CVar.SERVERONLY); /// /// Whether excited groups will be processed and created. /// public static readonly CVarDef ExcitedGroups = CVarDef.Create("atmos.excited_groups", true, CVar.SERVERONLY); /// /// Whether all tiles in an excited group will clear themselves once being exposed to space. /// Similar to , without none of the tile ripping or /// things being thrown around very violently. /// Needs to be enabled to work. /// public static readonly CVarDef ExcitedGroupsSpaceIsAllConsuming = CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY); /// /// Maximum time in milliseconds that atmos can take processing. /// public static readonly CVarDef AtmosMaxProcessTime = CVarDef.Create("atmos.max_process_time", 3f, CVar.SERVERONLY); /// /// Atmos tickrate in TPS. Atmos processing will happen every 1/TPS seconds. /// public static readonly CVarDef AtmosTickRate = CVarDef.Create("atmos.tickrate", 15f, CVar.SERVERONLY); /// /// Scale factor for how fast things happen in our atmosphere /// simulation compared to real life. 1x means pumps run at 1x /// speed. Players typically expect things to happen faster /// in-game. /// public static readonly CVarDef AtmosSpeedup = CVarDef.Create("atmos.speedup", 8f, CVar.SERVERONLY); /// /// Like atmos.speedup, but only for gas and reaction heat values. 64x means /// gases heat up and cool down 64x faster than real life. /// public static readonly CVarDef AtmosHeatScale = CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY); /* * MIDI instruments */ public static readonly CVarDef MaxMidiEventsPerSecond = CVarDef.Create("midi.max_events_per_second", 1000, CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef MaxMidiEventsPerBatch = CVarDef.Create("midi.max_events_per_batch", 60, CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef MaxMidiBatchesDropped = CVarDef.Create("midi.max_batches_dropped", 1, CVar.SERVERONLY); public static readonly CVarDef MaxMidiLaggedBatches = CVarDef.Create("midi.max_lagged_batches", 8, CVar.SERVERONLY); /* * Holidays */ public static readonly CVarDef HolidaysEnabled = CVarDef.Create("holidays.enabled", true, CVar.SERVERONLY); /* * Branding stuff */ public static readonly CVarDef BrandingSteam = CVarDef.Create("branding.steam", false, CVar.CLIENTONLY); /* * OOC */ public static readonly CVarDef OocEnabled = CVarDef.Create("ooc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); public static readonly CVarDef AdminOocEnabled = CVarDef.Create("ooc.enabled_admin", true, CVar.NOTIFY); /// /// If true, whenever OOC is disabled the Discord OOC relay will also be disabled. /// public static readonly CVarDef DisablingOOCDisablesRelay = CVarDef.Create("ooc.disabling_ooc_disables_relay", true, CVar.SERVERONLY); /// /// Whether or not OOC chat should be enabled during a round. /// public static readonly CVarDef OocEnableDuringRound = CVarDef.Create("ooc.enable_during_round", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef ShowOocPatronColor = CVarDef.Create("ooc.show_ooc_patron_color", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.CLIENT); /* * LOOC */ public static readonly CVarDef LoocEnabled = CVarDef.Create("looc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); public static readonly CVarDef AdminLoocEnabled = CVarDef.Create("looc.enabled_admin", true, CVar.NOTIFY); /// /// True: Dead players can use LOOC /// False: Dead player LOOC gets redirected to dead chat /// public static readonly CVarDef DeadLoocEnabled = CVarDef.Create("looc.enabled_dead", false, CVar.NOTIFY | CVar.REPLICATED); /// /// True: Crit players can use LOOC /// False: Crit player LOOC gets redirected to dead chat /// public static readonly CVarDef CritLoocEnabled = CVarDef.Create("looc.enabled_crit", false, CVar.NOTIFY | CVar.REPLICATED); /* * Entity Menu Grouping Types */ public static readonly CVarDef EntityMenuGroupingType = CVarDef.Create("entity_menu", 0, CVar.CLIENTONLY); /* * Whitelist */ /// /// Controls whether the server will deny any players that are not whitelisted in the DB. /// public static readonly CVarDef WhitelistEnabled = CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); /// /// The loc string to display as a disconnect reason when someone is not whitelisted. /// public static readonly CVarDef WhitelistReason = CVarDef.Create("whitelist.reason", "whitelist-not-whitelisted", CVar.SERVERONLY); /// /// If the playercount is below this number, the whitelist will not apply. /// public static readonly CVarDef WhitelistMinPlayers = CVarDef.Create("whitelist.min_players", 0, CVar.SERVERONLY); /// /// If the playercount is above this number, the whitelist will not apply. /// public static readonly CVarDef WhitelistMaxPlayers = CVarDef.Create("whitelist.max_players", int.MaxValue, CVar.SERVERONLY); /* * VOTE */ /// /// Allows enabling/disabling player-started votes for ultimate authority /// public static readonly CVarDef VoteEnabled = CVarDef.Create("vote.enabled", true, CVar.SERVERONLY); /// /// See vote.enabled, but specific to restart votes /// public static readonly CVarDef VoteRestartEnabled = CVarDef.Create("vote.restart_enabled", true, CVar.SERVERONLY); /// /// Config for when the restart vote should be allowed to be called regardless with less than this amount of players. /// public static readonly CVarDef VoteRestartMaxPlayers = CVarDef.Create("vote.restart_max_players", 20, CVar.SERVERONLY); /// /// Config for when the restart vote should be allowed to be called based on percentage of ghosts. /// public static readonly CVarDef VoteRestartGhostPercentage = CVarDef.Create("vote.restart_ghost_percentage", 55, CVar.SERVERONLY); /// /// See vote.enabled, but specific to preset votes /// public static readonly CVarDef VotePresetEnabled = CVarDef.Create("vote.preset_enabled", true, CVar.SERVERONLY); /// /// See vote.enabled, but specific to map votes /// public static readonly CVarDef VoteMapEnabled = CVarDef.Create("vote.map_enabled", false, CVar.SERVERONLY); /// /// The required ratio of the server that must agree for a restart round vote to go through. /// public static readonly CVarDef VoteRestartRequiredRatio = CVarDef.Create("vote.restart_required_ratio", 0.85f, CVar.SERVERONLY); /// /// Whether or not to prevent the restart vote from having any effect when there is an online admin /// public static readonly CVarDef VoteRestartNotAllowedWhenAdminOnline = CVarDef.Create("vote.restart_not_allowed_when_admin_online", true, CVar.SERVERONLY); /// /// The delay which two votes of the same type are allowed to be made by separate people, in seconds. /// public static readonly CVarDef VoteSameTypeTimeout = CVarDef.Create("vote.same_type_timeout", 240f, CVar.SERVERONLY); /// /// Sets the duration of the map vote timer. /// public static readonly CVarDef VoteTimerMap = CVarDef.Create("vote.timermap", 90, CVar.SERVERONLY); /// /// Sets the duration of the restart vote timer. /// public static readonly CVarDef VoteTimerRestart = CVarDef.Create("vote.timerrestart", 60, CVar.SERVERONLY); /// /// Sets the duration of the gamemode/preset vote timer. /// public static readonly CVarDef VoteTimerPreset = CVarDef.Create("vote.timerpreset", 30, CVar.SERVERONLY); /// /// Sets the duration of the map vote timer when ALONE. /// public static readonly CVarDef VoteTimerAlone = CVarDef.Create("vote.timeralone", 10, CVar.SERVERONLY); /* * BAN */ public static readonly CVarDef BanHardwareIds = CVarDef.Create("ban.hardware_ids", true, CVar.SERVERONLY); /* * Procgen */ /// /// Should we pre-load all of the procgen atlasses. /// public static readonly CVarDef ProcgenPreload = CVarDef.Create("procgen.preload", true, CVar.SERVERONLY); /* * Shuttles */ // Look this is technically eye behavior but its main impact is shuttles so I just dumped it here. /// /// If true then the camera will match the grid / map and is unchangeable. /// - When traversing grids it will snap to 0 degrees rotation. /// False means the player has control over the camera rotation. /// - When traversing grids it will snap to the nearest cardinal which will generally be imperceptible. /// public static readonly CVarDef CameraRotationLocked = CVarDef.Create("shuttle.camera_rotation_locked", false, CVar.REPLICATED); /// /// Whether the arrivals terminal should be on a planet map. /// public static readonly CVarDef ArrivalsPlanet = CVarDef.Create("shuttle.arrivals_planet", true, CVar.SERVERONLY); /// /// Whether the arrivals shuttle is enabled. /// public static readonly CVarDef ArrivalsShuttles = CVarDef.Create("shuttle.arrivals", true, CVar.SERVERONLY); /// /// The map to use for the arrivals station. /// public static readonly CVarDef ArrivalsMap = CVarDef.Create("shuttle.arrivals_map", "/Maps/Misc/terminal.yml", CVar.SERVERONLY); /// /// Cooldown between arrivals departures. This should be longer than the FTL time or it will double cycle. /// public static readonly CVarDef ArrivalsCooldown = CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY); /// /// Are players allowed to return on the arrivals shuttle. /// public static readonly CVarDef ArrivalsReturns = CVarDef.Create("shuttle.arrivals_returns", false, CVar.SERVERONLY); /// /// Should all players be forced to spawn at departures, even on roundstart, even if their loadout says they spawn in cryo? /// public static readonly CVarDef ForceArrivals = CVarDef.Create("shuttle.force_arrivals", false, CVar.SERVERONLY); /// /// Should all players who spawn at arrivals have godmode until they leave the map? /// public static readonly CVarDef GodmodeArrivals = CVarDef.Create("shuttle.godmode_arrivals", false, CVar.SERVERONLY); /// /// Whether to automatically spawn escape shuttles. /// public static readonly CVarDef GridFill = CVarDef.Create("shuttle.grid_fill", true, CVar.SERVERONLY); /// /// Whether to automatically preloading grids by GridPreloaderSystem /// public static readonly CVarDef PreloadGrids = CVarDef.Create("shuttle.preload_grids", true, CVar.SERVERONLY); /// /// How long the warmup time before FTL start should be. /// public static readonly CVarDef FTLStartupTime = CVarDef.Create("shuttle.startup_time", 5.5f, CVar.SERVERONLY); /// /// How long a shuttle spends in FTL. /// public static readonly CVarDef FTLTravelTime = CVarDef.Create("shuttle.travel_time", 20f, CVar.SERVERONLY); /// /// How long the final stage of FTL before arrival should be. /// public static readonly CVarDef FTLArrivalTime = CVarDef.Create("shuttle.arrival_time", 5f, CVar.SERVERONLY); /// /// How much time needs to pass before a shuttle can FTL again. /// public static readonly CVarDef FTLCooldown = CVarDef.Create("shuttle.cooldown", 10f, CVar.SERVERONLY); /// /// The maximum a grid can have before it becomes unable to FTL. /// Any value equal to or less than zero will disable this check. /// public static readonly CVarDef FTLMassLimit = CVarDef.Create("shuttle.mass_limit", 300f, CVar.SERVERONLY); /// /// How long to knock down entities for if they aren't buckled when FTL starts and stops. /// public static readonly CVarDef HyperspaceKnockdownTime = CVarDef.Create("shuttle.hyperspace_knockdown_time", 5f, CVar.SERVERONLY); /* * Emergency */ /// /// Is the emergency shuttle allowed to be early launched. /// public static readonly CVarDef EmergencyEarlyLaunchAllowed = CVarDef.Create("shuttle.emergency_early_launch_allowed", false, CVar.SERVERONLY); /// /// How long the emergency shuttle remains docked with the station, in seconds. /// public static readonly CVarDef EmergencyShuttleDockTime = CVarDef.Create("shuttle.emergency_dock_time", 180f, CVar.SERVERONLY); /// /// How long after the console is authorized for the shuttle to early launch. /// public static readonly CVarDef EmergencyShuttleAuthorizeTime = CVarDef.Create("shuttle.emergency_authorize_time", 10f, CVar.SERVERONLY); /// /// The minimum time for the emergency shuttle to arrive at centcomm. /// Actual minimum travel time cannot be less than /// public static readonly CVarDef EmergencyShuttleMinTransitTime = CVarDef.Create("shuttle.emergency_transit_time_min", 60f, CVar.SERVERONLY); /// /// The maximum time for the emergency shuttle to arrive at centcomm. /// public static readonly CVarDef EmergencyShuttleMaxTransitTime = CVarDef.Create("shuttle.emergency_transit_time_max", 180f, CVar.SERVERONLY); /// /// Whether the emergency shuttle is enabled or should the round just end. /// public static readonly CVarDef EmergencyShuttleEnabled = CVarDef.Create("shuttle.emergency", true, CVar.SERVERONLY); /// /// The percentage of time passed from the initial call to when the shuttle can no longer be recalled. /// ex. a call time of 10min and turning point of 0.5 means the shuttle cannot be recalled after 5 minutes. /// public static readonly CVarDef EmergencyRecallTurningPoint = CVarDef.Create("shuttle.recall_turning_point", 0.5f, CVar.SERVERONLY); /// /// Time in minutes after round start to auto-call the shuttle. Set to zero to disable. /// public static readonly CVarDef EmergencyShuttleAutoCallTime = CVarDef.Create("shuttle.auto_call_time", 90, CVar.SERVERONLY); /// /// Time in minutes after the round was extended (by recalling the shuttle) to call /// the shuttle again. /// public static readonly CVarDef EmergencyShuttleAutoCallExtensionTime = CVarDef.Create("shuttle.auto_call_extension_time", 45, CVar.SERVERONLY); /* * Crew Manifests */ /// /// Setting this allows a crew manifest to be opened from any window /// that has a crew manifest button, and sends the correct message. /// If this is false, only in-game entities will allow you to see /// the crew manifest, if the functionality is coded in. /// Having administrator priveledge ignores this, but will still /// hide the button in UI windows. /// public static readonly CVarDef CrewManifestWithoutEntity = CVarDef.Create("crewmanifest.no_entity", true, CVar.REPLICATED); /// /// Setting this allows the crew manifest to be viewed from 'unsecure' /// entities, such as the PDA. /// public static readonly CVarDef CrewManifestUnsecure = CVarDef.Create("crewmanifest.unsecure", true, CVar.REPLICATED); /* * Biomass */ /// /// Enabled: Cloning has 70% cost and reclaimer will refuse to reclaim corpses with souls. (For LRP). /// Disabled: Cloning has full biomass cost and reclaimer can reclaim corpses with souls. (Playtested and balanced for MRP+). /// public static readonly CVarDef BiomassEasyMode = CVarDef.Create("biomass.easy_mode", true, CVar.SERVERONLY); /* * Anomaly */ /// /// A scale factor applied to a grid's bounds when trying to find a spot to randomly generate an anomaly. /// public static readonly CVarDef AnomalyGenerationGridBoundsScale = CVarDef.Create("anomaly.generation_grid_bounds_scale", 0.6f, CVar.SERVERONLY); /* * VIEWPORT */ public static readonly CVarDef ViewportStretch = CVarDef.Create("viewport.stretch", true, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ViewportFixedScaleFactor = CVarDef.Create("viewport.fixed_scale_factor", 2, CVar.CLIENTONLY | CVar.ARCHIVE); // This default is basically specifically chosen so fullscreen/maximized 1080p hits a 2x snap and does NN. public static readonly CVarDef ViewportSnapToleranceMargin = CVarDef.Create("viewport.snap_tolerance_margin", 64, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ViewportSnapToleranceClip = CVarDef.Create("viewport.snap_tolerance_clip", 32, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ViewportScaleRender = CVarDef.Create("viewport.scale_render", true, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ViewportMinimumWidth = CVarDef.Create("viewport.minimum_width", 15, CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef ViewportMaximumWidth = CVarDef.Create("viewport.maximum_width", 21, CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef ViewportWidth = CVarDef.Create("viewport.width", 21, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ViewportVerticalFit = CVarDef.Create("viewport.vertical_fit", true, CVar.CLIENTONLY | CVar.ARCHIVE); /* * UI */ public static readonly CVarDef UILayout = CVarDef.Create("ui.layout", "Default", CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef DefaultScreenChatSize = CVarDef.Create("ui.default_chat_size", "", CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef SeparatedScreenChatSize = CVarDef.Create("ui.separated_chat_size", "0.6,0", CVar.CLIENTONLY | CVar.ARCHIVE); /* * Accessibility */ /// /// Chat window opacity slider, controlling the alpha of the chat window background. /// Goes from to 0 (completely transparent) to 1 (completely opaque) /// public static readonly CVarDef ChatWindowOpacity = CVarDef.Create("accessibility.chat_window_transparency", 0.85f, CVar.CLIENTONLY | CVar.ARCHIVE); /// /// Toggle for visual effects that may potentially cause motion sickness. /// Where reasonable, effects affected by this CVar should use an alternate effect. /// Please do not use this CVar as a bandaid for effects that could otherwise be made accessible without issue. /// public static readonly CVarDef ReducedMotion = CVarDef.Create("accessibility.reduced_motion", false, CVar.CLIENTONLY | CVar.ARCHIVE); public static readonly CVarDef ChatEnableColorName = CVarDef.Create("accessibility.enable_color_name", true, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying names with individual colors."); /// /// Screen shake intensity slider, controlling the intensity of the CameraRecoilSystem. /// Goes from 0 (no recoil at all) to 1 (regular amounts of recoil) /// public static readonly CVarDef ScreenShakeIntensity = CVarDef.Create("accessibility.screen_shake_intensity", 1f, CVar.CLIENTONLY | CVar.ARCHIVE); /// /// A generic toggle for various visual effects that are color sensitive. /// As of 2/16/24, only applies to progress bar colors. /// public static readonly CVarDef AccessibilityColorblindFriendly = CVarDef.Create("accessibility.colorblind_friendly", false, CVar.CLIENTONLY | CVar.ARCHIVE); /* * CHAT */ /// /// Chat rate limit values are accounted in periods of this size (seconds). /// After the period has passed, the count resets. /// /// public static readonly CVarDef ChatRateLimitPeriod = CVarDef.Create("chat.rate_limit_period", 2, CVar.SERVERONLY); /// /// How many chat messages are allowed in a single rate limit period. /// /// /// The total rate limit throughput per second is effectively /// divided by . /// /// /// public static readonly CVarDef ChatRateLimitCount = CVarDef.Create("chat.rate_limit_count", 10, CVar.SERVERONLY); /// /// If true, announce when a player breached chat rate limit to game administrators. /// /// public static readonly CVarDef ChatRateLimitAnnounceAdmins = CVarDef.Create("chat.rate_limit_announce_admins", true, CVar.SERVERONLY); /// /// Minimum delay (in seconds) between announcements from . /// public static readonly CVarDef ChatRateLimitAnnounceAdminsDelay = CVarDef.Create("chat.rate_limit_announce_admins_delay", 15, CVar.SERVERONLY); public static readonly CVarDef ChatMaxMessageLength = CVarDef.Create("chat.max_message_length", 1000, CVar.SERVER | CVar.REPLICATED); public static readonly CVarDef ChatMaxAnnouncementLength = CVarDef.Create("chat.max_announcement_length", 256, CVar.SERVER | CVar.REPLICATED); public static readonly CVarDef ChatSanitizerEnabled = CVarDef.Create("chat.chat_sanitizer_enabled", true, CVar.SERVERONLY); public static readonly CVarDef ChatShowTypingIndicator = CVarDef.Create("chat.show_typing_indicator", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); public static readonly CVarDef ChatEnableFancyBubbles = CVarDef.Create("chat.enable_fancy_bubbles", true, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying fancy speech bubbles, which display the speaking character's name."); public static readonly CVarDef ChatFancyNameBackground = CVarDef.Create("chat.fancy_name_background", false, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying a background under the speaking character's name."); /// /// A message broadcast to each player that joins the lobby. /// May be changed by admins ingame through use of the "set-motd" command. /// In this case the new value, if not empty, is broadcast to all connected players and saved between rounds. /// May be requested by any player through use of the "get-motd" command. /// public static readonly CVarDef MOTD = CVarDef.Create("chat.motd", "", CVar.SERVER | CVar.SERVERONLY | CVar.ARCHIVE, "A message broadcast to each player that joins the lobby."); /* * AFK */ /// /// How long a client can go without any input before being considered AFK. /// public static readonly CVarDef AfkTime = CVarDef.Create("afk.time", 60f, CVar.SERVERONLY); /* * IC */ /// /// Restricts IC character names to alphanumeric chars. /// public static readonly CVarDef RestrictedNames = CVarDef.Create("ic.restricted_names", true, CVar.SERVER | CVar.REPLICATED); /// /// Allows flavor text (character descriptions) /// public static readonly CVarDef FlavorText = CVarDef.Create("ic.flavor_text", false, CVar.SERVER | CVar.REPLICATED); /// /// Adds a period at the end of a sentence if the sentence ends in a letter. /// public static readonly CVarDef ChatPunctuation = CVarDef.Create("ic.punctuation", false, CVar.SERVER); /// /// Enables automatically forcing IC name rules. Uppercases the first letter of the first and last words of the name /// public static readonly CVarDef ICNameCase = CVarDef.Create("ic.name_case", true, CVar.SERVER | CVar.REPLICATED); /// /// Whether or not players' characters are randomly generated rather than using their selected characters in the creator. /// public static readonly CVarDef ICRandomCharacters = CVarDef.Create("ic.random_characters", false, CVar.SERVER); /// /// A weighted random prototype used to determine the species selected for random characters. /// public static readonly CVarDef ICRandomSpeciesWeights = CVarDef.Create("ic.random_species_weights", "SpeciesWeights", CVar.SERVER); /// /// Control displaying SSD indicators near players /// public static readonly CVarDef ICShowSSDIndicator = CVarDef.Create("ic.show_ssd_indicator", true, CVar.CLIENTONLY); /* * Salvage */ /// /// Duration for missions /// public static readonly CVarDef SalvageExpeditionDuration = CVarDef.Create("salvage.expedition_duration", 660f, CVar.REPLICATED); /// /// Cooldown for missions. /// public static readonly CVarDef SalvageExpeditionCooldown = CVarDef.Create("salvage.expedition_cooldown", 780f, CVar.REPLICATED); /* * Flavor */ /// /// Flavor limit. This is to ensure that having a large mass of flavors in /// some food object won't spam a user with flavors. /// public static readonly CVarDef FlavorLimit = CVarDef.Create("flavor.limit", 10, CVar.SERVERONLY); /* * Mapping */ /// /// Will mapping mode enable autosaves when it's activated? /// public static readonly CVarDef AutosaveEnabled = CVarDef.Create("mapping.autosave", true, CVar.SERVERONLY); /// /// Autosave interval in seconds. /// public static readonly CVarDef AutosaveInterval = CVarDef.Create("mapping.autosave_interval", 600f, CVar.SERVERONLY); /// /// Directory in server user data to save to. Saves will be inside folders in this directory. /// public static readonly CVarDef AutosaveDirectory = CVarDef.Create("mapping.autosave_dir", "Autosaves", CVar.SERVERONLY); /* * Rules */ /// /// Time that players have to wait before rules can be accepted. /// public static readonly CVarDef RulesWaitTime = CVarDef.Create("rules.time", 45f, CVar.SERVER | CVar.REPLICATED); /// /// Don't show rules to localhost/loopback interface. /// public static readonly CVarDef RulesExemptLocal = CVarDef.Create("rules.exempt_local", true, CVar.SERVERONLY); /* * Autogeneration */ public static readonly CVarDef DestinationFile = CVarDef.Create("autogen.destination_file", "", CVar.SERVER | CVar.SERVERONLY); /* * Network Resource Manager */ /// /// Whether uploaded files will be stored in the server's database. /// This is useful to keep "logs" on what files admins have uploaded in the past. /// public static readonly CVarDef ResourceUploadingStoreEnabled = CVarDef.Create("netres.store_enabled", true, CVar.SERVER | CVar.SERVERONLY); /// /// Numbers of days before stored uploaded files are deleted. Set to zero or negative to disable auto-delete. /// This is useful to free some space automatically. Auto-deletion runs only on server boot. /// public static readonly CVarDef ResourceUploadingStoreDeletionDays = CVarDef.Create("netres.store_deletion_days", 30, CVar.SERVER | CVar.SERVERONLY); /* * Controls */ /// /// Deadzone for drag-drop interactions. /// public static readonly CVarDef DragDropDeadZone = CVarDef.Create("control.drag_dead_zone", 12f, CVar.CLIENTONLY | CVar.ARCHIVE); /// /// Toggles whether the walking key is a toggle or a held key. /// public static readonly CVarDef ToggleWalk = CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE); /* * STORAGE */ /// /// Whether or not the storage UI is static and bound to the hotbar, or unbound and allowed to be dragged anywhere. /// public static readonly CVarDef StaticStorageUI = CVarDef.Create("control.static_storage_ui", true, CVar.CLIENTONLY | CVar.ARCHIVE); /// /// Whether or not the storage window uses a transparent or opaque sprite. /// public static readonly CVarDef OpaqueStorageWindow = CVarDef.Create("control.opaque_storage_background", false, CVar.CLIENTONLY | CVar.ARCHIVE); /* * UPDATE */ /// /// If a server update restart is pending, the delay after the last player leaves before we actually restart. In seconds. /// public static readonly CVarDef UpdateRestartDelay = CVarDef.Create("update.restart_delay", 20f, CVar.SERVERONLY); /* * Ghost */ /// /// The time you must spend reading the rules, before the "Request" button is enabled /// public static readonly CVarDef GhostRoleTime = CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED | CVar.SERVER); /// /// Whether or not to kill the player's mob on ghosting, when it is in a critical health state. /// public static readonly CVarDef GhostKillCrit = CVarDef.Create("ghost.kill_crit", true, CVar.REPLICATED | CVar.SERVER); /* * Fire alarm */ /// /// If fire alarms should have all access, or if activating/resetting these /// should be restricted to what is dictated on a player's access card. /// Defaults to true. /// public static readonly CVarDef FireAlarmAllAccess = CVarDef.Create("firealarm.allaccess", true, CVar.SERVERONLY); /* * PLAYTIME */ /// /// Time between play time autosaves, in seconds. /// public static readonly CVarDef PlayTimeSaveInterval = CVarDef.Create("playtime.save_interval", 900f, CVar.SERVERONLY); /* * INFOLINKS */ /// /// Link to Discord server to show in the launcher. /// public static readonly CVarDef InfoLinksDiscord = CVarDef.Create("infolinks.discord", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to website to show in the launcher. /// public static readonly CVarDef InfoLinksForum = CVarDef.Create("infolinks.forum", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to GitHub page to show in the launcher. /// public static readonly CVarDef InfoLinksGithub = CVarDef.Create("infolinks.github", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to website to show in the launcher. /// public static readonly CVarDef InfoLinksWebsite = CVarDef.Create("infolinks.website", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to wiki to show in the launcher. /// public static readonly CVarDef InfoLinksWiki = CVarDef.Create("infolinks.wiki", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to Patreon. Not shown in the launcher currently. /// public static readonly CVarDef InfoLinksPatreon = CVarDef.Create("infolinks.patreon", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to the bug report form. /// public static readonly CVarDef InfoLinksBugReport = CVarDef.Create("infolinks.bug_report", "", CVar.SERVER | CVar.REPLICATED); /// /// Link to site handling ban appeals. Shown in ban disconnect messages. /// public static readonly CVarDef InfoLinksAppeal = CVarDef.Create("infolinks.appeal", "", CVar.SERVER | CVar.REPLICATED); /* * CONFIG */ // These are server-only for now since I don't foresee a client use yet, // and I don't wanna have to start coming up with like .client suffixes and stuff like that. /// /// Configuration presets to load during startup. /// Multiple presets can be separated by comma and are loaded in order. /// /// /// Loaded presets must be located under the ConfigPresets/ resource directory and end with the .toml extension. /// Only the file name (without extension) must be given for this variable. /// public static readonly CVarDef ConfigPresets = CVarDef.Create("config.presets", "", CVar.SERVERONLY); /// /// Whether to load the preset development CVars. /// This disables some things like lobby to make development easier. /// Even when true, these are only loaded if the game is compiled with DEVELOPMENT set. /// public static readonly CVarDef ConfigPresetDevelopment = CVarDef.Create("config.preset_development", true, CVar.SERVERONLY); /// /// Whether to load the preset debug CVars. /// Even when true, these are only loaded if the game is compiled with DEBUG set. /// public static readonly CVarDef ConfigPresetDebug = CVarDef.Create("config.preset_debug", true, CVar.SERVERONLY); /* * World Generation */ /// /// Whether or not world generation is enabled. /// public static readonly CVarDef WorldgenEnabled = CVarDef.Create("worldgen.enabled", false, CVar.SERVERONLY); /// /// The worldgen config to use. /// public static readonly CVarDef WorldgenConfig = CVarDef.Create("worldgen.worldgen_config", "Default", CVar.SERVERONLY); /// /// The maximum amount of time the entity GC can process, in ms. /// public static readonly CVarDef GCMaximumTimeMs = CVarDef.Create("entgc.maximum_time_ms", 5, CVar.SERVERONLY); /* * Replays */ /// /// Whether or not to record admin chat. If replays are being publicly distributes, this should probably be /// false. /// public static readonly CVarDef ReplayRecordAdminChat = CVarDef.Create("replay.record_admin_chat", false, CVar.ARCHIVE); /// /// Automatically record full rounds as replays. /// public static readonly CVarDef ReplayAutoRecord = CVarDef.Create("replay.auto_record", false, CVar.SERVERONLY); /// /// The file name to record automatic replays to. The path is relative to . /// /// /// /// If the path includes slashes, directories will be automatically created if necessary. /// /// /// A number of substitutions can be used to automatically fill in the file name: {year}, {month}, {day}, {hour}, {minute}, {round}. /// /// public static readonly CVarDef ReplayAutoRecordName = CVarDef.Create("replay.auto_record_name", "{year}_{month}_{day}-{hour}_{minute}-round_{round}.zip", CVar.SERVERONLY); /// /// Path that, if provided, automatic replays are initially recorded in. /// When the recording is done, the file is moved into its final destination. /// Unless this path is rooted, it will be relative to . /// public static readonly CVarDef ReplayAutoRecordTempDir = CVarDef.Create("replay.auto_record_temp_dir", "", CVar.SERVERONLY); /* * Miscellaneous */ public static readonly CVarDef GatewayGeneratorEnabled = CVarDef.Create("gateway.generator_enabled", true); // Clippy! public static readonly CVarDef TippyEntity = CVarDef.Create("tippy.entity", "Tippy", CVar.SERVER | CVar.REPLICATED); /* * DEBUG */ /// /// A simple toggle to test OptionsVisualizerComponent. /// public static readonly CVarDef DebugOptionVisualizerTest = CVarDef.Create("debug.option_visualizer_test", false, CVar.CLIENTONLY); /// /// Set to true to disable parallel processing in the pow3r solver. /// public static readonly CVarDef DebugPow3rDisableParallel = CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); } }