]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.c
(patch from Elric) BloodBath renamed to Transfusion
[xonotic/darkplaces.git] / common.c
index daa7fbde44efd30ae09aa0758be96ca831178f03..1f38d06ca54ac2c341d9fa3af9683a1ea82bb460 100644 (file)
--- 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<count ; i++)
-                       ((int *)dest)[i] = fill;
-       }
-       else
-               for (i=0 ; i<count ; i++)
-                       ((qbyte *)dest)[i] = fill;
-}
-
-void Q_memcpy (void *dest, void *src, int count)
-{
-       int             i;
-       
-       if (( ( (long)dest | (long)src | count) & 3) == 0 )
-       {
-               count>>=2;
-               for (i=0 ; i<count ; i++)
-                       ((int *)dest)[i] = ((int *)src)[i];
-       }
-       else
-               for (i=0 ; i<count ; i++)
-                       ((qbyte *)dest)[i] = ((qbyte *)src)[i];
-}
-
-int Q_memcmp (void *m1, void *m2, int count)
-{
-       while(count)
-       {
-               count--;
-               if (((qbyte *)m1)[count] != ((qbyte *)m2)[count])
-                       return -1;
-       }
-       return 0;
-}
-
-void Q_strcpy (char *dest, char *src)
-{
-       while (*src)
-       {
-               *dest++ = *src++;
-       }
-       *dest++ = 0;
-}
-
-void Q_strncpy (char *dest, char *src, int count)
-{
-       while (*src && count--)
-       {
-               *dest++ = *src++;
-       }
-       if (count)
-               *dest++ = 0;
-}
-
-int Q_strlen (char *str)
-{
-       int             count;
-       
-       count = 0;
-       while (str[count])
-               count++;
-
-       return count;
-}
-
-char *Q_strrchr(char *s, char c)
-{
-    int len = Q_strlen(s);
-    s += len;
-    while (len--)
-       if (*--s == c) return s;
-    return 0;
-}
-
-void Q_strcat (char *dest, char *src)
-{
-       dest += Q_strlen(dest);
-       Q_strcpy (dest, src);
-}
-
-int Q_strcmp (char *s1, char *s2)
-{
-       while (1)
-       {
-               if (*s1 != *s2)
-                       return -1;              // strings not equal    
-               if (!*s1)
-                       return 0;               // strings are equal
-               s1++;
-               s2++;
-       }
-
-       return -1;
-}
-
-int Q_strncmp (char *s1, char *s2, int count)
-{
-       while (1)
-       {
-               if (!count--)
-                       return 0;
-               if (*s1 != *s2)
-                       return -1;              // strings not equal    
-               if (!*s1)
-                       return 0;               // strings are equal
-               s1++;
-               s2++;
-       }
-
-       return -1;
-}
-*/
 int Q_strncasecmp (char *s1, char *s2, int n)
 {
        int             c1, c2;
@@ -238,8 +114,6 @@ int Q_strncasecmp (char *s1, char *s2, int n)
                }
                if (!c1)
                        return 0;               // strings are equal
-//              s1++;
-//              s2++;
        }
 
        return -1;
@@ -249,141 +123,6 @@ int Q_strcasecmp (char *s1, char *s2)
 {
        return Q_strncasecmp (s1, s2, 99999);
 }
