X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=common.c;h=1f38d06ca54ac2c341d9fa3af9683a1ea82bb460;hp=404d73ef52276edd29e04d72f55de03f0c3cbbe6;hb=97776cf6e852959237922f395185c83c5165974f;hpb=ff5947f97081e10c4ce112d4d51c2d1fa14ebba8 diff --git a/common.c b/common.c index 404d73ef..1f38d06c 100644 --- a/common.c +++ b/common.c @@ -44,10 +44,6 @@ mempool_t *pak_mempool; qboolean com_modified; // set true if using non-id files -//qboolean proghack; - -//int static_registered = 1; // only for startup check, then set - qboolean msg_suppress_1 = 0; void COM_InitFilesystem (void); @@ -95,126 +91,6 @@ The file "parms.txt" will be read out of the game directory and appended to the ============================================================================ */ -/* -void Q_memset (void *dest, int fill, int count) -{ - int i; - - if ( (((long)dest | count) & 3) == 0) - { - count >>= 2; - fill = fill | (fill<<8) | (fill<<16) | (fill<<24); - for (i=0 ; i>=2; - for (i=0 ; i= '0' && c <= '9') - val = (val<<4) + c - '0'; - else if (c >= 'a' && c <= 'f') - val = (val<<4) + c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - val = (val<<4) + c - 'A' + 10; - else - return val*sign; - } - } - -// -// check for character -// - if (str[0] == '\'') - { - return sign * str[1]; - } - -// -// assume decimal -// - while (1) - { - c = *str++; - if (c <'0' || c > '9') - return val*sign; - val = val*10 + c - '0'; - } - - return 0; -} - - -float Q_atof (char *str) -{ - double val; - int sign; - int c; - int decimal, total; - - if (*str == '-') - { - sign = -1; - str++; - } - else - sign = 1; - - val = 0; - -// -// check for hex -// - if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X') ) - { - str += 2; - while (1) - { - c = *str++; - if (c >= '0' && c <= '9') - val = (val*16) + c - '0'; - else if (c >= 'a' && c <= 'f') - val = (val*16) + c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - val = (val*16) + c - 'A' + 10; - else - return val*sign; - } - } - -// -// check for character -// - if (str[0] == '\'') - { - return sign * str[1]; - } - -// -// assume decimal -// - decimal = -1; - total = 0; - while (1) - { - c = *str++; - if (c == '.') - { - decimal = total; - continue; - } - if (c <'0' || c > '9') - break; - val = val*10 + c - '0'; - total++; - } - - if (decimal == -1) - return val*sign; - while (total > decimal) - { - val /= 10; - total--; - } - - return val*sign; -} -*/ /* ============================================================================ @@ -404,7 +143,7 @@ float (*LittleFloat) (float l); short ShortSwap (short l) { - byte b1,b2; + qbyte b1,b2; b1 = l&255; b2 = (l>>8)&255; @@ -421,7 +160,7 @@ short ShortNoSwap (short l) int LongSwap (int l) { - byte b1,b2,b3,b4; + qbyte b1,b2,b3,b4; b1 = l&255; b2 = (l>>8)&255; @@ -443,7 +182,7 @@ float FloatSwap (float f) union { float f; - byte b[4]; + qbyte b[4]; } dat1, dat2; @@ -477,38 +216,23 @@ Handles byte ordering and avoids alignment errors void MSG_WriteChar (sizebuf_t *sb, int c) { - byte *buf; + qbyte *buf; -//#ifdef PARANOID -// if (c < -128 || c > 127) -// Sys_Error ("MSG_WriteChar: range error"); -//#endif - buf = SZ_GetSpace (sb, 1); buf[0] = c; } void MSG_WriteByte (sizebuf_t *sb, int c) { - byte *buf; + qbyte *buf; -//#ifdef PARANOID -// if (c < 0 || c > 255) -// Sys_Error ("MSG_WriteByte: range error"); -//#endif - buf = SZ_GetSpace (sb, 1); buf[0] = c; } void MSG_WriteShort (sizebuf_t *sb, int c) { - byte *buf; - -//#ifdef PARANOID -// if (c < ((short)0x8000) || c > (short)0x7fff) -// Sys_Error ("MSG_WriteShort: range error"); -//#endif + qbyte *buf; buf = SZ_GetSpace (sb, 2); buf[0] = c&0xff; @@ -517,7 +241,7 @@ void MSG_WriteShort (sizebuf_t *sb, int c) void MSG_WriteLong (sizebuf_t *sb, int c) { - byte *buf; + qbyte *buf; buf = SZ_GetSpace (sb, 4); buf[0] = c&0xff; @@ -549,27 +273,13 @@ void MSG_WriteString (sizebuf_t *sb, char *s) SZ_Write (sb, s, strlen(s)+1); } -// used by server (always dpprotocol) -// moved to common.h as #define -/* -void MSG_WriteFloatCoord (sizebuf_t *sb, float f) -{ - MSG_WriteFloat(sb, f); -} -*/ - -// used by client -void MSG_WriteCoord (sizebuf_t *sb, float f) +// used by server (always latest dpprotocol) +void MSG_WriteDPCoord (sizebuf_t *sb, float f) { - if (dpprotocol) - MSG_WriteFloat(sb, f); + if (f >= 0) + MSG_WriteShort (sb, (int)(f + 0.5f)); else - { - if (f >= 0) - MSG_WriteShort (sb, (int)(f*8.0f + 0.5f)); - else - MSG_WriteShort (sb, (int)(f*8.0f - 0.5f)); - } + MSG_WriteShort (sb, (int)(f - 0.5f)); } void MSG_WritePreciseAngle (sizebuf_t *sb, float f) @@ -601,45 +311,6 @@ void MSG_BeginReading (void) msg_badread = false; } -/* -// returns -1 and sets msg_badread if no more characters are available -int MSG_ReadChar (void) -{ - int c; - - // LordHavoc: minor optimization - if (msg_readcount >= net_message.cursize) -// if (msg_readcount+1 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = (signed char)net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} - -int MSG_ReadByte (void) -{ - int c; - - // LordHavoc: minor optimization - if (msg_readcount >= net_message.cursize) -// if (msg_readcount+1 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = (unsigned char)net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} -*/ - int MSG_ReadShort (void) { int c; @@ -649,19 +320,19 @@ int MSG_ReadShort (void) msg_badread = true; return -1; } - + c = (short)(net_message.data[msg_readcount] + (net_message.data[msg_readcount+1]<<8)); - + msg_readcount += 2; - + return c; } int MSG_ReadLong (void) { int c; - + if (msg_readcount+4 > net_message.cursize) { msg_badread = true; @@ -672,9 +343,9 @@ int MSG_ReadLong (void) + (net_message.data[msg_readcount+1]<<8) + (net_message.data[msg_readcount+2]<<16) + (net_message.data[msg_readcount+3]<<24); - + msg_readcount += 4; - + return c; } @@ -682,27 +353,27 @@ float MSG_ReadFloat (void) { union { - byte b[4]; + qbyte b[4]; float f; int l; } dat; - + dat.b[0] = net_message.data[msg_readcount]; dat.b[1] = net_message.data[msg_readcount+1]; dat.b[2] = net_message.data[msg_readcount+2]; dat.b[3] = net_message.data[msg_readcount+3]; msg_readcount += 4; - + dat.l = LittleLong (dat.l); - return dat.f; + return dat.f; } char *MSG_ReadString (void) { static char string[2048]; int l,c; - + l = 0; do { @@ -712,47 +383,29 @@ char *MSG_ReadString (void) string[l] = c; l++; } while (l < sizeof(string)-1); - + string[l] = 0; - + return string; } -// used by server (always dpprotocol) -// moved to common.h as #define -/* -float MSG_ReadFloatCoord (void) +// used by server (always latest dpprotocol) +float MSG_ReadDPCoord (void) { - return MSG_ReadFloat(); + return (signed short) MSG_ReadShort(); } -*/ // used by client float MSG_ReadCoord (void) { - if (dpprotocol) + if (dpprotocol == DPPROTOCOL_VERSION2 || dpprotocol == DPPROTOCOL_VERSION3) + return (signed short) MSG_ReadShort(); + else if (dpprotocol == DPPROTOCOL_VERSION1) return MSG_ReadFloat(); else return MSG_ReadShort() * (1.0f/8.0f); } -/* -float MSG_ReadCoord (void) -{ - return MSG_ReadShort() * (1.0f/8.0f); -} - -float MSG_ReadAngle (void) -{ - return MSG_ReadChar() * (360.0f/256.0f); -} - -float MSG_ReadPreciseAngle (void) -{ - return MSG_ReadShort() * (360.0f/65536); -} -*/ - //=========================================================================== @@ -787,7 +440,7 @@ void *SZ_GetSpace (sizebuf_t *buf, int length) if (buf->cursize + length > buf->maxsize) { if (!buf->allowoverflow) - Host_Error ("SZ_GetSpace: overflow without allowoverflow set - use -zone on the commandline for more zone memory, default: 128k (quake original default was 48k)"); + Host_Error ("SZ_GetSpace: overflow without allowoverflow set"); if (length > buf->maxsize) Host_Error ("SZ_GetSpace: %i is > full buffer size", length); @@ -816,9 +469,9 @@ void SZ_Print (sizebuf_t *buf, char *data) // byte * cast to keep VC++ happy if (buf->data[buf->cursize-1]) - memcpy ((byte *)SZ_GetSpace(buf, len),data,len); // no trailing 0 + memcpy ((qbyte *)SZ_GetSpace(buf, len),data,len); // no trailing 0 else - memcpy ((byte *)SZ_GetSpace(buf, len-1)-1,data,len); // write over trailing 0 + memcpy ((qbyte *)SZ_GetSpace(buf, len-1)-1,data,len); // write over trailing 0 } @@ -856,8 +509,8 @@ void COM_StripExtension (char *in, char *out) while (*in) { if (*in == '.') - last = in; - if ((*in == '/') || (*in == '\\') || (*in == ':')) + last = out; + else if (*in == '/' || *in == '\\' || *in == ':') last = NULL; *out++ = *in++; } @@ -1060,26 +713,16 @@ void COM_CheckRegistered (void) { Cvar_Set ("cmdline", com_cmdline); -// static_registered = 0; - if (!Sys_FileTime("gfx/pop.lmp")) { if (com_modified) Con_Printf ("Playing shareware version, with modification.\nwarning: most mods require full quake data.\n"); else Con_Printf ("Playing shareware version.\n"); -//#if WINDED -// Sys_Error ("This dedicated server requires a full registered copy of Quake"); -//#endif -// Con_Printf ("Playing shareware version.\n"); -// if (com_modified) -// Sys_Error ("You must have the registered version to use modified games"); return; } -// Cvar_Set ("cmdline", com_cmdline); Cvar_Set ("registered", "1"); -// static_registered = 1; Con_Printf ("Playing registered version.\n"); } @@ -1141,14 +784,18 @@ void COM_InitArgv (int argc, char **argv) largv[com_argc] = argvdummy; com_argv = largv; -#if ZYMOTIC +#if TRANSFUSION + gamemode = GAME_TRANSFUSION; +#elif ZYMOTIC gamemode = GAME_ZYMOTIC; #elif FIENDARENA gamemode = GAME_FIENDARENA; #elif NEHAHRA gamemode = GAME_NEHAHRA; #else - if (COM_CheckParm ("-zymotic")) + if (COM_CheckParm ("-transfusion")) + gamemode = GAME_TRANSFUSION; + else if (COM_CheckParm ("-zymotic")) gamemode = GAME_ZYMOTIC; else if (COM_CheckParm ("-fiendarena")) gamemode = GAME_FIENDARENA; @@ -1179,6 +826,9 @@ void COM_InitArgv (int argc, char **argv) case GAME_ZYMOTIC: gamename = "Zymotic"; break; + case GAME_TRANSFUSION: + gamename = "Transfusion"; + break; default: Sys_Error("COM_InitArgv: unknown gamemode %i\n", gamemode); break; @@ -1196,7 +846,7 @@ COM_Init void COM_Init (void) { #if !defined(ENDIAN_LITTLE) && !defined(ENDIAN_BIG) - byte swaptest[2] = {1,0}; + qbyte swaptest[2] = {1,0}; // set the byte swapping variables in a portable manner if ( *(short *)swaptest == 1) @@ -1258,17 +908,6 @@ char *va(char *format, ...) } -/// just for debugging -int memsearch (byte *start, int count, int search) -{ - int i; - - for (i=0 ; inext; -// } for ( ; search ; search = search->next) { @@ -1551,13 +1187,6 @@ int COM_FindFile (char *filename, QFile **file, qboolean quiet, qboolean zip) } else { - // check a file in the directory tree -// if (!static_registered) -// { // if not a registered version, don't ever go beyond base -// if ( strchr (filename, '/') || strchr (filename,'\\')) -// continue; -// } - sprintf (netpath, "%s/%s",search->filename, filename); findtime = Sys_FileTime (netpath); @@ -1624,14 +1253,14 @@ Filename are reletive to the quake directory. Always appends a 0 byte. ============ */ -byte *loadbuf; -int loadsize; -byte *COM_LoadFile (char *path, qboolean quiet) +qbyte *loadbuf; +int loadsize; +qbyte *COM_LoadFile (char *path, qboolean quiet) { - QFile *h; - byte *buf; - char base[1024]; - int len; + QFile *h; + qbyte *buf; + char base[1024]; + int len; buf = NULL; // quiet compiler warning loadsize = 0; @@ -1650,7 +1279,7 @@ byte *COM_LoadFile (char *path, qboolean quiet) if (!buf) Sys_Error ("COM_LoadFile: not enough available memory for %s (size %i)", path, len); - ((byte *)buf)[len] = 0; + ((qbyte *)buf)[len] = 0; Qread (h, buf, len); Qclose (h); @@ -1679,10 +1308,8 @@ pack_t *COM_LoadPackFile (char *packfile) dpackfile_t *info; if (Sys_FileOpenRead (packfile, &packhandle) == -1) - { - //Con_Printf ("Couldn't open %s\n", packfile); return NULL; - } + Sys_FileRead (packhandle, (void *)&header, sizeof(header)); if (memcmp(header.id, "PACK", 4)) Sys_Error ("%s is not a packfile", packfile); @@ -1735,10 +1362,10 @@ then loads and adds pak1.pak pak2.pak ... */ void COM_AddGameDirectory (char *dir) { - int i; - searchpath_t *search; - pack_t *pak; - char pakfile[MAX_OSPATH]; + stringlist_t *list, *current; + searchpath_t *search; + pack_t *pak; + char pakfile[MAX_OSPATH]; strcpy (com_gamedir, dir); @@ -1750,25 +1377,26 @@ void COM_AddGameDirectory (char *dir) search->next = com_searchpaths; com_searchpaths = search; -// -// add any pak files in the format pak0.pak pak1.pak, ... -// - for (i=0 ; ; i++) + // add any paks in the directory + list = listdirectory(dir); + for (current = list;current;current = current->next) { - sprintf (pakfile, "%s/pak%i.pak", dir, i); - pak = COM_LoadPackFile (pakfile); - if (!pak) - break; - search = Mem_Alloc(pak_mempool, sizeof(searchpath_t)); - search->pack = pak; - search->next = com_searchpaths; - com_searchpaths = search; + if (matchpattern(current->text, "*.pak")) + { + sprintf (pakfile, "%s/%s", dir, current->text); + pak = COM_LoadPackFile (pakfile); + if (pak) + { + search = Mem_Alloc(pak_mempool, sizeof(searchpath_t)); + search->pack = pak; + search->next = com_searchpaths; + com_searchpaths = search; + } + else + Con_Printf("unable to load pak \"%s\"\n", pakfile); + } } - -// -// add the contents of the parms.txt file to the end of the command line -// - + freedirectory(list); } /* @@ -1842,6 +1470,9 @@ void COM_InitFilesystem (void) case GAME_ZYMOTIC: COM_AddGameDirectory (va("%s/zymotic", basedir) ); break; + case GAME_TRANSFUSION: + COM_AddGameDirectory (va("%s/transfusion", basedir) ); + break; default: Sys_Error("COM_InitFilesystem: unknown gamemode %i\n", gamemode); break; @@ -1885,9 +1516,6 @@ void COM_InitFilesystem (void) com_searchpaths = search; } } - -// if (COM_CheckParm ("-proghack")) -// proghack = true; } int COM_FileExists(char *filename) @@ -1944,3 +1572,4 @@ void COM_ToUpperString(char *in, char *out) *out++ = *in++; } } +