]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - wad.c
cleaned up R_RenderView setup code a bit, and shuffled SCR_CalcRefdef stuff to SCR_Up...
[xonotic/darkplaces.git] / wad.c
diff --git a/wad.c b/wad.c
index 755ae5e6662319245c3c805fb9f33007eecbcabe..23bb8bcec01af296960cb17534d1b97879e814e0 100644 (file)
--- a/wad.c
+++ b/wad.c
@@ -21,11 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "quakedef.h"
 
-static int                     wad_numlumps;
-static lumpinfo_t      *wad_lumps;
-static qbyte                   *wad_base = NULL;
-static mempool_t       *wad_mempool = NULL;
-
 void SwapPic (qpic_t *pic);
 
 /*
@@ -59,64 +54,62 @@ static void W_CleanupName (char *in, char *out)
                out[i] = 0;
 }
 
-
-
-/*
-====================
-W_LoadWadFile
-====================
-*/
-void W_LoadWadFile (char *filename)
+void *W_GetLumpName(char *name)
 {
-       lumpinfo_t              *lump_p;
-       wadinfo_t               *header;
-       int                             i;
-       int                             infotableofs;
-       void                    *temp;
-
-       temp = COM_LoadFile (filename, false);
-       if (!temp)
-               Sys_Error ("W_LoadWadFile: couldn't load %s", filename);
-
-       if (wad_mempool)
-               Mem_FreePool(&wad_mempool);
-       wad_mempool = Mem_AllocPool(filename);
-       wad_base = Mem_Alloc(wad_mempool, loadsize);
-
-       memcpy(wad_base, temp, loadsize);
-       Mem_Free(temp);
-
-       header = (wadinfo_t *)wad_base;
-
-       if (memcmp(header->identification, "WAD2", 4))
-               Sys_Error ("Wad file %s doesn't have WAD2 id\n",filename);
+       int i;
+       lumpinfo_t *lump;
+       char clean[16];
+       wadinfo_t *header;
+       int infotableofs;
+       void *temp;
+       static int wad_loaded = false;
+       static int wad_numlumps = 0;
+       static lumpinfo_t *wad_lumps = NULL;
+       static qbyte *wad_base = NULL;
+       static mempool_t *wad_mempool = NULL;
 
-       wad_numlumps = LittleLong(header->numlumps);
-       infotableofs = LittleLong(header->infotableofs);
-       wad_lumps = (lumpinfo_t *)(wad_base + infotableofs);
+       W_CleanupName (name, clean);
 
-       for (i=0, lump_p = wad_lumps ; i<wad_numlumps ; i++,lump_p++)
+       if (!wad_loaded)
        {
-               lump_p->filepos = LittleLong(lump_p->filepos);
-               lump_p->size = LittleLong(lump_p->size);
-               W_CleanupName (lump_p->name, lump_p->name);
-               if (lump_p->type == TYP_QPIC)
-                       SwapPic ( (qpic_t *)(wad_base + lump_p->filepos));
+               wad_loaded = true;
+               if ((temp = FS_LoadFile ("gfx.wad", false)))
+               {
+                       if (memcmp(temp, "WAD2", 4))
+                               Con_Printf("gfx.wad doesn't have WAD2 id\n");
+                       else
+                       {
+                               wad_mempool = Mem_AllocPool("gfx.wad");
+                               wad_base = Mem_Alloc(wad_mempool, fs_filesize);
+
+                               memcpy(wad_base, temp, fs_filesize);
+                               Mem_Free(temp);
+
+                               header = (wadinfo_t *)wad_base;
+                               wad_numlumps = LittleLong(header->numlumps);
+                               infotableofs = LittleLong(header->infotableofs);
+                               wad_lumps = (lumpinfo_t *)(wad_base + infotableofs);
+
+                               for (i=0, lump = wad_lumps ; i<wad_numlumps ; i++,lump++)
+                               {
+                                       lump->filepos = LittleLong(lump->filepos);
+                                       lump->size = LittleLong(lump->size);
+                                       W_CleanupName (lump->name, lump->name);
+                                       if (lump->type == TYP_QPIC)
+                                               SwapPic ( (qpic_t *)(wad_base + lump->filepos));
+                               }
+                       }
+               }
        }
-}
-
-void *W_GetLumpName (char *name)
-{
-       int             i;
-       lumpinfo_t      *lump;
-       char    clean[16];
-
-       W_CleanupName (name, clean);
 
        for (lump = wad_lumps, i = 0;i < wad_numlumps;i++, lump++)
                if (!strcmp(clean, lump->name))
                        return (void *)(wad_base + lump->filepos);
 
+       if (wad_base)
+               Con_DPrintf("W_GetLumpByName(\"%s\"): couldn't find file in gfx.wad\n", name);
+       else
+               Con_DPrintf("W_GetLumpByName(\"%s\"): couldn't load gfx.wad\n", name);
        return NULL;
 }
 
