Difference between revisions of "Bots"

From Team Fortress Wiki
Jump to: navigation, search
m (AI Bot Commands: Shamelessly promoting my own work)
(Using bots on unsupported maps)
 
(594 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
There are two types of bots in TF2:
+
[[File:Tr_dustbowl0003.png|right|thumb|300px|A [[Soldier]] bot in action on the [[Dustbowl (Training)|Dustbowl Training]] map.]]
*The first type has sophisticated AI code, based on the Infected AI in Left 4 Dead<ref>[http://teamfortress.com/post.php?id=3279 Team Fortress Official Blog - Erectin a dispenser]</ref>. They are intelligent enough to replace human players in most cases. They do not require the server to have cheats enabled, therefore human players can gain achievements while playing with them.
+
{{hatnote|This page is about computer-controlled players in the game ''Team Fortress 2''.
*The second type has no AI code -- they are simply puppets which you can spawn and order to do things, such as follow you around and fire their weapons.  They are useful for testing or for indulging antisocial fantasies.  They require the server to have cheats enabled, therefore human players cannot gain achievements while playing with them.
+
* For computer-controlled cheating/[[griefing]] bots, see [[Cheating#Bots|Cheating Bots]].
 +
* For bots automating edits on the [[Team Fortress Wiki]], see [[:Category:User bots]].  
 +
* For robots introduced in the [[Mann vs. Machine (update)|Mann vs. Machine]] update, see [[Robots]].  
 +
* For other uses, see [[Robot]].}}
  
==AI Bots==
+
{{Quotation|'''The Soldier'''|Human teammates might judge you, but will these soulless automatons? YES. They're not blind. But they ARE mute, so your incompetence is a secret they will take to their grave.}}
  
AI bots can take the place of human players. They can only be spawned, they cannot be directly controlled. In addition, you cannot choose which class of bot to spawn -- they are randomly chosen by the game.
+
<!--
 +
  Attention:
 +
  All content related with cheater bots/Casual bots will be reverted. This is not the proper page, and it is covered enough in the page [[Cheating#Bots]]. Thanks!
 +
-->
 +
A '''bot''' is a computer-controlled player on a server.  There are two types of bots in ''Team Fortress 2'': AI bots and Puppet bots. AI bots are coded with sophisticated artificial intelligence designed to emulate player actions in game, and can be used without enabling [[cheats]]. Puppet bots have no AI coding, but are useful for testing and training. Puppet bots require the server to have cheats enabled, which also disables [[achievements]].
  
However, bots as certain classes can be somewhat indirectly controlled, to a certain extent: a bot [[medic]] will heal you if you press the "Medic!" [[voice command]]. (Default key is "E" on PC.) If a Medic Bot is healing you and has an [[ÜberCharge]] ready, use the voice commands "Go go go!" (default keys are Z, then 3 on PC.) or "Activate Charge!" (default keys are X, then 7 on PC.) to force the Bot to activate his currently unused ÜberCharge!
+
==Stock AI bots==
 +
The stock AI bots, or TFBots, are designed to emulate human players and are not directly controlled. Additionally, their [[classes]] are chosen at random. They use sophisticated AI code based on the PlayerBot and Infected AI featured in the ''Left 4 Dead'' series.<ref>[http://teamfortress.com/post.php?id=3279 Team Fortress Official Blog - Erectin a dispenser]</ref> AI bots do not require the server to have cheats enabled; therefore, achievements are enabled while playing with them. There is one exception, however; Bots do not see [[Deathcam]] shots when killed; therefore, a player cannot attain Deathcam-related achievements. Also, killing a bot with a [[Strange]] weapon will not increase the weapon's kill count, unless the weapon has a [[Strange Parts|Strange Part]]: Robots Destroyed applied to it, in which case, the kill will be added to the Strange Part and not the main counter.
  
As of this writing:
+
AI bots come in four skill levels ranging from easy to expert. [http://steamcommunity.com/profiles/76561198023936575 Sigsegv] has compiled [https://steamcommunity.com/sharedfiles/filedetails/?id=572409016|a detailed explanation on the skill differences].
  
*They are still in beta testing.
+
AI bots can be indirectly controlled to an extent:
*Not all classes are represented, e.g. no spies; It is probable that a human spy has complex behavior that is too complicated to be effectively simulated by an AI code. Valve is most likely still working on this.
+
* Any friendly and enemy bot that the player focuses on with their crosshair during [[setup time]] will [[taunt]].
*They only work out-of-the-box for most official [[Maps#King of the Hill|KOTH]] maps. (other than both koth_harvest variants.) But for these maps, they do not require cheats to be enabled, therefore human players can gain achievements while using them.
+
* A friendly [[Medic]] bot will heal a player if they utilize the "Medic!" [[Voice commands|voice command]].
*Bots currently can not, or will not [[jump]], [[rocketjump]] or [[stickyjump]] on purpose in any form of way.
+
* If a Medic bot is healing and has an [[ÜberCharge]] ready, using the voice commands "Go go go!" or "Activate Charge!" will cause the bot to immediately activate his ÜberCharge.
*Bots currently can not use unlockable content: including [[weapons]], [[hats]] or any other aesthetics.
+
* A Medic bot with an ÜberCharge ready will immediately activate the charge if he or the healing target gets hurt significantly.
 +
* Bots will attempt to join teammates performing a partner taunt (e.g. the [[High Five!|High Five]]) or a group taunt (e.g. the [[Conga]]).
  
==AI Bot Commands==
+
===Pathfinding===
 +
====Maps with official bot support====
 +
{{Maps with bot support}}
  
To use AI bots on supported maps, the server administrator simply opens a console and types in the following command:
+
====Using bots on unsupported maps====
 +
{{hatnote|See also: [[vdc:Navigation Meshes|Navigation Meshes]] and {{vdc|Nav Mesh Editing}}}}
 +
# Nav mesh editing requires cheats enabled, so type {{code|sv_cheats 1}} in the [[console]].
 +
# Build the initial nav mesh using the {{code|nav_generate}} command.
 +
# Wait while the game generates AI paths, progress is tracked in the console.
 +
# Map will reload.
 +
# Verify the nav mesh exists on all stages of the map by using the {{code|nav_edit 1}} command, then traveling across all the stages. Use the {{code|nav_mark_walkable}} command on all of the stages without a nav mesh, then use the {{code|nav_generate}} command again to apply the changes.
 +
# Optionally tweak the generated nav mesh to add missing data and remove erroneous data. Use {{code|nav_edit 1}} to enter nav mesh editing mode.
 +
# Reload/Restart the server (optional, but if it is not done, then achievements will be disabled).
 +
# Open console and type {{code|tf_bot_add <number>}} as above to add bots.
 +
'''WARNING: The game is likely to crash if you edit the navigation mesh with bots enabled.'''
 +
 
 +
Bots can be used on any map on which the above steps have been performed without having to repeat them, except for entering the {{code|tf_bot_add <number>}} command each time bots need to be added.
 +
 
 +
Auto-generated nav meshes work best on Control Points, King of the Hill, Payload, and Capture the Flag maps. On [[Mannpower]] maps, the bots will play as Capture the Flag, but be unable to use [[Grappling Hook]]s or intelligently use the Powerups they walk over.
 +
 
 +
Setting the value of the console command {{code|tf_bot_offense_must_push_tim}} to {{code|0}} allows bots to fight each other in maps without objectives that they can recognize, unless the map doesn't have any respawn room entities.
 +
 
 +
==== Stock maps with no official bot support ====
 +
{{Maps with no bot support}}
 +
 
 +
===AI bot commands===
 +
{{Hatnote|For a more comprehensive list of commands, see the {{vdc|List of TF2 console commands and variables}}}}
 +
To use AI bots on supported maps, the server administrator should type the following commands into the console (some may require <kbd>sv_cheats</kbd> to be set to 1):
  
 
{| class="wikitable grid"
 
{| class="wikitable grid"
Line 25: Line 59:
 
! class="header" | Description
 
! class="header" | Description
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_add'''</code></big>}}
===tf_bot_add===
+
|This command will create one or more AI bots of random classes on random teams.  They will also be assigned random names from a default set.
|
 
This command will create one or more AI bots of random classes on random teams.  They will also be assigned amusing human-like names.
 
  
;Syntax: <code>tf_bot_add [<''count''>] [<''class''>] [<''team''>] [<''difficulty''>]</code>
+
;Syntax: <code>tf_bot_add [<''count''>] [<''class''>] [<''team''>] [<''difficulty''>] [<''name''>] [''noquota'']</code>
  
 
;Parameters:
 
;Parameters:
 
:<code><''count''></code>
 
:<code><''count''></code>
 
::Specifies the number of bots to spawn.  If omitted, one bot is spawned.
 
::Specifies the number of bots to spawn.  If omitted, one bot is spawned.
::As of this writing, specifying a number greater than the maximum number of players, including any human players, causes the bots to freeze. Thus if you have a 24 player server (the default), and one human player, do not spawn more than 23 bots.
+
::Trying to create bots beyond maxplayers will fail with an error message in the console.
 +
::If <kbd>mp_teams_unbalance_limit</kbd> is too low, adding more bots onto one team may still result in autobalancing to even out team numbers.
  
 
:<code><''class''></code>
 
:<code><''class''></code>
Line 41: Line 74:
  
 
:<code><''team''></code>
 
:<code><''team''></code>
::Specifies the team name to assign the bot, where ''team'' can be ''[[red]]'' or ''[[blu|blue]]''
+
::Specifies the team name to assign the bot, where ''team'' can be ''[[red]]'' or ''[[blue]]''.
 +
 
 +
:<code><''difficulty''></code>
 +
::Sets the difficulty level for the bot, where ''difficulty'' can be ''easy'', ''normal'', ''hard'', or ''expert''.
 +
 
 +
:<code><''name''></code>
 +
::Sets the connecting bot's name.
  
:<code><''difficulty></code>
+
:<code>''noquota''</code>
::Sets the difficulty level for the bot, where ''difficulty'' can be ''easy'', ''normal'', or ''hard''.
+
::If the exact phrase 'noquota' is present, the bot is excluded from the bot quota management system. See <code>tf_bot_quota</code>.
  
;Example: <code>tf_bot_add red 3 heavyweapons easy</code> will add three heavies to the red team at the easy skill level.
+
;Example: <kbd>tf_bot_add 3 heavyweapons red easy</kbd> will add three Heavies to the RED team at the easy skill level.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_difficulty</code>'''</big>}}
===tf_bot_difficulty===
+
|Defines the skill of bots joining the game.   
|
 
Defines the skill of bots joining the game.   
 
  
 
;Syntax: <code>tf_bot_difficulty <''level''></code>
 
;Syntax: <code>tf_bot_difficulty <''level''></code>
Line 59: Line 96:
 
::Sets the difficulty level for the bots. Values are: 0=easy, 1=normal, 2=hard, 3=expert. Default is "Normal" (1).
 
::Sets the difficulty level for the bots. Values are: 0=easy, 1=normal, 2=hard, 3=expert. Default is "Normal" (1).
  
;Example: <code>tf_bot_difficulty 2</code> will set all bots created after this command to "Hard" difficulty.
+
;Example: <kbd>tf_bot_difficulty 2</kbd> will set all bots created after this command to "Hard" difficulty.
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_fire_weapon_allowed</code>'''</big>}}
 +
|Determines whether bots should fire weapons. If disabled, bots can still use certain non-damaging weapons such as the [[Medi Gun]]. As one exception, though, [[Medic]] bots will still fire their [[Syringe Gun]]. Additionally, [[Demoman]] bots will still be able to detonate existing stickies, but will not place any more.
 +
 
 +
;Syntax: <code>tf_bot_fire_weapon_allowed <''integer''></code>
 +
 
 +
;Parameters:
 +
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 1 (enabled).
 +
 
 +
;Example: <kbd>tf_bot_fire_weapon_allowed 0</kbd> will result in bots not using their weapons, with a few exceptions.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_force_class</code>'''</big>}}
===tf_bot_force_class===
+
|If set to a class name, all TFBots will respawn as that class.
|
 
If set to a class name, all TFBots will respawn as that class.
 
  
 
;Syntax: <code>tf_bot_force_class <''class''></code>
 
;Syntax: <code>tf_bot_force_class <''class''></code>
Line 72: Line 118:
 
::The ''classname'' of the class can be ''[[Demoman]]'', ''[[Engineer]]'', ''[[Heavy]]Weapons'', ''[[Medic]]'', ''[[Pyro]]'', ''[[Scout]]'', ''[[Soldier]]'', ''[[Sniper]]'', or ''[[Spy]]''. Default is "" (aka blank).
 
::The ''classname'' of the class can be ''[[Demoman]]'', ''[[Engineer]]'', ''[[Heavy]]Weapons'', ''[[Medic]]'', ''[[Pyro]]'', ''[[Scout]]'', ''[[Soldier]]'', ''[[Sniper]]'', or ''[[Spy]]''. Default is "" (aka blank).
  
;Example: <code>tf_bot_force_class medic</code> will make all TFbots respawn as Medic.
+
;Example: <code>tf_bot_force_class medic</code> will make all TFBots respawn as Medic.
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_force_jump</code>'''</big>}}
 +
|If enabled, forces bots to repeatedly jump over and over.
 +
 
 +
;Syntax: <code>tf_bot_force_jump <''integer''></code>
 +
 
 +
;Parameters:
 +
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
 
 +
;Example: <kbd>tf_bot_force_jump 1</var> will force AI bots to repeatedly jump.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_join_after_player</code>'''</big>}}
===tf_bot_join_after_player===
+
|If nonzero, bots wait until a player joins before entering the game. This only applies to quota spawned bots.
|
 
If nonzero, bots wait until a player joins before entering the game.
 
  
 
;Syntax: <code>tf_bot_join_after_player <''integer''></code>
 
;Syntax: <code>tf_bot_join_after_player <''integer''></code>
Line 85: Line 140:
 
::Either 1 or 0. Default is 1 (enabled).
 
::Either 1 or 0. Default is 1 (enabled).
  
;Example: <code>tf_bot_join_after_player 0</code> will make TFBots join the game when added even if no players are on a team.
+
;Example: <kbd>tf_bot_join_after_player 0</kbd> will make TFBots join the game when added even if no players are on a team.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_keep_class_after_death</code>'''</big>}}
===tf_bot_keep_class_after_death===
+
|If zero, bots will always respawn as a different class.
|
 
If zero, bots will always respawn as a different class.
 
  
 
;Syntax: <code>tf_bot_keep_class_after_death <''integer''></code>
 
;Syntax: <code>tf_bot_keep_class_after_death <''integer''></code>
Line 98: Line 151:
 
::Either 1 or 0. Default is 0 (disabled).
 
::Either 1 or 0. Default is 0 (disabled).
  
;Example: <code>tf_bot_keep_class_after_death 1</code> will prevent TFBots from changing class.
+
;Example: <kbd>tf_bot_keep_class_after_death 1</kbd> will prevent TFBots from changing class.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_kick</code>'''</big>}}
===tf_bot_kick===
 
 
|
 
|
 
This command will remove one or all AI bots.
 
This command will remove one or all AI bots.
  
;Syntax: <code>tf_bot_kick <''name/all''></code>
+
;Syntax: <code>tf_bot_kick <''name/all/team''></code>
  
 
;Parameters:
 
;Parameters:
:<code><''name/all''></code>
+
:<code><''name/all/team''></code>
::Specifies the name of bot to remove or all.
+
::Specifies the name of bot to remove, the team to remove, or all.
  
;Example: <code>tf_bot_kick CEDA</code> will kick the TFbot named "CEDA" if one exists.
+
;Example: <kbd>tf_bot_kick CEDA</kbd> will kick the TFBot named "CEDA" if one exists. Like <kbd>tf_bot_kill</kbd>, quotation marks will be needed to kick bots with names that consist of 2 or more words, such as <kbd>tf_bot_kick "Black Mesa"</kbd> to kick the TFBot named "Black Mesa".
 
|-
 
|-
 +
|{{nw|<big>'''<code>tf_bot_kill</code>'''</big>}}
 
|
 
|
===tf_bot_prefix_name_with_difficulty===
+
This command will kill one or all AI bots.
|
+
 
If nonzero, append the skill level of the bot to the bot's name
+
;Syntax: <code>tf_bot_kill <''name/all/team''></code>
 +
 
 +
;Parameters:
 +
:<code><''name/all/team''></code>
 +
::Specifies the name of bot to kill, the team to kill, or all.
 +
 
 +
;Example: <kbd>tf_bot_kill CEDA</kbd> will kill the TFBot named "CEDA" if one exists. Quotation marks will be needed to kill bots with names that consist of 2 or more words, such as <kbd>tf_bot_kill "Black Mesa"</kbd> to kill the TFBot named "Black Mesa".
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_melee_only</code>'''</big>}}
 +
|Determines whether a bot should only use melee weapons or not.
 +
 
 +
;Syntax: <code>tf_bot_melee_only <''integer''></code>
 +
 
 +
;Parameters:
 +
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
 
 +
;Example: <kbd>tf_bot_melee_only 1</kbd> will have bots using only melee weapons.
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_prefix_name_with_difficulty</code>'''</big>}}
 +
|If nonzero, append the skill level of the bot to the bot's name
  
 
;Syntax: <code>tf_bot_prefix_name_with_difficulty <''integer''></code>
 
;Syntax: <code>tf_bot_prefix_name_with_difficulty <''integer''></code>
Line 124: Line 197:
 
::Either 1 or 0. Default is 0 (disabled).
 
::Either 1 or 0. Default is 0 (disabled).
  
;Example: <code>tf_bot_prefix_name_with_difficulty 1</code> will cause added bots to have names like "1 Aimbot" (normal) and "3 Saxton Hale" (expert).
+
;Example: <kbd>tf_bot_prefix_name_with_difficulty 1</kbd> will cause added bots to have names like "Normal Aimbot" and "Expert Saxton Hale".
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_quota</code>'''</big>}}
===tf_bot_quota===
+
|Determines the total number of TFBots in the game. Only has effect if <var>tf_bot_quota_mode</var> = "<code>fill</code>" or "<code>match</code>".
|
 
Determines the total number of tf bots in the game. Only has effect is "tf_bot_quota_mode" = "fill" or "match".
 
  
 
;Syntax: <code>tf_bot_quota <''integer''></code>
 
;Syntax: <code>tf_bot_quota <''integer''></code>
Line 137: Line 208:
 
::Whole number between 0 and how many players the server can hold. Default is 0.
 
::Whole number between 0 and how many players the server can hold. Default is 0.
  
;Example: <code>tf_bot_quota 2</code>, if tf_bot_quota_mode = match, will add two bots to the server for every one human.
+
;Example: <kbd>tf_bot_quota 2</kbd>, if <var>tf_bot_quota_mode</var> = <code>match</code>, will add two bots to the server for every one human.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>tf_bot_quota_mode</code>'''</big>}}
===tf_bot_quota_mode===
+
|Determines the type of quota.
|
 
Determines the type of quota.
 
  
 
;Syntax: <code>tf_bot_quota_mode<''normal/fill/match''></code>
 
;Syntax: <code>tf_bot_quota_mode<''normal/fill/match''></code>
Line 148: Line 217:
 
;Parameters:
 
;Parameters:
 
:<code>''normal/fill/match''</code>
 
:<code>''normal/fill/match''</code>
::If 'normal', the server will never add/remove TFbots without explicit commands and bot_quota has no effect.
+
::If 'normal', the server will never add/remove TFBots without explicit commands and <var>bot_quota</var> has no effect.
::If 'fill', the server will adjust bots to keep N players in the game, where N is bot_quota.
+
::If 'fill', the server will adjust bots to keep N players in the game, where N is <var>bot_quota</var>.
::If 'match', the server will maintain a 1:N ratio of humans to bots, where N is bot_quota.
+
::If 'match', the server will maintain a 1:N ratio of humans to bots, where N is <var>bot_quota</var>.
 +
 
 +
;Example: <kbd>tf_bot_quota_mode fill</kbd> will always keep (bot_quota - # of human players) bots in the game.
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_taunt_victim_chance</code>'''</big>}}
 +
|Determines how often a Bot will taunt a human victim.
 +
 
 +
;Syntax: <code>tf_bot_taunt_victim_chance <''integer''></code>
 +
 
 +
;Parameters:
 +
:<code><''integer''></code>
 +
:: Whole number between 0 and 100. Default is 20.
  
;Example: <code>tf_bot_quota_mode fill</code> will always keep (bot_quota - # of human players) bots in the game.
+
;Examples: <kbd>tf_bot_taunt_victim_chance 0</kbd> Bots will never taunt after killing a human player.
|}
+
:<kbd>tf_bot_taunt_victim_chance 100</kbd> Bots will always taunt after killing a human player.
 +
|-
 +
|{{nw|<big>'''<code>tf_bot_warp_team_to_me</code>'''</big>}}
 +
|Teleports your team's bots to your position. Requires <code>sv_cheats 1</code>.
  
 +
;Syntax: <code>tf_bot_warp_team_to_me</code>
  
It is possible to use AI bots on non-supported maps, but results will vary.  First, the server must have cheats enabled (which means human players cannot gain achievements), and second, you must generate bot pathing which causes the map to restart, and third, this pathing generally does not work well after all that.  However, if you still wish to use bots on unsupported maps, here is how:
+
;Parameters:
 +
:N/A
 +
|}
  
:1) Type sv_cheats 1
+
===Current AI bot status=== 
:2) Type nav_generate
+
AI bots are fully released{{cite|when were they fully/officially released?}}. Currently, all classes are working properly due to the [[Hatless Update]], including the once-buggy [[Spy]]. AI bots only work properly for most official [[King of the Hill]] maps, some [[Payload]] maps, Attack/Defend maps [[Dustbowl]] and [[Gorge]], [[Capture the Flag]] maps, and [[Mann Manor]] (on the latter two, bots can only be added by using the <kbd>tf_bot_add</kbd> command in the console). The use of AI bots on non-supported maps is possible by following certain steps; however, they will not emulate human players as well.
:3) Wait a few minutes while the game works out where and how to use the bots
 
:4) Map will exit and reload (navigation is saved, so no need to repeat previous step)
 
:5) Open console and type ''tf_bot_add <number>'' as above
 
  
Additionally, a [[Downloads#TF2 bot navigation meshes|pack of pre-made bot meshes]] has been compiled for many popular maps.
+
Bots will not work properly on any [[PLR]] map as they either can't jump over the railings on [[Hightower]] or get stuck in a random corner in spawn; and bots have a dance party on any other [[PLR]] map (this may change in the future).{{cite|where is the future plan?}}
  
Note: Bots do not work on [[Capture the Flag]] or [[Payload]] maps even if the above tutorial is used until a new update is released that gives them extra code.
+
====AI bot behavior====
 +
* Bots currently only use the default [[loadout]] (although they can be given non-Stock weapons with a custom mod/plugin).
 +
* Bots on Easy difficulty will rarely, if ever, use any weapon other than their primary weapon. Bots on higher difficulties will switch to and use their secondary weapon as soon as the ammunition of their primary weapon is spent, or to compensate for the distance of their target.
 +
* Bots currently cannot execute special [[jump]]s (such as rocket jumps) or [[haul]] buildings.
 +
* If a bot kills a player, they roll a chance to [[taunt]] immediately after, and if it succeeds, they will taunt even if they are under enemy fire. However, bots will not taunt if carrying the enemy intelligence. This behavior applies to [[Robots]] in [[Mann vs. Machine (game mode)|Mann vs. Machine mode]].
 +
* Spy bots (and players) are properly ignored by other bots while [[disguise]]d. However, upon 'touching' any enemy bot, [[Sapper|sapping]], shooting, or [[Cloak]]ing, all other bots who see it happen will declare the bot/player a Spy and won't forget who they are until they change disguises while unseen or until the bot(s) who declared them a Spy dies or feigns death with the [[Dead Ringer]].
 +
* [[Pyro]] bots will use the [[compression blast]] against projectiles and opponents with unusual frequency if on difficulties other than Easy.
 +
* [[Medic]] bots will usually heal all other classes before Snipers (and to a lesser extent Engineers) even if the "Medic!" voice command is used.
 +
* Medic bots tend to favor Heavies, Soldiers, Demomen, and Pyros, if being played by a human. If no human player is one of these classes, they are not likely to be pocketed.
 +
* A Medic bot with an ÜberCharge ready will immediately activate the charge if he gets hurt. This behavior is used by [[Über Medic]]s in [[Mann vs. Machine (game mode)|Mann vs. Machine mode]].
 +
* Bots do not attack during setup time unless they are attacked first (with the exception of [[Demoman]] bots planting stickybombs).
 +
* Engineer bots do not upgrade (or even remove Sappers from) their Teleporters, and sometimes don't repair their Sentry Guns even when they're not under fire.
 +
* Engineer bots will never repair or upgrade a friendly Engineer bot's building, unless that building is in the way of the Engineer's target.
 +
* Bots, excluding Engineers, Snipers, and Spies, will stay in their spawn positions on setup when attacking in a [[Attack/Defend]] map or a [[Payload]] map.
 +
* Spy bots, when spotted by another bot (possibly player), will not attempt to backstab and will instead switch to their [[Revolver]] and shoot while retreating.
 +
* Demoman bots, once they know where a Sentry Gun is (after seeing, getting shot by, or dying to one), will be able to stand out of range of the sentry and perfectly aim and time their stickybomb charges to land precisely where the Sentry Gun is. Walls and ceilings may occasionally get in the way of the stickybombs' flight path, though.
 +
* Sniper bots, upon scoping in and not finding a target, will use one of the "Negative" [[Sniper voice commands#Voice Menu 3|voice commands]]
 +
* Friendly Medics will tend to heal a disguised Spy.
  
==Bot names==
+
====Bugs====
 +
* Bots may try to walk/shoot through unmovable objects such as walls.
 +
* Whenever a player/bot cloaks/decloaks or disguises/undisguises, the bots will 'see' players who are behind them and turn around, even if out of the bot's [[field of view]]. Note that this isn't due to any sounds made by the player (footsteps, miscellaneous weapon noises, etc.).
 +
* Though rarely, bots may stand inside one another during usage of an Engineer's Teleporter, and get stuck (can't move).
 +
* When bots use [[voice commands]] (such as "Spy!" and "Move Up!"), text versions of the voice commands do not display.
 +
* A [[Medic]] bot who is [[healing]] a player will not avoid enemy fire or collect [[health pickups]], even if he is at critically low health.
 +
* Bots are able to move while taunting, making the [[Holiday Punch]] ineffective.
 +
* Recently attacked Medic bots will often fail to use their [[Syringe Gun]] to deal with enemies at non-[[melee]] range, instead switching to their [[Bonesaw]], or even to their [[Medi Gun]] on extremely rare occasions.
 +
* Medic bots will fail to lead their aim or to compensate for gravity while firing the Syringe Gun. This may be due to the Syringe Gun not being properly identified as a non-[[hitscan]] weapon in the bot AI code.
 +
* Spy bots are able to see and follow cloaked Spies (AI or player) should one give himself away, regardless of difficulty level.
 +
* Even if a Spy is disguised as a class of his team (player only, as bots will never do this), enemies will still point him out as a Spy should he bump into an enemy.
 +
* Bots abide by Auto-balance rules. To be able to spawn bots on a specific team, you must set {{cvar|mp_teams_unbalance_limit}} to 0.
 +
* Engineer bots may ignore their [[buildings]] until they're destroyed.
 +
* Heavy bots will sometimes try to fire their Minigun even when out of ammo. (Although it seems to occur abundantly when the bot difficulty is set below Advanced)
 +
* Medic bots on the losing team will occasionally commit suicide during [[Humiliation]] when there are no enemies nearby. Players are unable to do the same, even using commands.
 +
* Setting the loadout menu's preview to BLU will cause RED bots to appear BLU.
 +
* Currently, bots do not work on the following types of game modes or maps, even with a generated navigation mesh. (Spies and Snipers may work, though.)
 +
** [[Arena]] and [[Versus Saxton Hale]] Modes <small>{{tooltip|NOTE|Bots will only move after being attacked or approached, and will still stay in spawn indefinitely. Snipers and Spies always work, and Engineers will start to work once the Control Point is unlocked. You can play a normal working game if you force the Sniper or Spy class with the command tf_bot_force_class}}</small>
 +
** [[Payload#Payload Race|Payload Race]] <small>{{tooltip|NOTE|Only Engineers, Snipers, and Spies will leave spawn.}}</small>
 +
** [[Mann Vs. Machine (game mode)|Mann Vs. Machine]] <small>{{tooltip|NOTE|While the actual robot team works, any player-sided bots rarely work. They know to open fire on the enemy team and on occasion a bot may step through a player-placed Teleporter, but only one or two at most. Spies will always work, so it is possible to play with only Spies. Engineer bots may also be used, they behave like the Engineer Robots. Bots cannot purchase upgrades.}}</small>
 +
** [[Special Delivery (game mode)|Special Delivery]]
 +
** [[Robot Destruction]]
 +
** [[Cactus Canyon]] <small>{{tooltip|NOTE|Section 2 is not being mapped in the navigation mesh.}}</small>
 +
** [[Mannpower]] <small>{{tooltip|NOTE|Cannot use grappling hooks, or properly use powerups.}}</small>
 +
** [[PASS Time]] <small>{{tooltip|NOTE|Only Spies and Snipers will leave spawn, and they won't pick up or follow the ball. The ball can be passed to them, though.}}</small>
 +
** [[Player Destruction]] <small>{{tooltip|NOTE|Again, only Spies and sometimes Snipers will leave spawn, waiting outside the enemy's spawn while disguised if no human players are present.}}</small>
 +
** [[Snowycoast]] <small>{{tooltip|NOTE|The RED team will not leave spawn or setup a defence around the cart, and the BLU team will get stuck on a wall in attempting to push the cart. Spies on the BLU team will not move at all.}}</small>
 +
** [[Snowplow]] <small>{{tooltip|NOTE|The RED team will not leave spawn and setup a defense during setup time, and the BLU team will attempt to push the train as if it were a Payload. Section 2 is not being mapped in the navigation mesh.}}</small>
 +
** [[Byre]] <small>{{tooltip|NOTE|Only Engineers will leave spawn.}}</small>
 +
** [[Nightfall]] and [[Pipeline]] <small>{{tooltip|NOTE|Only section 3 is mapped in the navigation mesh.}} </small>
 +
** [[Hassle Castle]] <small>{{tooltip|NOTE|RED bots will work perfectly fine, but BLU bots will never leave spawn, with the exception of Scouts and Spies.}}</small>
 +
* Bots that have their [[Melee]] weapons out will occasionally not switch to their other weapons, even if they pick up ammo.
 +
** This can be fixed by either killing them or just randomly.
 +
* After the [[Jungle Inferno Update]], bots spawned with specific parameters (example:{{cvar|tf_bot_add 5 pyro blue normal}}) will die in their spawnrooms. This can be prevented with the command: {{cvar|tf_bot_reevaluate_class_in_spawnroom 0}}, which requires setting {{cvar|sv_cheats}} to 1.
  
The AI bots are programmed to have different names. A lot of their names are references to many of Valve's works, such as, but not limited to, Portal, Left 4 Dead and its sequel, and Half-Life. They also include some references to Team Fortress and the fandom as well. Many of these names have been requested on the Steam forums. <!--If you encounter other names that aren't on the list, please add them-->
+
===AI bot names===
 +
The AI bots are programmed to have different names, with many of their names being references to ''Team Fortress 2'', Valve's other works, and computer programming. Many of these names have been requested on the [[Steam Users' Forums|Steam forums]]. <!--If you encounter other names that aren't on the list, please add them-->
  
*AimBot
+
{{Bot names}}
*AmNot
 
*Aperture Science Prototype XR7
 
*BeepBeepBoop
 
*[[Meet the Engineer|Big Mean Mother Hubbard]]
 
*Black Mesa
 
*BoomerBile
 
*Cannon Fodder
 
*CEDA
 
*Chell
 
*[[Scout|Chucklenuts]]
 
*Companion Cube
 
*[[Engineer|CreditToTeam]]
 
*[[Damage|CRITRAWKETS]]
 
*Crowbar
 
*CryBaby
 
*[[Heavy|CrySomeMore]]
 
*C++
 
*Delicious Cake
 
*DeadHead
 
*Divide by Zero
 
*Dog
 
*[[Force-A-Nature|Force of Nature]]
 
*[[Hats|Gentlemanne of Leisure]]
 
*GlaDOS
 
*[[Demoman|GutsAndGlory!]]
 
*Hat-Wearing MAN
 
*Headful of Eyeballs
 
*[[Soldier|Herr Doktor]]
 
*HI THERE
 
*Hostage
 
*Humans Are Weak
 
*H@XX0RZ
 
*I LIVE!
 
*IvanTheSpaceBiker
 
*Kaboom!
 
*LOS LOS LOS
 
*Maggot
 
*[[Mann Co.]]
 
*Me
 
*Mindless Electrons
 
*MoreGun
 
*[[The Sandvich|Nom Nom Nom]]
 
*Not Me
 
*Numnutz
 
*One-Man Cheeseburger Apocalypse
 
*Pow!
 
*RageQuit
 
*Screamin' Eagles
 
*Still Alive
 
*SomeDude
 
*Someone Else
 
*Soulless
 
*TAAAAANK!
 
*Target Practice
 
*ThatGuy
 
*THEM
 
*Tiny Baby Man
 
*Totally Not A Bot
 
*The Combine
 
*The Freeman
 
*The G-Man
 
*trigger_hurt
 
*WITCH
 
*ZAWMBEEZ
 
*[[Medic|Ze Ubermensch]]
 
*[[Zepheniah Mann]]
 
*0xDEADBEEF
 
*10001011101
 
  
==Puppet Bots==
+
AI bots names can also be customized by a player by typing in, for example, <kbd>tf_bot_add heavyweapons blue "Blu Hoovy"</kbd>; this example would put a [[BLU]] [[Heavy]] on the BLU team with the name "Blu Hoovy".
  
Puppet bots have no AI code and so cannot replace human players.  They do not move or act on their own. You can use them like puppets though, manipulating them to do things such as follow you around and fire their weapons.
+
==Puppet bots==
 +
Puppet bots have no AI code and cannot move or act on their own. These bots can be used like puppets though: players can manipulate them to follow the player's commands such as following the player around and firing their weapons. Puppet bots are mainly used for testing purposes and can also create stunning visuals if manipulated accordingly. To spawn puppet bots, {{cvar|sv_cheats}} has to be set to 1.
  
They are mainly useful for testing.  They are also good for the sheer fun of watching an army of perfect soldiers firing their rockets in unison, or gibbing a dozen helpless enemies at once with pipebombs.
+
===Puppet bot commands===
  
Because they require the server to have cheats enabled, human players cannot gain achievements while using these bots.
+
Not all of the following commands work; some working commands are also omitted.  
  
==Puppet Bot Commands==
+
These commands may or may not work for AI bots as well.
  
Some of these commands work and some don't. For clarity, the complete list is included.  Note that for all commands, entering the command without any options will display the command's current setting and a brief (one line) help.
+
''Note: entering the command without any values will display the command's current setting and a brief description.''
  
 
{| class="wikitable grid"
 
{| class="wikitable grid"
Line 258: Line 325:
 
! class="header" | Description
 
! class="header" | Description
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot</code>'''</big>}}
===bot===
+
|This command will create a bot on the given team with the specified class and name. If team or name is omitted, they will be assigned randomly.
|
 
This command will create a bot on the given team with the specified class and name. If team or name is omitted, they will be assigned randomly.
 
  
;Syntax: <code>bot -team <''teamname/number''> -class <''classname''> -name <''botname''></code>
+
;Syntax: <code>bot [<''teamname/number''>] [<''classname''>] [<''name''>] [<''number''>]</code>
  
;Parameters:
+
;Parameters
:<code>-team ''teamname/number''</code>
+
:<code><''number''></code>
 +
::Amount of bots to add.
 +
:<code><''teamname/number''></code>
 
::Specifies the team name or number to assign the bot. Where ''name/number'' can be ''[[RED]]'' or ''1'', ''[[BLU]]'' or ''0''
 
::Specifies the team name or number to assign the bot. Where ''name/number'' can be ''[[RED]]'' or ''1'', ''[[BLU]]'' or ''0''
:<code>-class ''classname''</code>
+
:<code><''classname''></code>
::The ''classname'' of the class can be ''[[Demoman]]'', ''[[Engineer]]'', ''[[Heavy]]Weapons'', ''[[Medic]]'', ''[[Pyro]]'', ''[[Scout]]'', ''[[Soldier]]'', ''[[Sniper]]'', or ''[[Spy]]''
+
::The ''classname'' of the class can be ''[[Demoman]]'', ''[[Engineer]]'', ''[[Heavy]]'', ''[[Medic]]'', ''[[Pyro]]'', ''[[Scout]]'', ''[[Soldier]]'', ''[[Sniper]]'', or ''[[Spy]]''
:<code>-name ''botname''</code>
+
:<code><''teleport''></code>
::''botname'' can be anything. If there is already someone with the same name, an incremental number (starting at 1) surrounded with parenthesis will be added to the beginning of the name. For example, joe, (1)joe, (2)joe, etc. If no name is given then the name will be "bot" followed by a number starting with 01; for example, the first bot will be bot01, the next bot02, and so on.
+
::Teleports the spawned bot to where your cursor is aiming.
;Example: <code>bot -team red -class Engineer -name joe</code>
+
:<code><''targetdummy''></code>
 +
::Prevents the spawned bot from losing health.
 +
:<code><''name''></code>
 +
::''name'' can be anything. If there is already someone with the same name, an incremental number (starting at 1) surrounded with parenthesis will be added to the beginning of the name. For example, joe, (1)joe, (2)joe, etc. If no name is given then the name will be "bot" followed by a number starting with 01; for example, the first bot will be Bot01, the next Bot02, and so on.
 +
;Example
 +
:<code>bot -team red -class Engineer -name joe</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_changeclass</code>'''</big>}}
===bot_changeclass===
+
|Force all bots to change to the specified class.
|
+
 
Force all bots to change to the specified class.
+
;Syntax: <code>bot_changeclass <''name''> <''classname''></code>
''Does not seem to be implemented, nothing happens.''
+
 
 +
;Parameters
 +
:<code><''name''></code>
 +
::Name of the target bot.
 +
:<code><''classname''></code>
 +
::The ''classname'' of the class the bot will switch to. Default is "" (aka blank).
 +
;Example
 +
:<code>bot_changeclass bot01 Soldier</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_changeteams</code>'''</big>}}
===bot_changeteams===
 
 
|
 
