Bots
“ | 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 (or 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.
Contents
AI bots
AI bots 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 Killed applied to it, in which case, the kill will be added to the Strange Part and not the main counter.
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 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 gets hurt.
- Bots will attempt to join teammates performing a partner taunt (e.g. the High Five) or a group taunt (e.g. the Conga).
Current AI bot status
AI bots are in beta testing and will become more sophisticated as they are updated. 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). The use of AI bots on non-supported maps is possible by following certain steps; however, they will not emulate human players as well.
Note: A pack of pre-made bot meshes has been compiled for many popular maps.
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
Using bots on unsupported maps
- Nav mesh editing requires cheats enabled, so type "sv_cheats 1" in the console.
- Build the initial nav mesh using the "nav_generate" command
- Wait while the game generates AI paths, progress is tracked in the console
- Map will reload
- Optionally tweak the generated nav mesh to add missing data and remote erroneous data. Use nav_edit 1 to enter nav mesh editing mode.
- Revert sv_cheats to 0 afterwards (optional, but if it is not done, then achievements will be disabled)
- 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.
Maps with official bot support
- Dustbowl
- Mann Manor
- Badlands (KOTH)
- Lakeside
- Nucleus (KOTH)
- Sawmill (KOTH)
- Viaduct
- Badwater Basin
- Gold Rush
- Hoodoo
- Thunder Mountain
- Upward
- Gorge
- Barnblitz
- Kong King
AI bot behavior
- Bots currently only use the default loadout.
- 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 clip of their primary weapon is spent.
- Spy and Sniper bots do not appear on Easy mode; they will only appear on Normal mode and beyond.
- Bots currently cannot execute special jumps (such as rocket jumps) or haul buildings (Engineer bots will instead destroy their nest when the objective moves up).
- 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. 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 declare(s) them a Spy die(s).
- 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.
- 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.
- If a disguised Spy bot on Expert sees enemies Cloak, he will be able to follow them while they are invisible regardless of whether their Cloak is blinking or not.
- Bots do not attack during setup time unless they are attacked first (with the exception of Demoman bots planting stickybombs).
- Engineer bots may build a Sentry in a funny place before immediately destroying it, then look for metal and repeat the process.
- Engineer bots tend not to upgrade their Teleporters and sometimes don't repair their Sentry Guns even when they're not under fire.
- 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.
Bugs
- Bots may try to walk/shoot through unmovable objects such as walls.
- On occasion, bots will 'see' players who are behind them, even if out of the bot's field of view. This is most noticeable when cloaking or uncloaking or disguising and undiguising as a Spy while behind an enemy bot. 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 they are 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.
- Engineer bots can stand inside their own buildings.
- If a Spy (AI or player) gives himself away by bumping into an enemy Spy, the Spy may be able to follow him even while cloaked, regardless of difficulty level.
- 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
- Currently, bots do not work on the following types of game modes, even with a generated navigation mesh:
AI bot commands
To use AI bots on supported maps, the server administrator should type the following commands into the console:[2]
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 amusing human-like names.
|
tf_bot_difficulty | Defines the skill of bots joining the game.
|
tf_bot_force_class | If set to a class name, all TFBots will respawn as that class.
|
tf_bot_join_after_player | If nonzero, bots wait until a player joins before entering the game. This only applies to quota spawned bots.
|
tf_bot_keep_class_after_death | If zero, bots will always respawn as a different class.
|
tf_bot_kick
|
This command will remove one or all AI bots.
|
tf_bot_prefix_name_with_difficulty | If nonzero, append the skill level of the bot to the bot's name
|
tf_bot_quota | Determines the total number of TFBots in the game. Only has effect if tf_bot_quota_mode = "fill " or "match ".
|
tf_bot_quota_mode | Determines the type of quota.
|
tf_bot_taunt_victim_chance | Determines how often a Bot will taunt a human victim.
|
tf_bot_melee_only | Determines whether a bot should only use Melee weapons or not.
|
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, as seen here.
Puppet bot commands
Not all of the following commands work; some working commands are also omitted.
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.
|
bot_changeclass | Force all bots to change to the specified class.
Does not seem to be implemented, nothing happens. |
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.
|
bot_defend | Set to a team number, and that team will all keep their combat shields raised.
For instance, Heavies will spin their miniguns. Not implemented at present. |
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.
|
bot_flipout | When on, this command will make the bots fire the current weapon selected. Default is to use primary_fire , but if bot_forceattack2 is set to 1 then secondary fire is used. Not implemented at present.
|
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_forceattack2 | This will make all the bots execute secondary_fire on whatever weapon they currently have selected when bot_forceattack is set to 1.
|
bot_forceattackon | When firing, do not tap fire, hold it down. When this command is set to 0, the bot acts like it is continuously tapping the fire button (useful for the Pistol, but not for the Heavy's Minigun). If this command is set to 1, the bots acts as if it is holding down the fire button (useful for the Heavy's Minigun).
|
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).
|
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)
|
bot_kill |
Kills the specified bot.
|
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_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.
|
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.
|
bot_randomnames |
|
bot_refill | Refills all bots' Ammo counts, including Metal for Engineers.
Syntax: |
bot_saveme | This makes all the bots call for a Medic, equivalent to issuing bot_command <botname> "voicemenu 0 0" to every bot.
Syntax:
|
bot_selectweaponslot | This makes the specified bot select the weapon in the specified weapon slot.
0 = primary; 1 = secondary; 2 = melee; 3 = special
|
bot_teleport | Teleports a specified bot to a given coordinate.
Map coordinates of where you are standing can be found by typing
|
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.
|
Update history
- Added work-in-progress Bots for beta testing in KOTH maps.
- Various improvements to combat behaviors.
- In KOTH mode, Bots are now:
- More likely to roam around and hunt enemies if there is lots of time left.
- Become more likely to push for the point as time runs down, or their teammates start to capture it.
- Medic bots now:
- Opportunistically "overheal" nearby friends when they can.
- Prioritize healing of injured nearby friends more.
- Don't focus on Heavies quite so exclusively.
- Don't spam their Medi Gun continuously at round start.
- Won't choose cover far below their heal target so much (koth_nucleus).
- Fight back with their Syringe Gun appropriately.
- General bot improvements:
- They no longer stand still on the point when capturing or defending it.
- They choose more varied routes now.
- They choose better defensive spots around captured points.
- They fall back to another weapon when they entirely run out of ammo.
- They adjust their FOV when using zoomed in Sniper scope.
- They treat in-range Sentry Guns as the most dangerous threat.
- They fire their weapons is more realistic bursts.
- Engineers use their Shotgun properly.
- Added a "virtual mousepad" concept to rework how bots track enemy players.
- They now periodically estimate the position and velocity of the enemy they are tracking, instead of "locking on".
- Addresses the "180 spin around and fire", "Heavy bot is OP", "Sniper bot is OP", and "I can't fight a Heavy bot as a Scout" issues.
- Tuned Sniper spot finding algorithm to generate more diverse locations, partially .addressing the "Predictable Sniper camping spots" issue.
- Soldier bots are more careful to not fire rockets that will explode on nearby geometry and kill them.
- Fixed a bug where bots tried to heal from a Dispenser being carried by an Engineer.
- Tuned scoreboard logic to guard against malicious server operators spoofing bot pings to hide the "BOT" tag.
- Added more bot names as suggested by the TF community.
- Bots don't retreat to gather health as readily if they are in combat.
- Bots no longer retreat when moving to block a point capture.
- Bots should now equip an appropriate combat weapon and fight while moving to collect health.
- Bots who are roaming the map and hunting now chase down their victims, following them around corners.
- Bots that fire projectiles (ie: rockets/grenades/etc) don't hold down their fire button for a minimum time. This was causing Soldier bots to fire rockets into nearby walls as they strafed, killing themselves.
- Soldier bots now switch to their Shotgun after firing all four rockets when engaging an enemy.
- Added a few more bot names from community suggestions.
- Fixed a behavior loop with Engineer metal gathering.
June 10, 2010 Patch (Mac Update)
- Added Offline Practice mode, with support for KOTH maps and Dustbowl.
- [Undocumented] Looking at a bot player for a few seconds now causes it to taunt.
- Fixed a case where servers could get stuck in an infinite loop while spawning bots.
- Fixed a level change crash related to Bot navigation meshes.
- Fixed server crash related to bots and health kits.
- Medic bots now respond when nearby humans call for Medic.
- If a Medic bot is healing you and has an ÜberCharge ready, using the voice commands "Go go go!" or "Activate Charge!" will force the Bot to activate the ÜberCharge.
- Improved performance of bot computations that are done when a point is captured, a round starts, or a checkpoint reached.
- Fixed Engineer bots infinite build-destroy behavior loop regression.
- Fixed Medic bots losing their charge if they touch a resupply cabinet.
- Fixed a crash due to having multiple types of bot systems running in-game simultaneously.
- Fixed bot behavior issue resulting in bot pile-ups near level 3 Teleporter entrances.
- Bots no longer consider sapped Sentry Guns a dangerous threat.
- Bots will not try to navigate through enemy spawn rooms (unless they have won the round).
- Engineer bots will avoid building Teleporters on steep slopes which could hinder teammate movement.
- Added tf_bot_pyro_always_reflect cvar. Set to 1 to make Pyro bots always reflect projectiles, regardless of difficulty level.
April 14, 2011 Patch (Hatless Update)
- Added Spy TFBots. Spy bots have basic cloaking, diguising, sapping, and backstabbing behaviors now, and are ready to join the fight
- TFBots understand the basics of the Payload scenario now, and will push the cart on offense, and try to stop the cart on defense
- Added navigation meshes for pl_goldrush, pl_badwater, pl_upward, pl_thundermountain, and pl_hoodoo_final
- Improved TFBot reactions to cloaked and/or disguised enemy Spies
- Improved Demoman bot behaviors for planting sticky bomb traps
- Demoman bots will now try to move to a safe spot and lob stickybombs onto enemy sentry nests to destroy them
- Soldier bots switch to their Shotgun after emptying their Rocket Launcher at close/medium range
- TFBots will no longer hide from sapped or carried sentryguns
- Engineer bots are better at moving their Sentry Gun nest as the scenario changes
- Improved Sniper bot algorithm for finding good sniping spots for both Capture Point and Payload scenarios
- Sniper bots will take opportunistic shots at targets while they move to their desired sniping spot
- Fixed bug where Sniper bots would sometimes stand around in their spawn room doing nothing.
- Improved TFBot ability to find a safe vantage spot to attack enemy Sentry Guns
- TFBots will no longer try to use a teleporter entrance they can't actually reach
- Added
tf_bot_melee_only
cvar. If set to 1, all TFBots will be restricted to only using their melee weapon
- Fixed a server crash that could occur if TFBots were used across map changes
May 5, 2011 Patch (Replay Update)
- [Undocumented] Bots now properly target the Horseless Headless Horsemann as an enemy.
- [Undocumented] Bots now work on CTF maps.
- Fixed a rare crash bug with the Demoman TFBot laying stickybomb traps
- Fixed crash with Demoman bots trying to detonate stickybombs that had already been destroyed
- Added tf_bot_kill console command (syntax identical to tf_bot_kick)
- Bots obey melee only mode a bit better
- Added func_nav_avoid to allow map creators control over where bots "like" to go
- Fixed issue with Demoman bot reloading between each stickybomb he fired, causing him to be very slow at setting traps/destroying Sentry Guns
- Bots never taunt if carrying the flag now
- Aiming logic for Huntsman Sniper bots
- Sniper bots prioritize enemy Snipers more aggressively, as well as enemy Engineers now
- Improved Demoman bot Sentry Gun sticky bombing
- Bots will no longer try to use health entities assigned to the enemy team
- Added simplistic behaviors for Chargin' Targe, and various consumables (Bonk drink, Sandvich, etc)
- Medic bots stay a bit closer to their patient now
- Sniper bots go after very nearby enemies with their melee weapon now
- Added func_tfbot_hint entity to allow map creators to tell Sniper bots good places to lurk
- Sniper bots opportunistically fire on viable targets they encounter while on the way to their desired lurking spot
- Spy bots are more aggressive about backstabbing an Engineer before sapping his nest now
- Fixed a server crash related to bots
October 13, 2011 Patch (Manniversary Update & Sale)
- TFBots have a percentage chance of noticing weapon fire based on their difficulty level. Easy bots are fairly oblivious, and Expert bots notice pretty much everything.
- TFBots now treat certain weapon attacks as "quiet" (Spy knife, cloaking/uncloaking, some melee weapons, fists, etc). "Quiet" weapons can only be heard by TFBots when nearby, and their chance of being noticed is halved if the environment is "noisy" (ie., lots of non-quiet gunfire going on in the area). This greatly improves Spies ability to backstab TFBots without the entire team immediately turning on them.
- Spy bot improvements:
- Spy bots are much better about circling around and backstabbing their victims now
- Improved Spy bot target selection in some situations (ie: clusters of Sentry Guns and enemy players)
- Spy bots will give up on an attack and retreat if an enemy Sentry Gun aims at them
- Spy bots now avoid nearby enemies while disguised and/or cloaked so they don't bump into them and give themselves away
- Spy bots now have a simple notion of when their “cover is blown" now
- Spy bots lead their target's position as they chase them down for a backstab now
- Spy bots don't go after victims until setup time has elapsed
- Hard and Expert Spy bots avoid looking at their prey until they get close and go for the stab
- Easy Spy bots don't avoid enemies, or try to get behind before stabbing
- Normal Spy bots don't avoid enemies
- Fixed bug where Spy bots would jump against the enemy spawn gates during setup time
- Medic bot improvements:
- Medic bots stick much closer to running patients now
- Medic bots stick much closer to their patient if they have an Ubercharge ready, or are deploying their Uber
- Medic bots hide from Sentryguns now, too
- Pyro bot improvements:
- Pyro bots are less "pushy" with their compression blast, but will use it against ÜberCharges and to get enemies off of a capture point
- [Undocumented] Added new bot names.
- Changed the way bot counts are displayed in the server browser: the bot column is now next to the player column and always visible. Bot count is no longer subtracted from maxplayers.
- Heavy bot improvements:
- Fixed the Heavy bots not spawning in the commentary maps.
- Improved bot behaviors
- The tf_bot_add command can now create a bot with a custom name and can create a bot that isn't managed by the value of tf_bot_quota by adding the custom name and "noquota" arguments respectively
- Fixed bots not displaying in the server browser properly
- Blocked bots from being blasted into the tank tunnel in Mvm_Coaltown
- Blocked bots from being blasted into the tank tunnel in Mvm_Mannworks
- Fixed an issue in the Server Browser where replay bots would add to the player count in MvM.
- Added safeguards to prevent bots from getting stuck in certain cases in MvM.
- Fixed the tf_bot_add command using the same name for all of the bots when adding multiple bots simultaneously
- Fixed a dedicated server performance issue related to bots
- Bots can now reflect energy-based projectiles
- Improved bot pathing behavior around ramps