@@ -139,7 +132,7 @@ void SwapPic (qpic_t *pic)
 typedef struct
 {
        char name[16];
-       QFile *file;
+       qfile_t *file;
        int position;
        int size;
 } texwadlump_t;
@@ -157,10 +150,10 @@ void W_LoadTextureWadFile (char *filename, int complain)
        wadinfo_t               header;
        int                             i, j;
        int                             infotableofs;
-       QFile                   *file;
+       qfile_t                 *file;
        int                             numlumps;
 
-       COM_FOpenFile (filename, &file, false, false);
+       file = FS_Open (filename, "rb", false);
        if (!file)
        {
                if (complain)
@@ -168,7 +161,7 @@ void W_LoadTextureWadFile (char *filename, int complain)
                return;
        }
 
-       if (Qread(file, &header, sizeof(wadinfo_t)) != sizeof(wadinfo_t))
+       if (FS_Read(file, &header, sizeof(wadinfo_t)) != sizeof(wadinfo_t))
        {Con_Printf ("W_LoadTextureWadFile: unable to read wad header");return;}
 
        if(memcmp(header.identification, "WAD3", 4))
@@ -178,12 +171,12 @@ void W_LoadTextureWadFile (char *filename, int complain)
        if (numlumps < 1 || numlumps > TEXWAD_MAXIMAGES)
        {Con_Printf ("W_LoadTextureWadFile: invalid number of lumps (%i)\n", numlumps);return;}
        infotableofs = LittleLong(header.infotableofs);
-       if (Qseek(file, infotableofs, SEEK_SET))
+       if (FS_Seek (file, infotableofs, SEEK_SET))
        {Con_Printf ("W_LoadTextureWadFile: unable to seek to lump table");return;}
        if (!(lumps = Mem_Alloc(tempmempool, sizeof(lumpinfo_t)*numlumps)))
        {Con_Printf ("W_LoadTextureWadFile: unable to allocate temporary memory for lump table");return;}
 
-       if (Qread(file, lumps, sizeof(lumpinfo_t) * numlumps) != (int)sizeof(lumpinfo_t) * numlumps)
+       if (FS_Read(file, lumps, sizeof(lumpinfo_t) * numlumps) != sizeof(lumpinfo_t) * (size_t)numlumps)
        {Con_Printf ("W_LoadTextureWadFile: unable to read lump table");return;}
 
        for (i=0, lump_p = lumps ; i<numlumps ; i++,lump_p++)
@@ -246,7 +239,7 @@ qbyte *W_GetTexture(char *name)
 {
        char texname[17];
        int i, j;
-       QFile *file;
+       qfile_t *file;
        miptex_t *tex;
        qbyte *data;
 
@@ -259,13 +252,13 @@ qbyte *W_GetTexture(char *name)
                        if (!strcmp(texname, texwadlump[i].name)) // found it
                        {
                                file = texwadlump[i].file;
-                               if (Qseek(file, texwadlump[i].position, SEEK_SET))
+                               if (FS_Seek(file, texwadlump[i].position, SEEK_SET))
                                {Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
 
                                tex = Mem_Alloc(tempmempool, texwadlump[i].size);
                                if (!tex)
                                        return NULL;
-                               if (Qread(file, tex, texwadlump[i].size) < texwadlump[i].size)
+                               if (FS_Read(file, tex, texwadlump[i].size) < (size_t)texwadlump[i].size)
                                {Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
 
                                tex->width = LittleLong(tex->width);