~ubuntu-branches/ubuntu/precise/openarena/precise

« back to all changes in this revision

Viewing changes to code/game/g_public.h

  • Committer: Bazaar Package Importer
  • Author(s): Bruno "Fuddl" Kleinert
  • Date: 2007-01-20 12:28:09 UTC
  • Revision ID: james.westby@ubuntu.com-20070120122809-2yza5ojt7nqiyiam
Tags: upstream-0.6.0
ImportĀ upstreamĀ versionĀ 0.6.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
// g_public.h -- game module information visible to server
 
25
 
 
26
#define GAME_API_VERSION        8
 
27
 
 
28
// entity->svFlags
 
29
// the server does not know how to interpret most of the values
 
30
// in entityStates (level eType), so the game must explicitly flag
 
31
// special server behaviors
 
32
#define SVF_NOCLIENT                    0x00000001      // don't send entity to clients, even if it has effects
 
33
 
 
34
// TTimo
 
35
// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=551
 
36
#define SVF_CLIENTMASK 0x00000002
 
37
 
 
38
#define SVF_BOT                                 0x00000008      // set if the entity is a bot
 
39
#define SVF_BROADCAST                   0x00000020      // send to all connected clients
 
40
#define SVF_PORTAL                              0x00000040      // merge a second pvs at origin2 into snapshots
 
41
#define SVF_USE_CURRENT_ORIGIN  0x00000080      // entity->r.currentOrigin instead of entity->s.origin
 
42
                                                                                        // for link position (missiles and movers)
 
43
#define SVF_SINGLECLIENT                0x00000100      // only send to a single client (entityShared_t->singleClient)
 
44
#define SVF_NOSERVERINFO                0x00000200      // don't send CS_SERVERINFO updates to this client
 
45
                                                                                        // so that it can be updated for ping tools without
 
46
                                                                                        // lagging clients
 
47
#define SVF_CAPSULE                             0x00000400      // use capsule for collision detection instead of bbox
 
48
#define SVF_NOTSINGLECLIENT             0x00000800      // send entity to everyone but one client
 
49
                                                                                        // (entityShared_t->singleClient)
 
50
 
 
51
 
 
52
 
 
53
//===============================================================
 
54
 
 
55
 
 
56
typedef struct {
 
57
        entityState_t   s;                              // communicated by server to clients
 
58
 
 
59
        qboolean        linked;                         // qfalse if not in any good cluster
 
60
        int                     linkcount;
 
61
 
 
62
        int                     svFlags;                        // SVF_NOCLIENT, SVF_BROADCAST, etc
 
63
 
 
64
        // only send to this client when SVF_SINGLECLIENT is set        
 
65
        // if SVF_CLIENTMASK is set, use bitmask for clients to send to (maxclients must be <= 32, up to the mod to enforce this)
 
66
        int                     singleClient;           
 
67
 
 
68
        qboolean        bmodel;                         // if false, assume an explicit mins / maxs bounding box
 
69
                                                                        // only set by trap_SetBrushModel
 
70
        vec3_t          mins, maxs;
 
71
        int                     contents;                       // CONTENTS_TRIGGER, CONTENTS_SOLID, CONTENTS_BODY, etc
 
72
                                                                        // a non-solid entity should set to 0
 
73
 
 
74
        vec3_t          absmin, absmax;         // derived from mins/maxs and origin + rotation
 
75
 
 
76
        // currentOrigin will be used for all collision detection and world linking.
 
77
        // it will not necessarily be the same as the trajectory evaluation for the current
 
78
        // time, because each entity must be moved one at a time after time is advanced
 
79
        // to avoid simultanious collision issues
 
80
        vec3_t          currentOrigin;
 
81
        vec3_t          currentAngles;
 
82
 
 
83
        // when a trace call is made and passEntityNum != ENTITYNUM_NONE,
 
84
        // an ent will be excluded from testing if:
 
85
        // ent->s.number == passEntityNum       (don't interact with self)
 
86
        // ent->s.ownerNum = passEntityNum      (don't interact with your own missiles)
 
87
        // entity[ent->s.ownerNum].ownerNum = passEntityNum     (don't interact with other missiles from owner)
 
88
        int                     ownerNum;
 
89
} entityShared_t;
 