|
 
Make all bots change teams.
 
Make all bots change teams.
 
This forces all the bots to switch teams. If a bot was on the RED team then it will now be on the BLU team and vice versa.
 
This forces all the bots to switch teams. If a bot was on the RED team then it will now be on the BLU team and vice versa.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_command</code>'''</big>}}
===bot_command===
+
|Sends specified command on behalf of specified bot.
|
+
 
Sends specified command on behalf of specified bot.
+
;Syntax: <code>bot_command <''name/all''> <''console command''></code>
 +
;Parameters
 +
:<code><''name/all''></code>
 +
::Name or id of the bot to send the command to. Setting this to 'all' will send the command to all the bots.
 +
:<code><''console command''></code>
 +
::Can be any of the ones listed in [[Scripting#Console Commands|console commands]], as well as some of the [[cheats]].
 +
;Example 1
 +
:<code>bot_command bot01 "voicemenu 0 0"</code>
 +
;Example 2
 +
:<code>bot_command bot01 "taunt"</code>
  
;Syntax: <code>bot_command <''botname''> <''console command''></code>
+
::The slot commands (slot1, slot2, etc.) do not work with bot_command, however with <code>bot_forcefireweapon</code>, all bots in that class can be made to switch to a weapon and start firing, then made to stop. Only the entire group of bots in that class can be made to do so, however.
::''botname'' is the name or id of the bot to send the command to.
 
::''console command'' can be any of the ones listed in [[Scripting#Console_Commands]].
 
;Example 1: bot_command bot01 "voicemenu 0 0"
 
;Example 2: bot_command bot01 "taunt"
 
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_dontmove</code>'''</big>}}
===bot_defend===
+
|Bots are allowed or prevented from moving.  When set to ''1'' the bots cannot move but they can still turn and jump.  Note with a combination of this command and <code>bot_mimic</code> bots can be moved to certain areas and left there.
|
 
