- Rewrote IWAD detection code to use the ResourceFile classes instead of

reading the WAD directory directly. As a side effect it should now be
  possible to use Zip and 7z for IWADs, too.


SVN r1621 (trunk)
This commit is contained in:
Christoph Oelckers 2009-05-30 09:53:38 +00:00
commit 2effc9b803
12 changed files with 149 additions and 128 deletions

View file

@ -228,18 +228,6 @@ int FWadCollection::AddExternalFile(const char *filename)
//
// [RH] Removed reload hack
//==========================================================================
typedef FResourceFile * (*CheckFunc)(const char *filename, FileReader *file);
FResourceFile *CheckWad(const char *filename, FileReader *file);
FResourceFile *CheckGRP(const char *filename, FileReader *file);
FResourceFile *CheckRFF(const char *filename, FileReader *file);
FResourceFile *CheckPak(const char *filename, FileReader *file);
FResourceFile *CheckZip(const char *filename, FileReader *file);
FResourceFile *Check7Z(const char *filename, FileReader *file);
FResourceFile *CheckLump(const char *filename, FileReader *file);
static CheckFunc funcs[] = { CheckWad, CheckZip, Check7Z, CheckPak, CheckGRP, CheckRFF, CheckLump };
void FWadCollection::AddFile (const char *filename, FileReader *wadinfo)
{
@ -262,48 +250,45 @@ void FWadCollection::AddFile (const char *filename, FileReader *wadinfo)
Printf (" adding %s", filename);
startlump = NumLumps;
for(size_t i = 0; i < countof(funcs); i++)
FResourceFile *resfile = FResourceFile::OpenResourceFile(filename, wadinfo);
if (resfile != NULL)
{
FResourceFile * resfile = funcs[i](filename, wadinfo);
if (resfile != NULL)
DWORD lumpstart = LumpInfo.Size();
resfile->SetFirstLump(lumpstart);
for (DWORD i=0; i < resfile->LumpCount(); i++)
{
DWORD lumpstart = LumpInfo.Size();
FResourceLump *lump = resfile->GetLump(i);
FWadCollection::LumpRecord *lump_p = &LumpInfo[LumpInfo.Reserve(1)];
resfile->SetFirstLump(lumpstart);
for (DWORD i=0; i < resfile->LumpCount(); i++)
{
FResourceLump *lump = resfile->GetLump(i);
FWadCollection::LumpRecord *lump_p = &LumpInfo[LumpInfo.Reserve(1)];
lump_p->lump = lump;
lump_p->wadnum = Files.Size();
}
if (Files.Size() == IWAD_FILENUM && gameinfo.gametype == GAME_Strife && gameinfo.flags & GI_SHAREWARE)
{
resfile->FindStrifeTeaserVoices();
}
Files.Push(resfile);
for (DWORD i=0; i < resfile->LumpCount(); i++)
{
FResourceLump *lump = resfile->GetLump(i);
if (lump->Flags & LUMPF_EMBEDDED)
{
char path[256];
mysnprintf(path, countof(path), "%s:", filename);
char *wadstr = path + strlen(path);
FileReader *embedded = lump->NewReader();
strcpy(wadstr, lump->FullName);
AddFile(wadstr, embedded);
}
}
return;
lump_p->lump = lump;
lump_p->wadnum = Files.Size();
}
if (Files.Size() == IWAD_FILENUM && gameinfo.gametype == GAME_Strife && gameinfo.flags & GI_SHAREWARE)
{
resfile->FindStrifeTeaserVoices();
}
Files.Push(resfile);
for (DWORD i=0; i < resfile->LumpCount(); i++)
{
FResourceLump *lump = resfile->GetLump(i);
if (lump->Flags & LUMPF_EMBEDDED)
{
char path[256];
mysnprintf(path, countof(path), "%s:", filename);
char *wadstr = path + strlen(path);
FileReader *embedded = lump->NewReader();
strcpy(wadstr, lump->FullName);
AddFile(wadstr, embedded);
}
}
return;
}
}