-/*
-int Q_atoi (char *str)
-{
-       int             val;
-       int             sign;
-       int             c;
-
-       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<<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;
-}
-*/
 
 /*
 ============================================================================
@@ -479,11 +218,6 @@ void MSG_WriteChar (sizebuf_t *sb, int c)
 {
        qbyte    *buf;
        
-//#ifdef PARANOID
-//     if (c < -128 || c > 127)
-//             Sys_Error ("MSG_WriteChar: range error");
-//#endif
-
        buf = SZ_GetSpace (sb, 1);
        buf[0] = c;
 }
@@ -492,11 +226,6 @@ void MSG_WriteByte (sizebuf_t *sb, int c)
 {
        qbyte    *buf;
        
-//#ifdef PARANOID
-//     if (c < 0 || c > 255)
-//             Sys_Error ("MSG_WriteByte: range error");
-//#endif
-
        buf = SZ_GetSpace (sb, 1);
        buf[0] = c;
 }
@@ -505,11 +234,6 @@ void MSG_WriteShort (sizebuf_t *sb, int c)
 {
        qbyte    *buf;
 
-//#ifdef PARANOID
-//     if (c < ((short)0x8000) || c > (short)0x7fff)
-//             Sys_Error ("MSG_WriteShort: range error");
-//#endif
-
        buf = SZ_GetSpace (sb, 2);
        buf[0] = c&0xff;
        buf[1] = c>>8;
@@ -558,27 +282,6 @@ void MSG_WriteDPCoord (sizebuf_t *sb, float f)
                MSG_WriteShort (sb, (int)(f - 0.5f));
 }
 
-// used by client
-void MSG_WriteCoord (sizebuf_t *sb, float f)
-{
-       if (dpprotocol == DPPROTOCOL_VERSION2)
-       {
-               if (f >= 0)
-                       MSG_WriteShort (sb, (int)(f + 0.5f));
-               else
-                       MSG_WriteShort (sb, (int)(f - 0.5f));
-       }
-       else if (dpprotocol == DPPROTOCOL_VERSION1)
-               MSG_WriteFloat(sb, f);
-       else
-       {
-               if (f >= 0)
-                       MSG_WriteShort (sb, (int)(f*8.0f + 0.5f));
-               else
-                       MSG_WriteShort (sb, (int)(f*8.0f - 0.5f));
-       }
-}
-
 void MSG_WritePreciseAngle (sizebuf_t *sb, float f)
 {
        if (f >= 0)
@@ -608,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;
@@ -734,7 +398,7 @@ float MSG_ReadDPCoord (void)
 // used by client
 float MSG_ReadCoord (void)
 {
-       if (dpprotocol == DPPROTOCOL_VERSION2)
+       if (dpprotocol == DPPROTOCOL_VERSION2 || dpprotocol == DPPROTOCOL_VERSION3)
                return (signed short) MSG_ReadShort();
        else if (dpprotocol == DPPROTOCOL_VERSION1)
                return MSG_ReadFloat();
@@ -742,23 +406,6 @@ float MSG_ReadCoord (void)
                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);
-}
-*/
-
 
 //===========================================================================
 
@@ -862,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++;
        }
@@ -1066,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");
 }
 
@@ -1147,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;
@@ -1185,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;
@@ -1264,17 +908,6 @@ char    *va(char *format, ...)
 }
 
 
-/// just for debugging
-int     memsearch (qbyte *start, int count, int search)
-{
-       int             i;
-
-       for (i=0 ; i<count ; i++)
-               if (start[i] == search)
-                       return i;
-       return -1;
-}
-
 /*
 =============================================================================
 
@@ -1376,8 +1009,9 @@ void    COM_CreatePath (char *path)
 
        for (ofs = path+1 ; *ofs ; ofs++)
        {
-               if (*ofs == '/' || *ofs == '\\' || *ofs == ':')
-               {       // create the directory
+               if (*ofs == '/' || *ofs == '\\')
+               {
+                       // create the directory
                        save = *ofs;
                        *ofs = 0;
                        Sys_mkdir (path);
@@ -1394,7 +1028,7 @@ COM_WriteFile
 The filename will be prefixed by the current game directory
 ============
 */
-void COM_WriteFile (char *filename, void *data, int len)
+qboolean COM_WriteFile (char *filename, void *data, int len)
 {
        int             handle;
        char    name[MAX_OSPATH];
@@ -1407,13 +1041,14 @@ void COM_WriteFile (char *filename, void *data, int len)
        handle = Sys_FileOpenWrite (name);
        if (handle == -1)
        {
-               Sys_Printf ("COM_WriteFile: failed on %s\n", name);
-               return;
+               Con_Printf ("COM_WriteFile: failed on %s\n", name);
+               return false;
        }
 
-       Con_Printf ("COM_WriteFile: %s\n", name);
+       Con_DPrintf ("COM_WriteFile: %s\n", name);
        Sys_FileWrite (handle, data, len);
        Sys_FileClose (handle);
+       return true;
 }
 
 
@@ -1531,11 +1166,6 @@ int COM_FindFile (char *filename, QFile **file, qboolean quiet, qboolean zip)
 // search through the path, one element at a time
 //
        search = com_searchpaths;
-//     if (proghack)
-//     {       // gross hack to use quake 1 progs with quake 2 maps
-//             if (!strcmp(filename, "progs.dat"))
-//                     search = search->next;
-//     }
 
        for ( ; search ; search = search->next)
        {
@@ -1557,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);
@@ -1685,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);
@@ -1741,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);
 
@@ -1756,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);
 }
 
 /*
@@ -1848,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;
@@ -1891,9 +1516,6 @@ void COM_InitFilesystem (void)
                        com_searchpaths = search;
                }
        }
-
-//     if (COM_CheckParm ("-proghack"))
-//             proghack = true;
 }
 
 int COM_FileExists(char *filename)
@@ -1950,3 +1572,4 @@ void COM_ToUpperString(char *in, char *out)
                        *out++ = *in++;
        }
 }
+