Set to a team number, and that team will all keep their combat shields raised.
 
For instance, heavies will spin their miniguns.
 
|-
 
|
 
===bot_dontmove===
 
|
 
Bots are allowed or prevented from moving.  When set to ''1'' the bots cannot move but they can still turn and jump.  Note with a combination of this command and <code>bot_mimic</code> you can move bots to where you want them and leave them there.
 
  
;Syntax: <code>bot_dontmove <''0/1''></code>
+
;Syntax: <code>bot_dontmove <''integer''></code>
::Bot is allowed to move, or not.
+
;Parameters
;Example: <code>bot_dontmove 1</code>
+
:<code><''integer''></code>
 +
::Bots will be allowed to move when set to 1. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_dontmove 1</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_forceattack</code>'''</big>}}
===bot_forceattack===
+
|This will make all the bots automatically fire whatever [[weapon]] they currently have selected.  If <code>bot_forceattack2</code> is set to ''0'', then the bots will execute primary_fire.  If <code>bot_forceattack2</code> is set to ''1'', then the bots will execute secondary_fire.
|
 
This will make all the bots automatically fire whatever [[weapon]] they currently have selected.  If <code>bot_forceattack2</code> is set to ''0'', then the bots will execute primary_fire.  If <code>bot_forceattack2</code> is set to ''1'', then the bots will execute secondary_fire.
 
  
 
Note this does nothing if <code>bot_mimic</code> is active (set to ''1'').
 
Note this does nothing if <code>bot_mimic</code> is active (set to ''1'').
  
;Syntax: <code>bot_forceattack <''0/1''></code>
+
;Syntax: <code>bot_forceattack <''integer''></code>
::Bot will not fire if set to ''0'' and fire repeatedly if set to ''1''.
+
;Parameters
;Example: <code>bot_forceattack 1</code>
+
:<code><''integer''></code>
 +
::When set to 1, all bots fire their guns. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_forceattack 1</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_forceattack2</code>'''</big>}}
===bot_forceattack2===
+
|This will make all the bots execute secondary_fire on whatever [[weapon]] they currently have selected when <code>bot_forceattack</code> is set to ''1''.
|
 
