Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-// wad.c
-#include "quakedef.h"
-static int wad_numlumps;
-static lumpinfo_t *wad_lumps;
-static qbyte *wad_base = NULL;
-static mempool_t *wad_mempool = NULL;
+#include "quakedef.h"
+#include "image.h"
+#include "wad.h"
-void SwapPic (qpic_t *pic);
/*
==================
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;
}
+static int wad_numlumps = 0;
+static lumpinfo_t *wad_lumps = NULL;
+static unsigned char *wad_base = NULL;
-
-/*
-====================
-W_LoadWadFile
-====================
-*/
-void W_LoadWadFile (char *filename)
+unsigned char *W_GetLumpName(const char *name)
{
- lumpinfo_t *lump_p;
- wadinfo_t *header;
- unsigned i;
- int infotableofs;
- void *temp;
+ int i;
+ fs_offset_t filesize;
+ lumpinfo_t *lump;
+ char clean[16];
+ wadinfo_t *header;
+ int infotableofs;
- 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);
-
- 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_base)
{
- 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));
+ if ((wad_base = FS_LoadFile ("gfx.wad", cls.permanentmempool, false, &filesize)))
+ {
+ if (memcmp(wad_base, "WAD2", 4))
+ {
+ Con_Print("gfx.wad doesn't have WAD2 id\n");
+ Mem_Free(wad_base);
+ wad_base = NULL;
+ }
+ else
+ {
+ 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);
+ }
+ }
+ }
}
-}
-
-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);
+ return (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;
}
=============================================================================
*/
-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 *file;
+ qfile_t *file;
int position;
int size;
} texwadlump_t;
{
lumpinfo_t *lumps, *lump_p;
wadinfo_t header;
- unsigned i, j;
+ int i, j;
int infotableofs;
- QFile *file;
+ qfile_t *file;
int numlumps;
- COM_FOpenFile (filename, &file, false, 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 (Qread(file, &header, sizeof(wadinfo_t)) != sizeof(wadinfo_t))
- {Con_Printf ("W_LoadTextureWadFile: unable to read wad header");return;}
+ if (FS_Read(file, &header, sizeof(wadinfo_t)) != sizeof(wadinfo_t))
+ {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 (Qseek(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 (FS_Seek (file, infotableofs, SEEK_SET))
+ {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 (Qread(file, lumps, sizeof(lumpinfo_t) * numlumps) != sizeof(lumpinfo_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++)
{
}
-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;
return data;
}
-qbyte *W_GetTexture(char *name)
+unsigned char *W_GetTexture(char *name)
{
char texname[17];
int i, j;
- QFile *file;
+ qfile_t *file;
miptex_t *tex;
- qbyte *data;
+ unsigned char *data;
texname[16] = 0;
W_CleanupName (name, texname);
if (!strcmp(texname, texwadlump[i].name)) // found it
{
file = texwadlump[i].file;
- if (Qseek(file, texwadlump[i].position, SEEK_SET))
- {Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
+ 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 (Qread(file, tex, texwadlump[i].size) < 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);