My program doesn't have bugs. It just develops random features.
The behaviour of the bots is determined by their current state and what orders they have (if any). Essentially, the bot takes a stimulus like the desire for a weapon, or spotting another pawn, and determines an action based upon it's own internal state and orders. Sometimes the bot will change it's own internal state to enable it to better deal with the action it wishes to perform.
At its most basic the bot AI can be boiled down to the following actions below repeated ad nauseum.
- Find big guns and ammunition.
- See other pawn - attack other pawn.
For a slightly more detailed view of the bot AI see the Bot Support (UT) page.
- If a bot has "Point" orders then it can command other bots. I vaguely remember seeing a limit to the number of bots each bot could command somewhere in the code but I wouldn't bet anything on it (not even a pair of smelly old socks).
- This order will cause the bot to follow the pawn that gave the "follow" order. The Actor that gave the order is assigned to the OrderObject property.
- Bots under this order will attempt to hold the position that they have been assigned.
- Bots under this order will find a nice spot to camp and set up their tent.
- Bots under this order will enter a search and destroy mode, or, attempt to capture the flag, control point, or complete the next objective.
- Bots under this order will do whatever they decide is necessary. In deathmatch games they collect inventory until they find someone to fight. In team games they decide what to do based upon the current state of the game.
- The initial starting state for a bot.
- In this state the bot will rush at it's enemy with no regard for the continued well being of either itself or its target.
- This state is entered when the game has ended. It essentially prevents the bots from moving around and doing things once the game is over.
- This is the state that is entered when the bot has been killed and is busy "dying" (presumably leaking decals all over the place and generally making a mess).
See graphics and animation functions for the list of functions used to handle pawn animations and graphics.
- function eAttitude AttitudeTo( Pawn (UT) Other )
- This function determines the bot's attitude towards the Other pawn. The function can return any of the following attitudes: fear, hate, ignore, and friendly. The primary driver for the bot's attitude towards Other is the function DeathMatchPlus.AssessBotAttitude() (This function is overidden in the game type classes). The attitude calculated is then set to friendly if Other is on the same team as the bot and the game is a team game.