Rust AI, NPC and animal convars
Quick answer: these are the Rust server convars for AI, NPCs, scientists, turrets, wildlife and farm animals, with the value each starts at. Type a name and a value in the server console or RCON, or put that line in server.cfg to apply it at every start. This list comes straight from a Rust dedicated server (Rust build 26431843, read 2026-11-06), and it is refreshed after every Rust update.
A Saved variable is written to cfg/serverauto.cfg by server.writecfg and read back at the next start, before server.cfg. The common ones are on Rust server variables. The other groups: Server and gameplay variables, Antihack, network and RCON variables, World, event and vehicle variables.
| Variable | Default | Saved | What it does |
|---|---|---|---|
ai.accuratevisiondistance | True | When enabled, vision distance checks use per-bone raycasts for accuracy; disable to use a single origin ray for performance | |
ai.aimedatangle | 10 | The angle under which the AI will think it’s being aimed at at by a player | |
ai.animal_ignore_food | True | If animal_ignore_food is true, animals will not sense food sources or interact with them (server optimization). (default: true) | |
ai.critters_frametime | 0.2 | Frame time budget in milliseconds for the critter FSM ticks | |
ai.critters_startle_distance | 0.5 | How close can a player get before a critter gets startled and runs away | |
ai.debug_seed | 0 | Seeds every Gen2 NPC’s random numbers from this and the order it spawned in, so a run repeats. 0 seeds each one at random | |
ai.debugmovedraw | True | Yes | Whether ai.selectnpc and ai.movenpc draw their DDraw markers - turn it off to keep the view clean while commanding NPCs. |
ai.debugmovegait | run | Yes | Gait ai.movenpc uses when called without one - set it to walk to keep commanded NPCs at walking speed. One of: sneak, walk, jog, run, sprint, fullsprint |
ai.debugmovespacing | 2 | Yes | Gap in metres between the destinations ai.movenpc hands out when more than one NPC is selected, so they don’t all path to the same point. |
ai.defaultinterpolationdelay | 0.1 | Default network interpolation delay in seconds applied to NPC entity movement; lower values reduce visual lag at the cost of jitter on unstable connections | |
ai.designingenabled | False | Yes | |
ai.effectaiweapons | False | When enabled, AI weapons deal real damage when fired; disable to make NPC weapons harmless for testing AI behaviour safely | |
ai.frametime | 5 | Target frame time budget in seconds for AI tick processing; default is 5s in production (1s in editor) to cap CPU usage per AI frame | |
ai.fsm_frametime_animals | 2 | Frame time budget in milliseconds for wild animal FSM ticks, on top of what the scientists left unused | |
ai.fsm_frametime_livestock | 0.2 | Frame time budget in milliseconds for livestock FSM ticks, on top of what the scientists and animals left unused | |
ai.fsm_frametime_scientists | 0.5 | Frame time budget in milliseconds for scientist FSM ticks. Whatever they leave unused rolls down to the animals, then the livestock | |
ai.groups | True | When enabled, AI group logic is active allowing NPCs to coordinate as squads; disable to make all NPCs act as independent individuals | |
ai.ignoreplayers | False | When enabled, AI entities ignore player presence and will not target or react to players; useful for building/testing without NPC interference | |
ai.logissues | False | When enabled, logs AI-related warnings and issues to the server console; useful for diagnosing pathfinding and brain errors | |
ai.move | True | When enabled, AI entities move toward their NavMesh destinations; disable to freeze NPC movement while keeping brain logic running | |
ai.nav_carve_height | 2 | The height of the carve volume. (default: 2) | |
ai.nav_carve_min_base_size | 2 | The minimum size we allow a carving volume to be. (default: 2) | |
ai.nav_carve_min_building_blocks_to_apply_optimization | 25 | The minimum number of building blocks a building needs to consist of for this optimization to be applied. (default: 25) | |
ai.nav_carve_size_multiplier | 4 | The size multiplier applied to the size of the carve volume. The smaller the value, the tighter the skirt around foundation edges, but too small and animals can attack through walls. (default: 4) | |
ai.nav_carve_use_building_optimization | False | If nav_carve_use_building_optimization is true, we attempt to reduce the amount of navmesh carves for a building. (default: false) | |
ai.navthink | True | When enabled, AI entities update their NavMesh agent destinations each tick; disable to freeze AI movement while keeping brain logic running | |
ai.npc_alertness_drain_rate | 0.01 | npc_alertness_drain_rate define the rate at which we drain the alertness level of an NPC when there are no enemies in sight. (Default: 0.01) | |
ai.npc_alertness_to_aim_modifier | 0.5 | This is multiplied with the current alertness (0-10) to decide how long it will take for the NPC to deliberately miss again. (default: 0.33) | |
ai.npc_alertness_zero_detection_mod | 0.5 | npc_alertness_zero_detection_mod define the threshold of visibility required to detect an enemy when alertness is zero. (Default: 0.5) | |
ai.npc_check_spawner_is_on_navmesh | True | When enabled, NPC spawn points are validated to ensure they are on a valid NavMesh position before spawning; prevents NPCs from spawning in unreachable locations | |
ai.npc_cover_compromised_cooldown | 10 | npc_cover_compromised_cooldown defines how long a cover point is marked as compromised before it’s cleared again for selection. (default: 10) | |
ai.npc_cover_info_tick_rate_multiplier | 20 | The rate at which we gather information about available cover points. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 20) | |
ai.npc_cover_path_vs_straight_dist_max_diff | 2 | npc_cover_path_vs_straight_dist_max_diff defines what the maximum difference between straight-line distance and path distance can be when evaluating cover points. (default: 2) | |
ai.npc_cover_use_path_distance | True | If npc_cover_use_path_distance is set to true then npcs will look at the distance between the cover point and their target using the path between the two, rather than the straight-line distance. | |
ai.npc_deliberate_hit_randomizer | 0.85 | The percentage away from a maximum miss the randomizer is allowed to travel when shooting to deliberately hit the target (we don’t want perfect hits with every shot). (default: 0.85f) | |
ai.npc_deliberate_miss_offset_multiplier | 1.25 | The offset with which the NPC will maximum miss the target. (default: 1.25) | |
ai.npc_deliberate_miss_to_hit_alignment_time | 1.5 | The time it takes for the NPC to deliberately miss to the time the NPC tries to hit its target. (default: 1.5) | |
ai.npc_door_trigger_size | 1.5 | npc_door_trigger_size defines the size of the trigger box on doors that opens the door as npcs walk close to it (default: 1.5) | |
ai.npc_enable | True | If npc_enable is set to false then npcs won’t spawn. (default: true) | |
ai.npc_families_no_hurt | True | If npc_families_no_hurt is true, npcs of the same family won’t be able to hurt each other. (default: true) | |
ai.npc_gun_noise_silencer_modifier | 0.15 | The modifier by which a silencer reduce the noise that a gun makes when shot. (Default: 0.15) | |
ai.npc_htn_player_base_damage_modifier | 1.15 | Baseline damage modifier for the new HTN Player NPCs to nerf their damage compared to the old NPCs. (default: 1.15f) | |
ai.npc_htn_player_frustration_threshold | 3 | npc_htn_player_frustration_threshold defines where the frustration threshold for NPCs go, where they have the opportunity to change to a more aggressive tactic. (default: 3) | |
ai.npc_ignore_chairs | True | If npc_ignore_chairs is true, npcs won’t care about seeking out and sitting in chairs. (default: true) | |
ai.npc_junkpile_dist_aggro_gate | 8 | npc_junkpile_dist_aggro_gate define at what range (or closer) a junkpile scientist will get aggressive. (Default: 8) | |
ai.npc_junkpilespawn_chance | 0.07 | defines the chance for scientists to spawn at NPC junkpiles. (Default: 0.1) | |
ai.npc_max_junkpile_count | 30 | npc_max_junkpile_count define how many npcs can spawn into the world at junkpiles at the same time (does not include monuments) (Default: 30) | |
ai.npc_max_population_military_tunnels | 3 | npc_max_population_military_tunnels defines the size of the npc population at military tunnels. (default: 3) | |
ai.npc_max_roam_multiplier | 3 | This is multiplied with the max roam range stat of an NPC to determine how far from its spawn point the NPC is allowed to roam. (default: 3) | |
ai.npc_only_hurt_active_target_in_safezone | True | If npc_only_hurt_active_target_in_safezone is true, npcs won’t any player other than their actively targeted player when in a safe zone. (default: true) | |
ai.npc_patrol_point_cooldown | 5 | npc_patrol_point_cooldown defines the cooldown time on a patrol point until it’s available again (default: 5) | |
ai.npc_reasoning_system_tick_rate_multiplier | 1 | The rate at which we tick the reasoning system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 1) | |
ai.npc_respawn_delay_max_military_tunnels | 1920 | npc_respawn_delay_max_military_tunnels defines the maximum delay between spawn ticks at military tunnels. (default: 1920) | |
ai.npc_respawn_delay_min_military_tunnels | 480 | npc_respawn_delay_min_military_tunnels defines the minimum delay between spawn ticks at military tunnels. (default: 480) | |
ai.npc_sensory_system_tick_rate_multiplier | 5 | The rate at which we tick the sensory system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 5) | |
ai.npc_spawn_on_cargo_ship | True | Spawn NPCs on the Cargo Ship. (default: true) | |
ai.npc_spawn_on_deep_sea_islands | True | Spawn NPCs on deep sea islands (default: false) | |
ai.npc_spawn_on_junkpile | True | Spawn NPCs on junkpiles (default: true) | |
ai.npc_spawn_per_tick_max_military_tunnels | 1 | npc_spawn_per_tick_max_military_tunnels defines how many can maximum spawn at once at military tunnels. (default: 1) | |
ai.npc_spawn_per_tick_min_military_tunnels | 1 | npc_spawn_per_tick_min_military_tunnels defineshow many will minimum spawn at once at military tunnels. (default: 1) | |
ai.npc_speed_crouch_run | 0.25 | npc_speed_crouch_run define the speed of an npc when in the crouched run state, and should be a number between 0 and 1. (Default: 0.25) | |
ai.npc_speed_crouch_walk | 0.1 | npc_speed_walk define the speed of an npc when in the crouched walk state, and should be a number between 0 and 1. (Default: 0.1) | |
ai.npc_speed_run | 0.4 | npc_speed_walk define the speed of an npc when in the run state, and should be a number between 0 and 1. (Default: 0.4) | |
ai.npc_speed_sprint | 1 | npc_speed_walk define the speed of an npc when in the sprint state, and should be a number between 0 and 1. (Default: 1.0) | |
ai.npc_speed_walk | 0.18 | npc_speed_walk define the speed of an npc when in the walk state, and should be a number between 0 and 1. (Default: 0.18) | |
ai.npc_use_new_aim_system | True | If npc_use_new_aim_system is true, npcs will miss on purpose on occasion, where the old system would randomize aim cone. (default: true) | |
ai.npc_use_thrown_weapons | True | If npc_use_thrown_weapons is true, npcs will throw grenades, etc. This is an experimental feature. (default: true) | |
ai.npc_valid_aim_cone | 0.8 | npc_valid_aim_cone defines how close their aim needs to be on target in order to fire. (default: 0.8) | |
ai.npc_valid_mounted_aim_cone | 0.92 | npc_valid_mounted_aim_cone defines how close their aim needs to be on target in order to fire while mounted. (default: 0.92) | |
ai.npcbarksenabled | False | ||
ai.npchealthmultiplier | 1 | Global health multiplier applied to all NPCs; 1.0 = normal, 2.0 = double health; useful for difficulty scaling without modifying individual NPC prefabs | |
ai.npcswimming | True | When enabled, NPCs can enter and swim in water; disable to prevent all NPCs from entering water bodies | |
ai.ocean_critters_movement_frametime | 0.2 | Frame time budget in milliseconds for the ocean critters’ swimming movement | |
ai.ocean_patrol_path_iterations | 100000 | Maximum number of path-finding iterations used when calculating NPC ocean patrol routes; higher values produce better paths at more CPU cost | |
ai.scientist_spawners_enabled | True | Do any kind of scientists spawn on the map (default: true) | |
ai.sensetime | 1 | How frequently in seconds the NPC sensory system updates its awareness of nearby entities; higher values reduce CPU cost but make NPCs slower to react | |
ai.setdestinationsamplenavmesh | True | When enabled, NavMesh destinations are sampled to the nearest valid NavMesh position before being set; prevents NPCs getting stuck off-mesh | |
ai.showstateflashduration | 1.5 | How long (in seconds) a value that has just moved stays coloured in the ai.showState read-out; 0 stops it colouring at all | |
ai.sleepwake | True | When enabled, AI information zones can sleep inactive NPCs and wake them when players approach; disable to keep all NPCs awake at all times | |
ai.smokegrenadenpcradius | 4 | Radius in metres within which a thrown smoke grenade suppresses NPC vision and targeting | |
ai.spliceupdates | True | When enabled, AI updates are spliced across multiple frames to spread CPU cost; disable to run all AI updates synchronously every tick | |
ai.think | True | When enabled, AI entities run their brain Think() logic each tick; disable to freeze all AI decision-making while leaving entities in place | |
ai.tickrate | 5 | Number of AI think ticks per second; default is 5 (every 200ms); higher values make AI more responsive at higher CPU cost | |
ai.usecalculatepath | True | When enabled, NavMesh path calculation uses the full CalculatePath API; disable to use the simpler SetDestination fallback only | |
ai.usegrid | True | When enabled, AI uses the spatial grid for entity queries; disable to fall back to brute-force entity iteration for debugging spatial query issues | |
ai.usesetdestinationfallback | True | When enabled, falls back to SetDestination if CalculatePath fails to find a valid path to the target | |
ai.watchedangle | 50 | The angle under which the AI will think it’s being watched by another entity |
aimanager
Section titled “aimanager”| Variable | Default | Saved | What it does |
|---|---|---|---|
aimanager.ai_dormant | True | If ai_dormant is true, any npc outside the range of players will render itself dormant and take up less resources, but wildlife won’t simulate as well. | |
aimanager.ai_dormant_max_wakeup_per_tick | 30 | ai_dormant_max_wakeup_per_tick defines the maximum number of dormant agents we will wake up in a single tick. (default: 30) | |
aimanager.ai_htn_animal_tick_budget | 4 | ai_htn_animal_tick_budget defines the maximum amount of milliseconds ticking htn animal agents are allowed to consume. (default: 4 ms) | |
aimanager.ai_htn_player_junkpile_tick_budget | 4 | ai_htn_player_junkpile_tick_budget defines the maximum amount of milliseconds ticking htn player junkpile agents are allowed to consume. (default: 4 ms) | |
aimanager.ai_htn_player_tick_budget | 4 | ai_htn_player_tick_budget defines the maximum amount of milliseconds ticking htn player agents are allowed to consume. (default: 4 ms) | |
aimanager.ai_htn_use_agency_tick | True | If ai_htn_use_agency_tick is true, the ai manager’s agency system will tick htn agents at the ms budgets defined in ai_htn_player_tick_budget and ai_htn_animal_tick_budget. If it’s false, each agent registers with the invoke system individually, with no frame-budget restrictions. (default: true) | |
aimanager.ai_to_player_distance_wakeup_range | 160 | If an agent is beyond this distance to a player, it’s flagged for becoming dormant. | |
aimanager.nav_disable | False | If set to true the navmesh won’t generate.. which means Ai that uses the navmesh won’t be able to move | |
aimanager.nav_obstacles_carve_state | 2 | nav_obstacles_carve_state defines which obstacles can carve the terrain. 0 - No carving, 1 - Only player construction carves, 2 - All obstacles carve. | |
aimanager.nav_wait | True | If true we’ll wait for the navmesh to generate before completely starting the server. This might cause your server to hitch and lag as it generates in the background. | |
aimanager.pathfindingiterationsperframe | 100 | The maximum amount of nodes processed each frame in the asynchronous pathfinding process. Increasing this value will cause the paths to be processed faster, but can cause some hiccups in frame rate. Default value is 100, a good range for tuning is between 50 and 500. | |
aimanager.setdestination_navmesh_failsafe | False | If set to true, npcs will attempt to place themselves on the navmesh if not on a navmesh when set destination is called. |
basenavigator
Section titled “basenavigator”| Variable | Default | Saved | What it does |
|---|---|---|---|
basenavigator.basenavmovementframeinterval | 2 | How many frames between base navigation movement updates | |
basenavigator.maxstepupdistance | 1.7 | The max step-up height difference for pet base navigation | |
basenavigator.navtypedistance | 1 | ||
basenavigator.navtypeheightoffset | 0.5 | ||
basenavigator.stucktriggerduration | 10 | How long we are not moving for before trigger the stuck event |
beeswarmai
Section titled “beeswarmai”| Variable | Default | Saved | What it does |
|---|---|---|---|
beeswarmai.breakrange | 15 | Range to leave current target alone (should be higher than search) | |
beeswarmai.disable | False | ||
beeswarmai.flamesettingdistance | 5.5 | How far away fire has to be to set the swarm on fire | |
beeswarmai.killwithouttargettime | 150 | How long a swarm will stick around without a target | |
beeswarmai.searchrange | 10 | Range to find new targets | |
beeswarmai.think_budget_ms | 0.1 | How many milliseconds to spend on thinking per frame | |
beeswarmai.waterthreshold | 0.6 | How much water a player needs to be in to be ignored |
birdflock
Section titled “birdflock”| Variable | Default | Saved | What it does |
|---|---|---|---|
birdflock.corpseinterestpriority | -1 | How much crow flocks want to circle corpses over other interest points. Below 0 loses to anything else. | |
birdflock.crowpopulation | 0.4444444 | Crow flocks per square km. Default is four per 3km map. | |
birdflock.explosionstartleradius | 300 | How far away an explosion sends bird flocks fleeing, in metres. | |
birdflock.seagullpopulation | 0.4444444 | Seagull flocks per square km. Default is four per 3km map. |
boatai
Section titled “boatai”| Variable | Default | Saved | What it does |
|---|---|---|---|
boatai.allow_sleeping | False | When enabled, boat AI entities can enter a sleep state when no players are nearby; reduce CPU usage for idle boats | |
boatai.avoidance_update_interval | 0.8 | How often to update the avoidance cache. Lower number means a more accurate cache at the expensive of performance. | |
boatai.boat_ai_frame_budget_ms | 0.3 | Yes | How long per frame to spend on boat ai |
boatai.draw_debugs | False | When enabled, draws DDraw visualisations of boat AI steering, avoidance, and pathfinding state | |
boatai.enable_mount_sync_distance | 750 | Distance players need to be to start syncing mounted seats | |
boatai.max_speed_percentage | 0.9 | Yes | Maximum speed as a fraction of the boat’s top speed that AI-controlled boats will use; default 0.9; saved and shown in admin UI |
boatai.print_debugs | False | When enabled, logs verbose boat AI decision-making output to the server console each AI tick | |
boatai.roaming_egress_minutes | 10 | Minutes a roaming boat has to sail off the map before it is removed where it is | |
boatai.seconds_until_sleep | 30 | Number of seconds a boat AI will wait without player interaction before entering sleep mode; default 30s |
livestock
Section titled “livestock”| Variable | Default | Saved | What it does |
|---|---|---|---|
livestock.agescale | 1 | Multiplier applied to how long a livestock infant takes to grow up; 0.5 = grow up twice as fast, 0 = disable aging entirely | |
livestock.allowmounting | True | Whether livestock can be mounted into vehicle flatbeds | |
livestock.breedcooldown | 600 | How long (in seconds) a male livestock animal waits before breeding again, counted from conception. The female’s is derived from how long her calf takes to grow up | |
livestock.breedingenabled | True | Whether livestock look for a mate on their own; disabling it leaves livestock.makepregnant working | |
livestock.breedingfloorperhead | 8 | Floor in square metres each head needs in a pen to breed and to have full personal space. A 2x2 of foundations floods about 27, so it houses three | |
livestock.breedpausecondition | 0.6 | Condition at or below which a livestock animal stops being willing to breed | |
livestock.breedresumecondition | 0.7 | Condition at or above which a livestock animal that stopped breeding is willing again | |
livestock.breedsearchradius | 30 | How far (in metres) a male livestock animal looks for a mate | |
livestock.calmedtrustfloor | 60 | The seconds a livestock animal credits to a player under a livestock handling effect; kept inside the tolerated band on purpose | |
livestock.calvingcooldownscale | 1 | Scales how long a mother waits after calving before she can carry again. 1 is one calf grown up per birth | |
livestock.conditionfallseconds | 3600 | How many seconds a totally neglected livestock animal takes to fall from full health to 1 hp, or to dead when it has no personal space left | |
livestock.conditionfullcontentment | 1 | Contentment at which a livestock animal is in full condition; below it the condition target falls in proportion, so a herd held at the shelter floor sits at half condition | |
livestock.conditionriseseconds | 3600 | How many seconds a well kept livestock animal takes to heal from nothing back to full health | |
livestock.curiousbreakdistance | 20 | How far (in metres) a player can get before a curious livestock animal gives up following them | |
livestock.curiouschance | 0.2 | The share of livestock born curious, so they follow a player they know without needing a lead; 0 disables curious animals | |
livestock.debugcondition | False | Adds the condition and its breeding band to a livestock animal’s ai.showState read-out | |
livestock.debugdaybudget | False | Adds the day budget shares to a livestock animal’s ai.showState read-out | |
livestock.debuggait | False | Adds walk speed and gait penalty to a livestock animal’s ai.showState read-out | |
livestock.debuggenes | False | Adds an animal’s genes to its ai.showState read-out | |
livestock.debugspecials | False | Logs each special livestock animal as it spawns | |
livestock.defendreactiontime | 5 | How recently (in seconds) a player the herd counts as one of its own must have been attacked for a bull to come after whoever is doing it; 0 stops him defending players | |
livestock.devnamechance | 0 | The chance a freshly named livestock animal is given a developer’s handle instead of an ordinary name; one named that way never founds a dynasty | |
livestock.drawradius | 60 | How far (in metres) around you livestock.drawpens and livestock.drawherds draw | |
livestock.dungconditionfloor | 0.15 | Condition below which a livestock animal stops dunging at all. A starving animal never dungs whatever this says | |
livestock.dungconditionfull | 0.8 | Condition at or above which a livestock animal dungs at its full authored rate | |
livestock.dungslowestscale | 3 | How much longer a livestock animal at the condition floor waits between dung drops than one in its prime | |
livestock.dynasticnames | True | Whether a newborn livestock animal takes its same-sex parent’s name one generation on, so a line reads Melk then Melk Junior then Melk the 3rd | |
livestock.estimatestandingshare | 0.38 | The share of its waking day a livestock animal is assumed to spend on its feet when a trough’s remaining time is estimated | |
livestock.familiaritydistresspenalty | 30 | How many seconds of familiarity a player loses with the herd around an animal they hurt | |
livestock.familiarityhurtpenalty | 60 | How many seconds of familiarity a player loses with a livestock animal they hurt | |
livestock.familiarityradius | 20 | How close (in metres) a player has to be for a livestock animal to count the time; must sit inside the animal’s sense radius; 0 disables familiarity | |
livestock.familiarityrate | 1 | Multiplies how fast livestock familiarity builds up; 20 makes a five minute bond take fifteen seconds. For testing, leave at 1 for play | |
livestock.freerangelinkradius | 40 | How far (in metres) apart two livestock animals out of a pen can stand and still be linked into one free range herd for livestock.maxFreeRangeHerd | |
livestock.friskythreshold | 0.85 | How well met a livestock animal’s worst need must be (0-1) before it will canter about for the fun of it; above 1 disables it | |
livestock.genebadchance | 0.3 | The chance each allele of a wild livestock animal is rolled Bad; the rest come out Ok | |
livestock.genedungbad | 0.6 | How often a Bad Dung livestock animal drops dung, as a share of an average one | |
livestock.genedunggood | 1.6 | How often a Good Dung livestock animal drops dung, as a multiple of an average one | |
livestock.genefertilitybad | 0.65 | How often a Bad Fertility livestock animal breeds, as a share of an average one; litter size never falls below one | |
livestock.genefertilitygood | 1.6 | How often a Good Fertility livestock animal breeds, and how many young it carries, as a multiple of an average one | |
livestock.genegoodchance | 0.2 | The chance each allele of a wild livestock animal is rolled Good | |
livestock.genehardinessbad | 0.667 | What an average animal’s food, water, room, grass and sun needs are divided by for a Bad Hardiness livestock animal, so below 1 it needs more of everything | |
livestock.genehardinessgood | 2 | What an average animal’s food, water, room, grass and sun needs are divided by for a Good Hardiness livestock animal, so at 2 it gets by on half | |
livestock.genemutationchance | 0 | The chance each inherited livestock allele is rerolled from scratch instead of coming from its parent; leaving this at 0 is what makes breeding predictable enough to reason about | |
livestock.genesenabled | True | Whether livestock genes do anything; off makes every animal an average one without touching the genomes they carry | |
livestock.geneyieldbad | 0.6 | How much milk or wool a Bad Yield livestock animal gives, as a share of an average one | |
livestock.geneyieldgood | 1.6 | How much milk or wool a Good Yield livestock animal gives, as a multiple of an average one | |
livestock.grazehelpingmax | 50 | The longest time (in seconds) a livestock animal of any species grazes in one helping, at a trough or on grass | |
livestock.grazehelpingmin | 30 | The shortest time (in seconds) a livestock animal of any species grazes in one helping, at a trough or on grass | |
livestock.grudgeduration | 45 | How long (in seconds) a livestock animal stays wary of a player that hurt it or one of its herd, moving off when they come close again; 0 disables grudges | |
livestock.grudgerange | 8 | How close (in metres) a remembered aggressor has to get before a wary livestock animal moves off | |
livestock.inbredscale | 0.5 | What every gene’s slider position is multiplied by on an inbred livestock animal, for its coat and for what it produces alike. At 0.5 a Good gene looks and performs as Ok and an Ok gene falls halfway to Bad. An animal is inbred when both its lineage markers match | |
livestock.leadbreakdistance | 15 | How far (in metres) a player can get from an animal they are leading before the lead breaks. 0 never breaks it | |
livestock.lethalfloorperhead | 4.5 | Floor in square metres per head at or below which a pen leaves livestock no personal space at all, which kills them. Half a foundation by default | |
livestock.maxfreerangeherd | 5 | How many livestock animals of one species can share open ground, linked through any within livestock.freeRangeLinkRadius of each other, litters on the way counted at their largest, before none of them breeds, 0 never caps | |
livestock.maxlittersize | 3 | The most young one livestock birth can ever produce, however good the mother’s Fertility is | |
livestock.maxperspecies | 300 | How many livestock animals of one species a server holds before none of that species breeds. Cattle and sheep are counted apart against the same number, 0 never caps | |
livestock.maxtrust | 900 | The most seconds of trust a player can build with a livestock animal, which is the full bond: it defends you. Only its owner reaches it, see livestock.nonOwnerTrustShare | |
livestock.motherlyduration | 300 | How long (in seconds) a mother stands her ground for her own calf after something has threatened it, rather than running like any other cow; 0 disables maternal defence | |
livestock.namelocale | en | The language a livestock animal is named in when its first owner is offline or speaks a language the game has no names for | |
livestock.needsframetime | 0.1 | Main thread time budget per frame in milliseconds for the livestock needs queue | |
livestock.nonownertrustshare | 0.95 | The share of livestock.maxTrust a player can reach with an animal they do not own, kept short of 1 so only the owner has the full bond and is defended. At 1 anybody can | |
livestock.panelage | True | Whether a farm animal’s status panel says how long it has lived while owned | |
livestock.panelalleles | False | Whether both copies of every livestock gene are shown rather than only the one the animal expresses. Reveals what an animal carries without breeding it | |
livestock.paneldung | False | Whether a farm animal’s status panel shows how often it dungs, after its genes | |
livestock.panelgender | True | Whether the male and female symbols are shown next to a farm animal’s name on its status panel | |
livestock.panelgenes | False | Whether the gene discs are shown on the livestock status panel, along with the inbred warning that explains them | |
livestock.panelpotential | True | Whether a farm animal’s status panel shows its potential, how content it was raised, which its sale price is multiplied by | |
livestock.paneltrust | True | Whether a farm animal’s status panel shows how much it trusts you, as one segment per band of the trust ladder | |
livestock.panelyield | False | Whether the milk or wool row of a farm animal’s status panel also says what it produces and how often, after its genes | |
livestock.potentialfallseconds | 900 | How many seconds a totally unhappy young livestock animal takes to drop its potential from full to nothing | |
livestock.potentialriseseconds | 600 | How many seconds a perfectly happy young livestock animal takes to raise its potential from nothing to full | |
livestock.potentialunbredcap | 0 | The most potential a livestock animal with no mother can reach, from 0 to 1. Covers animals bought from a vendor, caught wild or spawned in | |
livestock.priceconditionfloor | 0.15 | Condition at or below which a livestock animal sells for the least a vendor will pay | |
livestock.priceconditionfull | 0.8 | Condition at or above which a livestock animal sells for the vendor’s full price | |
livestock.pricefullqualityscale | 1.5 | The livestock sale value that counts as full quality, which is a full budget for the vendor’s sale table | |
livestock.pricegeneweight | 1 | How far a livestock animal’s genes move what a vendor pays, where 1 pays its full gene advantage and 0 prices every animal as an average one | |
livestock.priceworstscale | 0.4 | What a livestock animal at the condition floor sells for, as a share of the vendor’s full price | |
livestock.profile | False | Times how long livestock spend in their needs queue and FSM tick, for livestock.census. Off by default because the measurement itself costs | |
livestock.remoteeatafter | 60 | How long (in seconds) a hungry livestock animal fails to get a place at a stocked trough before it eats from it where it stands | |
livestock.remoteeatdistance | 6 | How far (in metres) from a trough a livestock animal may stand to eat from it without a place of its own | |
livestock.shelterneedfloor | 0.5 | The least a livestock animal’s grass and sun needs count for in its overall mood, so a floored or roofed barn herd is kept below full rather than at nothing. The needs themselves still read down to 0 | |
livestock.sleepychance | 0.2 | The share of livestock born sleepy, so once grown they spend most of the day lying down away from the herd. An animal is never curious and sleepy at once; 0 disables sleepy animals | |
livestock.specialchance | 0.005 | The chance each wild livestock spawn is one of the named special animals; births, purchases, age-ups and saves never roll for one | |
livestock.starvedsearchinterval | 30 | How often (in seconds) a livestock animal lying down for want of food or water looks for some again | |
livestock.sunfullshare | 0.5 | The share of a floor’s sampled polys the sun must reach at some hour of a simulated day for the sun need to read full | |
livestock.sunresampleminutes | 30 | How many minutes a floor keeps its sun verdict before it is measured again, for shade that arrives without a navmesh change | |
livestock.sunsamplehours | 12 | How many sun positions between sunrise and sunset each sampled poly is tested against | |
livestock.sunsamplepolys | 64 | How many of a floor’s navmesh polys are sampled for sunlight when it is measured | |
livestock.trustfloor | 60 | The seconds a livestock animal credits to its owner’s team and to the cupboard authed and door code sharers of its home; kept inside the tolerated band on purpose | |
livestock.trusttofollow | 5 | How many seconds near a livestock animal before a curious one follows you without a lead | |
livestock.trusttolead | 300 | How many seconds near a livestock animal before it accepts being led, milked or sheared by you | |
livestock.trusttotolerate | 30 | How many seconds near a livestock animal before a bull stops squaring up at you | |
livestock.vendorannoyedtime | 900 | How many seconds a livestock vendor refuses to look at goods whose every offer was turned down | |
livestock.vendorgenerouschance | 0.05 | The chance each livestock offer is a generous one, where the vendor pays for a better animal than the one in front of him; 0 disables it | |
livestock.vendorgenerousmax | 0.25 | The most a generous livestock offer lifts an animal’s quality by | |
livestock.vendorgenerousmin | 0.1 | The least a generous livestock offer lifts an animal’s quality by | |
livestock.vendorlowpotential | 0.5 | Potential below which a livestock vendor opens his first offer by saying the animal was neglected growing up; 0 disables it | |
livestock.vendoroffercount | 3 | How many offers a livestock vendor makes for one animal before he is annoyed and stops buying | |
livestock.vendorofferitems | 2 | How many items a livestock vendor picks for one offer before paying the rest of its value in the sale table’s fallback | |
livestock.vendoroffervariance | 0.05 | How far a livestock vendor’s offer can swing either side of what an animal is really worth | |
livestock.vendorwoollotsize | 400 | How much wool counts as a full lot, which is a full budget for the vendor’s wool table | |
livestock.vendorwoolminimum | 25 | How much wool a player must be carrying before a livestock vendor will haggle over it at all |
| Variable | Default | Saved | What it does |
|---|---|---|---|
npc.vendor_attack_heli_enabled | True | ||
npc.vendor_hab_enabled | True | ||
npc.vendor_minicopter_enabled | True | ||
npc.vendor_rhib_enabled | True | ||
npc.vendor_rowboat_enabled | True | ||
npc.vendor_scrap_heli_enabled | True | ||
npc.vendor_sub_duo_enabled | True | ||
npc.vendor_sub_solo_enabled | True |
npcvendingmachine
Section titled “npcvendingmachine”| Variable | Default | Saved | What it does |
|---|---|---|---|
npcvendingmachine.dynamicpricingenabled | True | Yes | Whether to run the the dynamic pricing system |
npcvendingmachine.maximumpricemultiplier | 2 | Yes | The maximum point that a price can increase to (2 = 200%) |
npcvendingmachine.minimumpricemultiplier | 0.5 | Yes | The Minimum point that the price can drop to (0.5 = 50% off) |
npcvendingmachine.pricedecreaseamount | 0.05 | Yes | How much to decrease the price for if it is underselling (0.05 = 5%) |
npcvendingmachine.priceincreaseamount | 0.1 | Yes | How much to increase the price by if it is selling a lot (0.05 = 5%) |
npcvendingmachine.priceupdatefrequencybiweekly | 2 | Yes | How many realtime hours are checked when looking for price increases. Max 72 (10 days), min 0.5 (half an hour) |
npcvendingmachine.priceupdatefrequencydefault | 3 | Yes | How many realtime hours are checked when looking for price increases. Max 72 (10 days), min 0.5 (half an hour) |
npcvendingmachine.priceupdatefrequencyweekly | 1 | Yes | How many realtime hours are checked when looking for price increases. Max 72 (10 days), min 0.5 (half an hour) |
npcvendingmachine.startingpricemultiplier | 2 | Yes | What discount surcharge should be applied to items when the server starts |
petbrain
Section titled “petbrain”| Variable | Default | Saved | What it does |
|---|---|---|---|
petbrain.controldistance | 100 | ||
petbrain.drownindeepwater | True | ||
petbrain.drowntimer | 15 | ||
petbrain.idlewhenownermounted | True | ||
petbrain.idlewhenownerofflineordead | True |
rustnav
Section titled “rustnav”| Variable | Default | Saved | What it does |
|---|---|---|---|
rustnav.addtilebudgetms | 2 | Main-thread time budget per frame (ms) for adding built navmesh tiles to their navmesh. A base rebuild lands dozens of results in one frame and the rest waits for the next one. 0 or less adds every result that is ready, which is what shipped before the budget existed | |
rustnav.bakestatsenabled | False | Collect navmesh bake statistics (rustnav.bakestats to read them). Defaults on in the editor, off on servers; flip on live to diagnose bake issues, then reset with rustnav.bakestats true | |
rustnav.collectbudgetms | 1 | Main-thread time budget per frame (ms) for navmesh tile geometry collection. The full-map bake wall clock is roughly tiles / (budget-worth of tiles per frame) / fps, so raise this while baking to trade frame time for bake speed | |
rustnav.detailsampledistmult | 12 | Detail mesh sample distance as a multiple of cellSize (Recast default 6). Larger = cheaper detail mesh, coarser surface height. Applies to tiles built after the change | |
rustnav.detailsamplemaxerrormult | 1 | Detail mesh max sample error as a multiple of cellHeight (Recast default 1). Larger = cheaper detail mesh, more height error. Applies to tiles built after the change | |
rustnav.doorreassertspertick | 24 | How many doors re-assert their gate state per navmesh drain tick. A rebuilt tile bakes its apertures shut, so every open or npc-openable door over the rebuilt area has to write its state again, and a megabase queues hundreds of them at once. 0 or less applies the whole queue in one frame, which is what shipped before the budget existed | |
rustnav.drawkbps | 512 | Max KB per second of navmesh tiles streamed to each rustnav.draw viewer | |
rustnav.drawmanifestinterval | 10 | ||
rustnav.drawradius | 100 | ||
rustnav.drawrefreshrate | 0.25 | ||
rustnav.enableverboselogs | False | ||
rustnav.legacybuild | False | A/B kill switch: build navmesh tiles with the stock pre optimization algorithms (clip rasterizer, full ledge and region rescans, unfused filters). Combine with detailsampledistmult 6 to approximate the old build end to end. Applies to tiles built after the change | |
rustnav.maxshoredistance | 100 | Metres of open water past which default navmesh tiles are dropped instead of baked. A tile only drops when every point in it is that far from land, so shores keep their navmesh and so do rivers and lakes, which are never that wide. Independent navmeshes (oilrigs, tropical islands, ghost ships) are never touched. 0 or less bakes the open sea like before. Applies to tiles queued after the change | |
rustnav.numthreads | 4 | Navmesh tile builder worker thread count. Applied when the builder is (re)created - at boot, or via rustnav.setnumthreads at runtime. ~half the cores is the sweet spot for full-map bakes | |
rustnav.savecompression | True | LZ4-compress navmesh saves (smaller .navmesh files, no extra save time) | |
rustnav.savedelta | True | Append only the tiles that changed to the navmesh file instead of rewriting all of it. The first save after a boot or a rebuild is always a full write, and a full write also happens once the appended part grows past rustnav.savedeltabudget | |
rustnav.savedeltabudget | 0.5 | How large the appended part of the navmesh file may grow, as a fraction of the full file, before the next save rewrites the whole thing. A save whose changed tiles are a larger share of the mesh than this rewrites it too. Bounds both file growth and boot load time. 0 or less removes the bound, to stop appending altogether use rustnav.savedelta false | |
rustnav.savethreads | 0 | Worker threads for navmesh save/load compression. 0 = auto | |
rustnav.savewarnms | 1000 | Log the navmesh save completion line as a warning past this many milliseconds. 0 or less never warns |
sentry
Section titled “sentry”| Variable | Default | Saved | What it does |
|---|---|---|---|
sentry.debugpreventduplicates | True | Prevents auto turrets getting added more than once to the IO queue | |
sentry.hostileduration | 120 | how long until something is considered hostile after it attacked | |
sentry.interferenceradius | 40 | radius to check for other turrets | |
sentry.maxinterference | 12 | max interference from other turrets | |
sentry.scantimer | 1 | How quickly can a turret acquire a potential target. Less is faster, but perf taxing | |
sentry.targetall | False | target everyone regardless of authorization |
wildlifehazard
Section titled “wildlifehazard”| Variable | Default | Saved | What it does |
|---|---|---|---|
wildlifehazard.chancetorepositionmultiplier | 1 | Global multiplier applied to the per-tick probability that a wildlife hazard attempts to reposition | |
wildlifehazard.clienttickrate | 0.1 | Interval in seconds between client-side tick updates for wildlife hazard entities | |
wildlifehazard.reactiontimemultiplier | 1 | Global multiplier applied to wildlife hazard reaction time; higher values make hazards slower to react to player presence | |
wildlifehazard.repositionattempts | 5 | Maximum number of position candidates sampled when a wildlife hazard searches for a valid reposition destination | |
wildlifehazard.repositionradiusmultiplier | 1 | Global multiplier for the radius used when choosing a new reposition destination for a wildlife hazard | |
wildlifehazard.repositiontimermultiplier | 1 | Global multiplier applied to the cooldown timer between wildlife hazard reposition attempts |
More variables
Section titled “More variables”Groups with only a few entries, in one list.
| Variable | Default | Saved | What it does |
|---|---|---|---|
aibrainsenses.humanknownplayerslosupdateinterval | 0.2 | Interval in seconds between line-of-sight update ticks for human-type NPCs tracking known player positions | |
aibrainsenses.knownplayerslosupdateinterval | 0.5 | Interval in seconds between line-of-sight update ticks for all NPC types tracking known player positions | |
aibrainsenses.updateinterval | 0.5 | Interval in seconds between full AI brain senses update ticks; controls how frequently NPCs refresh their awareness of surroundings | |
aiinformationzone.usesimpleloscheck | False | ||
aithinkmanager.animalframebudgetms | 0.2 | ||
aithinkmanager.framebudgetms | 2 | ||
aithinkmanager.petframebudgetms | 1 | ||
autoturret.ammo_update_ms | 0.1 | How many milliseconds to spend on ammo updating per frame | |
autoturret.scan_budget_ms | 0.5 | How many milliseconds to spend on target scanning per frame | |
autoturret.tick_update_ms | 1 | How many milliseconds to spend on a tick per frame | |
basepet.movementupdatebudgetms | 1 | ||
basepet.onlyqueuebasenavmovements | True | ||
basepet.queuedmovementsallowed | True | ||
bear.population | 2 | Population active on the server, per square km | |
beehive.updatehiveinterval | 120 | How long before a Beehive will update | |
beehive.updatehivestatsinterval | 120 | How long before the Beehive will perform temperature and inside checks | |
beehive.xpincreaseperhoneycomb | 2 | How much the Nucleus’s XP should be increased per honeycomb generated | |
beeswarmmaster.amounttospawn | 3 | How many child swarms a master swarm will create | |
beeswarmmaster.killwithoutatargettime | 150 | How long a master swarm will stick around without a target | |
beeswarmmaster.secondsbetweenspawns | 60 | How long before a master swarm will create a child | |
boar.population | 5 | Population active on the server, per square km | |
chicken.population | 3 | Population active on the server, per square km | |
coverpointvolume.cover_point_sample_step_height | 2 | cover_point_sample_step_height defines the height of the steps we do vertically for the cover point volume’s cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 2.0) | |
coverpointvolume.cover_point_sample_step_size | 6 | cover_point_sample_step_size defines the size of the steps we do horizontally for the cover point volume’s cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 6.0) | |
cow.population | 2 | Population active on the server, per square km | |
crabs.population | 2 | Population active on the server, per square km | |
crocodile.population | 1 | Population active on the server, per square km | |
dungeonnavmesh.use_baked_terrain_mesh | True | ||
dynamicnavmesh.use_baked_terrain_mesh | False | ||
frankensteinbrain.movetowardsrate | 1 | ||
frankensteinpet.decayminutes | 180 | How long before a Frankenstein Pet dies un controlled and not asleep on table | |
frog.population | 2 | Population active on the server, per square km | |
jellyfish.population | 2 | Population active on the server, per square km | |
monumentnavmesh.use_baked_terrain_mesh | True | ||
npcautoturret.forcedamageblockedsleepers | True | If an npc turret is firing at a sleeping player and the player is blocked, still apply damage | |
npcautoturret.sleeperhostiledelay | 1200 | How many seconds until a sleeping player is considered hostile | |
panther.population | 0.5 | Population active on the server, per square km | |
polarbear.population | 1 | Population active on the server, per square km | |
rabbit.population | 2 | Population active on the server, per square km | |
seagullgroup.deepseafill | 0.5 | Share of the deep sea’s seagull land points given a group when it opens | |
seagullgroup.population | 0.6 | Seagull groups active on the server, per square km | |
seaturtle.forcesurfaceamount | 0 | ||
seaturtle.population | 2 | Population active on the server, per square km | |
sensecomponent.maxrefreshintervalseconds | 1 | ||
sensecomponent.minrefreshintervalseconds | 0.2 | ||
sheep.population | 2 | Population active on the server, per square km | |
simpleshark.disable | False | ||
simpleshark.forcesurfaceamount | 0 | ||
snakehazard.population | 5 | Population active on the server, per square km | |
squirrel.population | 2 | Population active on the server, per square km | |
stag.population | 3 | Population active on the server, per square km | |
tiger.population | 0.5 | Population active on the server, per square km | |
tigerfsm.chargerange | 20 | The range at which the tiger will charge instead of fleeing if aimed at | |
tigersneaktelegraphgrowl.minangle | 60 | Minimum angle for the tiger to growl when stalking a player | |
tigersneaktelegraphgrowl.mintimebetweengrowls | 5 | Time between growls when stalking a player | |
wolf2.population | 2 | Population active on the server, per square km | |
zombie.population | 0 | Population active on the server, per square km |
