diff options
Diffstat (limited to 'src/game/g_public.h')
-rw-r--r-- | src/game/g_public.h | 342 |
1 files changed, 172 insertions, 170 deletions
diff --git a/src/game/g_public.h b/src/game/g_public.h index e1e01d7..415ab96 100644 --- a/src/game/g_public.h +++ b/src/game/g_public.h @@ -1,13 +1,14 @@ /* =========================================================================== Copyright (C) 1999-2005 Id Software, Inc. -Copyright (C) 2000-2006 Tim Angus +Copyright (C) 2000-2013 Darklegion Development +Copyright (C) 2015-2019 GrangerHub This file is part of Tremulous. Tremulous is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, +published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Tremulous is distributed in the hope that it will be @@ -16,252 +17,253 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Tremulous; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +along with Tremulous; if not, see <https://www.gnu.org/licenses/> + =========================================================================== */ // g_public.h -- game module information visible to server +#ifndef GAME_PUBLIC_H +#define GAME_PUBLIC_H + +#include "qcommon/q_shared.h" -#define GAME_API_VERSION 8 +#define GAME_API_VERSION 9 // entity->svFlags // the server does not know how to interpret most of the values // in entityStates (level eType), so the game must explicitly flag // special server behaviors -#define SVF_NOCLIENT 0x00000001 // don't send entity to clients, even if it has effects - -// TTimo -// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=551 -#define SVF_CLIENTMASK 0x00000002 - -#define SVF_BROADCAST 0x00000020 // send to all connected clients -#define SVF_PORTAL 0x00000040 // merge a second pvs at origin2 into snapshots -#define SVF_USE_CURRENT_ORIGIN 0x00000080 // entity->r.currentOrigin instead of entity->s.origin - // for link position (missiles and movers) -#define SVF_SINGLECLIENT 0x00000100 // only send to a single client (entityShared_t->singleClient) -#define SVF_NOSERVERINFO 0x00000200 // don't send CS_SERVERINFO updates to this client - // so that it can be updated for ping tools without - // lagging clients -#define SVF_CAPSULE 0x00000400 // use capsule for collision detection instead of bbox -#define SVF_NOTSINGLECLIENT 0x00000800 // send entity to everyone but one client - // (entityShared_t->singleClient) +#define SVF_NOCLIENT 0x00000001 // don't send entity to clients, even if it has effects -//=============================================================== +#define SVF_CLIENTMASK 0x00000002 // send to clients specified by these bitmasks: +// entityShared_t->singleClient: low-order bits (0..31) +// entityShared_t->hack.generic1: high-order bits (32..63) +#define SVF_BROADCAST 0x00000020 // send to all connected clients +#define SVF_PORTAL 0x00000040 // merge a second pvs at origin2 into snapshots -typedef struct { - entityState_t s; // communicated by server to clients - - qboolean linked; // qfalse if not in any good cluster - int linkcount; - - int svFlags; // SVF_NOCLIENT, SVF_BROADCAST, etc - int singleClient; // only send to this client when SVF_SINGLECLIENT is set - - qboolean bmodel; // if false, assume an explicit mins / maxs bounding box - // only set by trap_SetBrushModel - vec3_t mins, maxs; - int contents; // CONTENTS_TRIGGER, CONTENTS_SOLID, CONTENTS_BODY, etc - // a non-solid entity should set to 0 - - vec3_t absmin, absmax; // derived from mins/maxs and origin + rotation - - // currentOrigin will be used for all collision detection and world linking. - // it will not necessarily be the same as the trajectory evaluation for the current - // time, because each entity must be moved one at a time after time is advanced - // to avoid simultanious collision issues - vec3_t currentOrigin; - vec3_t currentAngles; - - // when a trace call is made and passEntityNum != ENTITYNUM_NONE, - // an ent will be excluded from testing if: - // ent->s.number == passEntityNum (don't interact with self) - // ent->s.ownerNum = passEntityNum (don't interact with your own missiles) - // entity[ent->s.ownerNum].ownerNum = passEntityNum (don't interact with other missiles from owner) - int ownerNum; -} entityShared_t; +#define SVF_SINGLECLIENT 0x00000100 // only send to a single client (entityShared_t->singleClient) +#define SVF_NOSERVERINFO 0x00000200 // don't send CS_SERVERINFO updates to this client +// so that it can be updated for ping tools without +// lagging clients +#define SVF_CAPSULE 0x00000400 // use capsule for collision detection instead of bbox +#define SVF_NOTSINGLECLIENT 0x00000800 // send entity to everyone but one client +// (entityShared_t->singleClient) +//=============================================================== +typedef struct { + entityState_t hack; // exists (as padding) to retain ABI compatibility + // with GPP, but can be used for extension hacks + + qboolean linked; // qfalse if not in any good cluster + int linkcount; + + int svFlags; // SVF_NOCLIENT, SVF_BROADCAST, etc. + int singleClient; // only send to this client when SVF_SINGLECLIENT is set + + qboolean bmodel; // if false, assume an explicit mins / maxs bounding box + // only set by trap_SetBrushModel + vec3_t mins, maxs; + int contents; // CONTENTS_TRIGGER, CONTENTS_SOLID, CONTENTS_BODY, etc + // a non-solid entity should set to 0 + + vec3_t absmin, absmax; // derived from mins/maxs and origin + rotation + + // currentOrigin will be used for all collision detection and world linking. + // it will not necessarily be the same as the trajectory evaluation for the current + // time, because each entity must be moved one at a time after time is advanced + // to avoid simultanious collision issues + vec3_t currentOrigin; + vec3_t currentAngles; + + // when a trace call is made and passEntityNum != ENTITYNUM_NONE, + // an ent will be excluded from testing if: + // ent->s.number == passEntityNum (don't interact with self) + // ent->r.ownerNum == passEntityNum (don't interact with your own missiles) + // entity[ent->r.ownerNum].r.ownerNum == passEntityNum (don't interact with other missiles from owner) + int ownerNum; +} entityShared_t; // the server looks at a sharedEntity, which is the start of the game's gentity_t structure typedef struct { - entityState_t s; // communicated by server to clients - entityShared_t r; // shared by both the server system and game + entityState_t s; // communicated by server to clients + entityShared_t r; // shared by both the server system and game } sharedEntity_t; - - //=============================================================== // // system traps provided by the main engine // typedef enum { - //============== general Quake services ================== - - G_PRINT, // ( const char *string ); - // print message on the local console + //============== general Quake services ================== - G_ERROR, // ( const char *string ); - // abort the game + G_PRINT, // ( const char *string ); + // print message on the local console - G_MILLISECONDS, // ( void ); - // get current time for profiling reasons - // this should NOT be used for any game related tasks, - // because it is not journaled + G_ERROR, // ( const char *string ); + // abort the game - // console variable interaction - G_CVAR_REGISTER, // ( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags ); - G_CVAR_UPDATE, // ( vmCvar_t *vmCvar ); - G_CVAR_SET, // ( const char *var_name, const char *value ); - G_CVAR_VARIABLE_INTEGER_VALUE, // ( const char *var_name ); + G_MILLISECONDS, // ( void ); + // get current time for profiling reasons + // this should NOT be used for any game related tasks, + // because it is not journaled - G_CVAR_VARIABLE_STRING_BUFFER, // ( const char *var_name, char *buffer, int bufsize ); + // console variable interaction + G_CVAR_REGISTER, // ( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags ); + G_CVAR_UPDATE, // ( vmCvar_t *vmCvar ); + G_CVAR_SET, // ( const char *var_name, const char *value ); + G_CVAR_VARIABLE_INTEGER_VALUE, // ( const char *var_name ); - G_ARGC, // ( void ); - // ClientCommand and ServerCommand parameter access + G_CVAR_VARIABLE_STRING_BUFFER, // ( const char *var_name, char *buffer, int bufsize ); - G_ARGV, // ( int n, char *buffer, int bufferLength ); + G_ARGC, // ( void ); + // ClientCommand and ServerCommand parameter access - G_FS_FOPEN_FILE, // ( const char *qpath, fileHandle_t *file, fsMode_t mode ); - G_FS_READ, // ( void *buffer, int len, fileHandle_t f ); - G_FS_WRITE, // ( const void *buffer, int len, fileHandle_t f ); - G_FS_FCLOSE_FILE, // ( fileHandle_t f ); + G_ARGV, // ( int n, char *buffer, int bufferLength ); - G_SEND_CONSOLE_COMMAND, // ( const char *text ); - // add commands to the console as if they were typed in - // for map changing, etc + G_FS_FOPEN_FILE, // ( const char *qpath, fileHandle_t *file, enum FS_Mode mode ); + G_FS_READ, // ( void *buffer, int len, fileHandle_t f ); + G_FS_WRITE, // ( const void *buffer, int len, fileHandle_t f ); + G_FS_FCLOSE_FILE, // ( fileHandle_t f ); + G_SEND_CONSOLE_COMMAND, // ( const char *text ); + // add commands to the console as if they were typed in + // for map changing, etc - //=========== server specific functionality ============= + //=========== server specific functionality ============= - G_LOCATE_GAME_DATA, // ( gentity_t *gEnts, int numGEntities, int sizeofGEntity_t, - // playerState_t *clients, int sizeofGameClient ); - // the game needs to let the server system know where and how big the gentities - // are, so it can look at them directly without going through an interface + G_LOCATE_GAME_DATA, // ( gentity_t *gEnts, int numGEntities, int sizeofGEntity_t, + // playerState_t *clients, int sizeofGameClient ); + // the game needs to let the server system know where and how big the gentities + // are, so it can look at them directly without going through an interface - G_DROP_CLIENT, // ( int clientNum, const char *reason ); - // kick a client off the server with a message + G_DROP_CLIENT, // ( int clientNum, const char *reason ); + // kick a client off the server with a message - G_SEND_SERVER_COMMAND, // ( int clientNum, const char *fmt, ... ); - // reliably sends a command string to be interpreted by the given - // client. If clientNum is -1, it will be sent to all clients + G_SEND_SERVER_COMMAND, // ( int clientNum, const char *fmt, ... ); + // reliably sends a command string to be interpreted by the given + // client. If clientNum is -1, it will be sent to all clients - G_SET_CONFIGSTRING, // ( int num, const char *string ); - // config strings hold all the index strings, and various other information - // that is reliably communicated to all clients - // All of the current configstrings are sent to clients when - // they connect, and changes are sent to all connected clients. - // All confgstrings are cleared at each level start. + G_SET_CONFIGSTRING, // ( int num, const char *string ); + // config strings hold all the index strings, and various other information + // that is reliably communicated to all clients + // All of the current configstrings are sent to clients when + // they connect, and changes are sent to all connected clients. + // All confgstrings are cleared at each level start. - G_GET_CONFIGSTRING, // ( int num, char *buffer, int bufferSize ); + G_GET_CONFIGSTRING, // ( int num, char *buffer, int bufferSize ); - G_SET_CONFIGSTRING_RESTRICTIONS, // ( int num, const clientList* clientList ); + G_SET_CONFIGSTRING_RESTRICTIONS, // ( int num, const clientList* clientList ); - G_GET_USERINFO, // ( int num, char *buffer, int bufferSize ); - // userinfo strings are maintained by the server system, so they - // are persistant across level loads, while all other game visible - // data is completely reset + G_GET_USERINFO, // ( int num, char *buffer, int bufferSize ); + // userinfo strings are maintained by the server system, so they + // are persistant across level loads, while all other game visible + // data is completely reset - G_SET_USERINFO, // ( int num, const char *buffer ); + G_SET_USERINFO, // ( int num, const char *buffer ); - G_GET_SERVERINFO, // ( char *buffer, int bufferSize ); - // the serverinfo info string has all the cvars visible to server browsers + G_GET_SERVERINFO, // ( char *buffer, int bufferSize ); + // the serverinfo info string has all the cvars visible to server browsers - G_SET_BRUSH_MODEL, // ( gentity_t *ent, const char *name ); - // sets mins and maxs based on the brushmodel name + G_SET_BRUSH_MODEL, // ( gentity_t *ent, const char *name ); + // sets mins and maxs based on the brushmodel name - 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 ); - // collision detection against all linked entities + 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 ); + // collision detection against all linked entities - G_POINT_CONTENTS, // ( const vec3_t point, int passEntityNum ); - // point contents against all linked entities + G_POINT_CONTENTS, // ( const vec3_t point, int passEntityNum ); + // point contents against all linked entities - G_IN_PVS, // ( const vec3_t p1, const vec3_t p2 ); + G_IN_PVS, // ( const vec3_t p1, const vec3_t p2 ); - G_IN_PVS_IGNORE_PORTALS, // ( const vec3_t p1, const vec3_t p2 ); + G_IN_PVS_IGNORE_PORTALS, // ( const vec3_t p1, const vec3_t p2 ); - G_ADJUST_AREA_PORTAL_STATE, // ( gentity_t *ent, qboolean open ); + G_ADJUST_AREA_PORTAL_STATE, // ( gentity_t *ent, qboolean open ); - G_AREAS_CONNECTED, // ( int area1, int area2 ); + G_AREAS_CONNECTED, // ( int area1, int area2 ); - G_LINKENTITY, // ( gentity_t *ent ); - // an entity will never be sent to a client or used for collision - // if it is not passed to linkentity. If the size, position, or - // solidity changes, it must be relinked. + G_LINKENTITY, // ( gentity_t *ent ); + // an entity will never be sent to a client or used for collision + // if it is not passed to linkentity. If the size, position, or + // solidity changes, it must be relinked. - G_UNLINKENTITY, // ( gentity_t *ent ); - // call before removing an interactive entity + G_UNLINKENTITY, // ( gentity_t *ent ); + // call before removing an interactive entity - G_ENTITIES_IN_BOX, // ( const vec3_t mins, const vec3_t maxs, gentity_t **list, int maxcount ); - // EntitiesInBox will return brush models based on their bounding box, - // so exact determination must still be done with EntityContact + G_ENTITIES_IN_BOX, // ( const vec3_t mins, const vec3_t maxs, gentity_t **list, int maxcount ); + // EntitiesInBox will return brush models based on their bounding box, + // so exact determination must still be done with EntityContact - G_ENTITY_CONTACT, // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent ); - // perform an exact check against inline brush models of non-square shape + G_ENTITY_CONTACT, // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent ); + // perform an exact check against inline brush models of non-square shape - G_GET_USERCMD, // ( int clientNum, usercmd_t *cmd ) + G_GET_USERCMD, // ( int clientNum, usercmd_t *cmd ) - G_GET_ENTITY_TOKEN, // qboolean ( char *buffer, int bufferSize ) - // Retrieves the next string token from the entity spawn text, returning - // false when all tokens have been parsed. - // This should only be done at GAME_INIT time. + G_GET_ENTITY_TOKEN, // qboolean ( char *buffer, int bufferSize ) + // Retrieves the next string token from the entity spawn text, returning + // false when all tokens have been parsed. + // This should only be done at GAME_INIT time. - G_FS_GETFILELIST, - G_REAL_TIME, - G_SNAPVECTOR, + G_FS_GETFILELIST, + G_REAL_TIME, + G_SNAPVECTOR, - 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 ); - G_ENTITY_CONTACTCAPSULE, // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent ); + 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 ); + G_ENTITY_CONTACTCAPSULE, // ( const vec3_t mins, const vec3_t maxs, const gentity_t *ent ); - // 1.32 - G_FS_SEEK, + // 1.32 + G_FS_SEEK, - G_PARSE_ADD_GLOBAL_DEFINE, - G_PARSE_LOAD_SOURCE, - G_PARSE_FREE_SOURCE, - G_PARSE_READ_TOKEN, - G_PARSE_SOURCE_FILE_AND_LINE, + G_PARSE_ADD_GLOBAL_DEFINE, + G_PARSE_LOAD_SOURCE, + G_PARSE_FREE_SOURCE, + G_PARSE_READ_TOKEN, + G_PARSE_SOURCE_FILE_AND_LINE, - G_SEND_GAMESTAT, + G_SEND_GAMESTAT, - G_ADDCOMMAND, - G_REMOVECOMMAND + G_ADDCOMMAND, + G_REMOVECOMMAND, + G_FS_GETFILTEREDFILES } gameImport_t; - // // functions exported by the game subsystem // typedef enum { - GAME_INIT, // ( int levelTime, int randomSeed, int restart ); - // init and shutdown will be called every single level - // The game should call G_GET_ENTITY_TOKEN to parse through all the - // entity configuration text and spawn gentities. + GAME_INIT, // ( int levelTime, int randomSeed, int restart ); + // init and shutdown will be called every single level + // The game should call G_GET_ENTITY_TOKEN to parse through all the + // entity configuration text and spawn gentities. - GAME_SHUTDOWN, // (void); + GAME_SHUTDOWN, // (void); - GAME_CLIENT_CONNECT, // ( int clientNum, qboolean firstTime ); - // return NULL if the client is allowed to connect, otherwise return - // a text string with the reason for denial + GAME_CLIENT_CONNECT, // ( int clientNum, qboolean firstTime ); + // return NULL if the client is allowed to connect, otherwise return + // a text string with the reason for denial - GAME_CLIENT_BEGIN, // ( int clientNum ); + GAME_CLIENT_BEGIN, // ( int clientNum ); - GAME_CLIENT_USERINFO_CHANGED, // ( int clientNum ); + GAME_CLIENT_USERINFO_CHANGED, // ( int clientNum ); - GAME_CLIENT_DISCONNECT, // ( int clientNum ); + GAME_CLIENT_DISCONNECT, // ( int clientNum ); - GAME_CLIENT_COMMAND, // ( int clientNum ); + GAME_CLIENT_COMMAND, // ( int clientNum ); - GAME_CLIENT_THINK, // ( int clientNum ); + GAME_CLIENT_THINK, // ( int clientNum ); - GAME_RUN_FRAME, // ( int levelTime ); + GAME_RUN_FRAME, // ( int levelTime ); - GAME_CONSOLE_COMMAND // ( void ); - // ConsoleCommand will be called when a command has been issued - // that is not recognized as a builtin function. - // The game can issue trap_argc() / trap_argv() commands to get the command - // and parameters. Return qfalse if the game doesn't recognize it as a command. + GAME_CONSOLE_COMMAND // ( void ); + // ConsoleCommand will be called when a command has been issued + // that is not recognized as a builtin function. + // The game can issue trap_argc() / trap_argv() commands to get the command + // and parameters. Return qfalse if the game doesn't recognize it as a command. } gameExport_t; +#endif |