#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);
/*
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", tempmempool, false)))
+ {
+ if (memcmp(temp, "WAD2", 4))
+ Con_Print("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;
}
typedef struct
{
char name[16];
- QFile *file;
+ qfile_t *file;
int position;
int size;
} texwadlump_t;
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)
- 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 (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)))
- {Con_Printf ("W_LoadTextureWadFile: unable to allocate temporary memory for lump table");return;}
+ {Con_Print("W_LoadTextureWadFile: unable to allocate temporary memory for lump table\n");return;}
- if (Qread(file, lumps, sizeof(lumpinfo_t) * numlumps) != (int)sizeof(lumpinfo_t) * numlumps)
- {Con_Printf ("W_LoadTextureWadFile: unable to read lump table");return;}
+ if (FS_Read(file, lumps, sizeof(lumpinfo_t) * numlumps) != sizeof(lumpinfo_t) * (size_t)numlumps)
+ {Con_Print("W_LoadTextureWadFile: unable to read lump table\n");return;}
for (i=0, lump_p = lumps ; i<numlumps ; i++,lump_p++)
{
{
char texname[17];
int i, j;
- QFile *file;
+ qfile_t *file;
miptex_t *tex;
qbyte *data;
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);
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) < (size_t)texwadlump[i].size)
+ {Con_Print("W_GetTexture: corrupt WAD3 file\n");return NULL;}
tex->width = LittleLong(tex->width);
tex->height = LittleLong(tex->height);