Bots
“ | My fists! They are made of STEEL!
Click to listen
— Heavy Bot on self-realization
|
” |
There are two types of bots in TF2: AI Bots and Puppet Bots. AI Bots are coded with sophisticated artificial intelligence designed to emulate player actions in game. Puppet Bots have no AI coding, but are useful for testing and training. They 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.
AI Bots can be indirectly controlled to an extent:
- Any friendly bot that the player focuses on with their crosshair during Setup time will taunt.
- A Medic bot will heal a player if they utilise 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 activate his ÜberCharge.
Current AI Bot Status
AI Bots are in beta testing and will become more sophisticated as they are updated. Currently, not all classes have proper AI support, a good example being the Spy. Spy bots will run away from the player or other enemies if they are approached while facing them and will never use their Cloak. Bots can only play as a Spy in Highlander mode, by typing "tf_bot_force_class Spy" into the console, or by setting class restrictions with a third party program. Spy bots are currently available in the Team Fortress 2 Beta, and are mostly working due to the fact that they use their cloak and disguises, as well as fake voice commands. AI Bots only work properly for most official King of the Hill maps, some Payload maps, Dustbowl, and Mann Manor (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. Some extra Payload support has been added for bots in the Team Fortress 2 Beta.
Note: A pack of pre-made bot meshes has been compiled for many popular maps.
Using Bots on Unsupported Maps
- Type "sv_cheats 1" in console
- Type "nav_generate" in console
- Wait while the game generates AI paths
- Map will reload (navigation has been saved and the previous step doesn't need to be repeated)
- Open console and type "tf_bot_add <number>" as above to add bots
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.
Note: Bots do not work on Capture the Flag maps, even if the above tutorial is followed.
AI Bot Behavior
- Bots currently can not use or equip unlockable content, including: non-standard Weapons, Hats, or Miscellaneous items.
- Bots currently can not jump, rocket jump or sticky jump.
- 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.
- When a bot sees a disguised enemy Spy, it will watch the Spy's movement. The bot will not attack the disguised Spy unless the Spy attacks or bumps into one of the bots.
- Pyro bots will use the Compression blast against projectiles regularly.
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.
|
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 tf bots in the game. Only has effect is "tf_bot_quota_mode" = "fill" or "match".
|
tf_bot_quota_mode | Determines the type of quota.
|
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.
Puppet Bot Commands
Not all of the following commands work; for clarity, the complete list of commands is included.
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. | |||
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.
| |||
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. 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 |
AI Bot NamesThe AI Bots are programmed to have different names, with many of their names being references to Valve's other works. They also include some references to Team Fortress as well. Many of these names have been requested on the Steam forums.
bot_randomnames <0/1>
| |||
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 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.
| |||
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
- 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.
- Looking at a bot player for a few seconds now causes it to taunt.
- 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.