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 * name: be_ea.c
25 *
26 * desc: elementary actions
27 *
28 * $Archive: /MissionPack/code/botlib/be_ea.c $
29 *
30 *****************************************************************************/
31
32 #include "../qcommon/q_shared.h"
33 #include "l_memory.h"
34 #include "l_script.h"
35 #include "l_precomp.h"
36 #include "l_struct.h"
37 #include "botlib.h"
38 #include "be_interface.h"
39
40 #define MAX_USERMOVE 400
41 #define MAX_COMMANDARGUMENTS 10
42 #define ACTION_JUMPEDLASTFRAME 128
43
44 bot_input_t *botinputs;
45
46 //===========================================================================
47 //
48 // Parameter: -
49 // Returns: -
50 // Changes Globals: -
51 //===========================================================================
EA_Say(int client,char * str)52 void EA_Say(int client, char *str)
53 {
54 botimport.BotClientCommand(client, va("say %s", str) );
55 } //end of the function EA_Say
56 //===========================================================================
57 //
58 // Parameter: -
59 // Returns: -
60 // Changes Globals: -
61 //===========================================================================
EA_SayTeam(int client,char * str)62 void EA_SayTeam(int client, char *str)
63 {
64 botimport.BotClientCommand(client, va("say_team %s", str));
65 } //end of the function EA_SayTeam
66 //===========================================================================
67 //
68 // Parameter: -
69 // Returns: -
70 // Changes Globals: -
71 //===========================================================================
EA_Tell(int client,int clientto,char * str)72 void EA_Tell(int client, int clientto, char *str)
73 {
74 botimport.BotClientCommand(client, va("tell %d, %s", clientto, str));
75 } //end of the function EA_SayTeam
76 //===========================================================================
77 //
78 // Parameter: -
79 // Returns: -
80 // Changes Globals: -
81 //===========================================================================
EA_UseItem(int client,char * it)82 void EA_UseItem(int client, char *it)
83 {
84 botimport.BotClientCommand(client, va("use %s", it));
85 } //end of the function EA_UseItem
86 //===========================================================================
87 //
88 // Parameter: -
89 // Returns: -
90 // Changes Globals: -
91 //===========================================================================
EA_DropItem(int client,char * it)92 void EA_DropItem(int client, char *it)
93 {
94 botimport.BotClientCommand(client, va("drop %s", it));
95 } //end of the function EA_DropItem
96 //===========================================================================
97 //
98 // Parameter: -
99 // Returns: -
100 // Changes Globals: -
101 //===========================================================================
EA_UseInv(int client,char * inv)102 void EA_UseInv(int client, char *inv)
103 {
104 botimport.BotClientCommand(client, va("invuse %s", inv));
105 } //end of the function EA_UseInv
106 //===========================================================================
107 //
108 // Parameter: -
109 // Returns: -
110 // Changes Globals: -
111 //===========================================================================
EA_DropInv(int client,char * inv)112 void EA_DropInv(int client, char *inv)
113 {
114 botimport.BotClientCommand(client, va("invdrop %s", inv));
115 } //end of the function EA_DropInv
116 //===========================================================================
117 //
118 // Parameter: -
119 // Returns: -
120 // Changes Globals: -
121 //===========================================================================
EA_Gesture(int client)122 void EA_Gesture(int client)
123 {
124 bot_input_t *bi;
125
126 bi = &botinputs[client];
127
128 bi->actionflags |= ACTION_GESTURE;
129 } //end of the function EA_Gesture
130 //===========================================================================
131 //
132 // Parameter: -
133 // Returns: -
134 // Changes Globals: -
135 //===========================================================================
EA_Command(int client,char * command)136 void EA_Command(int client, char *command)
137 {
138 botimport.BotClientCommand(client, command);
139 } //end of the function EA_Command
140 //===========================================================================
141 //
142 // Parameter: -
143 // Returns: -
144 // Changes Globals: -
145 //===========================================================================
EA_SelectWeapon(int client,int weapon)146 void EA_SelectWeapon(int client, int weapon)
147 {
148 bot_input_t *bi;
149
150 bi = &botinputs[client];
151
152 bi->weapon = weapon;
153 } //end of the function EA_SelectWeapon
154 //===========================================================================
155 //
156 // Parameter: -
157 // Returns: -
158 // Changes Globals: -
159 //===========================================================================
EA_Attack(int client)160 void EA_Attack(int client)
161 {
162 bot_input_t *bi;
163
164 bi = &botinputs[client];
165
166 bi->actionflags |= ACTION_ATTACK;
167 } //end of the function EA_Attack
168 //===========================================================================
169 //
170 // Parameter: -
171 // Returns: -
172 // Changes Globals: -
173 //===========================================================================
EA_Talk(int client)174 void EA_Talk(int client)
175 {
176 bot_input_t *bi;
177
178 bi = &botinputs[client];
179
180 bi->actionflags |= ACTION_TALK;
181 } //end of the function EA_Talk
182 //===========================================================================
183 //
184 // Parameter: -
185 // Returns: -
186 // Changes Globals: -
187 //===========================================================================
EA_Use(int client)188 void EA_Use(int client)
189 {
190 bot_input_t *bi;
191
192 bi = &botinputs[client];
193
194 bi->actionflags |= ACTION_USE;
195 } //end of the function EA_Use
196 //===========================================================================
197 //
198 // Parameter: -
199 // Returns: -
200 // Changes Globals: -
201 //===========================================================================
EA_Respawn(int client)202 void EA_Respawn(int client)
203 {
204 bot_input_t *bi;
205
206 bi = &botinputs[client];
207
208 bi->actionflags |= ACTION_RESPAWN;
209 } //end of the function EA_Respawn
210 //===========================================================================
211 //
212 // Parameter: -
213 // Returns: -
214 // Changes Globals: -
215 //===========================================================================
EA_Jump(int client)216 void EA_Jump(int client)
217 {
218 bot_input_t *bi;
219
220 bi = &botinputs[client];
221
222 if (bi->actionflags & ACTION_JUMPEDLASTFRAME)
223 {
224 bi->actionflags &= ~ACTION_JUMP;
225 } //end if
226 else
227 {
228 bi->actionflags |= ACTION_JUMP;
229 } //end if
230 } //end of the function EA_Jump
231 //===========================================================================
232 //
233 // Parameter: -
234 // Returns: -
235 // Changes Globals: -
236 //===========================================================================
EA_DelayedJump(int client)237 void EA_DelayedJump(int client)
238 {
239 bot_input_t *bi;
240
241 bi = &botinputs[client];
242
243 if (bi->actionflags & ACTION_JUMPEDLASTFRAME)
244 {
245 bi->actionflags &= ~ACTION_DELAYEDJUMP;
246 } //end if
247 else
248 {
249 bi->actionflags |= ACTION_DELAYEDJUMP;
250 } //end if
251 } //end of the function EA_DelayedJump
252 //===========================================================================
253 //
254 // Parameter: -
255 // Returns: -
256 // Changes Globals: -
257 //===========================================================================
EA_Crouch(int client)258 void EA_Crouch(int client)
259 {
260 bot_input_t *bi;
261
262 bi = &botinputs[client];
263
264 bi->actionflags |= ACTION_CROUCH;
265 } //end of the function EA_Crouch
266 //===========================================================================
267 //
268 // Parameter: -
269 // Returns: -
270 // Changes Globals: -
271 //===========================================================================
EA_Walk(int client)272 void EA_Walk(int client)
273 {
274 bot_input_t *bi;
275
276 bi = &botinputs[client];
277
278 bi->actionflags |= ACTION_WALK;
279 } //end of the function EA_Walk
280 //===========================================================================
281 //
282 // Parameter: -
283 // Returns: -
284 // Changes Globals: -
285 //===========================================================================
EA_Action(int client,int action)286 void EA_Action(int client, int action)
287 {
288 bot_input_t *bi;
289
290 bi = &botinputs[client];
291
292 bi->actionflags |= action;
293 } //end of function EA_Action
294 //===========================================================================
295 //
296 // Parameter: -
297 // Returns: -
298 // Changes Globals: -
299 //===========================================================================
EA_MoveUp(int client)300 void EA_MoveUp(int client)
301 {
302 bot_input_t *bi;
303
304 bi = &botinputs[client];
305
306 bi->actionflags |= ACTION_MOVEUP;
307 } //end of the function EA_MoveUp
308 //===========================================================================
309 //
310 // Parameter: -
311 // Returns: -
312 // Changes Globals: -
313 //===========================================================================
EA_MoveDown(int client)314 void EA_MoveDown(int client)
315 {
316 bot_input_t *bi;
317
318 bi = &botinputs[client];
319
320 bi->actionflags |= ACTION_MOVEDOWN;
321 } //end of the function EA_MoveDown
322 //===========================================================================
323 //
324 // Parameter: -
325 // Returns: -
326 // Changes Globals: -
327 //===========================================================================
EA_MoveForward(int client)328 void EA_MoveForward(int client)
329 {
330 bot_input_t *bi;
331
332 bi = &botinputs[client];
333
334 bi->actionflags |= ACTION_MOVEFORWARD;
335 } //end of the function EA_MoveForward
336 //===========================================================================
337 //
338 // Parameter: -
339 // Returns: -
340 // Changes Globals: -
341 //===========================================================================
EA_MoveBack(int client)342 void EA_MoveBack(int client)
343 {
344 bot_input_t *bi;
345
346 bi = &botinputs[client];
347
348 bi->actionflags |= ACTION_MOVEBACK;
349 } //end of the function EA_MoveBack
350 //===========================================================================
351 //
352 // Parameter: -
353 // Returns: -
354 // Changes Globals: -
355 //===========================================================================
EA_MoveLeft(int client)356 void EA_MoveLeft(int client)
357 {
358 bot_input_t *bi;
359
360 bi = &botinputs[client];
361
362 bi->actionflags |= ACTION_MOVELEFT;
363 } //end of the function EA_MoveLeft
364 //===========================================================================
365 //
366 // Parameter: -
367 // Returns: -
368 // Changes Globals: -
369 //===========================================================================
EA_MoveRight(int client)370 void EA_MoveRight(int client)
371 {
372 bot_input_t *bi;
373
374 bi = &botinputs[client];
375
376 bi->actionflags |= ACTION_MOVERIGHT;
377 } //end of the function EA_MoveRight
378 //===========================================================================
379 //
380 // Parameter: -
381 // Returns: -
382 // Changes Globals: -
383 //===========================================================================
EA_Move(int client,vec3_t dir,float speed)384 void EA_Move(int client, vec3_t dir, float speed)
385 {
386 bot_input_t *bi;
387
388 bi = &botinputs[client];
389
390 VectorCopy(dir, bi->dir);
391 //cap speed
392 if (speed > MAX_USERMOVE) speed = MAX_USERMOVE;
393 else if (speed < -MAX_USERMOVE) speed = -MAX_USERMOVE;
394 bi->speed = speed;
395 } //end of the function EA_Move
396 //===========================================================================
397 //
398 // Parameter: -
399 // Returns: -
400 // Changes Globals: -
401 //===========================================================================
EA_View(int client,vec3_t viewangles)402 void EA_View(int client, vec3_t viewangles)
403 {
404 bot_input_t *bi;
405
406 bi = &botinputs[client];
407
408 VectorCopy(viewangles, bi->viewangles);
409 } //end of the function EA_View
410 //===========================================================================
411 //
412 // Parameter: -
413 // Returns: -
414 // Changes Globals: -
415 //===========================================================================
EA_EndRegular(int client,float thinktime)416 void EA_EndRegular(int client, float thinktime)
417 {
418 /*
419 bot_input_t *bi;
420 int jumped = qfalse;
421
422 bi = &botinputs[client];
423
424 bi->actionflags &= ~ACTION_JUMPEDLASTFRAME;
425
426 bi->thinktime = thinktime;
427 botimport.BotInput(client, bi);
428
429 bi->thinktime = 0;
430 VectorClear(bi->dir);
431 bi->speed = 0;
432 jumped = bi->actionflags & ACTION_JUMP;
433 bi->actionflags = 0;
434 if (jumped) bi->actionflags |= ACTION_JUMPEDLASTFRAME;
435 */
436 } //end of the function EA_EndRegular
437 //===========================================================================
438 //
439 // Parameter: -
440 // Returns: -
441 // Changes Globals: -
442 //===========================================================================
EA_GetInput(int client,float thinktime,bot_input_t * input)443 void EA_GetInput(int client, float thinktime, bot_input_t *input)
444 {
445 bot_input_t *bi;
446 // int jumped = qfalse;
447
448 bi = &botinputs[client];
449
450 // bi->actionflags &= ~ACTION_JUMPEDLASTFRAME;
451
452 bi->thinktime = thinktime;
453 Com_Memcpy(input, bi, sizeof(bot_input_t));
454
455 /*
456 bi->thinktime = 0;
457 VectorClear(bi->dir);
458 bi->speed = 0;
459 jumped = bi->actionflags & ACTION_JUMP;
460 bi->actionflags = 0;
461 if (jumped) bi->actionflags |= ACTION_JUMPEDLASTFRAME;
462 */
463 } //end of the function EA_GetInput
464 //===========================================================================
465 //
466 // Parameter: -
467 // Returns: -
468 // Changes Globals: -
469 //===========================================================================
EA_ResetInput(int client)470 void EA_ResetInput(int client)
471 {
472 bot_input_t *bi;
473 int jumped = qfalse;
474
475 bi = &botinputs[client];
476 bi->actionflags &= ~ACTION_JUMPEDLASTFRAME;
477
478 bi->thinktime = 0;
479 VectorClear(bi->dir);
480 bi->speed = 0;
481 jumped = bi->actionflags & ACTION_JUMP;
482 bi->actionflags = 0;
483 if (jumped) bi->actionflags |= ACTION_JUMPEDLASTFRAME;
484 } //end of the function EA_ResetInput
485 //===========================================================================
486 //
487 // Parameter: -
488 // Returns: -
489 // Changes Globals: -
490 //===========================================================================
EA_Setup(void)491 int EA_Setup(void)
492 {
493 //initialize the bot inputs
494 botinputs = (bot_input_t *) GetClearedHunkMemory(
495 botlibglobals.maxclients * sizeof(bot_input_t));
496 return BLERR_NOERROR;
497 } //end of the function EA_Setup
498 //===========================================================================
499 //
500 // Parameter: -
501 // Returns: -
502 // Changes Globals: -
503 //===========================================================================
EA_Shutdown(void)504 void EA_Shutdown(void)
505 {
506 FreeMemory(botinputs);
507 botinputs = NULL;
508 } //end of the function EA_Shutdown
509