TFBot Technicalities
TFBots are NextBots used in Team Fortress 2 officially for Mann vs. Machine, training modes, and also competitive in the event that a player leaves before the match completes.
In Mann vs. Machine, 22 slots are reserved for TFBots to use, leading to the recommendation of 32 maxplayers for servers hosting Mann vs. Machine games.
Contents
Skill / Difficulty
Bots behave based on the skill value (or difficulty) they have, which can be set through tf_bot_difficulty
or with tf_bot_add
. Skills are defined in game as follows:
- Easy (0)
- Normal (1)
- Hard (2)
- Expert (3)
Combat
TFBot has a tf_bot_taunt_victim_chance
chance to perform a taunt upon killing an enemy.
Bots will stay in combat until:
- They have less than 20% max ammo left.
- They need to do a full reload and they are Hard or Expert bots.
- Their friend score is lower than the foe score.
- Their health percentage is lower than
tf_bot_health_critical_ratio
.
Bots will search for health kits and dispensers when their health is lower than tf_bot_health_ok_ratio
or they are on fire, they are not in combat, and a healer is not healing them already. The range that bots will hunt for health in is
searchRange = tf_bot_health_search_far_range + (current health / max health) * (tf_bot_health_search_near_range - tf_bot_health_search_far_range );
Bots won't try to get health in the Mann Vs. Machine gamemode.
Threat Level
Threat levels are scores used to determine how dangerous something is. This value is between 0 (no danger) and 1 (immediate danger). The following actions give a certain threat level:
Threat | Value |
---|---|
Enemy (Class) | Varied |
Übered enemies | 1 |
Level 3 Sentry | 1 |
Level 2 Sentry | 0.8 |
Level 1 Sentry | 0.6 |
Enemies further than tf_bot_sniper_personal_space_range units from a Sniper
|
0 |
Typically the threat level is stored in two variables: the friend score and the foe score. These scores are determined through accumulating the threat level of every visible known ally and enemy respectively. Bots will try to retreat if the friend score is lower than the foe score.
Class Info
TFBots will change classes in spawn with tf_bot_reevaluate_class_in_spawnroom 1
, and upon death through tf_bot_keep_class_after_death 0
.
Rosters
ClassSelectionInfo
is a structure that determines the conditions for selecting a class.[4] The conditions for selecting a class can be the minimum team size, the player rate, minimum and maximum amount of the class.[4]
Rosters are ClassSelectionInfo
arrays that determine how TFBots choose each class.[4]
There are 3 predefined rosters that are used if tf_bot_spawn_use_preset_roster 1
is set; the offensive roster, the defensive roster, and competitive roster for competitive game modes.[4]
Limits | |||||||
---|---|---|---|---|---|---|---|
Class | Team Size Threshold | Player Rate | Minimum Amount | Easy | Normal | Hard | Expert |
Scout | 0 | 0 | 1 | 3 | 3 | 3 | 3 |
Soldier | 0 | 0 | 0 | None | None | None | None |
Pyro | 0 | 0 | 0 | 2 | 3 | 3 | 3 |
Demoman | 3 | 0 | 0 | None | None | None | None |
Heavy(weapons) | 3 | 0 | 0 | 1 | 1 | 2 | 2 |
Engineer | 5 | 0 | 0 | 1 | 1 | 1 | 1 |
Medic | 4 | 4 | 1 | 1 | 1 | 2 | 2 |
Sniper | 5 | 0 | 0 | 0 | 1 | 1 | 1 |
Spy | 5 | 0 | 0 | 1 | 1 | 1 | 1 |
Limits | |||||||
---|---|---|---|---|---|---|---|
Class | Team Size Threshold | Player Rate | Minimum Amount | Easy | Normal | Hard | Expert |
Soldier | 0 | 0 | 0 | None | None | None | None |
Pyro | 3 | 0 | 0 | None | None | None | None |
Demoman | 3 | 0 | 0 | 2 | 3 | 3 | 3 |
Heavy(weapons) | 3 | 0 | 0 | 1 | 1 | 2 | 2 |
Engineer | 0 | 4 | 1 | 1 | 2 | 3 | 3 |
Medic | 4 | 4 | 1 | 1 | 1 | 2 | 2 |
Sniper | 5 | 0 | 0 | 0 | 1 | 1 | 1 |
Spy | 5 | 0 | 0 | 0 | 1 | 2 | 2 |
Limits | |||||||
---|---|---|---|---|---|---|---|
Class | Team Size Threshold | Player Rate | Minimum Amount | Easy | Normal | Hard | Expert |
Scout | 0 | 0 | 0 | 0 | 0 | 2 | 2 |
Soldier | 0 | 0 | 0 | 0 | 0 | None | None |
Pyro | 0 | -1 | |||||
Demoman | 0 | 0 | 0 | 0 | 0 | 2 | 2 |
Heavyweapons | 3 | 0 | 0 | 0 | 0 | 2 | 2 |
Engineer | 0 | -1 | |||||
Medic | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
Sniper | 0 | -1 | |||||
Spy | 0 | -1 |
Scout
Preferred Weapon | Primary |
Threat Value | 0.6 |
Medic Bot Priority | None |
Soldier
Preferred Weapon | Primary |
Threat Value | 0.8 |
Medic Bot Priority | 2nd |
Soldier bots prefer their primary weapon in combat, but will switch to their secondary if they are out of primary weapon ammo and the threat is closer than 500hu.
Pyro
Preferred Weapon | Primary |
Threat Value | 1 |
Medic Bot Priority | 3rd |
Pyro bots are normally offensive and will attack enemies with their primary weapon. However if the enemy is further than 750hu, the bot Pyro will equip its secondary weapon.
They airblast enemies that are closer than tf_bot_pyro_shove_away_range
hammer units to the bot pyro, and projectiles if they are visible to the pyro bot and are within tf_bot_pyro_deflect_tolerance
angles (in radians) relative to the Pyro bot's FOV. The chance that they will airblast a projectile depends on their skill level.
Skill Level | Chance to Airblast |
---|---|
Easy | 0% chance |
Normal | 50% chance |
Hard | 90% chance |
Expert | 100% chance |
Demoman
Preferred Weapon | Primary and Secondary |
Threat Value | 0.6 |
Medic Bot Priority | 4th |
Demoman bots fire their primary weapon in an arc. The angle they fire grenades is
, tf_bot_ballistic_elevation_rate
× vv
being the distance to the target as a normalized vector. They will not fire with their primary above 45° or 0.79π.
When they encounter Sentries, Demoman bots prefer their secondary over their primary and stack stickybombs on the Sentry to then detonate them.
They will sometimes set up sticky-bomb traps on nav areas where they predict the enemy will pass through. The amount of stickybombs they place is
which will always be ≥1. Demoman bots will stop setting up their trap if they see an enemy that is less than 500hu away.
tf_bot_stickybomb_density
× the area of the target nav area
Heavy
Preferred Weapon | Primary |
Threat Value | 0.8 |
Medic Bot Priority | 1st |
Heavy bots prefer to use their primary weapon when in combat. They will "rev" (hold right click) for at least three seconds if they see an enemy.
They are the most preferred patient to be healed by Medic bots, out of the other classes.
Engineer
Preferred Weapon | Melee and Primary (for combat) |
Threat Value | 0.4 |
Medic Bot Priority | None |
Engineer bots focus on building near sentry spots (func_tfbot_hint
s with hint KV set to 1). Engineer bots normally just stay around their sentry and constantly hit it with their wrench. If the engineer bot get attacked however, they will attack with their weapon and flee.
tf_bot_reevaluate_class_in_spawnroom
or tf_bot_keep_class_after_death
is set.In Mann Vs. Machine Engineer bots will not attack, unless if they're marked as a squad. They can only build Sentry Guns and Teleporters, and they build around groups of bot_hint_engineer_nest
s, bot_hint_sentrygun
s, and bot_hint_teleporter_exit
s, rather than func_tfbot_hint
's.
Teleporters
Non-Medic bots will normally prefer to take active teleporters over walking to the destination, but they will only take them when their incursion distance is less than 350hu + the teleporter area's incursion distance
. However Medic bots will only take the teleporter if it's patient also goes through the teleporter; otherwise they ignore teleporters.
Medic
Preferred Weapon | Secondary |
Threat Value | 0.2 |
Medic Bot Priority | None |
Medic bots passively heal patients that are in their current viscinity, and will follow their patient when they are between tf_bot_medic_stop_follow_range
and tf_bot_medic_start_follow_range
from them. They will respond to call for medic from human players that are within tf_bot_medic_max_call_response_range
units from the medic bots.
They prefer to heal ally heavies, soldiers, pyros, and demomen over the other classes. If the medic bot is in a squad, they will only heal the squad leader. In the training gamemode, medic bots will always stay on the human player.
If Medic bots have the vaccinator equipped, they will use their über when they or their patient have taken damage. Otherwise medic bots will use their über when:
- The patient's health ratio is less than 0.5.
- The patient is not already übered.
- The medic bot's health is less than 25, 50, or
bot_medic_uber_health_threshold
attribute.
In MvM medic bots will not attack, unless if marked to be part of a squad in the popfile.
Sniper
Preferred Weapon | Primary |
Threat Value | 0.4 |
Medic Bot Priority | None |
Sniper bots typically look around for up to tf_bot_sniper_spot_max_count
Sniper Spots, which are hint-0-func_tfbot_hint
s in MvM[confirm] or nav areas outside MvM, that are at least tf_bot_sniper_spot_epsilon
units away from adjacent sniper spots and attack from those areas; they search for tf_bot_sniper_spot_search_count
sniper spots per update frame. However if an enemy gets close to them, the Sniper bot will fight them and then try to retreat to their goal. If the threat is closer than 750hu, then Sniper bots will use their secondary weapon.
When aiming through their primary, Sniper bots choose a target part to hit based on their skill level and take 0.5 to 1.5 seconds to adjust their aim. An error angle between ±π and error radius between 0 and tf_bot_sniper_aim_error
is then applied to their aim.[3] Expert and Hard bots always aim for the head, normal bots aim between the head and body (specifically ⅓ of the head's z position), and easy bots just aim for the body. If Sniper bots have the Huntsman equipped, then they will fire in an arc affected by tf_bot_arrow_elevation_rate
, and aim for the same body parts.
Sniper bots will stay tf_bot_sniper_spot_point_tolerance
units away from an enemy capture point, while they'll stay within this range in an ally capture point.
Spy
Preferred Weapon | Primary and Melee |
Threat Value | 0.6 |
Medic Bot Priority | None |
Spy bots typically lurk around hiding spots.[game/server/tf/bot/behavior/spy/CTFBotSpyInfiltrate::Update] They prefer to use their melee weapon if the target is closer than tf_bot_spy_knife_range
units to the spy. If their target is further than tf_bot_spy_change_target_range_threshold
units away, Spy bots will choose another target that is closer than that distance. They will attempt to attack the back of an enemy (or backstab) at an angle based on the difficulty of the bot.
They are suspected by enemies if they collide with an enemy for more than tf_bot_suspect_spy_touch_interval
consecutive seconds.
When sapping a building. If a spy bot is less than 300HUs from the sap target; they will not dodge enemies.[5: game/server/tf/bot/behavior/spy/tf_bot_spy_sap.cpp]
Console Variables and Commands
To skip to the next section (Bot Names), click here.
Server Management
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_add | [count|name] [class] [team] [skill] ["noquota"] | strings (processed without order) | Creates a bot with specified parameters. This entity will borrow from tf_bot_difficulty if skill is omitted.Bug:When red bots are added in MvM without noquota specified, bots will constantly spawn forever. [todo tested in?]
|
tf_bot_auto_vacate | 1 | 0 disables, 1 enables | Whether bots will automatically leave to make room for human players. |
tf_bot_difficulty | 1 | integer | Sets default skill value. |
tf_bot_join_after_player | 1 | 0 disables, 1 enables | If nonzero, bots wait until a player joins before entering the game. |
tf_bot_keep_class_after_death | 0 | 0 disables, 1 enables | If zero bots will change class upon death, except in MvM. |
tf_bot_kick | [name|"red"|"blue"|"all"| | string | Kicks bots based on name and team, or all of them. Will instead move bots to spectator mode if moveToSpectatorTeam is added. |
tf_bot_kill | [name|"red"|"blue"|"all"] | string | Kills bots based on name and team, or all of them. |
tf_bot_prefix_name_with_difficulty | 0 | 0 disables, 1 enables | Append the skill level of the bot to the bot's name |
tf_bot_quota | 0 | arbitrary integer | Determines the total number of tf bots in the game. |
tf_bot_quota_mode | normal | string | Determines the type of quota; allowed values: 'normal', 'fill', and 'match'. Given N is tf_bot_quota , in 'fill' mode, adjust bots to maintain N players; in 'match' mode, maintain a 1:N ratio of humans to bots. |
tf_bot_reevaluate_class_in_spawnroom | 1 | 0 disables, 1 enables | If set bots will opportunistically switch class while in spawnrooms if their current class is no longer their first choice. |
tf_bot_spawn_use_preset_roster | 1 | 0 disables, 1 enables | Bot will pick classes based on a preset class table. Bug:After the 22nd bot, bots will run out of classes to automatically pick and stay in the class selection forever. [todo tested in?] |
Global Behavior
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_always_full_reload | 0 | 0 disables, 1 enables | Determines whether bots perform full reloads before firing. |
tf_bot_ammo_search_range | 5000 | Hammer units | How far bots will search to find ammo around them. |
tf_bot_capture_seek_and_destroy_max_duration | 30 | arbitrary float | If a capturing bot decides to go hunting, this is the max duration he will hunt for before reconsidering. |
tf_bot_capture_seek_and_destroy_min_duration | 15 | arbitrary float | If a capturing bot decides to go hunting, this is the min duration he will hunt for before reconsidering. |
tf_bot_choose_target_interval | 0.3f | Seconds (float) | How often a bot can reselect his target |
tf_bot_defend_owned_point_percent | 0.5 | arbitrary float | Stay on the contested point we own until enemy cap percent falls below this value. |
tf_bot_defense_must_defend_time | 300 | arbitrary float | If timer is less than this value, bots will stay near point and guard. |
tf_bot_fire_weapon_min_time | 1 | arbitrary integer | Minimum time bots will fire their weapon. |
tf_bot_health_critical_ratio | 0.3 | arbitrary float | TFBots that have health ratios below this value are considered "critically injured". |
tf_bot_health_ok_ratio | 0.8 | arbitrary float | TFBots that have health ratios below this value are considered "ok". |
tf_bot_health_search_far_range | 2000 | Hammer units | Critically-hurt bots will search for health within this range. |
tf_bot_health_search_near_range | 1000 | Hammer units | Uncritically-hurt bots will search for health within this range. |
tf_bot_hitscan_range_limit | 1800 | Hammer units | Maximum range in which bots will try to hit targets with hitscan. |
tf_bot_max_point_defend_range | 1250 | Hammer units | How far (in travel distance) from the point defending bots will take up positions. |
tf_bot_melee_attack_abandon_range | 500 | Hammer units | If threat is farther away than this, bot will switch back to its primary weapon and attack |
tf_bot_near_point_travel_distance | 750 | Hammer units | Range in which bots are considered to be "near" the point. |
tf_bot_notice_gunfire_range | 3000 | Hammer units | The range in which gunshots are noticed by bots. |
tf_bot_notice_quiet_gunfire_range | 500 | Hammer units | The range in which quiet gunshots are noticed by bots. |
tf_bot_offense_must_push_time | 120 | arbitrary float | If timer is less than this, bots will push hard to cap |
tf_bot_offline_practice | 0 | arbitrary integer | Tells the server that it is in offline practice mode, and also disable achievements. |
tf_bot_path_lookahead_range | 300 | Hammer units | How far a bot should look ahead. |
tf_bot_retreat_to_cover_range | 1000 | Hammer units | How far to search for cover. |
tf_bot_taunt_victim_chance | 20 | arbitrary float | 1/value chance for a bot to taunt after killing a bot. |
tf_bot_wait_in_cover_max_time | 2 | arbitrary float | Maximum time bots will hide in cover. |
tf_bot_wait_in_cover_min_time | 1 | arbitrary float | Minimum time bots will hide in cover. |
tf_bot_warp_team_to_me |
| Teleports all ally bots to !activator. |
Debugging
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_debug_ammo_scavenging | 0 | 0 disables, 1 enables | Draws debug informaton for bot ammo-information. |
tf_bot_debug_destroy_enemy_sentry | 0 | 0 disables, 1 enables | Draw debug info for bots trying to destroy sentries. |
tf_bot_debug_retreat_to_cover | 0 | 0 disables, 1 enables | Draw debug info for bots retreating to cover. |
tf_bot_debug_seek_and_destroy | 0 | 0 disables, 1 enables | Draw bot seek-and-destroy debug info. |
tf_bot_debug_stuck_log | [blank by default]
| string | Given a server logfile visually display bot stuck locations. |
tf_bot_debug_stuck_log_clear |
| Clear currently loaded bot stuck data. | |
tf_bot_debug_tags | 0 | 0 disables, 1 enables | ent_text will only show tags on bots. |
tf_bot_defense_debug | 0 | 0 disables, 1 enables | Draw defense areas. |
tf_bot_fire_weapon_allowed | 1 | 0 disables, 1 enables | If zero, bots will not pull the trigger of their weapons (but will act like they did). |
tf_bot_force_class | [blank by default]
| string | If set to a class name, all bots will respawn as that class. |
tf_bot_force_jump | 0 | 0 disables, 1 enables | Force bots to continuously jump. |
tf_bot_melee_only | 0 | 0 disables, 1 enables | If nonzero, bots will only use melee weapons |
Class Specific
Pyro
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_pyro_always_reflect | 0 | 0 disables, 1 enables | Pyro bots will always reflect projectiles fired at them. For tesing/debugging purposes. |
tf_bot_pyro_deflect_tolerance | 0.5 | Radian (float) | Defines the visible range in which Pyro bots can airblast projectiles. Technical explanation: Pyro TFBots will not airblast a projectile if the dot product between their normalized vector and a projectile's normalized vector is higher than the negative of this value. |
tf_bot_pyro_shove_away_range | 250 | Hammer units | If a Pyro bot's target is closer than this, then compression (or air)blast them away. |
Demoman
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_ballistic_elevation_rate | 0.01 | arbitrary float | When lobbing grenades at far away targets, this is the degree/range slope to raise our aim. |
tf_bot_max_grenade_launch_at_sentry_range | 1500 | Hammer units | Demoman bots will try to launch grenades at sentries in this range. |
tf_bot_max_sticky_launch_at_sentry_range | 1500 | Hammer units | Demoman bots will try to launch stickies at sentries in this range. |
tf_bot_sticky_base_range | 800 | arbitrary integer | Demoman bots will charge their stickies if their target sentry is further than this range. |
tf_bot_sticky_charge_rate | 0.01 | arbitrary float | Seconds of charge per unit range beyond base. |
tf_bot_stickybomb_density | 0.0001 | arbitrary integer | Number of stickies to place per square inch. (squared hammer unit) |
Engineer
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_debug_sentry_placement | 0 | 0 disables, 1 enables | Draw bot engineer sentry placement debug info. |
tf_bot_engineer_building_health_multiplier | 2 | unknown type | Unused. |
tf_bot_engineer_exit_near_sentry_range | 2500 | Hammer units | Maximum travel distance between a bot's Sentry gun and its Teleporter Exit |
tf_bot_engineer_max_sentry_travel_distance_to_point | 2500 | Hammer units | Maximum travel distance between a bot's Sentry gun and the currently contested point |
tf_bot_engineer_retaliate_range | 750 | Hammer units | Engineer bots will attack if the attacker who destroyed sentry closer than this, otherwise the engineer bot will retreat. |
tf_bot_min_teleport_travel | 3000 | Hammer units | Minimum travel distance between teleporter entrance and exit before bot will build one. |
tf_bot_max_teleport_entrance_travel | 1500 | Hammer units | Don't plant teleport entrances farther than this travel distance from our spawn room |
tf_bot_max_teleport_exit_travel_to_point | 2500 | Hammer units | If an offensive engineer bot's tele exit is farther from the point than this, then destroy it. |
tf_bot_teleport_build_surface_normal_limit | 0.99 | Hammer units | If the ground normal Z component is less that this value, Engineer bots won't place their entrance teleporter. |
Medic
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_medic_cover_test_resolution | 8 | arbitrary float | Determines the angular increment when scanning for players to heal. |
tf_bot_medic_debug | 0 | 0 disables, 1 enables | Draw debug info for medic bots. |
tf_bot_medic_max_call_response_range | 1000 | Hammer units | Calls for medic within this range will be heard. |
tf_bot_medic_max_heal_range | 600 | Hammer units | Bot medics will heal anyone within this range. |
tf_bot_medic_start_follow_range | 250 | Hammer units | Medics will start following their patients when in this range. |
tf_bot_medic_stop_follow_range | 75 | Hammer units | Medics will stop following their patients when in this range. |
Sniper
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_arrow_elevation_rate | 0.0001 | Arbitrary float | When firing arrows at far away targets, this is the degree/range slope to raise our aim. |
tf_bot_debug_sniper | 0 | 0 disables, 1 enables | Draw Sniper bot debug information. |
tf_bot_sniper_aim_error | 0 | Hammer units | Margin of error in sniper aim radius. |
tf_bot_sniper_aim_steady_rate | 10 | aribtrary float | Determines the angle rate at which the bot aim becomes steady. |
tf_bot_sniper_allow_opportunistic | 1 | 0 disables, 1 enables | If set, Sniper bots will stop on their way to their preferred lurking spot to snipe at opportunistic targets. |
tf_bot_sniper_choose_target_interval | 3 | Seconds (float) | How often a zoomed-in Sniper can reselect his target. Note:Currently unused. |
tf_bot_sniper_flee_range | 400 | Hammer units | Sniper bots retreat if their threat is closer than this range. |
tf_bot_sniper_goal_entity_move_tolerance | 500 | Hammer units | How far a sniper spot can be from the point before being ignored. |
tf_bot_sniper_linger_time | 5 | arbitrary float | How long Sniper will wait around after losing his target before giving up. |
tf_bot_sniper_melee_range | 200 | Hammer units | Sniper bots will attack with melee if their threat is closer than this range. |
tf_bot_sniper_patience_duration | 10 | arbitrary float | How long a Sniper bot will wait without seeing an enemy before picking a new spot. |
tf_bot_sniper_personal_space_range | 1000 | Hammer units | Enemies beyond this range don't worry Sniper bots. |
tf_bot_sniper_spot_epsilon | 100 | Hammer units | Maximum distance between sniper spots to consider them one spot. |
tf_bot_sniper_spot_max_count | 10 | arbitrary integer | Stop searching for sniper spots when each side has found this many. |
tf_bot_sniper_spot_min_range | 1000 | Hammer units | Minimum length for a sightline to be considered usable. |
tf_bot_sniper_spot_point_tolerance | 750 | Hammer units | The range in which a sniper can stand near a vantage point. |
tf_bot_sniper_spot_search_count | 10 | arbitrary integer | Search this many times per behavior update frame. |
tf_bot_sniper_target_linger_duration | 2 | arbitrary float | How long a Sniper bot will keep toward at a target it just lost sight of. |
Spy
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_debug_spy | 0 | 0 disables, 1 enables | Draw Spy bot debug information. |
tf_bot_notice_backstab_chance | 25 | arbitrary integer | Chance for bots to notice backstabs. |
tf_bot_notice_backstab_max_range | 750 | Hammer units | Maximum range in which bots will notice backstabs. |
tf_bot_notice_backstab_min_range | 100 | Hammer units | Minimum range in which bots will notice backstabs. |
tf_bot_spy_change_target_range_threshold | 300 | Hammer units | Spy bots will change to newer targets if their current target is further than this range. |
tf_bot_spy_knife_range | 300 | Hammer units | Spy Bots will prefer their knife if their threat is closer than this range. |
tf_bot_suspect_spy_forget_cooldown | 5 | arbitrary integer | How long to consider a suspicious spy as suspicious. |
tf_bot_suspect_spy_touch_interval | 5 | ticks (integer) | How many ticks back to look for touches against suspicious spies. |
Mode Specific
Flag-based modes
Includes Capture the Flag, Special Delivery, Mann vs. Machine, etc.
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_formation_debug | 0 | 0 disables, 1 enables | Draw bot-formation debug info. |
tf_bot_flag_escort_give_up_range | 1000 | Hammer units | Bots will give up escorts at this range. |
tf_bot_flag_escort_max_count | 4 | arbitrary integer | Maximum amount of escorters allowed. |
tf_bot_flag_escort_range | 500 | Hammer units | Bots will escort the flag carrier within this range. |
tf_bot_flag_kill_on_touch | 0 | 0 disables, 1 enables | If nonzero, any bot that picks up the flag dies. For testing. |
tf_bot_fetch_lost_flag_time | 10 | arbitrary float | How long until busy bots drop what they're doing and get the dropped flag. |
Mann vs. Machine
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_mvm_bot_flag_carrier_interval_to_1st_upgrade | 5 | Seconds (float) | The time before the bomb carrier performs the 1st upgrade. |
tf_mvm_bot_flag_carrier_interval_to_2nd_upgrade | 15 | Seconds (float) | The time before the bomb carrier performs the 2nd upgrade. |
tf_mvm_bot_flag_carrier_interval_to_3rd_upgrade | 15 | Seconds (float) | The time before the bomb carrier performs the 3rd upgrade. |
tf_bot_squad_escort_range | 500 | Hammer units | If a bot is using a melee weapon, close and attack while staying near the leader within this range. |
Engineer
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_engineer_mvm_hint_min_distance_from_bomb | 1300 | Hammer units | Bot engineers will move if the bomb is within this range. |
tf_bot_engineer_mvm_sentry_hint_bomb_backward_range | 3000 | Hammer units | How far the MvM bot engineer can build backward. |
tf_bot_engineer_mvm_sentry_hint_bomb_forward_range | 0 | Hammer units | How far the MvM bot engineer can build forwards. |
tf_bot_mvm_show_engineer_hint_region | 0 | 0 disables, 1 enables | Show the nav areas MvM engineer bots will consider when selecting sentry and teleporter hints. |
Sentry Buster
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_suicide_bomb_friendly_fire | 1 | 0 disables, 1 enables | Sentry Busters can kill ally bots on its team. |
tf_bot_suicide_bomb_range | 300 | Hammer units | Sentry Busters will kill players in this range and start detonation in a third of this value. |
Payload
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_cart_push_radius | 60 | Hammer units | Maximum distance in which bots will stay within near the payload to push it. |
tf_bot_debug_payload_guard_vantage_points | 0 | 0 disables, 1 enables | Draw vantage points for guarding the payload. |
tf_bot_payload_guard_range | 1000 | Hammer units | Guard the payload within this range. |
Miscellaneous
bot_npc_archer
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_npc_archer_arrow_damage | 75 | arbitrary float | Determines the arrow damage of NPC archer arrows. |
tf_bot_npc_archer_health | 100 | arbitrary integer | Determines the health of NPC archer bots. |
tf_bot_npc_archer_shoot_interval | 2 | arbitrary float | Determines the interval at which NPC archer bots fire. |
tf_bot_npc_archer_speed | 100 | arbitrary integer | Unused. |
Unused
Cvar/Command | Parameters or default value | Descriptor | Effect |
---|---|---|---|
tf_bot_escort_range | 300 | Hammer units | Raid mode leftover; Bots would've escort anyone within this range if there are no enemies. |
tf_bot_min_setup_gate_defend_range | 750 | Hammer units | An unused ConVar that is supposed to determine how close from the setup gate(s) defending bots can take up positions and what areas would have been determined to be "in cover". |
tf_bot_min_setup_gate_sniper_defend_range | 1500 | Hammer units | An unused ConVar that supposedly would determine the distance from the setup gate(s) a defending sniper would go to "take up position". |
tf_bot_max_setup_gate_defend_range | 2000 | Hammer units | An unused ConVar that would have determined how far from the setup gate(s) defending bots can take up positions. |
tf_raid_engineer_infinte_metal [sic] | 1 | 0 disables, 1 enables | Cheat ConVar that allows engineer bots to gain 1000 metal each update during Mann Vs. Machine. It is development only. |
Bot Names
To go back up to the previous section (ConVars/ConCommands), click here.
The following 4 columns of bot names are what the game uses to randomly set a bot name when creating a bot.
|
|
|
|
Unused Bot Names
The following bot names were found in a leaked source code version of TF2, containing bot names that were never put into production for unknown reasons.
- John Spartan
- Leeloo Dallas Multipass
- Sho'nuff
- Bruce Leroy
- CAN YOUUUUUUUUU DIG IT?!?!?!?!
- Big Gulp, Huh?
- Stupid Hot Dog
- I'm your huckleberry
- The Crocketeer
Code References
- [1] -
game/server/tf/bot/behavior/medic/tf_bot_medic_heal.cpp:CTFBotMedicHeal::IsGoodUberTarget(CTFPlayer *who)
- [2] -
game/server/tf/bot/behavior/medic/tf_bot_medic_heal.cpp:CTFBotMedicHeal::SelectPatient(CTFBot *me, CTFPlayer *current)
- [3] -
game/server/tf/bot/behavior/tf_bot_behavior.cpp:CTFBotMainAction::SelectTargetPoint(const INextBot *meBot, const CBaseCombatCharacter *subject)
- [4] -
game/server/tf/bot/tf_bot.cpp:CTFBot::GetNextSpawnClassname()