This will make all the bots execute secondary_fire on whatever [[weapon]] they currently have selected when <code>bot_forceattack</code> is set to ''1''.
 
  
;Syntax: <code>bot_forceattack2 <''0/1''></code>
+
;Syntax: <code>bot_forceattack2 <''integer''></code>
 +
;Parameters
 +
:<code><''integer''></code>
 
::Bot will use its weapon's secondary_fire when set to ''1'', primary_fire when set to ''0''
 
::Bot will use its weapon's secondary_fire when set to ''1'', primary_fire when set to ''0''
;Example: <code>bot_forceattack2 1</code>
+
;Example
 +
:<code>bot_forceattack2 1</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_forceattack_down</code>'''</big>}}
===bot_forceattack_down===
+
|When firing, don't tap fire, hold it down. If this is set to ''0'' then the bot will act like they are continuously tapping the fire button (useful for the [[Stickybomb Launcher]]). If this is set to ''1'' then the bot will act as if it is holding down the fire button (useful for the [[Minigun]]).
|
 
When firing, don't tap fire, hold it down. If this is set to ''0'' then the bot will act like they are continuously tapping the fire button (useful for the [[Pistol]], but not for the [[Heavy]]'s [[Minigun]]). If this is set to ''1'' then the bot will act as if it is holding down the fire button (useful for the Heavy).
 
  
 
;Syntax: <code>bot_forceattack_down <''0/1''></code>
 
;Syntax: <code>bot_forceattack_down <''0/1''></code>
::On when set to ''1'', off when set to ''0''
+
;Parameters
;Example: <code>bot_forceattack_down 1</code>
+
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_forceattack_down 1</code>
 +
|-
 +
|{{nw|<big>'''<code>bot_forcefireweapon</code>'''</big>}}
 +
|Forces all bots who have the specified weapon to switch to and fire it.
 +
If a bot does not have this weapon, nothing happens to it (unless it is firing a different weapon, in which it stops)
 +
;Syntax: <code>bot_forcefireweapon <''weapon filename''></code>
 +
::''filename'' is usually ''tf_weapon_ <weapon name>''.
 +
;Examples
 +
:<code>bot_forcefireweapon tf_weapon_fists</code> makes all [[Heavy]] bots switch to and repeatedly attack with their [[Fists]], and all other bots stop attacking.
 +
:<code>bot_forcefireweapon tf_weapon_shotgun_pyro</code> makes all [[Pyro]] bots switch to and repeatedly fire their [[Shotgun]]s, and all other bots stop attacking.
 +
 
 +
::To make all bots stop attacking, simply specify a non-existent weapon filename. Anything without tf_weapon in it isn't a TF2 weapon, so the bots won't shoot it, for example <code>''bot_forcefireweapon ,,''</code>.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_jump</code>'''</big>}}
===bot_forcefireweapon===
+
|Force all bots to repeatedly jump.
|
+
;Syntax: <code>bot_jump <''integer''></code>
Force bots with the specified weapon to fire.
+
;Parameters
''Does not seem to be implemented, nothing happens.''
+
:<code><''integer''></code>
 +
