Yeah, it uses waypoints. I'll take this opportunity to explain the pathing system a bit. As can be seen in the screen above, there are navigation sprites placed around the map. For the most part, these don't need to be tagged in any way, you just place a bunch of them around the map, and then all the actors can figure out where to go.
The navsprites are
not like locators because there is no particular order in which they have to be traversed. Think of them as "known valid destinations". From any given navsprite, an actor could go to any other navsprite that meets certain requirements -- in some cases the actor might have a dozen different destinations it could choose from. Typically, though, it will go to a nearby navsprite that it can see from the current navsprite.
In CTF, actors will typically be going towards either a flag (which perhaps is being carried) or a base. Each navsprite currently has 4 channels of value, representing those targets:
-blue base value
-blue flag value
-red base value
-red flag value
When an actor is deciding where to go, it looks at the accessible navsprites from its location and it checks the values it is interested in. It will go to a destination that has a
higher (relevant) value than its current location. Not necessarily the
highest possible value, though, since some randomization is good to keep the bots from always following the same path. The values on all the navsprites are set by an iterative process which starts from the goal sprites (the actual flags and bases). The goal sprites look around and set value for their respective channels on the navsprites that are accessible from them. The amount of value will depend on distance. Then, the affected navsprites will perform a similar operation, sending value down the line to other navsprites. Eventually, all the navsprites which should have nonzero value will get nonzero value. The values handed out in each iteration will be lower than the last, and such that an actor following a path of higher value will be lead from any place in the map to the goal(s). For goals that can move around the map, the value streams must be continuously updated to that assigned values will accurately lead to the goal. I had some problems early on due to feedback loops, but those have been sorted out now and it works well.