rpgxef/code/game/ai_main.h

227 lines
11 KiB
C

// Copyright (C) 1999-2000 Id Software, Inc.
//
/*****************************************************************************
* name: ai_main.h
*
* desc: Quake3 bot AI
*
* $Archive: /StarTrek/Code-DM/game/ai_main.h $
* $Author: Jmonroe $
* $Revision: 1 $
* $Modtime: 1/21/00 10:12p $
* $Date: 1/25/00 6:26p $
*
*****************************************************************************/
//#define DEBUG
#define CTF
#define MAX_ITEMS 256
//bot flags
#define BFL_STRAFERIGHT 1 //!<strafe to the right
#define BFL_ATTACKED 2 //!<bot has attacked last ai frame
#define BFL_ATTACKJUMPED 4 //!<bot jumped during attack last frame
#define BFL_AIMATENEMY 8 //!<bot aimed at the enemy this frame
#define BFL_AVOIDRIGHT 16 //!<avoid obstacles by going to the right
#define BFL_IDEALVIEWSET 32 //!<bot has ideal view angles set
#define BFL_FIGHTSUICIDAL 64 //!<bot is in a suicidal fight
//long term goal types
#define LTG_TEAMHELP 1 //!<help a team mate
#define LTG_TEAMACCOMPANY 2 //!<accompany a team mate
#define LTG_DEFENDKEYAREA 3 //!<defend a key area
#define LTG_GETFLAG 4 //!<get the enemy flag
#define LTG_RUSHBASE 5 //!<rush to the base
#define LTG_RETURNFLAG 6 //!<return the flag
#define LTG_CAMP 7 //!<camp somewhere
#define LTG_CAMPORDER 8 //!<ordered to camp somewhere
#define LTG_PATROL 9 //!<patrol
#define LTG_GETITEM 10 //!<get an item
#define LTG_KILL 11 //!<kill someone
//some goal dedication times
#define TEAM_HELP_TIME 10 //!<1 minute teamplay help time
#define TEAM_ACCOMPANY_TIME 10 //!<10 minutes teamplay accompany time
#define TEAM_DEFENDKEYAREA_TIME 600 //!<5 minutes ctf defend base time
#define TEAM_CAMP_TIME 10 //!<10 minutes camping time
#define TEAM_PATROL_TIME 600 //!<10 minutes patrolling time
#define TEAM_LEAD_TIME 600 //!<10 minutes taking the lead
#define TEAM_GETITEM_TIME 10 //!<1 minute
#define TEAM_KILL_SOMEONE 10 //!<3 minute to kill someone
#define CTF_GETFLAG_TIME 600 //!<5 minutes ctf get flag time
#define CTF_RUSHBASE_TIME 600 //!<2 minutes ctf rush base time
#define CTF_RETURNFLAG_TIME 600 //!<3 minutes to return the flag
#define CTF_ROAM_TIME 600 //!<1 minute ctf roam time
//patrol flags
#define PATROL_LOOP 1
#define PATROL_REVERSE 2
#define PATROL_BACK 4
//CTF task preference
#define CTFTP_DEFENDER 1
#define CTFTP_ATTACKER 2
//CTF strategy
#define CTFS_PASSIVE 1
//copied from the aas file header
#define PRESENCE_NONE 1
#define PRESENCE_NORMAL 2
#define PRESENCE_CROUCH 4
//!check points
typedef struct bot_waypoint_s
{
int inuse;
char name[32];
bot_goal_t goal;
struct bot_waypoint_s *next, *prev;
} bot_waypoint_t;
//!bot state
typedef struct bot_state_s
{
int inuse; //!<true if this state is used by a bot client
int botthink_residual; //!<residual for the bot thinks
int client; //!<client number of the bot
int entitynum; //!<entity number of the bot
playerState_t cur_ps; //!<current player state
int last_eFlags; //!<last ps flags
usercmd_t lastucmd; //!<usercmd from last frame
int entityeventTime[1024]; //!<last entity event time
//
bot_settings_t settings; //!<several bot settings
int (*ainode)(struct bot_state_s *bs); //!<current AI node
float thinktime; //!<time the bot thinks this frame
vec3_t origin; //!<origin of the bot
vec3_t velocity; //!<velocity of the bot
int presencetype; //!<presence type of the bot
vec3_t eye; //!<eye coordinates of the bot
int areanum; //!<the number of the area the bot is in
int inventory[MAX_ITEMS]; //!<string with items amounts the bot has
int tfl; //!<the travel flags the bot uses
int flags; //!<several flags
int respawn_wait; //!<wait until respawned
int lasthealth; //!<health value previous frame
int lastkilledplayer; //!<last killed player
int lastkilledby; //!<player that last killed this bot
int botdeathtype; //!<the death type of the bot
int enemydeathtype; //!<the death type of the enemy
int botsuicide; //!<true when the bot suicides
int enemysuicide; //!<true when the enemy of the bot suicides
int setupcount; //!<true when the bot has just been setup
int entergamechat; //!<true when the bot used an enter game chat
int num_deaths; //!<number of time this bot died
int num_kills; //!<number of kills of this bot
int revenge_enemy; //!<the revenge enemy
int revenge_kills; //!<number of kills the enemy made
int lastframe_health; //!<health value the last frame
int lasthitcount; //!<number of hits last frame
int chatto; //!<chat to all or team
float walker; //!<walker charactertic
float ltime; //!<local bot time
float entergame_time; //!<time the bot entered the game
float ltg_time; //!<long term goal time
float nbg_time; //!<nearby goal time
float respawn_time; //!<time the bot takes to respawn
float respawnchat_time; //!<time the bot started a chat during respawn
float chase_time; //!<time the bot will chase the enemy
float enemyvisible_time; //!<time the enemy was last visible
float check_time; //!<time to check for nearby items
float stand_time; //!<time the bot is standing still
float lastchat_time; //!<time the bot last selected a chat
float standfindenemy_time; //!<time to find enemy while standing
float attackstrafe_time; //!<time the bot is strafing in one dir
float attackcrouch_time; //!<time the bot will stop crouching
float attackchase_time; //!<time the bot chases during actual attack
float attackjump_time; //!<time the bot jumped during attack
float enemysight_time; //!<time before reacting to enemy
float enemydeath_time; //!<time the enemy died
float enemyposition_time; //!<time the position and velocity of the enemy were stored
float activate_time; //!<time to activate something
float activatemessage_time; //!<time to show activate message
float defendaway_time; //!<time away while defending
float defendaway_range; //!<max travel time away from defend area
float rushbaseaway_time; //!<time away from rushing to the base
float ctfroam_time; //!<time the bot is roaming in ctf
float killedenemy_time; //!<time the bot killed the enemy
float arrive_time; //!<time arrived (at companion)
float lastair_time; //!<last time the bot had air
float teleport_time; //!<last time the bot teleported
float camp_time; //!<last time camped
float camp_range; //!<camp range
float weaponchange_time; //!<time the bot started changing weapons
float firethrottlewait_time; //!<amount of time to wait
float firethrottleshoot_time; //!<amount of time to shoot
float notblocked_time; //!<last time the bot was not blocked
vec3_t aimtarget;
vec3_t enemyvelocity; //!<enemy velocity 0.5 secs ago during battle
vec3_t enemyorigin; //!<enemy origin 0.5 secs ago during battle
//
int character; //!<the bot character
int ms; //!<move state of the bot
int gs; //!<goal state of the bot
int cs; //!<chat state of the bot
int ws; //!<weapon state of the bot
//
int enemy; //!<enemy entity number
int lastenemyareanum; //!<last reachability area the enemy was in
vec3_t lastenemyorigin; //!<last origin of the enemy in the reachability area
int weaponnum; //!<current weapon number
vec3_t viewangles; //!<current view angles
vec3_t ideal_viewangles; //!<ideal view angles
vec3_t viewanglespeed;
//
int ltgtype; //!<long term goal type
//
int teammate; //!<team mate
bot_goal_t teamgoal; //!<the team goal
float teammessage_time; //!<time to message team mates what the bot is doing
float teamgoal_time; //!<time to stop helping team mate
float teammatevisible_time; //!<last time the team mate was NOT visible
//
int lead_teammate; //!<team mate the bot is leading
bot_goal_t lead_teamgoal; //!<team goal while leading
float lead_time; //!<time leading someone
float leadvisible_time; //!<last time the team mate was visible
float leadmessage_time; //!<last time a messaged was sent to the team mate
float leadbackup_time; //!<time backing up towards team mate
//
char teamleader[32]; //!<netname of the team leader
float askteamleader_time; //!<time asked for team leader
float becometeamleader_time; //!<time the bot will become the team leader
float teamgiveorders_time; //!<time to give team orders
float lastflagcapture_time; //!<last time a flag was captured
int numteammates; //!<number of team mates
int redflagstatus; //!<0 = at base, 1 = not at base
int blueflagstatus; //!<0 = at base, 1 = not at base
int flagstatuschanged; //!<flag status changed
int forceorders; //!<true if forced to give orders
int flagcarrier; //!<team mate carrying the enemy flag
int ctfstrategy; //!<ctf strategy
char subteam[32]; //!<sub team name
float formation_dist; //!<formation team mate intervening space
char formation_teammate[16]; //!<netname of the team mate the bot uses for relative positioning
float formation_angle; //!<angle relative to the formation team mate
vec3_t formation_dir; //!<the direction the formation is moving in
vec3_t formation_origin; //!<origin the bot uses for relative positioning
bot_goal_t formation_goal; //!<formation goal
bot_goal_t activategoal; //!<goal to activate (buttons etc.)
bot_waypoint_t *checkpoints; //!<check points
bot_waypoint_t *patrolpoints; //!<patrol points
bot_waypoint_t *curpatrolpoint; //!<current patrol point the bot is going for
int patrolflags; //!<patrol flags
} bot_state_t;
//!resets the whole bot state
void BotResetState(bot_state_t *bs);
//!returns the number of bots in the game
int NumBots(void);
//!returns info about the entity
void BotEntityInfo(int entnum, aas_entityinfo_t *info);
// from the game source
void QDECL BotAI_Print(int type, char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
void QDECL QDECL BotAI_BotInitialChat( bot_state_t *bs, char *type, ... );
void BotAI_Trace(bsp_trace_t *bsptrace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int passent, int contentmask);
int BotAI_GetClientState( int clientNum, playerState_t *state );
int BotAI_GetEntityState( int entityNum, entityState_t *state );
int BotAI_GetSnapshotEntity( int clientNum, int sequence, entityState_t *state );
int BotTeamLeader(bot_state_t *bs);