::All bots will repeatedly jump when set to 1. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_jump 1</code>
 +
|-
 +
|{{nw|<big>'''<code>bot_crouch</code>'''</big>}}
 +
|Force all bots to hold crouch.
 +
;Syntax: <code>bot_crouch <''integer''></code>
 +
;Parameters
 +
:<code><''integer''></code>
 +
::All bots will hold crouch when set to 1. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_crouch 1</code>
 +
|-
 +
|{{nw|<big>'''<code>bot_kick</code>'''</big>}}
 +
|Remove a bot by name, or an entire team, or all bots.
 +
;Syntax: <code>bot_kick <''name/team''></code>
 +
::Makes the specified bot commit suicide.
 +
;Example
 +
:<code>bot_kick bot01</code> will kick the bot named "bot01" if it exists.
 +
:<code>bot_kick red</code> will kick all the bots on the red team.
 +
:<code>bot_kick blue</code> will kick all the bots on the blu team.
 +
:<code>bot_kick all</code> will kick all the bots in the server.
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_kill</code>'''</big>}}
===bot_kill===
+
|Kills a bot.
|
+
;Syntax: <code>bot_kill <''name''></code>
Kills the specified bot.
+
;Parameters
;Syntax: <code>bot_kill <''bot name''></code>
+
:<code><''name''></code>
 
::Makes the specified bot commit suicide.
 
::Makes the specified bot commit suicide.
;Example: <code>bot_kill bot01</code>
+
;Example
 +
:<code>bot_kill bot01</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_mirror</code>'''</big>}}
===bot_mimic===
+
|Specified bots mirror the player's loadout (class, cosmetics, and weapons). There are a few bugs; for example, if a [[Demoman]] player has the [[Booties]] and any shield equipped, a mirrored bot will still use the [[Grenade Launcher]] and [[Stickybomb Launcher]] despite showing the Booties and shield on his model. After a mirrored bot dies, it will not retain the previous loadout, and bot_mirror must be used again.
|
+
 
Bot uses usercmd of player by index.
+
;Syntax: <code>bot_mirror <''name''></code>
The bot will execute all keystrokes issued by a player, mimicking movements, turns, jumps, fire, etc.
+
::Where ''name'' is the name of the bot to mirror.
 +
;Example
 +
:<code>bot_mirror bot01</code>
 +
|-
 +
|{{nw|<big>'''<code>bot_mimic</code>'''</big>}}
 +
|Bot uses usercmd of player by index.
 +
The bot will execute all keystrokes issued by a player, mimicking movements, turns, jumps, fire, etc. It should be noted that bots will not mimic Medic calls, weapon switches, or taunts.
  
 
Note this overrides <code>bot_forceattack</code> but does not override <code>bot_dontmove</code>.
 
Note this overrides <code>bot_forceattack</code> but does not override <code>bot_dontmove</code>.
  
;Syntax: <code>bot_mimic <''0/1''></code>
+
;Syntax: <code>bot_mimic <''integer''></code>
::On when set to ''1'', off when set to ''0''
+
;Parameters
;Example: <code>bot_mimic 1</code>
+
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_mimic 1</code>
 
|-
 
|-
 +
|{{nw|<big>'''<code>bot_mimic_inverse</code>'''</big>}}
 
|
 
|
===bot_mimic_yaw_offset===
+
Inverts the movement of the bots; moving left makes the bots move right, moving forwards makes the bots move backwards, etc.
 +
 
 +
The direction which the bot is looking is not affected.
 +
 
 +
;Syntax: <code>bot_mimic_inverse <''integer''></code>
 +
;Parameters
 +
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_mimic_inverse 1</code>
 +
|-
 +
|{{nw|<big>'''<code>bot_mimic_yaw_offset</code>'''</big>}}
 
|
 
|
 
Offsets the bots' yaw.
 
Offsets the bots' yaw.
Line 375: Line 511:
 
;Syntax: <code>bot_mimic_yaw_offset <''0-360''></code>
 
;Syntax: <code>bot_mimic_yaw_offset <''0-360''></code>
 
::Set the direction by specifying angle in degrees
 
::Set the direction by specifying angle in degrees
;Example: <code>bot_mimic_yaw_offset 180</code>
+
;Example
 +
:<code>bot_mimic_yaw_offset 180</code>
 
|-
 
|-
 +
|{{nw|<big>'''<code>bot_randomnames</code>'''</big>}}
 
|
 
|
===bot_randomnames===
 
|
 
This will add text to bot names, apparently used for testing during development, some examples: "Yet more Bot names, medium size", "Another bot", "This is a medium Bot", "This is a super long bot name t"
 
  
;Syntax: <code>bot_randomnames <''0/1''></code>
+
;Syntax: <code>bot_randomnames <''integer''></code>
::On when set to ''1'', off when set to ''0''
+
;Parameters
;Example: <code>bot_randomnames 1</code>
+
:<code><''integer''></code>
 +
::Either 1 or 0. Default is 0 (disabled).
 +
;Example
 +
:<code>bot_randomnames 1</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_refill</code>'''</big>}}
===bot_refill===
+
|Refills all bots' ammo (including [[metal]] for Engineers) and health counts.
|
 
Refills all bots' Ammo counts, including [[Metal]] for Engineers.  
 
  
Syntax: <code>bot_refill</code>
+
;Syntax: <code>bot_refill</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_saveme</code>'''</big>}}
===bot_saveme===
+
|This makes all the bots call for a Medic, equivalent to issuing <code>bot_command <''name''> "voicemenu 0 0"</code> to every bot.
|
+
;Syntax: <code>bot_saveme <''integer''></code>
This makes all the bots call for a Medic, equivalent to issuing <code>bot_command <''botname''> "voicemenu 0 0"</code> to every bot.
+
;Parameters
Syntax: <code>bot_saveme <''0/1''></code>
+
:<code><''integer''></code>
::On when set to ''1'', off when set to ''0''
+
::All the bots will call for a Medic when set to 1. Default is 0 (disabled).
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_selectweaponslot</code>'''</big>}}
===bot_selectweaponslot===
+
|Forces a bot to switch to the specified weapon slot. To specify which bot switches weapons, use <code>''cc_bot_selectweapon''</code> instead.
|
 
This makes the first bot select weapon in specified weapon slot.
 
0 = primary; 1 = secondary; 2 = melee; 3 = special
 
Note this only works for the first bot spawned.  There doesn't seem to be a way to specify other bots.
 
  
;Syntax: <code>bot_selectweaponslot <''n''></code>
+
;Syntax: <code>bot_selectweaponslot <''n''> </code>
::Set ''n'' to weapon slot that bots should switch to.
+
;Parameters
;Example: <code>bot_selectweaponslot 2</code>
+
:<code><''n''></code>
 +
::Set ''n'' to weapon slot that bots should switch to.  
 +
::0 = primary; 1 = secondary; 2 = melee; 3 = special
 +
;Example
 +
:<code>bot_selectweaponslot 2 </code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_teleport</code>'''</big>}}
===bot_teleport===
+
|Teleports a specified bot to a given coordinate.
|
 
Teleports a specified bot to a given coordinate.
 
 
Map coordinates of where you are standing can be found by typing <code>Status</code> in the console.
 
Map coordinates of where you are standing can be found by typing <code>Status</code> in the console.
  
;Syntax: <code>bot_teleport <''botname''> <''X''> <''Y''> <''Z''> <''Pitch''> <''Yaw''> <''Roll''></code>
+
;Syntax: <code>bot_teleport <''name''> <''X''> <''Y''> <''Z''> <''Pitch''> <''Yaw''> <''Roll''></code>
::Where ''botname'' is the bot name or id to teleport.
+
::Where ''name'' is the name of the bot or id to teleport.
::<code>''X'' ''Y'' ''Z''</code> are the map coordinates.
+
;Parameters
::<code>''Pitch'' ''Yaw'' ''Roll''</code> is the direction the bot should face.
+
:<code><''name''></code>
;Example: <code>bot_teleport bot01 -4815 1385 -447 0 0 0</code>
+
::Name of the bot to teleport.
 +
:<code><''X''> <''Y''> <''Z''></code>  
 +
::Coordinates of the map the bot will be teleported to.
 +
:<code><''Pitch''> <''Yaw''> <''Roll''></code>
 +
::The direction the bot should face.
 +
;Example
 +
:<code>bot_teleport bot01 -4815 1385 -447 0 0 0</code>
 
|-
 
|-
|
+
|{{nw|<big>'''<code>bot_whack</code>'''</big>}}
===bot_whack===
+
|Delivers lethal damage from player to specified bot. This basically kills the bot with the currently selected weapon, probably used for testing during development. It is worth noting that you can only use bot_whack to kill a teammate if mp_friendlyfire is set to 1, otherwise attempting to whack a teammate will not do anything.
|
 
Deliver lethal damage from player to specified bot. This basically kills the bot with the currently selected weapon, probably used for testing during development.
 
  
;Syntax: bot_whack <''botname''>
+
;Syntax: <code>bot_whack <''name''></code>
::Where ''botname'' is the name of bot to "whack".
+
;Parameters
;Example: bot_whack bot109
+
:<code><''name''></code>
|}
+
::Name of the bot to "whack".
 +
;Example
 +
:<code>bot_whack bot01</code>
 +
|-
 +
|{{nw|<big>'''<code>cc_bot_selectweapon</code>'''</big>}}
 +
|Forces a bot to switch to the specified weapon slot.
 +
;Syntax: <code>cc_bot_selectweapon <''name''> <''n''> </code>
 +
;Parameters
 +
:<code><''n''></code>
 +
::Set ''n'' to weapon slot that bots should switch to.
 +
::0 = primary; 1 = secondary; 2 = melee; 3 = special
 +
:<code><''name''></code>
 +
::Name of the bot that will switch weapon slot.
 +
;Example
 +
:<code>cc_bot_selectweapon bot12 2</code>
 +
|-
 +
|{{nw|<big>'''{{code|bot_hurt}}'''</big>}}
 +
|Hurt a bot by team, or all bots ("all").
  
 +
;Syntax: {{code|bot_hurt [<''name''>] [<''team''>] [<''damage''>]}}
  
==Useful aliases and binds==
+
;Parameters
 
+
:<code><''name''></code>
<code>sv_lan 1</code>
+
::Name of the bot to hurt.
 
+
:<code><''team''></code>
<code>sv_cheats 1</code>
+
::Specifies the team name of the bot to hurt. Can be ''[[RED]]'', ''[[BLU]]'' or ''all''.
 
+
:<code><''damage''></code>
<code>mp_teams_unbalance_limit 0</code>
+
::Specifies the amount of damage the bot will receive. If a negative number is set, it will heal (and [[overheal]]) the bot instead.
 
+
:<code><''burn''></code>
<code>alias +bot_shoot_primary "bot_selectweaponslot 0; bot_forceattack 1"</code>
+
::Set the bot on fire. However, the bot will not receive any afterburn damage.
 