90
 
 
91
 
 
92
 
 
93
// the server looks at a sharedEntity, which is the start of the game's gentity_t structure
 
94
typedef struct {
 
95
        entityState_t   s;                              // communicated by server to clients
 
96
        entityShared_t  r;                              // shared by both the server system and game
 
97
} sharedEntity_t;
 
98
 
 
99
 
 
100
 
 
101
//===============================================================
 
102
 
 
103
//
 
104
// system traps provided by the main engine
 
105
//
 
106
typedef enum {
 
107
        //============== general Quake services ==================
 
108
 
 
109
        G_PRINT,                // ( const char *string );
 
110
        // print message on the local console
 
111
 
 
112
        G_ERROR,                // ( const char *string );
 
113
        // abort the game
 
114
 
 
115
        G_MILLISECONDS, // ( void );
 
116
        // get current time for profiling reasons
 
117
        // this should NOT be used for any game related tasks,
 
118
        // because it is not journaled
 
119
 
 
120
        // console variable interaction
 
121
        G_CVAR_REGISTER,        // ( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags );
 
122
        G_CVAR_UPDATE,  // ( vmCvar_t *vmCvar );
 
123
        G_CVAR_SET,             // ( const char *var_name, const char *value );
 
124
        G_CVAR_VARIABLE_INTEGER_VALUE,  // ( const char *var_name );
 
125
 
 
126
        G_CVAR_VARIABLE_STRING_BUFFER,  // ( const char *var_name, char *buffer, int bufsize );
 
127
 
 
128
        G_ARGC,                 // ( void );
 
129
        // ClientCommand and ServerCommand parameter access
 
130
 
 
131
        G_ARGV,                 // ( int n, char *buffer, int bufferLength );
 
132
 
 
133
        G_FS_FOPEN_FILE,        // ( const char *qpath, fileHandle_t *file, fsMode_t mode );
 
134
        G_FS_READ,              // ( void *buffer, int len, fileHandle_t f );
 
135
        G_FS_WRITE,             // ( const void *buffer, int len, fileHandle_t f );
 
136
        G_FS_FCLOSE_FILE,               // ( fileHandle_t f );
 
137
 
 
138
        G_SEND_CONSOLE_COMMAND, // ( const char *text );
 
139
        // add commands to the console as if they were typed in
 
140
        // for map changing, etc
 
141
 
 
142
 
 
143
        //=========== server specific functionality =============
 
144
 
 
145
        G_LOCATE_GAME_DATA,             // ( gentity_t *gEnts, int numGEntities, int sizeofGEntity_t,
 
146
        //                                                      playerState_t *clients, int sizeofGameClient );
 
147
        // the game needs to let the server system know where and how big the gentities
 
148
        // are, so it can look at them directly without going through an interface
 
149
 
 
150
        G_DROP_CLIENT,          // ( int clientNum, const char *reason );
 
151
        // kick a client off the server with a message
 
152
 
 
153
        G_SEND_SERVER_COMMAND,  // ( int clientNum, const char *fmt, ... );
 
154
        // reliably sends a command string to be interpreted by the given
 
155
        // client.  If clientNum is -1, it will be sent to all clients
 
156
 
 
157
        G_SET_CONFIGSTRING,     // ( int num, const char *string );
 
158
        // config strings hold all the index strings, and various other information
 
159
        // that is reliably communicated to all clients
 
160
        // All of the current configstrings are sent to clients when
 
161
        // they connect, and changes are sent to all connected clients.
 
162
        // All confgstrings are cleared at each level start.
 
163
 
 
164
        G_GET_CONFIGSTRING,     // ( int num, char *buffer, int bufferSize );
 
165
 
 
166
        G_GET_USERINFO,         // ( int num, char *buffer, int bufferSize );
 
167
        // userinfo strings are maintained by the server system, so they
 
168
        // are persistant across level loads, while all other game visible
 
169
        // data is completely reset
 
170
 
 
171
        G_SET_USERINFO,         // ( int num, const char *buffer );
 
172
 
 
173
        G_GET_SERVERINFO,       // ( char *buffer, int bufferSize );
 
174
        // the serverinfo info string has all the cvars visible to server browsers
 
175
 
 
176
        G_SET_BRUSH_MODEL,      // ( gentity_t *ent, const char *name );
 
177
        // sets mins and maxs based on the brushmodel name
 
178
 
 
179
        G_TRACE,        // ( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentmask );
 
180
        // collision detection against all linked entities
 
181
 
 
182
        G_POINT_CONTENTS,       // ( const vec3_t point, int passEntityNum );
 
183
        // point contents against all linked entities
 
184
 
 
185
        G_IN_PVS,                       // ( const vec3_t p1, const vec3_t p2 );
 
186
 
 
187
        G_IN_PVS_IGNORE_PORTALS,        // ( const vec3_t p1, const vec3_t p2 );
 
188
 
 
189
        G_ADJUST_AREA_PORTAL_STATE,     // ( gentity_t *ent, qboolean open );
 
190
 
 
191
        G_AREAS_CONNECTED,      // ( int area1, int area2 );
 
192
 
 
193
        G_LINKENTITY,           // ( gentity_t *ent );
 
194
        // an entity will never be sent to a client or used for collision
 
195
        // if it is not passed to linkentity.  If the size, position, or
 
196
        // solidity changes, it must be relinked.
 
197
 
 
198
        G_UNLINKENTITY,         // ( gentity_t *ent );          
 
199
        // call before removing an interactive entity
 
200
 
 
201
        G_ENTITIES_IN_BOX,      // ( const vec3_t mins, const vec3_t maxs, gentity_t **list, int maxcount );
 
202
        // EntitiesInBox will return brush models based on their bounding box,
 
203
        // so exact determination must still be done with EntityContact
 
204
 
 
205
        G_ENTITY_CONTACT,       // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent );
 
206
        // perform an exact check against inline brush models of non-square shape
 
207
 
 
208
        // access for bots to get and free a server client (FIXME?)
 
209
        G_BOT_ALLOCATE_CLIENT,  // ( void );
 
210
 
 
211
        G_BOT_FREE_CLIENT,      // ( int clientNum );
 
212
 
 
213
        G_GET_USERCMD,  // ( int clientNum, usercmd_t *cmd )
 
214
 
 
215
        G_GET_ENTITY_TOKEN,     // qboolean ( char *buffer, int bufferSize )
 
216
        // Retrieves the next string token from the entity spawn text, returning
 
217
        // false when all tokens have been parsed.
 
218
        // This should only be done at GAME_INIT time.
 
219
 
 
220
        G_FS_GETFILELIST,
 
221
        G_DEBUG_POLYGON_CREATE,
 
222
        G_DEBUG_POLYGON_DELETE,
 
223
        G_REAL_TIME,
 
224
        G_SNAPVECTOR,
 
225
 
 
226
        G_TRACECAPSULE, // ( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentmask );
 
227
        G_ENTITY_CONTACTCAPSULE,        // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent );
 
228
        
 
229
        // 1.32
 
230
        G_FS_SEEK,
 
231
 
 
232
        BOTLIB_SETUP = 200,                             // ( void );
 
233
        BOTLIB_SHUTDOWN,                                // ( void );
 
234
        BOTLIB_LIBVAR_SET,
 
235
        BOTLIB_LIBVAR_GET,
 
236
        BOTLIB_PC_ADD_GLOBAL_DEFINE,
 
237
        BOTLIB_START_FRAME,
 
238
        BOTLIB_LOAD_MAP,
 
239
        BOTLIB_UPDATENTITY,
 
240
        BOTLIB_TEST,
 
241
 
 
242
        BOTLIB_GET_SNAPSHOT_ENTITY,             // ( int client, int ent );
 
243
        BOTLIB_GET_CONSOLE_MESSAGE,             // ( int client, char *message, int size );
 
244
        BOTLIB_USER_COMMAND,                    // ( int client, usercmd_t *ucmd );
 
245
 
 
246
        BOTLIB_AAS_ENABLE_ROUTING_AREA = 300,
 
247
        BOTLIB_AAS_BBOX_AREAS,
 
248
        BOTLIB_AAS_AREA_INFO,
 
249
        BOTLIB_AAS_ENTITY_INFO,
 
250
 
 
251
        BOTLIB_AAS_INITIALIZED,
 
252
        BOTLIB_AAS_PRESENCE_TYPE_BOUNDING_BOX,
 
253
        BOTLIB_AAS_TIME,
 
254
 
 
255
        BOTLIB_AAS_POINT_AREA_NUM,
 
256
        BOTLIB_AAS_TRACE_AREAS,
 
257
 
 
258
        BOTLIB_AAS_POINT_CONTENTS,
 
259
        BOTLIB_AAS_NEXT_BSP_ENTITY,
 
260
        BOTLIB_AAS_VALUE_FOR_BSP_EPAIR_KEY,
 
261
        BOTLIB_AAS_VECTOR_FOR_BSP_EPAIR_KEY,
 
262
        BOTLIB_AAS_FLOAT_FOR_BSP_EPAIR_KEY,
 
263
        BOTLIB_AAS_INT_FOR_BSP_EPAIR_KEY,
 
264
 
 
265
        BOTLIB_AAS_AREA_REACHABILITY,
 
266
 
 
267
        BOTLIB_AAS_AREA_TRAVEL_TIME_TO_GOAL_AREA,
 
268
 
 
269
        BOTLIB_AAS_SWIMMING,
 
270
        BOTLIB_AAS_PREDICT_CLIENT_MOVEMENT,
 
271
 
 
272
        BOTLIB_EA_SAY = 400,
 
273
        BOTLIB_EA_SAY_TEAM,
 
274
        BOTLIB_EA_COMMAND,
 
275
 
 
276
        BOTLIB_EA_ACTION,
 
277
        BOTLIB_EA_GESTURE,
 
278
        BOTLIB_EA_TALK,
 
279
        BOTLIB_EA_ATTACK,
 
280
        BOTLIB_EA_USE,
 
281
        BOTLIB_EA_RESPAWN,
 
282
        BOTLIB_EA_CROUCH,
 
283
        BOTLIB_EA_MOVE_UP,
 
284
        BOTLIB_EA_MOVE_DOWN,
 
285
        BOTLIB_EA_MOVE_FORWARD,
 
286
        BOTLIB_EA_MOVE_BACK,
 
287
        BOTLIB_EA_MOVE_LEFT,
 
288
        BOTLIB_EA_MOVE_RIGHT,
 
289
 
 
290
        BOTLIB_EA_SELECT_WEAPON,
 
291
        BOTLIB_EA_JUMP,
 
292
        BOTLIB_EA_DELAYED_JUMP,
 
293
        BOTLIB_EA_MOVE,
 
294
        BOTLIB_EA_VIEW,
 
295
 
 
296
        BOTLIB_EA_END_REGULAR,
 
297
        BOTLIB_EA_GET_INPUT,
 
298
        BOTLIB_EA_RESET_INPUT,
 
299
 
 
300
 
 
301
        BOTLIB_AI_LOAD_CHARACTER = 500,
 
302
        BOTLIB_AI_FREE_CHARACTER,
 
303
        BOTLIB_AI_CHARACTERISTIC_FLOAT,
 
304
        BOTLIB_AI_CHARACTERISTIC_BFLOAT,
 
305
        BOTLIB_AI_CHARACTERISTIC_INTEGER,
 
306
        BOTLIB_AI_CHARACTERISTIC_BINTEGER,
 
307
        BOTLIB_AI_CHARACTERISTIC_STRING,
 
308
 
 
309
        BOTLIB_AI_ALLOC_CHAT_STATE,
 
310
        BOTLIB_AI_FREE_CHAT_STATE,
 
311
        BOTLIB_AI_QUEUE_CONSOLE_MESSAGE,
 
312
        BOTLIB_AI_REMOVE_CONSOLE_MESSAGE,
 
313
        BOTLIB_AI_NEXT_CONSOLE_MESSAGE,
 
314
        BOTLIB_AI_NUM_CONSOLE_MESSAGE,
 
315
        BOTLIB_AI_INITIAL_CHAT,
 
316
        BOTLIB_AI_REPLY_CHAT,
 
317
        BOTLIB_AI_CHAT_LENGTH,
 
318
        BOTLIB_AI_ENTER_CHAT,
 
319
        BOTLIB_AI_STRING_CONTAINS,
 
320
        BOTLIB_AI_FIND_MATCH,
 
321
        BOTLIB_AI_MATCH_VARIABLE,
 
322
        BOTLIB_AI_UNIFY_WHITE_SPACES,
 
323
        BOTLIB_AI_REPLACE_SYNONYMS,
 
324
        BOTLIB_AI_LOAD_CHAT_FILE,
 
325
        BOTLIB_AI_SET_CHAT_GENDER,
 
326
        BOTLIB_AI_SET_CHAT_NAME,
 
327
 
 
328
        BOTLIB_AI_RESET_GOAL_STATE,
 
329
        BOTLIB_AI_RESET_AVOID_GOALS,
 
330
        BOTLIB_AI_PUSH_GOAL,
 
331
        BOTLIB_AI_POP_GOAL,
 
332
        BOTLIB_AI_EMPTY_GOAL_STACK,
 
333
        BOTLIB_AI_DUMP_AVOID_GOALS,
 
334
        BOTLIB_AI_DUMP_GOAL_STACK,
 
335
        BOTLIB_AI_GOAL_NAME,
 
336
        BOTLIB_AI_GET_TOP_GOAL,
 
337
        BOTLIB_AI_GET_SECOND_GOAL,
 
338
        BOTLIB_AI_CHOOSE_LTG_ITEM,
 
339
        BOTLIB_AI_CHOOSE_NBG_ITEM,
 
340
        BOTLIB_AI_TOUCHING_GOAL,
 
341
        BOTLIB_AI_ITEM_GOAL_IN_VIS_BUT_NOT_VISIBLE,
 
342
        BOTLIB_AI_GET_LEVEL_ITEM_GOAL,
 
343
        BOTLIB_AI_AVOID_GOAL_TIME,
 
344
        BOTLIB_AI_INIT_LEVEL_ITEMS,
 
345
        BOTLIB_AI_UPDATE_ENTITY_ITEMS,
 
346
        BOTLIB_AI_LOAD_ITEM_WEIGHTS,
 
347
        BOTLIB_AI_FREE_ITEM_WEIGHTS,
 
348
        BOTLIB_AI_SAVE_GOAL_FUZZY_LOGIC,
 
349
        BOTLIB_AI_ALLOC_GOAL_STATE,
 
350
        BOTLIB_AI_FREE_GOAL_STATE,
 
351
 
 
352
        BOTLIB_AI_RESET_MOVE_STATE,
 
353
        BOTLIB_AI_MOVE_TO_GOAL,
 
354
        BOTLIB_AI_MOVE_IN_DIRECTION,
 
355
        BOTLIB_AI_RESET_AVOID_REACH,
 
356
        BOTLIB_AI_RESET_LAST_AVOID_REACH,
 
357
        BOTLIB_AI_REACHABILITY_AREA,
 
358
        BOTLIB_AI_MOVEMENT_VIEW_TARGET,
 
359
        BOTLIB_AI_ALLOC_MOVE_STATE,
 
360
        BOTLIB_AI_FREE_MOVE_STATE,
 
361
        BOTLIB_AI_INIT_MOVE_STATE,
 
362
 
 
363
        BOTLIB_AI_CHOOSE_BEST_FIGHT_WEAPON,
 
364
        BOTLIB_AI_GET_WEAPON_INFO,
 
365
        BOTLIB_AI_LOAD_WEAPON_WEIGHTS,
 
366
        BOTLIB_AI_ALLOC_WEAPON_STATE,
 
367
        BOTLIB_AI_FREE_WEAPON_STATE,
 
368
        BOTLIB_AI_RESET_WEAPON_STATE,
 
369
 
 
370
        BOTLIB_AI_GENETIC_PARENTS_AND_CHILD_SELECTION,
 
371
        BOTLIB_AI_INTERBREED_GOAL_FUZZY_LOGIC,
 
372
        BOTLIB_AI_MUTATE_GOAL_FUZZY_LOGIC,
 
373
        BOTLIB_AI_GET_NEXT_CAMP_SPOT_GOAL,
 
374
        BOTLIB_AI_GET_MAP_LOCATION_GOAL,
 
375
        BOTLIB_AI_NUM_INITIAL_CHATS,
 
376
        BOTLIB_AI_GET_CHAT_MESSAGE,
 
377
        BOTLIB_AI_REMOVE_FROM_AVOID_GOALS,
 
378
        BOTLIB_AI_PREDICT_VISIBLE_POSITION,
 
379
 
 
380
        BOTLIB_AI_SET_AVOID_GOAL_TIME,
 
381
        BOTLIB_AI_ADD_AVOID_SPOT,
 
382
        BOTLIB_AAS_ALTERNATIVE_ROUTE_GOAL,
 
383
        BOTLIB_AAS_PREDICT_ROUTE,
 
384
        BOTLIB_AAS_POINT_REACHABILITY_AREA_INDEX,
 
385
 
 
386
        BOTLIB_PC_LOAD_SOURCE,
 
387
        BOTLIB_PC_FREE_SOURCE,
 
388
        BOTLIB_PC_READ_TOKEN,
 
389
        BOTLIB_PC_SOURCE_FILE_AND_LINE
 
390
 
 
391
} gameImport_t;
 
