#include "wad.h"
-void SwapPic (qpic_t *pic);
-
-
/*
==================
W_CleanupName
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;
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", tempmempool, false)))
+ if ((wad_base = FS_LoadFile ("gfx.wad", cls.permanentmempool, false, &filesize)))
{
- if (memcmp(temp, "WAD2", 4))
+ 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", 0, NULL);
- 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);
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));
}
}
}
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);
=============================================================================
*/
-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;
qfile_t *file;
int numlumps;
- file = FS_Open (filename, "rb", false);
+ file = FS_Open (filename, "rb", false, false);
if (!file)
{
if (complain)
infotableofs = LittleLong(header.infotableofs);
if (FS_Seek (file, infotableofs, SEEK_SET))
{Con_Print("W_LoadTextureWadFile: unable to seek to lump table\n");return;}
- if (!(lumps = Mem_Alloc(tempmempool, sizeof(lumpinfo_t)*numlumps)))
+ 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)
+ 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++)
}
-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 *)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;
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);
if (FS_Seek(file, texwadlump[i].position, SEEK_SET))
{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)
+ 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);