+
;Example
<code>alias -bot_shoot_primary "bot_selectweaponslot 0; bot_forceattack 0"</code>
+
:<code>bot_hurt -name joe -team red -damage 150</code>
 
+
|}
<code>alias +bot_shoot_secondary "bot_selectweaponslot 1; bot_forceattack 1"</code>
 
 
 
<code>alias -bot_shoot_secondary "bot_selectweaponslot 1; bot_forceattack 0"</code>
 
 
 
<code>bind n +bot_shoot_primary</code>
 
 
 
<code>bind m +bot_shoot_secondary</code>
 
 
 
Pressing ''n'' will cause the bot to switch to its primary weapon and fire once. Pressing ''m'' will cause the bot to switch to its secondary weapon and fire once.  Press each key repeatedly to fire repeatedly.  If you want to use secondary fire for a particular weapon (e.g. detonate demoman sticky bombs or bat a ball from the sandman), type in <code>bot_forceattack2 1</code> in the console to enable secondary fire, then press the bound key, then <code>bot_forceattack2 0</code> to switch back to primary fire.  Of course you could also bind these to a key...
 
 
 
==Example Scripts==
 
#Create a server and load a map ([[Gravelpit]] works well as a map since there is just the one respawn room, or the achievement maps with the open spawn areas).
 
#Join as a BLU Engineer and stay in the respawn room.
 
#Bring down console and type:
 
#:<pre>
 
#:sv_cheats 1
 
#:mp_teams_unbalance_limit 0
 
#:bot -class Engineer
 
#:bot_mimic_yaw_offset 0
 
#:bot_mimic 1
 
#:</pre>
 
#:This will spawn a BLU Engineer bot by the name of "bot01" which will do what you do, including walking around and selecting/firing weapons. However, it will not build anything if you build it. You can make it select the build menu, but cannot actually select a menu item when you do. Thankfully, there is the '''BUILD''' command and the <code>bot_command</code> that can make the bot issue commands.
 
#Bring down console and type:
 
#:<pre>
 
#:bot_command bot01 "build 3"
 
#:</pre>
 
#:This will start the build process with the Engineer holding his toolbox, the bot should be seeing the blueprint now.
 
#Close the console and press your fire button - this will start the [[Sentry]] building. Keep pressing the fire button to make the bot hit the Sentry with his [[Wrench]] to build it faster, and if you want add Metal to it. If you want to increase the Sentry's level then you need to give the bot more Metal with the <code>bot_refill</code> console command.
 
 
 
=== Other examples===
 
#:The following will create a red medic and a red soldier who fire continously until they are out of ammo. The medic ends up with a medigun set to heal any other player who passes them or an enemy spy. The soldier ends up bashing away with his melee weapon unless he ends up above a supply of ammunition I which case he will continually fire rockets (good for deflection practice).
 
:<pre>
 
:sv_cheats 1
 
:mp_teams_unbalance_limit 0
 
:bot -team red -class medic
 
:bot -team red -class soldier
 
:bot_mimic 0
 
:bot_forceattack 1
 
:bot_selectweaponslot 1
 
:sv_cheats 0
 
:retry
 
:</pre>
 
 
 
#:The following will create a red sniper who continously scopes in and a red spy who cloaks and decloaks. The retry after turning sv_cheats off gives you a clean  session.
 
:<pre>
 
:sv_cheats 1
 
:mp_teams_unbalance_limit 0
 
:bot -team red -class sniper
 
:bot -team red -class spy
 
:bot_selectweaponslot 1
 
:bot_mimic 0
 
:bot_forceattack 1
 
:bot_forceattack2 1
 
:sv_cheats 0
 
:retry
 
:</pre>
 
  
#:The following gives you three red scouts and three red heavies.
+
== Notes ==
:<pre>
+
* TFBots can also be controlled with {{code|nb_}} (e.g. {{code|nb_select}} and {{code|nb_warp_selected_here}} to teleport bots to a specific location).
:sv_cheats 1
 
:mp_teams_unbalance_limit 0
 
:bot -team red -class scout
 
:bot -team red -class scout
 
:bot -team red -class scout
 
:bot -team red -class heavyweapons
 
:bot -team red -class heavyweapons
 
:bot -team red -class heavyweapons
 
:sv_cheats 0
 
:retry
 
:</pre>
 
  
{{Languages}}
+
==References==
 +
<references/>
  
[[Category: Customization]]
+
[[Category:Customization]]
 +
[[Category:Gameplay]]

Latest revision as of 14:34, 11 November 2024

A Soldier bot in action on the Dustbowl Training map.
This page is about computer-controlled players in the game Team Fortress 2.
Human teammates might judge you, but will these soulless automatons? YES. They're not blind. But they ARE mute, so your incompetence is a secret they will take to their grave.
The Soldier

A bot is a computer-controlled player on a server. There are two types of bots in Team Fortress 2: AI bots and Puppet bots. AI bots are coded with sophisticated artificial intelligence designed to emulate player actions in game, and can be used without enabling cheats. Puppet bots have no AI coding, but are useful for testing and training. Puppet bots require the server to have cheats enabled, which also disables achievements.

Stock AI bots

The stock AI bots, or TFBots, are designed to emulate human players and are not directly controlled. Additionally, their classes are chosen at random. They use sophisticated AI code based on the PlayerBot and Infected AI featured in the Left 4 Dead series.[1] AI bots do not require the server to have cheats enabled; therefore, achievements are enabled while playing with them. There is one exception, however; Bots do not see Deathcam shots when killed; therefore, a player cannot attain Deathcam-related achievements. Also, killing a bot with a Strange weapon will not increase the weapon's kill count, unless the weapon has a Strange Part: Robots Destroyed applied to it, in which case, the kill will be added to the Strange Part and not the main counter.

AI bots come in four skill levels ranging from easy to expert. Sigsegv has compiled detailed explanation on the skill differences.

AI bots can be indirectly controlled to an extent:

  • Any friendly and enemy bot that the player focuses on with their crosshair during setup time will taunt.
  • A friendly Medic bot will heal a player if they utilize the "Medic!" voice command.
  • If a Medic bot is healing and has an ÜberCharge ready, using the voice commands "Go go go!" or "Activate Charge!" will cause the bot to immediately activate his ÜberCharge.
  • A Medic bot with an ÜberCharge ready will immediately activate the charge if he or the healing target gets hurt significantly.
  • Bots will attempt to join teammates performing a partner taunt (e.g. the High Five) or a group taunt (e.g. the Conga).

Pathfinding

Maps with official bot support

Map Game mode File name
Altitude Attack/Defend cp_altitude
Dustbowl Attack/Defend cp_dustbowl
Gorge Attack/Defend cp_gorge
Gorge Event Attack/Defend cp_gorge_event
Mann Manor Attack/Defend cp_manor_event
Mercenary Park Attack/Defend cp_mercenarypark
Mossrock Attack/Defend cp_mossrock
Badlands Control Point cp_badlands
Foundry Control Point cp_foundry
Granary Control Point cp_granary
Gullywash Control Point cp_gullywash_final1
Metalworks Control Point cp_metalworks
Process Control Point cp_process_final
Snakewater Control Point cp_snakewater_final1
Sunshine Control Point cp_sunshine
Vanguard Control Point cp_vanguard
Turbine Capture the Flag ctf_turbine
Badlands King of the Hill koth_badlands
Brazil King of the Hill koth_brazil
Eyeaduct King of the Hill koth_viaduct_event
Ghost Fort King of the Hill koth_lakeside_event
Kong King King of the Hill koth_king
Lakeside King of the Hill koth_lakeside_final
Laughter King of the Hill koth_slaughter_event
Lazarus King of the Hill koth_lazarus
Moldergrove King of the Hill koth_undergrove_event
Moonshine Event King of the Hill koth_moonshine_event
Nucleus King of the Hill koth_nucleus
Probed King of the Hill koth_probed
Sawmill King of the Hill koth_sawmill
Slasher King of the Hill koth_slasher
Viaduct King of the Hill koth_viaduct
Badwater Basin Payload pl_badwater
Barnblitz Payload pl_barnblitz
Bloodwater Payload pl_bloodwater
Camber Payload pl_camber
Brimstone Payload pl_fifthcurve_event
Embargo Attack/Defend pl_embargo
Enclosure Payload pl_enclosure_final
Gold Rush Payload pl_goldrush
Gravestone Payload pl_rumble_event
Hoodoo Payload pl_hoodoo_final
Pier Payload pl_pier
Precipice Payload pl_precipice_event_final
Swiftwater Payload pl_swiftwater_final1
Thunder Mountain Payload pl_thundermountain
Upward Payload pl_upward
Pier Payload pl_pier
Wutville Payload pl_wutville_event

BLU bots get stuck trying to leave one of BLU's spawn points. Therefore, BLU can only win if few or no BLU bots die when the faulty spawn point is in use.

Using bots on unsupported maps

See also: Navigation Meshes and Nav Mesh Editing on the Valve Developer Community
  1. Nav mesh editing requires cheats enabled, so type sv_cheats 1 in the console.
  2. Build the initial nav mesh using the nav_generate command.
  3. Wait while the game generates AI paths, progress is tracked in the console.
  4. Map will reload.
  5. Verify the nav mesh exists on all stages of the map by using the nav_edit 1 command, then traveling across all the stages. Use the nav_mark_walkable command on all of the stages without a nav mesh, then use the nav_generate command again to apply the changes.
  6. Optionally tweak the generated nav mesh to add missing data and remove erroneous data. Use nav_edit 1 to enter nav mesh editing mode.
  7. Reload/Restart the server (optional, but if it is not done, then achievements will be disabled).
  8. Open console and type tf_bot_add <number> as above to add bots.

WARNING: The game is likely to crash if you edit the navigation mesh with bots enabled.

Bots can be used on any map on which the above steps have been performed without having to repeat them, except for entering the tf_bot_add <number> command each time bots need to be added.

Auto-generated nav meshes work best on Control Points, King of the Hill, Payload, and Capture the Flag maps. On Mannpower maps, the bots will play as Capture the Flag, but be unable to use Grappling Hooks or intelligently use the Powerups they walk over.

Setting the value of the console command tf_bot_offense_must_push_tim to 0 allows bots to fight each other in maps without objectives that they can recognize, unless the map doesn't have any respawn room entities.

Stock maps with no official bot support

 ·  Hydro  ·  DeGroot Keep  ·  Hightower  ·  Frontier  ·  Pipeline  ·  Steel  ·  2Fort  ·  2Fort Invasion
 ·  Double Cross  ·  Landfall  ·  Sawmill (Capture the Flag)  ·  Well (Capture the Flag)  ·  5Gorge  ·  Coldfront  ·  Fastlane  ·  Freight
 ·  Powerhouse  ·  Sinshine  ·  Well  ·  Yukon  ·  Egypt  ·  Gravel Pit  ·  Junction  ·  Mountain Lab
 ·  Snowplow  ·  SnowVille  ·  Snowfall  ·  Steel  ·  Standin  ·  Borneo  ·  Cactus Canyon  ·  Frontier
 ·  Hellstone  ·  Snowycoast  ·  Swiftwater  ·  Banana Bay  ·  Helltower  ·  Hightower  ·  Nightfall  ·  Pipeline
 ·  Badlands (Arena)  ·  Byre  ·  Granary (Arena)  ·  Lumberyard  ·  Nucleus (Arena)  ·  Offblast  ·  Ravine  ·  Sawmill
 ·  Watchtower  ·  Well (Arena)  ·  Harvest  ·  Harvest Event  ·  Highpass  ·  Maple Ridge Event  ·  Suijin  ·  Carnival of Carnage
 ·  Doomsday  ·  Cloak (Control Point)  ·  Bigrock  ·  Coal Town  ·  Decoy  ·  Ghost Town  ·  Mannhattan  ·  Mannworks
 ·  Rottenburg  ·  Asteroid  ·  Foundry (Capture the Flag)  ·  Gorge (Capture the Flag)  ·  Hellfire  ·  Brickyard  ·  District  ·  Timbertown
 ·  Pit of Death  ·  Watergate

