|
|
1.1.1.4 ! root 1: /* ! 2: Copyright (C) 1997-2001 Id Software, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or ! 5: modify it under the terms of the GNU General Public License ! 6: as published by the Free Software Foundation; either version 2 ! 7: of the License, or (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! 18: ! 19: */ 1.1 root 20: 21: // qcommon.h -- definitions common between client and server, but not game.dll 22: 23: #include "../game/q_shared.h" 24: 25: 1.1.1.4 ! root 26: #define VERSION 3.21 1.1 root 27: 1.1.1.2 root 28: #define BASEDIRNAME "baseq2" 1.1 root 29: 30: #ifdef WIN32 31: 32: #ifdef NDEBUG 1.1.1.2 root 33: #define BUILDSTRING "Win32 RELEASE" 1.1 root 34: #else 1.1.1.2 root 35: #define BUILDSTRING "Win32 DEBUG" 1.1 root 36: #endif 37: 38: #ifdef _M_IX86 39: #define CPUSTRING "x86" 40: #elif defined _M_ALPHA 41: #define CPUSTRING "AXP" 42: #endif 43: 1.1.1.2 root 44: #elif defined __linux__ 45: 46: #define BUILDSTRING "Linux" 47: 48: #ifdef __i386__ 49: #define CPUSTRING "i386" 50: #elif defined __alpha__ 51: #define CPUSTRING "axp" 52: #else 53: #define CPUSTRING "Unknown" 54: #endif 55: 56: #elif defined __sun__ 1.1 root 57: 1.1.1.2 root 58: #define BUILDSTRING "Solaris" 59: 60: #ifdef __i386__ 61: #define CPUSTRING "i386" 62: #else 63: #define CPUSTRING "sparc" 64: #endif 65: 66: #else // !WIN32 1.1 root 67: 68: #define BUILDSTRING "NON-WIN32" 69: #define CPUSTRING "NON-WIN32" 70: 71: #endif 72: 73: //============================================================================ 74: 75: typedef struct sizebuf_s 76: { 77: qboolean allowoverflow; // if false, do a Com_Error 78: qboolean overflowed; // set to true if the buffer size failed 79: byte *data; 80: int maxsize; 81: int cursize; 82: int readcount; 83: } sizebuf_t; 84: 85: void SZ_Init (sizebuf_t *buf, byte *data, int length); 86: void SZ_Clear (sizebuf_t *buf); 87: void *SZ_GetSpace (sizebuf_t *buf, int length); 88: void SZ_Write (sizebuf_t *buf, void *data, int length); 89: void SZ_Print (sizebuf_t *buf, char *data); // strcats onto the sizebuf 90: 91: //============================================================================ 92: 93: struct usercmd_s; 94: struct entity_state_s; 95: 96: void MSG_WriteChar (sizebuf_t *sb, int c); 97: void MSG_WriteByte (sizebuf_t *sb, int c); 98: void MSG_WriteShort (sizebuf_t *sb, int c); 99: void MSG_WriteLong (sizebuf_t *sb, int c); 100: void MSG_WriteFloat (sizebuf_t *sb, float f); 101: void MSG_WriteString (sizebuf_t *sb, char *s); 102: void MSG_WriteCoord (sizebuf_t *sb, float f); 103: void MSG_WritePos (sizebuf_t *sb, vec3_t pos); 104: void MSG_WriteAngle (sizebuf_t *sb, float f); 105: void MSG_WriteAngle16 (sizebuf_t *sb, float f); 106: void MSG_WriteDeltaUsercmd (sizebuf_t *sb, struct usercmd_s *from, struct usercmd_s *cmd); 1.1.1.2 root 107: void MSG_WriteDeltaEntity (struct entity_state_s *from, struct entity_state_s *to, sizebuf_t *msg, qboolean force, qboolean newentity); 1.1 root 108: void MSG_WriteDir (sizebuf_t *sb, vec3_t vector); 109: 110: 111: void MSG_BeginReading (sizebuf_t *sb); 112: 113: int MSG_ReadChar (sizebuf_t *sb); 114: int MSG_ReadByte (sizebuf_t *sb); 115: int MSG_ReadShort (sizebuf_t *sb); 116: int MSG_ReadLong (sizebuf_t *sb); 117: float MSG_ReadFloat (sizebuf_t *sb); 118: char *MSG_ReadString (sizebuf_t *sb); 119: char *MSG_ReadStringLine (sizebuf_t *sb); 120: 121: float MSG_ReadCoord (sizebuf_t *sb); 122: void MSG_ReadPos (sizebuf_t *sb, vec3_t pos); 123: float MSG_ReadAngle (sizebuf_t *sb); 124: float MSG_ReadAngle16 (sizebuf_t *sb); 125: void MSG_ReadDeltaUsercmd (sizebuf_t *sb, struct usercmd_s *from, struct usercmd_s *cmd); 126: 127: void MSG_ReadDir (sizebuf_t *sb, vec3_t vector); 128: 129: void MSG_ReadData (sizebuf_t *sb, void *buffer, int size); 130: 131: //============================================================================ 132: 133: extern qboolean bigendien; 134: 135: extern short BigShort (short l); 136: extern short LittleShort (short l); 137: extern int BigLong (int l); 138: extern int LittleLong (int l); 139: extern float BigFloat (float l); 140: extern float LittleFloat (float l); 141: 142: //============================================================================ 143: 144: 145: int COM_Argc (void); 146: char *COM_Argv (int arg); // range and null checked 147: void COM_ClearArgv (int arg); 148: int COM_CheckParm (char *parm); 149: void COM_AddParm (char *parm); 150: 151: void COM_Init (void); 152: void COM_InitArgv (int argc, char **argv); 153: 154: char *CopyString (char *in); 155: 156: //============================================================================ 157: 158: void Info_Print (char *s); 159: 160: 161: /* crc.h */ 162: 163: void CRC_Init(unsigned short *crcvalue); 164: void CRC_ProcessByte(unsigned short *crcvalue, byte data); 165: unsigned short CRC_Value(unsigned short crcvalue); 1.1.1.2 root 166: unsigned short CRC_Block (byte *start, int count); 1.1 root 167: 168: 169: 170: /* 171: ============================================================== 172: 173: PROTOCOL 174: 175: ============================================================== 176: */ 177: 178: // protocol.h -- communications protocols 179: 1.1.1.3 root 180: #define PROTOCOL_VERSION 34 1.1 root 181: 182: //========================================= 183: 184: #define PORT_MASTER 27900 185: #define PORT_CLIENT 27901 186: #define PORT_SERVER 27910 187: 188: //========================================= 189: 190: #define UPDATE_BACKUP 16 // copies of entity_state_t to keep buffered 191: // must be power of two 192: #define UPDATE_MASK (UPDATE_BACKUP-1) 193: 194: 195: 196: //================== 197: // the svc_strings[] array in cl_parse.c should mirror this 198: //================== 199: 200: // 201: // server to client 202: // 203: enum svc_ops_e 204: { 205: svc_bad, 206: 207: // these ops are known to the game dll 208: svc_muzzleflash, 209: svc_muzzleflash2, 210: svc_temp_entity, 211: svc_layout, 212: svc_inventory, 213: 214: // the rest are private to the client and server 215: svc_nop, 216: svc_disconnect, 217: svc_reconnect, 218: svc_sound, // <see code> 219: svc_print, // [byte] id [string] null terminated string 220: svc_stufftext, // [string] stuffed into client's console buffer, should be \n terminated 221: svc_serverdata, // [long] protocol ... 222: svc_configstring, // [short] [string] 223: svc_spawnbaseline, 224: svc_centerprint, // [string] to put in center of the screen 225: svc_download, // [short] size [size bytes] 226: svc_playerinfo, // variable 227: svc_packetentities, // [...] 228: svc_deltapacketentities, // [...] 229: svc_frame 230: }; 231: 232: //============================================== 233: 234: // 235: // client to server 236: // 237: enum clc_ops_e 238: { 239: clc_bad, 240: clc_nop, 241: clc_move, // [[usercmd_t] 242: clc_userinfo, // [[userinfo string] 243: clc_stringcmd // [string] message 244: }; 245: 246: //============================================== 247: 248: // plyer_state_t communication 249: 250: #define PS_M_TYPE (1<<0) 251: #define PS_M_ORIGIN (1<<1) 252: #define PS_M_VELOCITY (1<<2) 253: #define PS_M_TIME (1<<3) 254: #define PS_M_FLAGS (1<<4) 255: #define PS_M_GRAVITY (1<<5) 256: #define PS_M_DELTA_ANGLES (1<<6) 257: 258: #define PS_VIEWOFFSET (1<<7) 259: #define PS_VIEWANGLES (1<<8) 260: #define PS_KICKANGLES (1<<9) 261: #define PS_BLEND (1<<10) 262: #define PS_FOV (1<<11) 263: #define PS_WEAPONINDEX (1<<12) 264: #define PS_WEAPONFRAME (1<<13) 265: #define PS_RDFLAGS (1<<14) 266: 267: //============================================== 268: 269: // user_cmd_t communication 270: 1.1.1.2 root 271: // ms and light always sent, the others are optional 1.1 root 272: #define CM_ANGLE1 (1<<0) 273: #define CM_ANGLE2 (1<<1) 274: #define CM_ANGLE3 (1<<2) 275: #define CM_FORWARD (1<<3) 276: #define CM_SIDE (1<<4) 277: #define CM_UP (1<<5) 278: #define CM_BUTTONS (1<<6) 279: #define CM_IMPULSE (1<<7) 280: 281: //============================================== 282: 283: // a sound without an ent or pos will be a local only sound 284: #define SND_VOLUME (1<<0) // a byte 285: #define SND_ATTENUATION (1<<1) // a byte 286: #define SND_POS (1<<2) // three coordinates 287: #define SND_ENT (1<<3) // a short 0-2: channel, 3-12: entity 288: #define SND_OFFSET (1<<4) // a byte, msec offset from frame start 289: 290: #define DEFAULT_SOUND_PACKET_VOLUME 1.0 291: #define DEFAULT_SOUND_PACKET_ATTENUATION 1.0 292: 293: //============================================== 294: 295: // entity_state_t communication 296: 297: // try to pack the common update flags into the first byte 298: #define U_ORIGIN1 (1<<0) 299: #define U_ORIGIN2 (1<<1) 300: #define U_ANGLE2 (1<<2) 301: #define U_ANGLE3 (1<<3) 302: #define U_FRAME8 (1<<4) // frame is a byte 303: #define U_EVENT (1<<5) 304: #define U_REMOVE (1<<6) // REMOVE this entity, don't add it 305: #define U_MOREBITS1 (1<<7) // read one additional byte 306: 307: // second byte 308: #define U_NUMBER16 (1<<8) // NUMBER8 is implicit if not set 309: #define U_ORIGIN3 (1<<9) 310: #define U_ANGLE1 (1<<10) 311: #define U_MODEL (1<<11) 312: #define U_RENDERFX8 (1<<12) // fullbright, etc 313: #define U_EFFECTS8 (1<<14) // autorotate, trails, etc 314: #define U_MOREBITS2 (1<<15) // read one additional byte 315: 316: // third byte 317: #define U_SKIN8 (1<<16) 318: #define U_FRAME16 (1<<17) // frame is a short 319: #define U_RENDERFX16 (1<<18) // 8 + 16 = 32 320: #define U_EFFECTS16 (1<<19) // 8 + 16 = 32 321: #define U_MODEL2 (1<<20) // weapons, flags, etc 322: #define U_MODEL3 (1<<21) 323: #define U_MODEL4 (1<<22) 324: #define U_MOREBITS3 (1<<23) // read one additional byte 325: 326: // fourth byte 327: #define U_OLDORIGIN (1<<24) // FIXME: get rid of this 328: #define U_SKIN16 (1<<25) 329: #define U_SOUND (1<<26) 330: #define U_SOLID (1<<27) 331: 332: 333: /* 334: ============================================================== 335: 336: CMD 337: 338: Command text buffering and command execution 339: 340: ============================================================== 341: */ 342: 343: /* 344: 345: Any number of commands can be added in a frame, from several different sources. 346: Most commands come from either keybindings or console line input, but remote 347: servers can also send across commands and entire text files can be execed. 348: 349: The + command line options are also added to the command buffer. 350: 351: The game starts with a Cbuf_AddText ("exec quake.rc\n"); Cbuf_Execute (); 352: 353: */ 354: 355: #define EXEC_NOW 0 // don't return until completed 356: #define EXEC_INSERT 1 // insert at current position, but don't run yet 357: #define EXEC_APPEND 2 // add to end of the command buffer 358: 359: void Cbuf_Init (void); 360: // allocates an initial text buffer that will grow as needed 361: 362: void Cbuf_AddText (char *text); 363: // as new commands are generated from the console or keybindings, 364: // the text is added to the end of the command buffer. 365: 366: void Cbuf_InsertText (char *text); 367: // when a command wants to issue other commands immediately, the text is 368: // inserted at the beginning of the buffer, before any remaining unexecuted 369: // commands. 370: 371: void Cbuf_ExecuteText (int exec_when, char *text); 372: // this can be used in place of either Cbuf_AddText or Cbuf_InsertText 373: 374: void Cbuf_AddEarlyCommands (qboolean clear); 375: // adds all the +set commands from the command line 376: 377: qboolean Cbuf_AddLateCommands (void); 378: // adds all the remaining + commands from the command line 379: // Returns true if any late commands were added, which 380: // will keep the demoloop from immediately starting 381: 382: void Cbuf_Execute (void); 383: // Pulls off \n terminated lines of text from the command buffer and sends 384: // them through Cmd_ExecuteString. Stops when the buffer is empty. 385: // Normally called once per frame, but may be explicitly invoked. 386: // Do not call inside a command function! 387: 388: void Cbuf_CopyToDefer (void); 389: void Cbuf_InsertFromDefer (void); 390: // These two functions are used to defer any pending commands while a map 391: // is being loaded 392: 393: //=========================================================================== 394: 395: /* 396: 397: Command execution takes a null terminated string, breaks it into tokens, 398: then searches for a command or variable that matches the first token. 399: 400: */ 401: 402: typedef void (*xcommand_t) (void); 403: 404: void Cmd_Init (void); 405: 406: void Cmd_AddCommand (char *cmd_name, xcommand_t function); 407: // called by the init functions of other parts of the program to 408: // register commands and functions to call for them. 409: // The cmd_name is referenced later, so it should not be in temp memory 410: // if function is NULL, the command will be forwarded to the server 411: // as a clc_stringcmd instead of executed locally 412: void Cmd_RemoveCommand (char *cmd_name); 413: 414: qboolean Cmd_Exists (char *cmd_name); 415: // used by the cvar code to check for cvar / command name overlap 416: 417: char *Cmd_CompleteCommand (char *partial); 418: // attempts to match a partial command for automatic command line completion 419: // returns NULL if nothing fits 420: 421: int Cmd_Argc (void); 422: char *Cmd_Argv (int arg); 423: char *Cmd_Args (void); 424: // The functions that execute commands get their parameters with these 425: // functions. Cmd_Argv () will return an empty string, not a NULL 1.1.1.2 root 426: // if arg > argc, so string operations are always safe. 1.1 root 427: 428: void Cmd_TokenizeString (char *text, qboolean macroExpand); 429: // Takes a null terminated string. Does not need to be /n terminated. 430: // breaks the string up into arg tokens. 431: 432: void Cmd_ExecuteString (char *text); 433: // Parses a single line of text into arguments and tries to execute it 434: // as if it was typed at the console 435: 436: void Cmd_ForwardToServer (void); 437: // adds the current command line as a clc_stringcmd to the client message. 438: // things like godmode, noclip, etc, are commands directed to the server, 439: // so when they are typed in at the console, they will need to be forwarded. 440: 441: 442: /* 443: ============================================================== 444: 445: CVAR 446: 447: ============================================================== 448: */ 449: 450: /* 451: 452: cvar_t variables are used to hold scalar or string variables that can be changed or displayed at the console or prog code as well as accessed directly 453: in C code. 454: 455: The user can access cvars from the console in three ways: 456: r_draworder prints the current value 457: r_draworder 0 sets the current value to 0 458: set r_draworder 0 as above, but creates the cvar if not present 459: Cvars are restricted from having the same names as commands to keep this 460: interface from being ambiguous. 461: */ 462: 463: extern cvar_t *cvar_vars; 464: 465: cvar_t *Cvar_Get (char *var_name, char *value, int flags); 466: // creates the variable if it doesn't exist, or returns the existing one 467: // if it exists, the value will not be changed, but flags will be ORed in 468: // that allows variables to be unarchived without needing bitflags 469: 470: cvar_t *Cvar_Set (char *var_name, char *value); 471: // will create the variable if it doesn't exist 472: 473: cvar_t *Cvar_ForceSet (char *var_name, char *value); 474: // will set the variable even if NOSET or LATCH 475: 476: cvar_t *Cvar_FullSet (char *var_name, char *value, int flags); 477: 478: void Cvar_SetValue (char *var_name, float value); 479: // expands value to a string and calls Cvar_Set 480: 481: float Cvar_VariableValue (char *var_name); 482: // returns 0 if not defined or non numeric 483: 484: char *Cvar_VariableString (char *var_name); 485: // returns an empty string if not defined 486: 487: char *Cvar_CompleteVariable (char *partial); 488: // attempts to match a partial variable name for command line completion 489: // returns NULL if nothing fits 490: 491: void Cvar_GetLatchedVars (void); 492: // any CVAR_LATCHED variables that have been set will now take effect 493: 494: qboolean Cvar_Command (void); 495: // called by Cmd_ExecuteString when Cmd_Argv(0) doesn't match a known 496: // command. Returns true if the command was a variable reference that 497: // was handled. (print or change) 498: 499: void Cvar_WriteVariables (char *path); 500: // appends lines containing "set variable value" for all variables 501: // with the archive flag set to true. 502: 503: void Cvar_Init (void); 504: 505: char *Cvar_Userinfo (void); 506: // returns an info string containing all the CVAR_USERINFO cvars 507: 508: char *Cvar_Serverinfo (void); 509: // returns an info string containing all the CVAR_SERVERINFO cvars 510: 511: extern qboolean userinfo_modified; 512: // this is set each time a CVAR_USERINFO variable is changed 513: // so that the client knows to send it to the server 514: 515: /* 516: ============================================================== 517: 518: NET 519: 520: ============================================================== 521: */ 522: 523: // net.h -- quake's interface to the networking layer 524: 525: #define PORT_ANY -1 526: 527: #define MAX_MSGLEN 1400 // max length of a message 528: #define PACKET_HEADER 10 // two ints and a short 529: 530: typedef enum {NA_LOOPBACK, NA_BROADCAST, NA_IP, NA_IPX, NA_BROADCAST_IPX} netadrtype_t; 531: 532: typedef enum {NS_CLIENT, NS_SERVER} netsrc_t; 533: 534: typedef struct 535: { 536: netadrtype_t type; 537: 538: byte ip[4]; 539: byte ipx[10]; 540: 541: unsigned short port; 542: } netadr_t; 543: 544: void NET_Init (void); 545: void NET_Shutdown (void); 546: 547: void NET_Config (qboolean multiplayer); 548: 549: qboolean NET_GetPacket (netsrc_t sock, netadr_t *net_from, sizebuf_t *net_message); 550: void NET_SendPacket (netsrc_t sock, int length, void *data, netadr_t to); 551: 552: qboolean NET_CompareAdr (netadr_t a, netadr_t b); 553: qboolean NET_CompareBaseAdr (netadr_t a, netadr_t b); 554: qboolean NET_IsLocalAddress (netadr_t adr); 555: char *NET_AdrToString (netadr_t a); 556: qboolean NET_StringToAdr (char *s, netadr_t *a); 1.1.1.2 root 557: void NET_Sleep(int msec); 1.1 root 558: 559: //============================================================================ 560: 561: #define OLD_AVG 0.99 // total = oldtotal*OLD_AVG + new*(1-OLD_AVG) 562: 563: #define MAX_LATENT 32 564: 565: typedef struct 566: { 567: qboolean fatal_error; 568: 569: netsrc_t sock; 570: 571: int dropped; // between last packet and previous 572: 573: int last_received; // for timeouts 574: int last_sent; // for retransmits 575: 576: netadr_t remote_address; 577: int qport; // qport value to write when transmitting 578: 579: // sequencing variables 580: int incoming_sequence; 581: int incoming_acknowledged; 582: int incoming_reliable_acknowledged; // single bit 583: 584: int incoming_reliable_sequence; // single bit, maintained local 585: 586: int outgoing_sequence; 587: int reliable_sequence; // single bit 588: int last_reliable_sequence; // sequence number of last send 589: 590: // reliable staging and holding areas 591: sizebuf_t message; // writing buffer to send to server 592: byte message_buf[MAX_MSGLEN-16]; // leave space for header 593: 594: // message is copied to this buffer when it is first transfered 595: int reliable_length; 596: byte reliable_buf[MAX_MSGLEN-16]; // unacked reliable message 597: } netchan_t; 598: 599: extern netadr_t net_from; 600: extern sizebuf_t net_message; 601: extern byte net_message_buffer[MAX_MSGLEN]; 602: 603: 604: void Netchan_Init (void); 605: void Netchan_Setup (netsrc_t sock, netchan_t *chan, netadr_t adr, int qport); 606: 607: qboolean Netchan_NeedReliable (netchan_t *chan); 608: void Netchan_Transmit (netchan_t *chan, int length, byte *data); 609: void Netchan_OutOfBand (int net_socket, netadr_t adr, int length, byte *data); 610: void Netchan_OutOfBandPrint (int net_socket, netadr_t adr, char *format, ...); 611: qboolean Netchan_Process (netchan_t *chan, sizebuf_t *msg); 612: 613: qboolean Netchan_CanReliable (netchan_t *chan); 614: 615: 616: /* 617: ============================================================== 618: 619: CMODEL 620: 621: ============================================================== 622: */ 623: 624: 625: #include "../qcommon/qfiles.h" 626: 627: cmodel_t *CM_LoadMap (char *name, qboolean clientload, unsigned *checksum); 628: cmodel_t *CM_InlineModel (char *name); // *1, *2, etc 629: 630: int CM_NumClusters (void); 631: int CM_NumInlineModels (void); 632: char *CM_EntityString (void); 633: 634: // creates a clipping hull for an arbitrary box 635: int CM_HeadnodeForBox (vec3_t mins, vec3_t maxs); 636: 637: 638: // returns an ORed contents mask 639: int CM_PointContents (vec3_t p, int headnode); 640: int CM_TransformedPointContents (vec3_t p, int headnode, vec3_t origin, vec3_t angles); 641: 642: trace_t CM_BoxTrace (vec3_t start, vec3_t end, 643: vec3_t mins, vec3_t maxs, 644: int headnode, int brushmask); 645: trace_t CM_TransformedBoxTrace (vec3_t start, vec3_t end, 646: vec3_t mins, vec3_t maxs, 647: int headnode, int brushmask, 648: vec3_t origin, vec3_t angles); 649: 650: byte *CM_ClusterPVS (int cluster); 651: byte *CM_ClusterPHS (int cluster); 652: 653: int CM_PointLeafnum (vec3_t p); 654: 655: // call with topnode set to the headnode, returns with topnode 656: // set to the first node that splits the box 657: int CM_BoxLeafnums (vec3_t mins, vec3_t maxs, int *list, 658: int listsize, int *topnode); 659: 660: int CM_LeafContents (int leafnum); 661: int CM_LeafCluster (int leafnum); 662: int CM_LeafArea (int leafnum); 663: 664: void CM_SetAreaPortalState (int portalnum, qboolean open); 665: qboolean CM_AreasConnected (int area1, int area2); 666: 667: int CM_WriteAreaBits (byte *buffer, int area); 668: qboolean CM_HeadnodeVisible (int headnode, byte *visbits); 669: 670: void CM_WritePortalState (FILE *f); 671: void CM_ReadPortalState (FILE *f); 672: 673: /* 674: ============================================================== 675: 676: PLAYER MOVEMENT CODE 677: 678: Common between server and client so prediction matches 679: 680: ============================================================== 681: */ 682: 1.1.1.3 root 683: extern float pm_airaccelerate; 684: 1.1 root 685: void Pmove (pmove_t *pmove); 686: 687: /* 688: ============================================================== 689: 690: FILESYSTEM 691: 692: ============================================================== 693: */ 694: 695: void FS_InitFilesystem (void); 696: void FS_SetGamedir (char *dir); 697: char *FS_Gamedir (void); 698: char *FS_NextPath (char *prevpath); 699: void FS_ExecAutoexec (void); 700: 701: int FS_FOpenFile (char *filename, FILE **file); 702: void FS_FCloseFile (FILE *f); 703: // note: this can't be called from another DLL, due to MS libc issues 704: 705: int FS_LoadFile (char *path, void **buffer); 706: // a null buffer will just return the file length without loading 707: // a -1 length is not present 708: 709: void FS_Read (void *buffer, int len, FILE *f); 710: // properly handles partial reads 711: 712: void FS_FreeFile (void *buffer); 713: 714: void FS_CreatePath (char *path); 715: 716: 717: /* 718: ============================================================== 719: 720: MISC 721: 722: ============================================================== 723: */ 724: 725: 726: #define ERR_FATAL 0 // exit the entire game with a popup window 727: #define ERR_DROP 1 // print to console and disconnect from game 728: #define ERR_QUIT 2 // not an error, just a normal exit 729: 730: #define EXEC_NOW 0 // don't return until completed 731: #define EXEC_INSERT 1 // insert at current position, but don't run yet 732: #define EXEC_APPEND 2 // add to end of the command buffer 733: 734: #define PRINT_ALL 0 735: #define PRINT_DEVELOPER 1 // only print when "developer 1" 736: 737: void Com_BeginRedirect (int target, char *buffer, int buffersize, void (*flush)); 738: void Com_EndRedirect (void); 739: void Com_Printf (char *fmt, ...); 740: void Com_DPrintf (char *fmt, ...); 741: void Com_Error (int code, char *fmt, ...); 742: void Com_Quit (void); 743: 744: int Com_ServerState (void); // this should have just been a cvar... 745: void Com_SetServerState (int state); 746: 747: unsigned Com_BlockChecksum (void *buffer, int length); 1.1.1.2 root 748: byte COM_BlockSequenceCRCByte (byte *base, int length, int sequence); 1.1 root 749: 750: float frand(void); // 0 ti 1 751: float crand(void); // -1 to 1 752: 753: extern cvar_t *developer; 754: extern cvar_t *dedicated; 755: extern cvar_t *host_speeds; 756: extern cvar_t *log_stats; 757: 758: extern FILE *log_stats_file; 759: 760: // host_speeds times 761: extern int time_before_game; 762: extern int time_after_game; 763: extern int time_before_ref; 764: extern int time_after_ref; 765: 766: void Z_Free (void *ptr); 767: void *Z_Malloc (int size); // returns 0 filled memory 768: void *Z_TagMalloc (int size, int tag); 769: void Z_FreeTags (int tag); 770: 771: void Qcommon_Init (int argc, char **argv); 772: void Qcommon_Frame (int msec); 773: void Qcommon_Shutdown (void); 774: 775: #define NUMVERTEXNORMALS 162 776: extern vec3_t bytedirs[NUMVERTEXNORMALS]; 777: 778: // this is in the client code, but can be used for debugging from server 779: void SCR_DebugGraph (float value, int color); 780: 781: 782: /* 783: ============================================================== 784: 785: NON-PORTABLE SYSTEM SERVICES 786: 787: ============================================================== 788: */ 789: 790: void Sys_Init (void); 791: 792: void Sys_AppActivate (void); 793: 794: void Sys_UnloadGame (void); 795: void *Sys_GetGameAPI (void *parms); 796: // loads the game dll and calls the api init function 797: 798: char *Sys_ConsoleInput (void); 799: void Sys_ConsoleOutput (char *string); 800: void Sys_SendKeyEvents (void); 801: void Sys_Error (char *error, ...); 802: void Sys_Quit (void); 803: char *Sys_GetClipboardData( void ); 804: void Sys_CopyProtect (void); 805: 806: /* 807: ============================================================== 808: 809: CLIENT / SERVER SYSTEMS 810: 811: ============================================================== 812: */ 813: 814: void CL_Init (void); 815: void CL_Drop (void); 816: void CL_Shutdown (void); 817: void CL_Frame (int msec); 818: void Con_Print (char *text); 819: void SCR_BeginLoadingPlaque (void); 820: 821: void SV_Init (void); 822: void SV_Shutdown (char *finalmsg, qboolean reconnect); 823: void SV_Frame (int msec); 824: 825: 826:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.