mirror of
https://github.com/UberGames/rpgxEF.git
synced 2024-11-10 07:11:34 +00:00
a39565b783
... not quite content with where the project files lie but it is ok for now. ... compiling works fine so far (only tested mingw32 right now)
417 lines
13 KiB
C
417 lines
13 KiB
C
// Copyright (C) 1999-2000 Id Software, Inc.
|
|
//
|
|
|
|
// g_public.h -- game module information visible to server
|
|
|
|
#define GAME_API_VERSION 7
|
|
|
|
// 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
|
|
#define SVF_SHIELD_BBOX 0x00000002 // signals that SV_LinkEntity needs to use special client-side bbox encoding
|
|
#define SVF_BOT 0x00000008
|
|
#define SVF_ELIMINATED 0x00000010 // Just so we know he's been eliminated without adding the EF_ELIMINATED flag which has all sorts of side effects
|
|
#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)
|
|
|
|
//===============================================================
|
|
|
|
/** \struct entityShared_t
|
|
* \brief Entity variables shared by both the server system and game.
|
|
*
|
|
*/
|
|
typedef struct {
|
|
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; //!< derived from mins and origin + rotation
|
|
vec3_t absmax; //!< derived from 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;
|
|
|
|
|
|
/** \struct sharedEntity_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
|
|
} sharedEntity_t;
|
|
|
|
|
|
|
|
//===============================================================
|
|
|
|
/** \enum gameImport_t
|
|
* system traps provided by the main engine
|
|
*/
|
|
typedef enum {
|
|
//============== general Quake services ==================
|
|
|
|
//! print message on the local console
|
|
G_PRINT, // ( const char *string );
|
|
|
|
//! abort the game
|
|
G_ERROR, // ( const char *string );
|
|
|
|
/**
|
|
* get current time for profiling reasons
|
|
* this should NOT be used for any game related tasks,
|
|
* because it is not journaled
|
|
*/
|
|
G_MILLISECONDS, // ( void );
|
|
|
|
// 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_CVAR_VARIABLE_STRING_BUFFER, // ( const char *var_name, char *buffer, int bufsize );
|
|
|
|
G_ARGC, // ( void );
|
|
// ClientCommand and ServerCommand parameter access
|
|
|
|
G_ARGV, // ( int n, char *buffer, int bufferLength );
|
|
|
|
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 );
|
|
|
|
/**
|
|
* add commands to the console as if they were typed in
|
|
* for map changing, etc
|
|
*/
|
|
G_SEND_CONSOLE_COMMAND, // ( const char *text );
|
|
|
|
|
|
//=========== server specific functionality =============
|
|
|
|
/**
|
|
* 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 );
|
|
|
|
//! kick a client off the server with a message
|
|
G_DROP_CLIENT, // ( int clientNum, const char *reason );
|
|
|
|
/**
|
|
* 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, ... );
|
|
|
|
/**
|
|
* 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 );
|
|
|
|
G_GET_CONFIGSTRING, // ( 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 );
|
|
|
|
G_SET_USERINFO, // ( int num, const char *buffer );
|
|
|
|
//! the serverinfo info string has all the cvars visible to server browsers
|
|
G_GET_SERVERINFO, // ( char *buffer, int bufferSize );
|
|
|
|
//! sets mins and maxs based on the brushmodel name
|
|
G_SET_BRUSH_MODEL, // ( gentity_t *ent, const char *name );
|
|
|
|
//! 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 );
|
|
|
|
//! point contents against all linked entities
|
|
G_POINT_CONTENTS, // ( const vec3_t point, int passEntityNum );
|
|
|
|
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_ADJUST_AREA_PORTAL_STATE, // ( gentity_t *ent, qboolean open );
|
|
|
|
G_AREAS_CONNECTED, // ( int area1, int area2 );
|
|
|
|
/**
|
|
* 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 );
|
|
|
|
//! call before removing an interactive entity
|
|
G_UNLINKENTITY, // ( gentity_t *ent );
|
|
|
|
/**
|
|
* 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 );
|
|
|
|
//! 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 );
|
|
|
|
// access for bots to get and free a server client (FIXME?)
|
|
G_BOT_ALLOCATE_CLIENT, // ( void );
|
|
|
|
G_BOT_FREE_CLIENT, // ( int clientNum );
|
|
|
|
G_GET_USERCMD, // ( int clientNum, usercmd_t *cmd )
|
|
|
|
/**
|
|
* 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 )
|
|
|
|
G_FS_GETFILELIST,
|
|
G_DEBUG_POLYGON_CREATE,
|
|
G_DEBUG_POLYGON_DELETE,
|
|
|
|
BOTLIB_SETUP = 200, // ( void );
|
|
BOTLIB_SHUTDOWN, // ( void );
|
|
BOTLIB_LIBVAR_SET,
|
|
BOTLIB_LIBVAR_GET,
|
|
BOTLIB_DEFINE,
|
|
BOTLIB_START_FRAME,
|
|
BOTLIB_LOAD_MAP,
|
|
BOTLIB_UPDATENTITY,
|
|
BOTLIB_TEST,
|
|
|
|
BOTLIB_GET_SNAPSHOT_ENTITY, // ( int client, int ent );
|
|
BOTLIB_GET_CONSOLE_MESSAGE, // ( int client, char *message, int size );
|
|
BOTLIB_USER_COMMAND, // ( int client, usercmd_t *ucmd );
|
|
|
|
BOTLIB_AAS_ENTITY_VISIBLE = 300, //FIXME: remove
|
|
BOTLIB_AAS_IN_FIELD_OF_VISION, //FIXME: remove
|
|
BOTLIB_AAS_VISIBLE_CLIENTS, //FIXME: remove
|
|
BOTLIB_AAS_ENTITY_INFO,
|
|
|
|
BOTLIB_AAS_INITIALIZED,
|
|
BOTLIB_AAS_PRESENCE_TYPE_BOUNDING_BOX,
|
|
BOTLIB_AAS_TIME,
|
|
|
|
BOTLIB_AAS_POINT_AREA_NUM,
|
|
BOTLIB_AAS_TRACE_AREAS,
|
|
|
|
BOTLIB_AAS_POINT_CONTENTS,
|
|
BOTLIB_AAS_NEXT_BSP_ENTITY,
|
|
BOTLIB_AAS_VALUE_FOR_BSP_EPAIR_KEY,
|
|
BOTLIB_AAS_VECTOR_FOR_BSP_EPAIR_KEY,
|
|
BOTLIB_AAS_FLOAT_FOR_BSP_EPAIR_KEY,
|
|
BOTLIB_AAS_INT_FOR_BSP_EPAIR_KEY,
|
|
|
|
BOTLIB_AAS_AREA_REACHABILITY,
|
|
|
|
BOTLIB_AAS_AREA_TRAVEL_TIME_TO_GOAL_AREA,
|
|
|
|
BOTLIB_AAS_SWIMMING,
|
|
BOTLIB_AAS_PREDICT_CLIENT_MOVEMENT,
|
|
|
|
|
|
|
|
BOTLIB_EA_SAY = 400,
|
|
BOTLIB_EA_SAY_TEAM,
|
|
BOTLIB_EA_USE_ITEM,
|
|
BOTLIB_EA_DROP_ITEM,
|
|
BOTLIB_EA_USE_INV,
|
|
BOTLIB_EA_DROP_INV,
|
|
BOTLIB_EA_GESTURE,
|
|
BOTLIB_EA_COMMAND,
|
|
|
|
BOTLIB_EA_SELECT_WEAPON,
|
|
BOTLIB_EA_TALK,
|
|
BOTLIB_EA_ATTACK,
|
|
BOTLIB_EA_USE,
|
|
BOTLIB_EA_RESPAWN,
|
|
BOTLIB_EA_JUMP,
|
|
BOTLIB_EA_DELAYED_JUMP,
|
|
BOTLIB_EA_CROUCH,
|
|
BOTLIB_EA_MOVE_UP,
|
|
BOTLIB_EA_MOVE_DOWN,
|
|
BOTLIB_EA_MOVE_FORWARD,
|
|
BOTLIB_EA_MOVE_BACK,
|
|
BOTLIB_EA_MOVE_LEFT,
|
|
BOTLIB_EA_MOVE_RIGHT,
|
|
BOTLIB_EA_MOVE,
|
|
BOTLIB_EA_VIEW,
|
|
|
|
BOTLIB_EA_END_REGULAR,
|
|
BOTLIB_EA_GET_INPUT,
|
|
BOTLIB_EA_RESET_INPUT,
|
|
BOTLIB_EA_ALT_ATTACK,
|
|
|
|
|
|
|
|
BOTLIB_AI_LOAD_CHARACTER = 500,
|
|
BOTLIB_AI_FREE_CHARACTER,
|
|
BOTLIB_AI_CHARACTERISTIC_FLOAT,
|
|
BOTLIB_AI_CHARACTERISTIC_BFLOAT,
|
|
BOTLIB_AI_CHARACTERISTIC_INTEGER,
|
|
BOTLIB_AI_CHARACTERISTIC_BINTEGER,
|
|
BOTLIB_AI_CHARACTERISTIC_STRING,
|
|
|
|
BOTLIB_AI_ALLOC_CHAT_STATE,
|
|
BOTLIB_AI_FREE_CHAT_STATE,
|
|
BOTLIB_AI_QUEUE_CONSOLE_MESSAGE,
|
|
BOTLIB_AI_REMOVE_CONSOLE_MESSAGE,
|
|
BOTLIB_AI_NEXT_CONSOLE_MESSAGE,
|
|
BOTLIB_AI_NUM_CONSOLE_MESSAGE,
|
|
BOTLIB_AI_INITIAL_CHAT,
|
|
BOTLIB_AI_REPLY_CHAT,
|
|
BOTLIB_AI_CHAT_LENGTH,
|
|
BOTLIB_AI_ENTER_CHAT,
|
|
BOTLIB_AI_STRING_CONTAINS,
|
|
BOTLIB_AI_FIND_MATCH,
|
|
BOTLIB_AI_MATCH_VARIABLE,
|
|
BOTLIB_AI_UNIFY_WHITE_SPACES,
|
|
BOTLIB_AI_REPLACE_SYNONYMS,
|
|
BOTLIB_AI_LOAD_CHAT_FILE,
|
|
BOTLIB_AI_SET_CHAT_GENDER,
|
|
BOTLIB_AI_SET_CHAT_NAME,
|
|
|
|
BOTLIB_AI_RESET_GOAL_STATE,
|
|
BOTLIB_AI_RESET_AVOID_GOALS,
|
|
BOTLIB_AI_PUSH_GOAL,
|
|
BOTLIB_AI_POP_GOAL,
|
|
BOTLIB_AI_EMPTY_GOAL_STACK,
|
|
BOTLIB_AI_DUMP_AVOID_GOALS,
|
|
BOTLIB_AI_DUMP_GOAL_STACK,
|
|
BOTLIB_AI_GOAL_NAME,
|
|
BOTLIB_AI_GET_TOP_GOAL,
|
|
BOTLIB_AI_GET_SECOND_GOAL,
|
|
BOTLIB_AI_CHOOSE_LTG_ITEM,
|
|
BOTLIB_AI_CHOOSE_NBG_ITEM,
|
|
BOTLIB_AI_TOUCHING_GOAL,
|
|
BOTLIB_AI_ITEM_GOAL_IN_VIS_BUT_NOT_VISIBLE,
|
|
BOTLIB_AI_GET_LEVEL_ITEM_GOAL,
|
|
BOTLIB_AI_AVOID_GOAL_TIME,
|
|
BOTLIB_AI_INIT_LEVEL_ITEMS,
|
|
BOTLIB_AI_UPDATE_ENTITY_ITEMS,
|
|
BOTLIB_AI_LOAD_ITEM_WEIGHTS,
|
|
BOTLIB_AI_FREE_ITEM_WEIGHTS,
|
|
BOTLIB_AI_SAVE_GOAL_FUZZY_LOGIC,
|
|
BOTLIB_AI_ALLOC_GOAL_STATE,
|
|
BOTLIB_AI_FREE_GOAL_STATE,
|
|
|
|
BOTLIB_AI_RESET_MOVE_STATE,
|
|
BOTLIB_AI_MOVE_TO_GOAL,
|
|
BOTLIB_AI_MOVE_IN_DIRECTION,
|
|
BOTLIB_AI_RESET_AVOID_REACH,
|
|
BOTLIB_AI_RESET_LAST_AVOID_REACH,
|
|
BOTLIB_AI_REACHABILITY_AREA,
|
|
BOTLIB_AI_MOVEMENT_VIEW_TARGET,
|
|
BOTLIB_AI_ALLOC_MOVE_STATE,
|
|
BOTLIB_AI_FREE_MOVE_STATE,
|
|
BOTLIB_AI_INIT_MOVE_STATE,
|
|
|
|
BOTLIB_AI_CHOOSE_BEST_FIGHT_WEAPON,
|
|
BOTLIB_AI_GET_WEAPON_INFO,
|
|
BOTLIB_AI_LOAD_WEAPON_WEIGHTS,
|
|
BOTLIB_AI_ALLOC_WEAPON_STATE,
|
|
BOTLIB_AI_FREE_WEAPON_STATE,
|
|
BOTLIB_AI_RESET_WEAPON_STATE,
|
|
|
|
BOTLIB_AI_GENETIC_PARENTS_AND_CHILD_SELECTION,
|
|
BOTLIB_AI_INTERBREED_GOAL_FUZZY_LOGIC,
|
|
BOTLIB_AI_MUTATE_GOAL_FUZZY_LOGIC,
|
|
BOTLIB_AI_GET_NEXT_CAMP_SPOT_GOAL,
|
|
BOTLIB_AI_GET_MAP_LOCATION_GOAL,
|
|
BOTLIB_AI_NUM_INITIAL_CHATS,
|
|
BOTLIB_AI_GET_CHAT_MESSAGE,
|
|
BOTLIB_AI_REMOVE_FROM_AVOID_GOALS,
|
|
BOTLIB_AI_PREDICT_VISIBLE_POSITION,
|
|
} gameImport_t;
|
|
|
|
|
|
/** \enum gameExport_t
|
|
* functions exported by the game subsystem
|
|
*/
|
|
typedef enum {
|
|
/**
|
|
* 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 );
|
|
|
|
GAME_SHUTDOWN, // (void);
|
|
|
|
/**
|
|
* 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, qboolean isBot );
|
|
|
|
GAME_CLIENT_BEGIN, // ( int clientNum );
|
|
|
|
GAME_CLIENT_USERINFO_CHANGED, // ( int clientNum );
|
|
|
|
GAME_CLIENT_DISCONNECT, // ( int clientNum );
|
|
|
|
GAME_CLIENT_COMMAND, // ( int clientNum );
|
|
|
|
GAME_CLIENT_THINK, // ( int clientNum );
|
|
|
|
GAME_RUN_FRAME, // ( int levelTime );
|
|
|
|
/**
|
|
* 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 );
|
|
|
|
BOTAI_START_FRAME // ( int time );
|
|
} gameExport_t;
|
|
|