AI bot commands

For a more comprehensive list of commands, see the List of TF2 console commands and variables on the Valve Developer Community

To use AI bots on supported maps, the server administrator should type the following commands into the console (some may require sv_cheats to be set to 1):

Command Description
tf_bot_add This command will create one or more AI bots of random classes on random teams. They will also be assigned random names from a default set.
Syntax
tf_bot_add [<count>] [<class>] [<team>] [<difficulty>] [<name>] [noquota]
Parameters
<count>
Specifies the number of bots to spawn. If omitted, one bot is spawned.
Trying to create bots beyond maxplayers will fail with an error message in the console.
If mp_teams_unbalance_limit is too low, adding more bots onto one team may still result in autobalancing to even out team numbers.
<class>
The classname of the class can be Demoman, Engineer, HeavyWeapons, Medic, Pyro, Scout, Soldier, Sniper, or Spy
<team>
Specifies the team name to assign the bot, where team can be red or blue.
<difficulty>
Sets the difficulty level for the bot, where difficulty can be easy, normal, hard, or expert.
<name>
Sets the connecting bot's name.
noquota
If the exact phrase 'noquota' is present, the bot is excluded from the bot quota management system. See tf_bot_quota.
Example
tf_bot_add 3 heavyweapons red easy will add three Heavies to the RED team at the easy skill level.
tf_bot_difficulty Defines the skill of bots joining the game.
Syntax
tf_bot_difficulty <level>
Parameters
<level>
Sets the difficulty level for the bots. Values are: 0=easy, 1=normal, 2=hard, 3=expert. Default is "Normal" (1).
Example
tf_bot_difficulty 2 will set all bots created after this command to "Hard" difficulty.
tf_bot_fire_weapon_allowed Determines whether bots should fire weapons. If disabled, bots can still use certain non-damaging weapons such as the Medi Gun. As one exception, though, Medic bots will still fire their Syringe Gun. Additionally, Demoman bots will still be able to detonate existing stickies, but will not place any more.
Syntax
tf_bot_fire_weapon_allowed <integer>
Parameters
<integer>
Either 1 or 0. Default is 1 (enabled).
Example
tf_bot_fire_weapon_allowed 0 will result in bots not using their weapons, with a few exceptions.
tf_bot_force_class If set to a class name, all TFBots will respawn as that class.
Syntax
tf_bot_force_class <class>
Parameters
<class>
The classname of the class can be Demoman, Engineer, HeavyWeapons, Medic, Pyro, Scout, Soldier, Sniper, or Spy. Default is "" (aka blank).
Example
tf_bot_force_class medic will make all TFBots respawn as Medic.
tf_bot_force_jump If enabled, forces bots to repeatedly jump over and over.
Syntax
tf_bot_force_jump <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
tf_bot_force_jump 1 will force AI bots to repeatedly jump.
tf_bot_join_after_player If nonzero, bots wait until a player joins before entering the game. This only applies to quota spawned bots.
Syntax
tf_bot_join_after_player <integer>
Parameters
<integer>
Either 1 or 0. Default is 1 (enabled).
Example
tf_bot_join_after_player 0 will make TFBots join the game when added even if no players are on a team.
tf_bot_keep_class_after_death If zero, bots will always respawn as a different class.
Syntax
tf_bot_keep_class_after_death <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
tf_bot_keep_class_after_death 1 will prevent TFBots from changing class.
tf_bot_kick

This command will remove one or all AI bots.

Syntax
tf_bot_kick <name/all/team>
Parameters
<name/all/team>
Specifies the name of bot to remove, the team to remove, or all.
Example
tf_bot_kick CEDA will kick the TFBot named "CEDA" if one exists. Like tf_bot_kill, quotation marks will be needed to kick bots with names that consist of 2 or more words, such as tf_bot_kick "Black Mesa" to kick the TFBot named "Black Mesa".
tf_bot_kill

This command will kill one or all AI bots.

Syntax
tf_bot_kill <name/all/team>
Parameters
<name/all/team>
Specifies the name of bot to kill, the team to kill, or all.
Example
tf_bot_kill CEDA will kill the TFBot named "CEDA" if one exists. Quotation marks will be needed to kill bots with names that consist of 2 or more words, such as tf_bot_kill "Black Mesa" to kill the TFBot named "Black Mesa".
tf_bot_melee_only Determines whether a bot should only use melee weapons or not.
Syntax
tf_bot_melee_only <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
tf_bot_melee_only 1 will have bots using only melee weapons.
tf_bot_prefix_name_with_difficulty If nonzero, append the skill level of the bot to the bot's name
Syntax
tf_bot_prefix_name_with_difficulty <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
tf_bot_prefix_name_with_difficulty 1 will cause added bots to have names like "Normal Aimbot" and "Expert Saxton Hale".
tf_bot_quota Determines the total number of TFBots in the game. Only has effect if tf_bot_quota_mode = "fill" or "match".
Syntax
tf_bot_quota <integer>
Parameters
<integer>
Whole number between 0 and how many players the server can hold. Default is 0.
Example
tf_bot_quota 2, if tf_bot_quota_mode = match, will add two bots to the server for every one human.
tf_bot_quota_mode Determines the type of quota.
Syntax
tf_bot_quota_mode<normal/fill/match>
Parameters
normal/fill/match
If 'normal', the server will never add/remove TFBots without explicit commands and bot_quota has no effect.
If 'fill', the server will adjust bots to keep N players in the game, where N is bot_quota.
If 'match', the server will maintain a 1:N ratio of humans to bots, where N is bot_quota.
Example
tf_bot_quota_mode fill will always keep (bot_quota - # of human players) bots in the game.
tf_bot_taunt_victim_chance Determines how often a Bot will taunt a human victim.
Syntax
tf_bot_taunt_victim_chance <integer>
Parameters
<integer>
Whole number between 0 and 100. Default is 20.
Examples
tf_bot_taunt_victim_chance 0 Bots will never taunt after killing a human player.
tf_bot_taunt_victim_chance 100 Bots will always taunt after killing a human player.
tf_bot_warp_team_to_me Teleports your team's bots to your position. Requires sv_cheats 1.
Syntax
tf_bot_warp_team_to_me
Parameters
N/A

Current AI bot status

AI bots are fully released[citation needed]. Currently, all classes are working properly due to the Hatless Update, including the once-buggy Spy. AI bots only work properly for most official King of the Hill maps, some Payload maps, Attack/Defend maps Dustbowl and Gorge, Capture the Flag maps, and Mann Manor (on the latter two, bots can only be added by using the tf_bot_add command in the console). The use of AI bots on non-supported maps is possible by following certain steps; however, they will not emulate human players as well.

Bots will not work properly on any PLR map as they either can't jump over the railings on Hightower or get stuck in a random corner in spawn; and bots have a dance party on any other PLR map (this may change in the future).[citation needed]

AI bot behavior

  • Bots currently only use the default loadout (although they can be given non-Stock weapons with a custom mod/plugin).
  • Bots on Easy difficulty will rarely, if ever, use any weapon other than their primary weapon. Bots on higher difficulties will switch to and use their secondary weapon as soon as the ammunition of their primary weapon is spent, or to compensate for the distance of their target.
  • Bots currently cannot execute special jumps (such as rocket jumps) or haul buildings.
  • If a bot kills a player, they roll a chance to taunt immediately after, and if it succeeds, they will taunt even if they are under enemy fire. However, bots will not taunt if carrying the enemy intelligence. This behavior applies to Robots in Mann vs. Machine mode.
  • Spy bots (and players) are properly ignored by other bots while disguised. However, upon 'touching' any enemy bot, sapping, shooting, or Cloaking, all other bots who see it happen will declare the bot/player a Spy and won't forget who they are until they change disguises while unseen or until the bot(s) who declared them a Spy dies or feigns death with the Dead Ringer.
  • Pyro bots will use the compression blast against projectiles and opponents with unusual frequency if on difficulties other than Easy.
  • Medic bots will usually heal all other classes before Snipers (and to a lesser extent Engineers) even if the "Medic!" voice command is used.
  • Medic bots tend to favor Heavies, Soldiers, Demomen, and Pyros, if being played by a human. If no human player is one of these classes, they are not likely to be pocketed.
  • A Medic bot with an ÜberCharge ready will immediately activate the charge if he gets hurt. This behavior is used by Über Medics in Mann vs. Machine mode.
  • Bots do not attack during setup time unless they are attacked first (with the exception of Demoman bots planting stickybombs).
  • Engineer bots do not upgrade (or even remove Sappers from) their Teleporters, and sometimes don't repair their Sentry Guns even when they're not under fire.
  • Engineer bots will never repair or upgrade a friendly Engineer bot's building, unless that building is in the way of the Engineer's target.
  • Bots, excluding Engineers, Snipers, and Spies, will stay in their spawn positions on setup when attacking in a Attack/Defend map or a Payload map.
  • Spy bots, when spotted by another bot (possibly player), will not attempt to backstab and will instead switch to their Revolver and shoot while retreating.
  • Demoman bots, once they know where a Sentry Gun is (after seeing, getting shot by, or dying to one), will be able to stand out of range of the sentry and perfectly aim and time their stickybomb charges to land precisely where the Sentry Gun is. Walls and ceilings may occasionally get in the way of the stickybombs' flight path, though.
  • Sniper bots, upon scoping in and not finding a target, will use one of the "Negative" voice commands
  • Friendly Medics will tend to heal a disguised Spy.

Bugs

  • Bots may try to walk/shoot through unmovable objects such as walls.
  • Whenever a player/bot cloaks/decloaks or disguises/undisguises, the bots will 'see' players who are behind them and turn around, even if out of the bot's field of view. Note that this isn't due to any sounds made by the player (footsteps, miscellaneous weapon noises, etc.).
  • Though rarely, bots may stand inside one another during usage of an Engineer's Teleporter, and get stuck (can't move).
  • When bots use voice commands (such as "Spy!" and "Move Up!"), text versions of the voice commands do not display.
  • A Medic bot who is healing a player will not avoid enemy fire or collect health pickups, even if he is at critically low health.
  • Bots are able to move while taunting, making the Holiday Punch ineffective.
  • Recently attacked Medic bots will often fail to use their Syringe Gun to deal with enemies at non-melee range, instead switching to their Bonesaw, or even to their Medi Gun on extremely rare occasions.
  • Medic bots will fail to lead their aim or to compensate for gravity while firing the Syringe Gun. This may be due to the Syringe Gun not being properly identified as a non-hitscan weapon in the bot AI code.
  • Spy bots are able to see and follow cloaked Spies (AI or player) should one give himself away, regardless of difficulty level.
  • Even if a Spy is disguised as a class of his team (player only, as bots will never do this), enemies will still point him out as a Spy should he bump into an enemy.
  • Bots abide by Auto-balance rules. To be able to spawn bots on a specific team, you must set mp_teams_unbalance_limit to 0.
  • Engineer bots may ignore their buildings until they're destroyed.
  • Heavy bots will sometimes try to fire their Minigun even when out of ammo. (Although it seems to occur abundantly when the bot difficulty is set below Advanced)
  • Medic bots on the losing team will occasionally commit suicide during Humiliation when there are no enemies nearby. Players are unable to do the same, even using commands.
  • Setting the loadout menu's preview to BLU will cause RED bots to appear BLU.
  • Currently, bots do not work on the following types of game modes or maps, even with a generated navigation mesh. (Spies and Snipers may work, though.)
  • Bots that have their Melee weapons out will occasionally not switch to their other weapons, even if they pick up ammo.
    • This can be fixed by either killing them or just randomly.
  • After the Jungle Inferno Update, bots spawned with specific parameters (example:tf_bot_add 5 pyro blue normal) will die in their spawnrooms. This can be prevented with the command: tf_bot_reevaluate_class_in_spawnroom 0, which requires setting sv_cheats to 1.

