1 /* 2 =========================================================================== 3 Copyright (C) 1999-2005 Id Software, Inc. 4 5 This file is part of Quake III Arena source code. 6 7 Quake III Arena source code is free software; you can redistribute it 8 and/or modify it under the terms of the GNU General Public License as 9 published by the Free Software Foundation; either version 2 of the License, 10 or (at your option) any later version. 11 12 Quake III Arena source code is distributed in the hope that it will be 13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Quake III Arena source code; if not, write to the Free Software 19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20 =========================================================================== 21 */ 22 // 23 24 /***************************************************************************** 25 * name: ai_dmq3.h 26 * 27 * desc: Quake3 bot AI 28 * 29 * $Archive: /source/code/botai/ai_chat.c $ 30 * 31 *****************************************************************************/ 32 33 //setup the deathmatch AI 34 void BotSetupDeathmatchAI(void); 35 //shutdown the deathmatch AI 36 void BotShutdownDeathmatchAI(void); 37 //let the bot live within it's deathmatch AI net 38 void BotDeathmatchAI(bot_state_t *bs, float thinktime); 39 //free waypoints 40 void BotFreeWaypoints(bot_waypoint_t *wp); 41 //choose a weapon 42 void BotChooseWeapon(bot_state_t *bs); 43 //setup movement stuff 44 void BotSetupForMovement(bot_state_t *bs); 45 //update the inventory 46 void BotUpdateInventory(bot_state_t *bs); 47 //update the inventory during battle 48 void BotUpdateBattleInventory(bot_state_t *bs, int enemy); 49 //use holdable items during battle 50 void BotBattleUseItems(bot_state_t *bs); 51 //return true if the bot is dead 52 qboolean BotIsDead(bot_state_t *bs); 53 //returns true if the bot is in observer mode 54 qboolean BotIsObserver(bot_state_t *bs); 55 //returns true if the bot is in the intermission 56 qboolean BotIntermission(bot_state_t *bs); 57 //returns true if the bot is in lava or slime 58 qboolean BotInLavaOrSlime(bot_state_t *bs); 59 //returns true if the entity is dead 60 qboolean EntityIsDead(aas_entityinfo_t *entinfo); 61 //returns true if the entity is invisible 62 qboolean EntityIsInvisible(aas_entityinfo_t *entinfo); 63 //returns true if the entity is shooting 64 qboolean EntityIsShooting(aas_entityinfo_t *entinfo); 65 #ifdef MISSIONPACK 66 //returns true if this entity has the kamikaze 67 qboolean EntityHasKamikaze(aas_entityinfo_t *entinfo); 68 #endif 69 // set a user info key/value pair 70 void BotSetUserInfo(bot_state_t *bs, char *key, char *value); 71 // set the team status (offense, defense etc.) 72 void BotSetTeamStatus(bot_state_t *bs); 73 //returns the name of the client 74 char *ClientName(int client, char *name, int size); 75 //returns an simplyfied client name 76 char *EasyClientName(int client, char *name, int size); 77 //returns the skin used by the client 78 char *ClientSkin(int client, char *skin, int size); 79 // returns the appropriate synonym context for the current game type and situation 80 int BotSynonymContext(bot_state_t *bs); 81 // set last ordered task 82 int BotSetLastOrderedTask(bot_state_t *bs); 83 // selection of goals for teamplay 84 void BotTeamGoals(bot_state_t *bs, int retreat); 85 //returns the aggression of the bot in the range [0, 100] 86 float BotAggression(bot_state_t *bs); 87 //returns how bad the bot feels 88 float BotFeelingBad(bot_state_t *bs); 89 //returns true if the bot wants to retreat 90 int BotWantsToRetreat(bot_state_t *bs); 91 //returns true if the bot wants to chase 92 int BotWantsToChase(bot_state_t *bs); 93 //returns true if the bot wants to help 94 int BotWantsToHelp(bot_state_t *bs); 95 //returns true if the bot can and wants to rocketjump 96 int BotCanAndWantsToRocketJump(bot_state_t *bs); 97 // returns true if the bot has a persistant powerup and a weapon 98 int BotHasPersistantPowerupAndWeapon(bot_state_t *bs); 99 //returns true if the bot wants to and goes camping 100 int BotWantsToCamp(bot_state_t *bs); 101 //the bot will perform attack movements 102 bot_moveresult_t BotAttackMove(bot_state_t *bs, int tfl); 103 //returns true if the bot and the entity are in the same team 104 int BotSameTeam(bot_state_t *bs, int entnum); 105 //returns true if teamplay is on 106 int TeamPlayIsOn(void); 107 // returns the client number of the team mate flag carrier (-1 if none) 108 int BotTeamFlagCarrier(bot_state_t *bs); 109 //returns visible team mate flag carrier if available 110 int BotTeamFlagCarrierVisible(bot_state_t *bs); 111 //returns visible enemy flag carrier if available 112 int BotEnemyFlagCarrierVisible(bot_state_t *bs); 113 //get the number of visible teammates and enemies 114 void BotVisibleTeamMatesAndEnemies(bot_state_t *bs, int *teammates, int *enemies, float range); 115 //returns true if within the field of vision for the given angles 116 qboolean InFieldOfVision(vec3_t viewangles, float fov, vec3_t angles); 117 //returns true and sets the .enemy field when an enemy is found 118 int BotFindEnemy(bot_state_t *bs, int curenemy); 119 //returns a roam goal 120 void BotRoamGoal(bot_state_t *bs, vec3_t goal); 121 //returns entity visibility in the range [0, 1] 122 float BotEntityVisible(int viewer, vec3_t eye, vec3_t viewangles, float fov, int ent); 123 //the bot will aim at the current enemy 124 void BotAimAtEnemy(bot_state_t *bs); 125 //check if the bot should attack 126 void BotCheckAttack(bot_state_t *bs); 127 //AI when the bot is blocked 128 void BotAIBlocked(bot_state_t *bs, bot_moveresult_t *moveresult, int activate); 129 //AI to predict obstacles 130 int BotAIPredictObstacles(bot_state_t *bs, bot_goal_t *goal); 131 //enable or disable the areas the blocking entity is in 132 void BotEnableActivateGoalAreas(bot_activategoal_t *activategoal, int enable); 133 //pop an activate goal from the stack 134 int BotPopFromActivateGoalStack(bot_state_t *bs); 135 //clear the activate goal stack 136 void BotClearActivateGoalStack(bot_state_t *bs); 137 //returns the team the bot is in 138 int BotTeam(bot_state_t *bs); 139 //retuns the opposite team of the bot 140 int BotOppositeTeam(bot_state_t *bs); 141 //returns the flag the bot is carrying (CTFFLAG_?) 142 int BotCTFCarryingFlag(bot_state_t *bs); 143 //remember the last ordered task 144 void BotRememberLastOrderedTask(bot_state_t *bs); 145 //set ctf goals (defend base, get enemy flag) during seek 146 void BotCTFSeekGoals(bot_state_t *bs); 147 //set ctf goals (defend base, get enemy flag) during retreat 148 void BotCTFRetreatGoals(bot_state_t *bs); 149 // 150 #ifdef MISSIONPACK 151 int Bot1FCTFCarryingFlag(bot_state_t *bs); 152 int BotHarvesterCarryingCubes(bot_state_t *bs); 153 void Bot1FCTFSeekGoals(bot_state_t *bs); 154 void Bot1FCTFRetreatGoals(bot_state_t *bs); 155 void BotObeliskSeekGoals(bot_state_t *bs); 156 void BotObeliskRetreatGoals(bot_state_t *bs); 157 void BotGoHarvest(bot_state_t *bs); 158 void BotHarvesterSeekGoals(bot_state_t *bs); 159 void BotHarvesterRetreatGoals(bot_state_t *bs); 160 int BotTeamCubeCarrierVisible(bot_state_t *bs); 161 int BotEnemyCubeCarrierVisible(bot_state_t *bs); 162 #endif 163 //get a random alternate route goal towards the given base 164 int BotGetAlternateRouteGoal(bot_state_t *bs, int base); 165 //returns either the alternate route goal or the given goal 166 bot_goal_t *BotAlternateRoute(bot_state_t *bs, bot_goal_t *goal); 167 //create a new waypoint 168 bot_waypoint_t *BotCreateWayPoint(char *name, vec3_t origin, int areanum); 169 //find a waypoint with the given name 170 bot_waypoint_t *BotFindWayPoint(bot_waypoint_t *waypoints, char *name); 171 //strstr but case insensitive 172 char *stristr(char *str, char *charset); 173 //returns the number of the client with the given name 174 int ClientFromName(char *name); 175 int ClientOnSameTeamFromName(bot_state_t *bs, char *name); 176 // 177 int BotPointAreaNum(vec3_t origin); 178 // 179 void BotMapScripts(bot_state_t *bs); 180 181 //ctf flags 182 #define CTF_FLAG_NONE 0 183 #define CTF_FLAG_RED 1 184 #define CTF_FLAG_BLUE 2 185 //CTF skins 186 #define CTF_SKIN_REDTEAM "red" 187 #define CTF_SKIN_BLUETEAM "blue" 188 189 extern int gametype; //game type 190 extern int maxclients; //maximum number of clients 191 192 extern vmCvar_t bot_grapple; 193 extern vmCvar_t bot_rocketjump; 194 extern vmCvar_t bot_fastchat; 195 extern vmCvar_t bot_nochat; 196 extern vmCvar_t bot_testrchat; 197 extern vmCvar_t bot_challenge; 198 199 extern bot_goal_t ctf_redflag; 200 extern bot_goal_t ctf_blueflag; 201 #ifdef MISSIONPACK 202 extern bot_goal_t ctf_neutralflag; 203 extern bot_goal_t redobelisk; 204 extern bot_goal_t blueobelisk; 205 extern bot_goal_t neutralobelisk; 206 #endif 207