|
|
1.1 ! root 1: ! 2: // game.h -- game dll information visible to server ! 3: ! 4: #define GAME_API_VERSION 3 ! 5: ! 6: // edict->svflags ! 7: ! 8: #define SVF_NOCLIENT 0x00000001 // don't send entity to clients, even if it has effects ! 9: #define SVF_DEADMONSTER 0x00000002 // treat as CONTENTS_DEADMONSTER for collision ! 10: #define SVF_MONSTER 0x00000004 // treat as CONTENTS_MONSTER for collision ! 11: //ROGUE -- added for things that are damageable, but not monsters ! 12: // right now, only the tesla has this ! 13: #define SVF_DAMAGEABLE 0x00000008 ! 14: //ROGUE end ! 15: ! 16: // edict->solid values ! 17: ! 18: typedef enum ! 19: { ! 20: SOLID_NOT, // no interaction with other objects ! 21: SOLID_TRIGGER, // only touch when inside, after moving ! 22: SOLID_BBOX, // touch on edge ! 23: SOLID_BSP // bsp clip, touch on edge ! 24: } solid_t; ! 25: ! 26: //=============================================================== ! 27: ! 28: // link_t is only used for entity area links now ! 29: typedef struct link_s ! 30: { ! 31: struct link_s *prev, *next; ! 32: } link_t; ! 33: ! 34: #define MAX_ENT_CLUSTERS 16 ! 35: ! 36: ! 37: typedef struct edict_s edict_t; ! 38: typedef struct gclient_s gclient_t; ! 39: ! 40: ! 41: #ifndef GAME_INCLUDE ! 42: ! 43: struct gclient_s ! 44: { ! 45: player_state_t ps; // communicated by server to clients ! 46: int ping; ! 47: // the game dll can add anything it wants after ! 48: // this point in the structure ! 49: }; ! 50: ! 51: ! 52: struct edict_s ! 53: { ! 54: entity_state_t s; ! 55: struct gclient_s *client; ! 56: qboolean inuse; ! 57: int linkcount; ! 58: ! 59: // FIXME: move these fields to a server private sv_entity_t ! 60: link_t area; // linked to a division node or leaf ! 61: ! 62: int num_clusters; // if -1, use headnode instead ! 63: int clusternums[MAX_ENT_CLUSTERS]; ! 64: int headnode; // unused if num_clusters != -1 ! 65: int areanum, areanum2; ! 66: ! 67: //================================ ! 68: ! 69: int svflags; // SVF_NOCLIENT, SVF_DEADMONSTER, SVF_MONSTER, etc ! 70: vec3_t mins, maxs; ! 71: vec3_t absmin, absmax, size; ! 72: solid_t solid; ! 73: int clipmask; ! 74: edict_t *owner; ! 75: ! 76: // the game dll can add anything it wants after ! 77: // this point in the structure ! 78: }; ! 79: ! 80: #endif // GAME_INCLUDE ! 81: ! 82: //=============================================================== ! 83: ! 84: // ! 85: // functions provided by the main engine ! 86: // ! 87: typedef struct ! 88: { ! 89: // special messages ! 90: void (*bprintf) (int printlevel, char *fmt, ...); ! 91: void (*dprintf) (char *fmt, ...); ! 92: void (*cprintf) (edict_t *ent, int printlevel, char *fmt, ...); ! 93: void (*centerprintf) (edict_t *ent, char *fmt, ...); ! 94: void (*sound) (edict_t *ent, int channel, int soundindex, float volume, float attenuation, float timeofs); ! 95: void (*positioned_sound) (vec3_t origin, edict_t *ent, int channel, int soundinedex, float volume, float attenuation, float timeofs); ! 96: ! 97: // config strings hold all the index strings, the lightstyles, ! 98: // and misc data like the sky definition and cdtrack. ! 99: // All of the current configstrings are sent to clients when ! 100: // they connect, and changes are sent to all connected clients. ! 101: void (*configstring) (int num, char *string); ! 102: ! 103: void (*error) (char *fmt, ...); ! 104: ! 105: // the *index functions create configstrings and some internal server state ! 106: int (*modelindex) (char *name); ! 107: int (*soundindex) (char *name); ! 108: int (*imageindex) (char *name); ! 109: ! 110: void (*setmodel) (edict_t *ent, char *name); ! 111: ! 112: // collision detection ! 113: trace_t (*trace) (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, edict_t *passent, int contentmask); ! 114: int (*pointcontents) (vec3_t point); ! 115: qboolean (*inPVS) (vec3_t p1, vec3_t p2); ! 116: qboolean (*inPHS) (vec3_t p1, vec3_t p2); ! 117: void (*SetAreaPortalState) (int portalnum, qboolean open); ! 118: qboolean (*AreasConnected) (int area1, int area2); ! 119: ! 120: // an entity will never be sent to a client or used for collision ! 121: // if it is not passed to linkentity. If the size, position, or ! 122: // solidity changes, it must be relinked. ! 123: void (*linkentity) (edict_t *ent); ! 124: void (*unlinkentity) (edict_t *ent); // call before removing an interactive edict ! 125: int (*BoxEdicts) (vec3_t mins, vec3_t maxs, edict_t **list, int maxcount, int areatype); ! 126: void (*Pmove) (pmove_t *pmove); // player movement code common with client prediction ! 127: ! 128: // network messaging ! 129: void (*multicast) (vec3_t origin, multicast_t to); ! 130: void (*unicast) (edict_t *ent, qboolean reliable); ! 131: void (*WriteChar) (int c); ! 132: void (*WriteByte) (int c); ! 133: void (*WriteShort) (int c); ! 134: void (*WriteLong) (int c); ! 135: void (*WriteFloat) (float f); ! 136: void (*WriteString) (char *s); ! 137: void (*WritePosition) (vec3_t pos); // some fractional bits ! 138: void (*WriteDir) (vec3_t pos); // single byte encoded, very coarse ! 139: void (*WriteAngle) (float f); ! 140: ! 141: // managed memory allocation ! 142: void *(*TagMalloc) (int size, int tag); ! 143: void (*TagFree) (void *block); ! 144: void (*FreeTags) (int tag); ! 145: ! 146: // console variable interaction ! 147: cvar_t *(*cvar) (char *var_name, char *value, int flags); ! 148: cvar_t *(*cvar_set) (char *var_name, char *value); ! 149: cvar_t *(*cvar_forceset) (char *var_name, char *value); ! 150: ! 151: // ClientCommand and ServerCommand parameter access ! 152: int (*argc) (void); ! 153: char *(*argv) (int n); ! 154: char *(*args) (void); // concatenation of all argv >= 1 ! 155: ! 156: // add commands to the server console as if they were typed in ! 157: // for map changing, etc ! 158: void (*AddCommandString) (char *text); ! 159: ! 160: void (*DebugGraph) (float value, int color); ! 161: } game_import_t; ! 162: ! 163: // ! 164: // functions exported by the game subsystem ! 165: // ! 166: typedef struct ! 167: { ! 168: int apiversion; ! 169: ! 170: // the init function will only be called when a game starts, ! 171: // not each time a level is loaded. Persistant data for clients ! 172: // and the server can be allocated in init ! 173: void (*Init) (void); ! 174: void (*Shutdown) (void); ! 175: ! 176: // each new level entered will cause a call to SpawnEntities ! 177: void (*SpawnEntities) (char *mapname, char *entstring, char *spawnpoint); ! 178: ! 179: // Read/Write Game is for storing persistant cross level information ! 180: // about the world state and the clients. ! 181: // WriteGame is called every time a level is exited. ! 182: // ReadGame is called on a loadgame. ! 183: void (*WriteGame) (char *filename, qboolean autosave); ! 184: void (*ReadGame) (char *filename); ! 185: ! 186: // ReadLevel is called after the default map information has been ! 187: // loaded with SpawnEntities ! 188: void (*WriteLevel) (char *filename); ! 189: void (*ReadLevel) (char *filename); ! 190: ! 191: qboolean (*ClientConnect) (edict_t *ent, char *userinfo); ! 192: void (*ClientBegin) (edict_t *ent); ! 193: void (*ClientUserinfoChanged) (edict_t *ent, char *userinfo); ! 194: void (*ClientDisconnect) (edict_t *ent); ! 195: void (*ClientCommand) (edict_t *ent); ! 196: void (*ClientThink) (edict_t *ent, usercmd_t *cmd); ! 197: ! 198: void (*RunFrame) (void); ! 199: ! 200: // ServerCommand will be called when an "sv <command>" command is issued on the ! 201: // server console. ! 202: // The game can issue gi.argc() / gi.argv() commands to get the rest ! 203: // of the parameters ! 204: void (*ServerCommand) (void); ! 205: ! 206: // ! 207: // global variables shared between game and server ! 208: // ! 209: ! 210: // The edict array is allocated in the game dll so it ! 211: // can vary in size from one game to another. ! 212: // ! 213: // The size will be fixed when ge->Init() is called ! 214: struct edict_s *edicts; ! 215: int edict_size; ! 216: int num_edicts; // current number, <= max_edicts ! 217: int max_edicts; ! 218: } game_export_t; ! 219: ! 220: game_export_t *GetGameApi (game_import_t *import);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.