]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - wad.c
added DP_QC_TOKENIZEBYSEPARATOR extension
[xonotic/darkplaces.git] / wad.c
diff --git a/wad.c b/wad.c
index 23bb8bcec01af296960cb17534d1b97879e814e0..12978f383a6b8969343bb543c0e3df60cca91c2b 100644 (file)
--- a/wad.c
+++ b/wad.c
@@ -17,11 +17,12 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 */
-// wad.c
+
 
 #include "quakedef.h"
+#include "image.h"
+#include "wad.h"
 
-void SwapPic (qpic_t *pic);
 
 /*
 ==================
@@ -34,7 +35,7 @@ Space padding is so names can be printed nicely in tables.
 Can safely be performed in place.
 ==================
 */
-static void W_CleanupName (char *in, char *out)
+static void W_CleanupName (const char *in, char *out)
 {
        int             i;
        int             c;
@@ -54,37 +55,33 @@ static void W_CleanupName (char *in, char *out)
                out[i] = 0;
 }
 
-void *W_GetLumpName(char *name)
+static int wad_numlumps = 0;
+static lumpinfo_t *wad_lumps = NULL;
+static unsigned char *wad_base = NULL;
+
+unsigned char *W_GetLumpName(const char *name)
 {
        int i;
+       fs_offset_t filesize;
        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;
 
        W_CleanupName (name, clean);
 
-       if (!wad_loaded)
+       if (!wad_base)
        {
-               wad_loaded = true;
-               if ((temp = FS_LoadFile ("gfx.wad", false)))
+               if ((wad_base = FS_LoadFile ("gfx.wad", cls.permanentmempool, false, &filesize)))
                {
-                       if (memcmp(temp, "WAD2", 4))
-                               Con_Printf("gfx.wad doesn't have WAD2 id\n");
+                       if (memcmp(wad_base, "WAD2", 4))
+                       {
+                               Con_Print("gfx.wad doesn't have WAD2 id\n");
+                               Mem_Free(wad_base);
+                               wad_base = NULL;
+                       }
                        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);
@@ -95,8 +92,6 @@ void *W_GetLumpName(char *name)
                                        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));
                                }
                        }
                }
@@ -104,7 +99,7 @@ void *W_GetLumpName(char *name)
 
        for (lump = wad_lumps, i = 0;i < wad_numlumps;i++, lump++)
                if (!strcmp(clean, lump->name))
-                       return (void *)(wad_base + lump->filepos);
+                       return (wad_base + lump->filepos);
 
        if (wad_base)
                Con_DPrintf("W_GetLumpByName(\"%s\"): couldn't find file in gfx.wad\n", name);
@@ -121,15 +116,9 @@ automatic byte swapping
 =============================================================================
 */
 
-void SwapPic (qpic_t *pic)
-{
-       pic->width = LittleLong(pic->width);
-       pic->height = LittleLong(pic->height);
-}
-
 // LordHavoc: added alternate WAD2/WAD3 system for HalfLife texture wads
 #define TEXWAD_MAXIMAGES 16384
-typedef struct
+typedef struct texwadlump_s
 {
        char name[16];
        qfile_t *file;
@@ -153,31 +142,31 @@ void W_LoadTextureWadFile (char *filename, int complain)
        qfile_t                 *file;
        int                             numlumps;
 
-       file = FS_Open (filename, "rb", false);
+       file = FS_Open (filename, "rb", false, false);
        if (!file)
        {
                if (complain)
-                       Con_Printf ("W_LoadTextureWadFile: couldn't find %s", filename);
+                       Con_Printf("W_LoadTextureWadFile: couldn't find %s\n", filename);
                return;
        }
 
        if (FS_Read(file, &header, sizeof(wadinfo_t)) != sizeof(wadinfo_t))
-       {Con_Printf ("W_LoadTextureWadFile: unable to read wad header");return;}
+       {Con_Print("W_LoadTextureWadFile: unable to read wad header\n");return;}
 
        if(memcmp(header.identification, "WAD3", 4))
-       {Con_Printf ("W_LoadTextureWadFile: Wad file %s doesn't have WAD3 id\n",filename);return;}
+       {Con_Printf("W_LoadTextureWadFile: Wad file %s doesn't have WAD3 id\n",filename);return;}
 
        numlumps = LittleLong(header.numlumps);
        if (numlumps < 1 || numlumps > TEXWAD_MAXIMAGES)
-       {Con_Printf ("W_LoadTextureWadFile: invalid number of lumps (%i)\n", numlumps);return;}
+       {Con_Printf("W_LoadTextureWadFile: invalid number of lumps (%i)\n", numlumps);return;}
        infotableofs = LittleLong(header.infotableofs);
        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;}
+       {Con_Print("W_LoadTextureWadFile: unable to seek to lump table\n");return;}
+       if (!(lumps = (lumpinfo_t *)Mem_Alloc(tempmempool, sizeof(lumpinfo_t)*numlumps)))
+       {Con_Print("W_LoadTextureWadFile: unable to allocate temporary memory for lump table\n");return;}
 
-       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;}
+       if (FS_Read(file, lumps, sizeof(lumpinfo_t) * numlumps) != (fs_offset_t)sizeof(lumpinfo_t) * numlumps)
+       {Con_Print("W_LoadTextureWadFile: unable to read lump table\n");return;}
 
        for (i=0, lump_p = lumps ; i<numlumps ; i++,lump_p++)
        {
@@ -204,13 +193,13 @@ void W_LoadTextureWadFile (char *filename, int complain)
 }
 
 
-qbyte *W_ConvertWAD3Texture(miptex_t *tex)
+unsigned char *W_ConvertWAD3Texture(miptex_t *tex)
 {
-       qbyte *in, *data, *out, *pal;
+       unsigned char *in, *data, *out, *pal;
        int d, p;
 
-       in = (qbyte *)((int) tex + tex->offsets[0]);
-       data = out = Mem_Alloc(tempmempool, tex->width * tex->height * 4);
+       in = (unsigned char *)tex + tex->offsets[0];
+       data = out = (unsigned char *)Mem_Alloc(tempmempool, tex->width * tex->height * 4);
        if (!data)
                return NULL;
        image_width = tex->width;
@@ -235,13 +224,13 @@ qbyte *W_ConvertWAD3Texture(miptex_t *tex)
        return data;
 }
 
-qbyte *W_GetTexture(char *name)
+unsigned char *W_GetTexture(char *name)
 {
        char texname[17];
        int i, j;
        qfile_t *file;
        miptex_t *tex;
-       qbyte *data;
+       unsigned char *data;
 
        texname[16] = 0;
        W_CleanupName (name, texname);
@@ -253,13 +242,13 @@ qbyte *W_GetTexture(char *name)
                        {
                                file = texwadlump[i].file;
                                if (FS_Seek(file, texwadlump[i].position, SEEK_SET))
-                               {Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
+                               {Con_Print("W_GetTexture: corrupt WAD3 file\n");return NULL;}
 
-                               tex = Mem_Alloc(tempmempool, texwadlump[i].size);
+                               tex = (miptex_t *)Mem_Alloc(tempmempool, texwadlump[i].size);
                                if (!tex)
                                        return NULL;
-                               if (FS_Read(file, tex, texwadlump[i].size) < (size_t)texwadlump[i].size)
-                               {Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
+                               if (FS_Read(file, tex, texwadlump[i].size) < texwadlump[i].size)
+                               {Con_Print("W_GetTexture: corrupt WAD3 file\n");return NULL;}
 
                                tex->width = LittleLong(tex->width);
                                tex->height = LittleLong(tex->height);