392
 
 
393
 
 
394
//
 
395
// functions exported by the game subsystem
 
396
//
 
397
typedef enum {
 
398
        GAME_INIT,      // ( int levelTime, int randomSeed, int restart );
 
399
        // init and shutdown will be called every single level
 
400
        // The game should call G_GET_ENTITY_TOKEN to parse through all the
 
401
        // entity configuration text and spawn gentities.
 
402
 
 
403
        GAME_SHUTDOWN,  // (void);
 
404
 
 
405
        GAME_CLIENT_CONNECT,    // ( int clientNum, qboolean firstTime, qboolean isBot );
 
406
        // return NULL if the client is allowed to connect, otherwise return
 
407
        // a text string with the reason for denial
 
408
 
 
409
        GAME_CLIENT_BEGIN,                              // ( int clientNum );
 
410
 
 
411
        GAME_CLIENT_USERINFO_CHANGED,   // ( int clientNum );
 
412
 
 
413
        GAME_CLIENT_DISCONNECT,                 // ( int clientNum );
 
414
 
 
415
        GAME_CLIENT_COMMAND,                    // ( int clientNum );
 
416
 
 
417
        GAME_CLIENT_THINK,                              // ( int clientNum );
 
418
 
 
419
        GAME_RUN_FRAME,                                 // ( int levelTime );
 
420
 
 
421
        GAME_CONSOLE_COMMAND,                   // ( void );
 
422
        // ConsoleCommand will be called when a command has been issued
 
423
        // that is not recognized as a builtin function.
 
424
        // The game can issue trap_argc() / trap_argv() commands to get the command
 
425
        // and parameters.  Return qfalse if the game doesn't recognize it as a command.
 
426
 
 
427
        BOTAI_START_FRAME                               // ( int time );
 
428
} gameExport_t;
 
429