ef2gamesource/dlls/game/ai_dmq3.h
Walter Julius Hennecke d4d5f3f521 reformat
2014-03-09 23:49:29 +01:00

191 lines
7.5 KiB
C

// Copyright (C) 1999-2000 Id Software, Inc.
//
/*****************************************************************************
* name: ai_dmq3.h
*
* desc: Quake3 bot AI
*
* $Archive: /Code/DLLs/game/ai_dmq3.h $
* $Author: Jwaters $
* $Revision: 2 $
* $Modtime: 8/25/02 1:03p $
* $Date: 8/25/02 6:26p $
*
*****************************************************************************/
//setup the deathmatch AI
void BotSetupDeathmatchAI(void);
//shutdown the deathmatch AI
void BotShutdownDeathmatchAI(void);
//let the bot live within it's deathmatch AI net
void BotDeathmatchAI(bot_state_t* bs, float thinktime);
//free waypoints
void BotFreeWaypoints(bot_waypoint_t* wp);
//choose a weapon
void BotChooseWeapon(bot_state_t* bs);
//setup movement stuff
void BotSetupForMovement(bot_state_t* bs);
//update the inventory
void BotUpdateInventory(bot_state_t* bs);
//update the inventory during battle
void BotUpdateBattleInventory(bot_state_t* bs, int enemy);
//use holdable items during battle
void BotBattleUseItems(bot_state_t* bs);
//return true if the bot is dead
qboolean BotIsDead(bot_state_t* bs);
//returns true if the bot is in observer mode
qboolean BotIsObserver(bot_state_t* bs);
//returns true if the bot is in the intermission
qboolean BotIntermission(bot_state_t* bs);
//returns true if the bot is in lava or slime
qboolean BotInLavaOrSlime(bot_state_t* bs);
//returns true if the entity is dead
qboolean EntityIsDead(aas_entityinfo_t* entinfo);
//returns true if the entity is invisible
qboolean EntityIsInvisible(aas_entityinfo_t* entinfo);
//returns true if the entity is shooting
qboolean EntityIsShooting(aas_entityinfo_t* entinfo);
#ifdef MISSIONPACK
//returns true if this entity has the kamikaze
qboolean EntityHasKamikaze(aas_entityinfo_t* entinfo);
#endif
// set a user info key/value pair
void BotSetUserInfo(bot_state_t* bs, char* key, char* value);
// set the team status (offense, defense etc.)
void BotSetTeamStatus(bot_state_t* bs);
//returns the name of the client
char* ClientName(int client, char* name, int size);
//returns an simplyfied client name
char* EasyClientName(int client, char* name, int size);
//returns the skin used by the client
char* ClientSkin(int client, char* skin, int size);
// returns the appropriate synonym context for the current game type and situation
int BotSynonymContext(bot_state_t* bs);
// set last ordered task
int BotSetLastOrderedTask(bot_state_t* bs);
// selection of goals for teamplay
void BotTeamGoals(bot_state_t* bs, int retreat);
//returns the aggression of the bot in the range [0, 100]
float BotAggression(bot_state_t* bs);
//returns how bad the bot feels
float BotFeelingBad(bot_state_t* bs);
//returns true if the bot wants to retreat
int BotWantsToRetreat(bot_state_t* bs);
//returns true if the bot wants to chase
int BotWantsToChase(bot_state_t* bs);
//returns true if the bot wants to help
int BotWantsToHelp(bot_state_t* bs);
//returns true if the bot can and wants to rocketjump
int BotCanAndWantsToRocketJump(bot_state_t* bs);
// returns true if the bot has a persistant powerup and a weapon
int BotHasPersistantPowerupAndWeapon(bot_state_t* bs);
//returns true if the bot wants to and goes camping
int BotWantsToCamp(bot_state_t* bs);
//the bot will perform attack movements
bot_moveresult_t BotAttackMove(bot_state_t* bs, int tfl);
//returns true if the bot and the entity are in the same team
int BotSameTeam(bot_state_t* bs, int entnum);
//returns true if teamplay is on
int TeamPlayIsOn(void);
// returns the client number of the team mate flag carrier (-1 if none)
int BotTeamFlagCarrier(bot_state_t* bs);
//returns visible team mate flag carrier if available
int BotTeamFlagCarrierVisible(bot_state_t* bs);
//returns visible enemy flag carrier if available
int BotEnemyFlagCarrierVisible(bot_state_t* bs);
//get the number of visible teammates and enemies
void BotVisibleTeamMatesAndEnemies(bot_state_t* bs, int* teammates, int* enemies, float range);
//returns true if within the field of vision for the given angles
qboolean InFieldOfVision(vec3_t viewangles, float fov, vec3_t angles);
//returns true and sets the .enemy field when an enemy is found
int BotFindEnemy(bot_state_t* bs, int curenemy);
//returns a roam goal
void BotRoamGoal(bot_state_t* bs, vec3_t goal);
//returns entity visibility in the range [0, 1]
float BotEntityVisible(int viewer, vec3_t eye, vec3_t viewangles, float fov, int ent);
//the bot will aim at the current enemy
void BotAimAtEnemy(bot_state_t* bs);
//check if the bot should attack
void BotCheckAttack(bot_state_t* bs);
//AI when the bot is blocked
void BotAIBlocked(bot_state_t* bs, bot_moveresult_t* moveresult, int activate);
//AI to predict obstacles
int BotAIPredictObstacles(bot_state_t* bs, bot_goal_t* goal);
//enable or disable the areas the blocking entity is in
void BotEnableActivateGoalAreas(bot_activategoal_t* activategoal, int enable);
//pop an activate goal from the stack
int BotPopFromActivateGoalStack(bot_state_t* bs);
//clear the activate goal stack
void BotClearActivateGoalStack(bot_state_t* bs);
//returns the team the bot is in
int BotTeam(bot_state_t* bs);
//retuns the opposite team of the bot
int BotOppositeTeam(bot_state_t* bs);
//returns the flag the bot is carrying (CTFFLAG_?)
int BotCTFCarryingFlag(bot_state_t* bs);
//remember the last ordered task
void BotRememberLastOrderedTask(bot_state_t* bs);
//set ctf goals (defend base, get enemy flag) during seek
void BotCTFSeekGoals(bot_state_t* bs);
//set ctf goals (defend base, get enemy flag) during retreat
void BotCTFRetreatGoals(bot_state_t* bs);
//
#ifdef MISSIONPACK
int Bot1FCTFCarryingFlag(bot_state_t* bs);
int BotHarvesterCarryingCubes(bot_state_t* bs);
void Bot1FCTFSeekGoals(bot_state_t* bs);
void Bot1FCTFRetreatGoals(bot_state_t* bs);
void BotObeliskSeekGoals(bot_state_t* bs);
void BotObeliskRetreatGoals(bot_state_t* bs);
void BotGoHarvest(bot_state_t* bs);
void BotHarvesterSeekGoals(bot_state_t* bs);
void BotHarvesterRetreatGoals(bot_state_t* bs);
int BotTeamCubeCarrierVisible(bot_state_t* bs);
int BotEnemyCubeCarrierVisible(bot_state_t* bs);
#endif
//get a random alternate route goal towards the given base
int BotGetAlternateRouteGoal(bot_state_t* bs, int base);
//returns either the alternate route goal or the given goal
bot_goal_t* BotAlternateRoute(bot_state_t* bs, bot_goal_t* goal);
//create a new waypoint
bot_waypoint_t* BotCreateWayPoint(char* name, vec3_t origin, int areanum);
//find a waypoint with the given name
bot_waypoint_t* BotFindWayPoint(bot_waypoint_t* waypoints, char* name);
//strstr but case insensitive
char* stristr(char* str, char* charset);
//returns the number of the client with the given name
int ClientFromName(char* name);
int ClientOnSameTeamFromName(bot_state_t* bs, char* name);
//
int BotPointAreaNum(vec3_t origin);
//
void BotMapScripts(bot_state_t* bs);
//ctf flags
#define CTF_FLAG_NONE 0
#define CTF_FLAG_RED 1
#define CTF_FLAG_BLUE 2
//CTF skins
#define CTF_SKIN_REDTEAM "red"
#define CTF_SKIN_BLUETEAM "blue"
extern int gametype; //game type
//extern int maxclients; //maximum number of clients
extern vmCvar_t bot_grapple;
extern vmCvar_t bot_rocketjump;
extern vmCvar_t bot_fastchat;
extern vmCvar_t bot_nochat;
extern vmCvar_t bot_testrchat;
extern vmCvar_t bot_challenge;
extern vmCvar_t bot_showstates;
extern bot_goal_t ctf_redflag;
extern bot_goal_t ctf_blueflag;
#ifdef MISSIONPACK
extern bot_goal_t ctf_neutralflag;
extern bot_goal_t redobelisk;
extern bot_goal_t blueobelisk;
extern bot_goal_t neutralobelisk;
#endif