00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #define BOTLIB_API_VERSION 2
00017
00018 struct aas_clientmove_s;
00019 struct aas_entityinfo_s;
00020 struct aas_areainfo_s;
00021 struct aas_altroutegoal_s;
00022 struct aas_predictroute_s;
00023 struct bot_consolemessage_s;
00024 struct bot_match_s;
00025 struct bot_goal_s;
00026 struct bot_moveresult_s;
00027 struct bot_initmove_s;
00028 struct weaponinfo_s;
00029
00030 #define BOTFILESBASEFOLDER "botfiles"
00031
00032 #define LINECOLOR_NONE -1
00033 #define LINECOLOR_RED 1//0xf2f2f0f0L
00034 #define LINECOLOR_GREEN 2//0xd0d1d2d3L
00035 #define LINECOLOR_BLUE 3//0xf3f3f1f1L
00036 #define LINECOLOR_YELLOW 4//0xdcdddedfL
00037 #define LINECOLOR_ORANGE 5//0xe0e1e2e3L
00038
00039
00040 #define PRT_MESSAGE 1
00041 #define PRT_WARNING 2
00042 #define PRT_ERROR 3
00043 #define PRT_FATAL 4
00044 #define PRT_EXIT 5
00045
00046
00047 #define CMS_NORMAL 0
00048 #define CMS_CHAT 1
00049
00050
00051 #define BLERR_NOERROR 0 //no error
00052 #define BLERR_LIBRARYNOTSETUP 1 //library not setup
00053 #define BLERR_INVALIDENTITYNUMBER 2 //invalid entity number
00054 #define BLERR_NOAASFILE 3 //no AAS file available
00055 #define BLERR_CANNOTOPENAASFILE 4 //cannot open AAS file
00056 #define BLERR_WRONGAASFILEID 5 //incorrect AAS file id
00057 #define BLERR_WRONGAASFILEVERSION 6 //incorrect AAS file version
00058 #define BLERR_CANNOTREADAASLUMP 7 //cannot read AAS file lump
00059 #define BLERR_CANNOTLOADICHAT 8 //cannot load initial chats
00060 #define BLERR_CANNOTLOADITEMWEIGHTS 9 //cannot load item weights
00061 #define BLERR_CANNOTLOADITEMCONFIG 10 //cannot load item config
00062 #define BLERR_CANNOTLOADWEAPONWEIGHTS 11 //cannot load weapon weights
00063 #define BLERR_CANNOTLOADWEAPONCONFIG 12 //cannot load weapon config
00064
00065
00066 #define ACTION_ATTACK 0x0000001
00067 #define ACTION_USE 0x0000002
00068 #define ACTION_RESPAWN 0x0000008
00069 #define ACTION_JUMP 0x0000010
00070 #define ACTION_MOVEUP 0x0000020
00071 #define ACTION_CROUCH 0x0000080
00072 #define ACTION_MOVEDOWN 0x0000100
00073 #define ACTION_MOVEFORWARD 0x0000200
00074 #define ACTION_MOVEBACK 0x0000800
00075 #define ACTION_MOVELEFT 0x0001000
00076 #define ACTION_MOVERIGHT 0x0002000
00077 #define ACTION_DELAYEDJUMP 0x0008000
00078 #define ACTION_TALK 0x0010000
00079 #define ACTION_GESTURE 0x0020000
00080 #define ACTION_WALK 0x0080000
00081 #define ACTION_FORCEPOWER 0x0100000
00082 #define ACTION_ALT_ATTACK 0x0200000
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 typedef struct bot_input_s
00094 {
00095 float thinktime;
00096 vec3_t dir;
00097 float speed;
00098 vec3_t viewangles;
00099 int actionflags;
00100 int weapon;
00101 } bot_input_t;
00102
00103 #ifndef BSPTRACE
00104
00105 #define BSPTRACE
00106
00107
00108 typedef struct bsp_surface_s
00109 {
00110 char name[16];
00111 int flags;
00112 int value;
00113 } bsp_surface_t;
00114
00115
00116
00117 typedef struct bsp_trace_s
00118 {
00119 qboolean allsolid;
00120 qboolean startsolid;
00121 float fraction;
00122 vec3_t endpos;
00123 cplane_t plane;
00124 float exp_dist;
00125 int sidenum;
00126 bsp_surface_t surface;
00127 int contents;
00128 int ent;
00129 } bsp_trace_t;
00130
00131 #endif // BSPTRACE
00132
00133
00134 typedef struct bot_entitystate_s
00135 {
00136 int type;
00137 int flags;
00138 vec3_t origin;
00139 vec3_t angles;
00140 vec3_t old_origin;
00141 vec3_t mins;
00142 vec3_t maxs;
00143 int groundent;
00144 int solid;
00145 int modelindex;
00146 int modelindex2;
00147 int frame;
00148 int event;
00149 int eventParm;
00150 int powerups;
00151 int weapon;
00152 int legsAnim;
00153 int torsoAnim;
00154 } bot_entitystate_t;
00155
00156
00157 typedef struct botlib_import_s
00158 {
00159
00160 void (QDECL *Print)(int type, char *fmt, ...);
00161
00162 void (*Trace)(bsp_trace_t *trace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int passent, int contentmask);
00163
00164 void (*EntityTrace)(bsp_trace_t *trace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int entnum, int contentmask);
00165
00166 int (*PointContents)(vec3_t point);
00167
00168 int (*inPVS)(vec3_t p1, vec3_t p2);
00169
00170 char *(*BSPEntityData)(void);
00171
00172 void (*BSPModelMinsMaxsOrigin)(int modelnum, vec3_t angles, vec3_t mins, vec3_t maxs, vec3_t origin);
00173
00174 void (*BotClientCommand)(int client, char *command);
00175
00176 void *(*GetMemory)(int size);
00177 void (*FreeMemory)(void *ptr);
00178 int (*AvailableMemory)(void);
00179 void *(*HunkAlloc)(int size);
00180
00181 int (*FS_FOpenFile)( const char *qpath, fileHandle_t *file, fsMode_t mode );
00182 int (*FS_Read)( void *buffer, int len, fileHandle_t f );
00183 int (*FS_Write)( const void *buffer, int len, fileHandle_t f );
00184 void (*FS_FCloseFile)( fileHandle_t f );
00185 int (*FS_Seek)( fileHandle_t f, long offset, int origin );
00186
00187 int (*DebugLineCreate)(void);
00188 void (*DebugLineDelete)(int line);
00189 void (*DebugLineShow)(int line, vec3_t start, vec3_t end, int color);
00190
00191 int (*DebugPolygonCreate)(int color, int numPoints, vec3_t *points);
00192 void (*DebugPolygonDelete)(int id);
00193 } botlib_import_t;
00194
00195 typedef struct aas_export_s
00196 {
00197
00198
00199
00200 void (*AAS_EntityInfo)(int entnum, struct aas_entityinfo_s *info);
00201
00202
00203
00204 int (*AAS_Initialized)(void);
00205 void (*AAS_PresenceTypeBoundingBox)(int presencetype, vec3_t mins, vec3_t maxs);
00206 float (*AAS_Time)(void);
00207
00208
00209
00210 int (*AAS_PointAreaNum)(vec3_t point);
00211 int (*AAS_PointReachabilityAreaIndex)( vec3_t point );
00212 int (*AAS_TraceAreas)(vec3_t start, vec3_t end, int *areas, vec3_t *points, int maxareas);
00213 int (*AAS_BBoxAreas)(vec3_t absmins, vec3_t absmaxs, int *areas, int maxareas);
00214 int (*AAS_AreaInfo)( int areanum, struct aas_areainfo_s *info );
00215
00216
00217
00218 int (*AAS_PointContents)(vec3_t point);
00219 int (*AAS_NextBSPEntity)(int ent);
00220 int (*AAS_ValueForBSPEpairKey)(int ent, char *key, char *value, int size);
00221 int (*AAS_VectorForBSPEpairKey)(int ent, char *key, vec3_t v);
00222 int (*AAS_FloatForBSPEpairKey)(int ent, char *key, float *value);
00223 int (*AAS_IntForBSPEpairKey)(int ent, char *key, int *value);
00224
00225
00226
00227 int (*AAS_AreaReachability)(int areanum);
00228
00229
00230
00231 int (*AAS_AreaTravelTimeToGoalArea)(int areanum, vec3_t origin, int goalareanum, int travelflags);
00232 int (*AAS_EnableRoutingArea)(int areanum, int enable);
00233 int (*AAS_PredictRoute)(struct aas_predictroute_s *route, int areanum, vec3_t origin,
00234 int goalareanum, int travelflags, int maxareas, int maxtime,
00235 int stopevent, int stopcontents, int stoptfl, int stopareanum);
00236
00237
00238
00239 int (*AAS_AlternativeRouteGoals)(vec3_t start, int startareanum, vec3_t goal, int goalareanum, int travelflags,
00240 struct aas_altroutegoal_s *altroutegoals, int maxaltroutegoals,
00241 int type);
00242
00243
00244
00245 int (*AAS_Swimming)(vec3_t origin);
00246 int (*AAS_PredictClientMovement)(struct aas_clientmove_s *move,
00247 int entnum, vec3_t origin,
00248 int presencetype, int onground,
00249 vec3_t velocity, vec3_t cmdmove,
00250 int cmdframes,
00251 int maxframes, float frametime,
00252 int stopevent, int stopareanum, int visualize);
00253 } aas_export_t;
00254
00255 typedef struct ea_export_s
00256 {
00257
00258 void (*EA_Command)(int client, char *command );
00259 void (*EA_Say)(int client, char *str);
00260 void (*EA_SayTeam)(int client, char *str);
00261
00262 void (*EA_Action)(int client, int action);
00263 void (*EA_Gesture)(int client);
00264 void (*EA_Talk)(int client);
00265 void (*EA_Attack)(int client);
00266 void (*EA_Use)(int client);
00267 void (*EA_Respawn)(int client);
00268 void (*EA_MoveUp)(int client);
00269 void (*EA_MoveDown)(int client);
00270 void (*EA_MoveForward)(int client);
00271 void (*EA_MoveBack)(int client);
00272 void (*EA_MoveLeft)(int client);
00273 void (*EA_MoveRight)(int client);
00274 void (*EA_Crouch)(int client);
00275 void (*EA_Alt_Attack)(int client);
00276 void (*EA_ForcePower)(int client);
00277
00278 void (*EA_SelectWeapon)(int client, int weapon);
00279 void (*EA_Jump)(int client);
00280 void (*EA_DelayedJump)(int client);
00281 void (*EA_Move)(int client, vec3_t dir, float speed);
00282 void (*EA_View)(int client, vec3_t viewangles);
00283
00284 void (*EA_EndRegular)(int client, float thinktime);
00285 void (*EA_GetInput)(int client, float thinktime, bot_input_t *input);
00286 void (*EA_ResetInput)(int client);
00287 } ea_export_t;
00288
00289 typedef struct ai_export_s
00290 {
00291
00292
00293
00294 int (*BotLoadCharacter)(char *charfile, float skill);
00295 void (*BotFreeCharacter)(int character);
00296 float (*Characteristic_Float)(int character, int index);
00297 float (*Characteristic_BFloat)(int character, int index, float min, float max);
00298 int (*Characteristic_Integer)(int character, int index);
00299 int (*Characteristic_BInteger)(int character, int index, int min, int max);
00300 void (*Characteristic_String)(int character, int index, char *buf, int size);
00301
00302
00303
00304 int (*BotAllocChatState)(void);
00305 void (*BotFreeChatState)(int handle);
00306 void (*BotQueueConsoleMessage)(int chatstate, int type, char *message);
00307 void (*BotRemoveConsoleMessage)(int chatstate, int handle);
00308 int (*BotNextConsoleMessage)(int chatstate, struct bot_consolemessage_s *cm);
00309 int (*BotNumConsoleMessages)(int chatstate);
00310 void (*BotInitialChat)(int chatstate, char *type, int mcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7);
00311 int (*BotNumInitialChats)(int chatstate, char *type);
00312 int (*BotReplyChat)(int chatstate, char *message, int mcontext, int vcontext, char *var0, char *var1, char *var2, char *var3, char *var4, char *var5, char *var6, char *var7);
00313 int (*BotChatLength)(int chatstate);
00314 void (*BotEnterChat)(int chatstate, int client, int sendto);
00315 void (*BotGetChatMessage)(int chatstate, char *buf, int size);
00316 int (*StringContains)(char *str1, char *str2, int casesensitive);
00317 int (*BotFindMatch)(char *str, struct bot_match_s *match, unsigned long int context);
00318 void (*BotMatchVariable)(struct bot_match_s *match, int variable, char *buf, int size);
00319 void (*UnifyWhiteSpaces)(char *string);
00320 void (*BotReplaceSynonyms)(char *string, unsigned long int context);
00321 int (*BotLoadChatFile)(int chatstate, char *chatfile, char *chatname);
00322 void (*BotSetChatGender)(int chatstate, int gender);
00323 void (*BotSetChatName)(int chatstate, char *name, int client);
00324
00325
00326
00327 void (*BotResetGoalState)(int goalstate);
00328 void (*BotResetAvoidGoals)(int goalstate);
00329 void (*BotRemoveFromAvoidGoals)(int goalstate, int number);
00330 void (*BotPushGoal)(int goalstate, struct bot_goal_s *goal);
00331 void (*BotPopGoal)(int goalstate);
00332 void (*BotEmptyGoalStack)(int goalstate);
00333 void (*BotDumpAvoidGoals)(int goalstate);
00334 void (*BotDumpGoalStack)(int goalstate);
00335 void (*BotGoalName)(int number, char *name, int size);
00336 int (*BotGetTopGoal)(int goalstate, struct bot_goal_s *goal);
00337 int (*BotGetSecondGoal)(int goalstate, struct bot_goal_s *goal);
00338 int (*BotChooseLTGItem)(int goalstate, vec3_t origin, int *inventory, int travelflags);
00339 int (*BotChooseNBGItem)(int goalstate, vec3_t origin, int *inventory, int travelflags,
00340 struct bot_goal_s *ltg, float maxtime);
00341 int (*BotTouchingGoal)(vec3_t origin, struct bot_goal_s *goal);
00342 int (*BotItemGoalInVisButNotVisible)(int viewer, vec3_t eye, vec3_t viewangles, struct bot_goal_s *goal);
00343 int (*BotGetLevelItemGoal)(int index, char *classname, struct bot_goal_s *goal);
00344 int (*BotGetNextCampSpotGoal)(int num, struct bot_goal_s *goal);
00345 int (*BotGetMapLocationGoal)(char *name, struct bot_goal_s *goal);
00346 float (*BotAvoidGoalTime)(int goalstate, int number);
00347 void (*BotSetAvoidGoalTime)(int goalstate, int number, float avoidtime);
00348 void (*BotInitLevelItems)(void);
00349 void (*BotUpdateEntityItems)(void);
00350 int (*BotLoadItemWeights)(int goalstate, char *filename);
00351 void (*BotFreeItemWeights)(int goalstate);
00352 void (*BotInterbreedGoalFuzzyLogic)(int parent1, int parent2, int child);
00353 void (*BotSaveGoalFuzzyLogic)(int goalstate, char *filename);
00354 void (*BotMutateGoalFuzzyLogic)(int goalstate, float range);
00355 int (*BotAllocGoalState)(int client);
00356 void (*BotFreeGoalState)(int handle);
00357
00358
00359
00360 void (*BotResetMoveState)(int movestate);
00361 void (*BotMoveToGoal)(struct bot_moveresult_s *result, int movestate, struct bot_goal_s *goal, int travelflags);
00362 int (*BotMoveInDirection)(int movestate, vec3_t dir, float speed, int type);
00363 void (*BotResetAvoidReach)(int movestate);
00364 void (*BotResetLastAvoidReach)(int movestate);
00365 int (*BotReachabilityArea)(vec3_t origin, int testground);
00366 int (*BotMovementViewTarget)(int movestate, struct bot_goal_s *goal, int travelflags, float lookahead, vec3_t target);
00367 int (*BotPredictVisiblePosition)(vec3_t origin, int areanum, struct bot_goal_s *goal, int travelflags, vec3_t target);
00368 int (*BotAllocMoveState)(void);
00369 void (*BotFreeMoveState)(int handle);
00370 void (*BotInitMoveState)(int handle, struct bot_initmove_s *initmove);
00371 void (*BotAddAvoidSpot)(int movestate, vec3_t origin, float radius, int type);
00372
00373
00374
00375 int (*BotChooseBestFightWeapon)(int weaponstate, int *inventory);
00376 void (*BotGetWeaponInfo)(int weaponstate, int weapon, struct weaponinfo_s *weaponinfo);
00377 int (*BotLoadWeaponWeights)(int weaponstate, char *filename);
00378 int (*BotAllocWeaponState)(void);
00379 void (*BotFreeWeaponState)(int weaponstate);
00380 void (*BotResetWeaponState)(int weaponstate);
00381
00382
00383
00384 int (*GeneticParentsAndChildSelection)(int numranks, float *ranks, int *parent1, int *parent2, int *child);
00385 } ai_export_t;
00386
00387
00388 typedef struct botlib_export_s
00389 {
00390
00391 aas_export_t aas;
00392
00393 ea_export_t ea;
00394
00395 ai_export_t ai;
00396
00397 int (*BotLibSetup)(void);
00398
00399 int (*BotLibShutdown)(void);
00400
00401 int (*BotLibVarSet)(char *var_name, char *value);
00402
00403 int (*BotLibVarGet)(char *var_name, char *value, int size);
00404
00405
00406 int (*PC_AddGlobalDefine)(char *string);
00407 int (*PC_LoadSourceHandle)(const char *filename);
00408 int (*PC_FreeSourceHandle)(int handle);
00409 int (*PC_ReadTokenHandle)(int handle, pc_token_t *pc_token);
00410 int (*PC_SourceFileAndLine)(int handle, char *filename, int *line);
00411 int (*PC_LoadGlobalDefines)(const char* filename );
00412 void (*PC_RemoveAllGlobalDefines) ( void );
00413
00414
00415 int (*BotLibStartFrame)(float time);
00416
00417 int (*BotLibLoadMap)(const char *mapname);
00418
00419 int (*BotLibUpdateEntity)(int ent, bot_entitystate_t *state);
00420
00421 int (*Test)(int parm0, char *parm1, vec3_t parm2, vec3_t parm3);
00422 } botlib_export_t;
00423
00424
00425 botlib_export_t *GetBotLibAPI( int apiVersion, botlib_import_t *import );
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508