- 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:
parent
9c4cbedc26
commit
2effc9b803
12 changed files with 149 additions and 128 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue