This is the Bot Support system that allows bots to run around a map via a network of waypoints, or bot paths. This page describes the concepts and elements of bot path networks. For a simple tutorial, see Basic Bot Pathing.
If you are new to bot pathing, see the Basic Bot Pathing tutorial. After that, Testing Botplay will help clean up any problem areas in the bot path. When problems arise, see Bot Mind because understanding the bot's behavior can help. For special tasks you'd like bots to do, try Strategic Bots or reviewing the list of available NavigationPoints for options that handle bot support.
- 1 Overview
- 2 Seeing The Network
- 3 Special Navigation Points
- 4 Special Handling
- 5 Pathing Special Areas
- 6 Pathing Topics
- 7 Basic Bot Pathing Tutorial
- 8 Related Topics
- 9 External Links
- 10 Discussion
The AI code that drives bots doesn't have the power to interpret the 3D maps we see them in. Instead, a map has to have a set of waypoints, joined together to make a network which the bots follow.
These waypoints are mostly actors of the class Actor >> NavigationPoint >> PathNode. PathNodes are special actors specifically designed to tell bots of places that are safe and easy to travel. These nodes make up the bulk of most bot path networks. Other types allow bots to tackle more complex things, such as lifts, jumping, translocating and camping.
Unless specifically told so, bots assume they can simply walk, run or jump through the entire bot path network. Simple obstacles like doors, lifts and ladders pose problems for bots and require special nodes to help them navigate as players do.
A Quick Note About Automatically Building The Path Network
NOTE: It is the UnrealEd community consensus that use of any of these automatic pathnode network generators creates an inferior Bot Navigation system for your map. It is highly recommended that you do the pathing manually.
There are actually three UnrealEd Console commands that will automatically build a botpath network for your map:
PATHS BUILD auto create pathnode network - opt=1 PATHS BUILD HIGHOPT auto create pathnode network - opt=2 PATHS BUILD LOWOPT auto create pathnode network - opt=0
Also, PathLogic is a third-party application that lets you build the path network from within the game: you walk around your map, dropping path nodes as you go.
Seeing The Network
In UnrealEd 3, use Show Paths to troubleshoot the network after re-building paths. Do Viewport Caption Context Menu -> View -> Show Paths. It's possible to hide everything except the paths, which can be quite handy. Once the paths are visible, hit Q to hide the BSP, and the 3D viewport shows just the network (see Hiding Actors for more on this). This is basically your map as a bot sees it: just a network.
While running a game, you can see the paths a bot is considering (the route it is attempting) when you use showdebug, one of the Console Commands for UT200x. This will also show a lot of other information pertaining to the bot's weapon, pawn, controller status, etc.
You should see a bunch of lines connecting the pathnodes. They are color coded depending on their nature:
UT200x Color Codes
The color of the line between path nodes indicates to bots the general width of the path and therefore the ease with which to use it.
- A nice, wide path for the bots to follow. The bots will have no trouble following this path, seeing this as the most availble route to take. Bots will also see these paths as traversable by vehicles. See Pathing for Vehicles.
- Not as good as a white path, but still a perfectly good path. Bots prefer white paths but generally there are other factors that influence their decision so this is not as big of an issue.
- This path is technically a good path, but is quite narrow. Bots will prefer a green or white path but will attempt to take this one if it is the only path available.
- Purple paths designate jumpspots, lifts, teleporters, etc. They have their own UnrealScript to define how bots feel about this type of path. If paths are not shown, a pink arc will show the expected path that a pawn will take when launched from the jumppad. When paths are shown this pink line will disappear.
- Light Purple
- A path that takes the bot up or down a ladder.
- A forced path. Used to tell bots that this path is available when the editor doesn't automatically connect two nodes. A path must be specifically set as forced in the pathnode properties.
- A proscribed path. The pathnodes joined by this line, while technically connected, should never be used by bots. However, that is not to say that a bot will not end up at the other pathnode as a result of being hit, etc. and may continue along the path by "skipping" over the proscribed path. A path must be specifically set as proscibed in the pathnode properties.
UT Color Codes
In UT, there is only two colors of path - good ones and bad ones. Blue paths are good paths that the bots should have no trouble with. Red paths are not very good paths but the bot will attempt them anyway if it has no blue paths to take.
JumpSpots are nodes that tell bots of good landing spots, good jumping destinations. They include information telling the bots whether the destination requires DoubleJumping, ImpactJumping or LiftJumping to reach it. They are also used to indicate good spots to translocate to. See also JumpSpot.
These nodes are used to indicate a good route to attack the enemy. They not only add nodes to the bot path network, they label particular routes and are used give them a path weight that indicates to a bot how "good" the route is. Assault paths can also be used in games that require back and forth movement from one base to the other, as in CTF, to tell bots of better return routes. See also AssaultPath.
These are game goals, objects that players must handle to play the game. CTF FlagBases, Double Domination DomPoints, Bombing Run BombSpawns or BombDeliveries, Onslaught Nodes and Cores are all GameObjectives. Some of these are configured to indicate to bots if they should be defended, if they are destroyable, what AIScripts should be used to defend it, etc. See also GameObjective.
RoadPathNodes & FlyingPathNodes (UT2004)
These nodes are used for vehicles. They require the widest, clearest path possible (white color coded). They can be spread much farther apart than normal PathNodes. It is critical to have a full route of clear (White) RoadPathNodes (or FlyingPathNodes) from one GameObjective to another and to the vehicle factories in order for bots to effectively use vehicles. See also Pathing for Vehicles and Pathing 2k4 Flying Vehicles.
Inevitably, mappers will encounter situations that require tweaking of the bot's normal navigation system. Sometimes the default bot path network will include a path leading directly into an obvious hazard. Sometimes the bots will need to be told a specific path to take from a particular node. Sometimes, a system complex behaviors is needed for specific purposes in a map.
All nodes that deal with navigation (from PlayerStarts to Vehicle Path nodes) have an array available to define Forced Paths. A forced path is a specific directive to bots traveling from a node, of which node to go to next.
All node that deal with navigation also have Proscribed Paths. Proscribed Paths tell bots of forbidden nodes to travel to from the node they're on. It is the opposite of a Forced Path.
AIScripts & ScriptedSequences
Bots can be told very specific things to do with an AIscript. An AIscript is a series of commands designed to override the normal Bot, TeamAI and SquadAI code with custom behavior. Almost anything that a player can do, can be achieved using AIscipts. A ScriptedSequence is an actor with a customizable array of actions it will perform. Some of these actions can be used to control bots, much like a simplified version of an AIScript. Often they are used as Defensive Scripts or Sniper Scripts. However, a misguided Script can simply make the bot predictable and easy to defeat. See also Creating and Using ScriptedActions, ScriptedAction, ScriptedSequence and Strategic Bots.
Pathing Special Areas
Don't place pathnodes above water but in it or bots will bob up and down under the pathnode trying to reach it.
A lift system has an entry point and an exit point. Bots need to know where those points are and where the lift currently is. This is described with LiftCenter and LiftExit actors. See also Pathing Lifts.
In UT2003/UT2004, a ladder is a special volume that allows a player inside to move up and down instead of forward and back. Bots need to be told where to enter and exit the ladder volume. This is done with Ladder actors. See also Add A Ladder.
JumpPads are nodes that throw players and bots through the air to a destination node, like an ordinary PathNode. Bots know what that destination node is by the ForcedPath described in the UTJumpPad actor. See also UTJumpPad and Pathing Kickers.
Bots need to know if doors are closed they need to be opened to travel or shoot through. This is done with a Door actor. The Door actor tells the bots if there are any external triggers to open the door. The Door actor can also tell bots to ingore the path through the door if it is closed; used for locked or triggered doors that block the path. See also Door.
Teleporters simply hook up to the bot path network by the two end point nodes. Bots immediately know how to use them to navigate. See also Teleportation Basics.
Other pages cover in detail how to make bots tackle more complex elements of their environment:
- Pathing Lifts
- Pathing Kickers
- Pathing Translocators
- Pathing For Vehicles
- Pathing 2k4 Flying Vehicles
Basic Bot Pathing Tutorial
- Basic Bot Pathing – A tutorial on basic bot pathing
- Bot Support – Main topic
- UT200x Botpathing by Steven Polge
- UT200x Advanced Bot Pathing Tutorial by Blitz
- The Nucleus - Basic Bot Pathing
SuperApe: Revision done. What do you think?
Evil-System: I don't understand how to get a specific ScriptedCharacter to start patrolling at one point. I have 3 patrol points set up the way I want, and a ScriptedCharacter nearby, and I want him to move the first point, and go to the second one and just walk back and forth between the second and third point.