AI bot names

The AI bots are programmed to have different names, with many of their names being references to Team Fortress 2, Valve's other works, and computer programming. Many of these names have been requested on the Steam forums.

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


AI bots names can also be customized by a player by typing in, for example, tf_bot_add heavyweapons blue "Blu Hoovy"; this example would put a BLU Heavy on the BLU team with the name "Blu Hoovy".

Puppet bots

Puppet bots have no AI code and cannot move or act on their own. These bots can be used like puppets though: players can manipulate them to follow the player's commands such as following the player around and firing their weapons. Puppet bots are mainly used for testing purposes and can also create stunning visuals if manipulated accordingly. To spawn puppet bots, sv_cheats has to be set to 1.

Puppet bot commands

Not all of the following commands work; some working commands are also omitted.

These commands may or may not work for AI bots as well.

Note: entering the command without any values will display the command's current setting and a brief description.

Command Description
bot This command will create a bot on the given team with the specified class and name. If team or name is omitted, they will be assigned randomly.
Syntax
bot [<teamname/number>] [<classname>] [<name>] [<number>]
Parameters
<number>
Amount of bots to add.
<teamname/number>
Specifies the team name or number to assign the bot. Where name/number can be RED or 1, BLU or 0
<classname>
The classname of the class can be Demoman, Engineer, Heavy, Medic, Pyro, Scout, Soldier, Sniper, or Spy
<teleport>
Teleports the spawned bot to where your cursor is aiming.
<targetdummy>
Prevents the spawned bot from losing health.
<name>
name can be anything. If there is already someone with the same name, an incremental number (starting at 1) surrounded with parenthesis will be added to the beginning of the name. For example, joe, (1)joe, (2)joe, etc. If no name is given then the name will be "bot" followed by a number starting with 01; for example, the first bot will be Bot01, the next Bot02, and so on.
Example
bot -team red -class Engineer -name joe
bot_changeclass Force all bots to change to the specified class.
Syntax
bot_changeclass <name> <classname>
Parameters
<name>
Name of the target bot.
<classname>
The classname of the class the bot will switch to. Default is "" (aka blank).
Example
bot_changeclass bot01 Soldier
bot_changeteams

Make all bots change teams. This forces all the bots to switch teams. If a bot was on the RED team then it will now be on the BLU team and vice versa.

bot_command Sends specified command on behalf of specified bot.
Syntax
bot_command <name/all> <console command>
Parameters
<name/all>
Name or id of the bot to send the command to. Setting this to 'all' will send the command to all the bots.
<console command>
Can be any of the ones listed in console commands, as well as some of the cheats.
Example 1
bot_command bot01 "voicemenu 0 0"
Example 2
bot_command bot01 "taunt"
The slot commands (slot1, slot2, etc.) do not work with bot_command, however with bot_forcefireweapon, all bots in that class can be made to switch to a weapon and start firing, then made to stop. Only the entire group of bots in that class can be made to do so, however.
bot_dontmove Bots are allowed or prevented from moving. When set to 1 the bots cannot move but they can still turn and jump. Note with a combination of this command and bot_mimic bots can be moved to certain areas and left there.
Syntax
bot_dontmove <integer>
Parameters
<integer>
Bots will be allowed to move when set to 1. Default is 0 (disabled).
Example
bot_dontmove 1
bot_forceattack This will make all the bots automatically fire whatever weapon they currently have selected. If bot_forceattack2 is set to 0, then the bots will execute primary_fire. If bot_forceattack2 is set to 1, then the bots will execute secondary_fire.

Note this does nothing if bot_mimic is active (set to 1).

Syntax
bot_forceattack <integer>
Parameters
<integer>
When set to 1, all bots fire their guns. Default is 0 (disabled).
Example
bot_forceattack 1
bot_forceattack2 This will make all the bots execute secondary_fire on whatever weapon they currently have selected when bot_forceattack is set to 1.
Syntax
bot_forceattack2 <integer>
Parameters
<integer>
Bot will use its weapon's secondary_fire when set to 1, primary_fire when set to 0
Example
bot_forceattack2 1
bot_forceattack_down When firing, don't tap fire, hold it down. If this is set to 0 then the bot will act like they are continuously tapping the fire button (useful for the Stickybomb Launcher). If this is set to 1 then the bot will act as if it is holding down the fire button (useful for the Minigun).
Syntax
bot_forceattack_down <0/1>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
bot_forceattack_down 1
bot_forcefireweapon Forces all bots who have the specified weapon to switch to and fire it.

If a bot does not have this weapon, nothing happens to it (unless it is firing a different weapon, in which it stops)

Syntax
bot_forcefireweapon <weapon filename>
filename is usually tf_weapon_ <weapon name>.
Examples
bot_forcefireweapon tf_weapon_fists makes all Heavy bots switch to and repeatedly attack with their Fists, and all other bots stop attacking.
bot_forcefireweapon tf_weapon_shotgun_pyro makes all Pyro bots switch to and repeatedly fire their Shotguns, and all other bots stop attacking.
To make all bots stop attacking, simply specify a non-existent weapon filename. Anything without tf_weapon in it isn't a TF2 weapon, so the bots won't shoot it, for example bot_forcefireweapon ,,.
bot_jump Force all bots to repeatedly jump.
Syntax
bot_jump <integer>
Parameters
<integer>
All bots will repeatedly jump when set to 1. Default is 0 (disabled).
Example
bot_jump 1
bot_crouch Force all bots to hold crouch.
Syntax
bot_crouch <integer>
Parameters
<integer>
All bots will hold crouch when set to 1. Default is 0 (disabled).
Example
bot_crouch 1
bot_kick Remove a bot by name, or an entire team, or all bots.
Syntax
bot_kick <name/team>
Makes the specified bot commit suicide.
Example
bot_kick bot01 will kick the bot named "bot01" if it exists.
bot_kick red will kick all the bots on the red team.
bot_kick blue will kick all the bots on the blu team.
bot_kick all will kick all the bots in the server.
bot_kill Kills a bot.
Syntax
bot_kill <name>
Parameters
<name>
Makes the specified bot commit suicide.
Example
bot_kill bot01
bot_mirror Specified bots mirror the player's loadout (class, cosmetics, and weapons). There are a few bugs; for example, if a Demoman player has the Booties and any shield equipped, a mirrored bot will still use the Grenade Launcher and Stickybomb Launcher despite showing the Booties and shield on his model. After a mirrored bot dies, it will not retain the previous loadout, and bot_mirror must be used again.
Syntax
bot_mirror <name>
Where name is the name of the bot to mirror.
Example
bot_mirror bot01
bot_mimic Bot uses usercmd of player by index.

The bot will execute all keystrokes issued by a player, mimicking movements, turns, jumps, fire, etc. It should be noted that bots will not mimic Medic calls, weapon switches, or taunts.

Note this overrides bot_forceattack but does not override bot_dontmove.

Syntax
bot_mimic <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
bot_mimic 1
bot_mimic_inverse

Inverts the movement of the bots; moving left makes the bots move right, moving forwards makes the bots move backwards, etc.

The direction which the bot is looking is not affected.

Syntax
bot_mimic_inverse <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
bot_mimic_inverse 1
bot_mimic_yaw_offset

Offsets the bots' yaw. The bots will face in a direction this angle from the player. By default this is set to 180 so that all bots will face the player. Setting this to 0 will face the bots in the same direction as the player.

Syntax
bot_mimic_yaw_offset <0-360>
Set the direction by specifying angle in degrees
Example
bot_mimic_yaw_offset 180
bot_randomnames
Syntax
bot_randomnames <integer>
Parameters
<integer>
Either 1 or 0. Default is 0 (disabled).
Example
bot_randomnames 1
bot_refill Refills all bots' ammo (including metal for Engineers) and health counts.
Syntax
bot_refill
bot_saveme This makes all the bots call for a Medic, equivalent to issuing bot_command <name> "voicemenu 0 0" to every bot.
Syntax
bot_saveme <integer>
Parameters
<integer>
All the bots will call for a Medic when set to 1. Default is 0 (disabled).
bot_selectweaponslot Forces a bot to switch to the specified weapon slot. To specify which bot switches weapons, use cc_bot_selectweapon instead.
Syntax
bot_selectweaponslot <n>
Parameters
<n>
Set n to weapon slot that bots should switch to.
0 = primary; 1 = secondary; 2 = melee; 3 = special
Example
bot_selectweaponslot 2
bot_teleport Teleports a specified bot to a given coordinate.

Map coordinates of where you are standing can be found by typing Status in the console.

Syntax
bot_teleport <name> <X> <Y> <Z> <Pitch> <Yaw> <Roll>
Where name is the name of the bot or id to teleport.
Parameters
<name>
Name of the bot to teleport.
<X> <Y> <Z>
Coordinates of the map the bot will be teleported to.
<Pitch> <Yaw> <Roll>
The direction the bot should face.
Example
bot_teleport bot01 -4815 1385 -447 0 0 0
bot_whack Delivers lethal damage from player to specified bot. This basically kills the bot with the currently selected weapon, probably used for testing during development. It is worth noting that you can only use bot_whack to kill a teammate if mp_friendlyfire is set to 1, otherwise attempting to whack a teammate will not do anything.
Syntax
bot_whack <name>
Parameters
<name>
Name of the bot to "whack".
Example
bot_whack bot01
cc_bot_selectweapon Forces a bot to switch to the specified weapon slot.
Syntax
cc_bot_selectweapon <name> <n>
Parameters
<n>
Set n to weapon slot that bots should switch to.
0 = primary; 1 = secondary; 2 = melee; 3 = special
<name>
Name of the bot that will switch weapon slot.
Example
cc_bot_selectweapon bot12 2
bot_hurt Hurt a bot by team, or all bots ("all").
Syntax
bot_hurt [<name>] [<team>] [<damage>]
Parameters
<name>
Name of the bot to hurt.
<team>
Specifies the team name of the bot to hurt. Can be RED, BLU or all.
<damage>
Specifies the amount of damage the bot will receive. If a negative number is set, it will heal (and overheal) the bot instead.
<burn>
Set the bot on fire. However, the bot will not receive any afterburn damage.
Example
bot_hurt -name joe -team red -damage 150

Notes

  • TFBots can also be controlled with nb_ (e.g. nb_select and nb_warp_selected_here to teleport bots to a specific location).

References