mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 23:01:50 +00:00
- fixed: The WAD manager's hash chains could not handle more than 65535 lumps.
- Reinitializing the WAD manager will now delete all data. - Preparation for GAMEINFO: zdoom.pk3 will be opened separately before checking the IWAD so that the internal GAMEINFOs can be externalized, too. SVN r1494 (trunk)
This commit is contained in:
parent
273e4a946d
commit
81f834e3f4
3 changed files with 23 additions and 11 deletions
|
@ -2239,6 +2239,13 @@ void D_DoomMain (void)
|
|||
I_FatalError ("Cannot find " BASEWAD);
|
||||
}
|
||||
|
||||
// Load zdoom.pk3 alone so that we can get access to the internal gameinfos before
|
||||
// the IWAD is known.
|
||||
wadlist_t *basewad = (wadlist_t*)M_Malloc(sizeof(wadlist_t) + strlen(wad));
|
||||
strcpy(basewad->name, wad);
|
||||
basewad->next = NULL;
|
||||
Wads.InitMultipleFiles(&basewad);
|
||||
|
||||
iwad_info = &IWADInfos[IdentifyVersion(wad)];
|
||||
I_SetIWADInfo(iwad_info);
|
||||
GameConfig->DoGameSetup (GameNames[gameinfo.gametype]);
|
||||
|
|
|
@ -164,6 +164,11 @@ FWadCollection::FWadCollection ()
|
|||
}
|
||||
|
||||
FWadCollection::~FWadCollection ()
|
||||
{
|
||||
DeleteAll();
|
||||
}
|
||||
|
||||
void FWadCollection::DeleteAll ()
|
||||
{
|
||||
if (FirstLumpIndex != NULL)
|
||||
{
|
||||
|
@ -193,6 +198,7 @@ FWadCollection::~FWadCollection ()
|
|||
}
|
||||
}
|
||||
LumpInfo.Clear();
|
||||
NumLumps = 0;
|
||||
|
||||
for (DWORD i = 0; i < Wads.Size(); ++i)
|
||||
{
|
||||
|
@ -217,10 +223,8 @@ void FWadCollection::InitMultipleFiles (wadlist_t **filenames)
|
|||
int numfiles;
|
||||
|
||||
// open all the files, load headers, and count lumps
|
||||
DeleteAll();
|
||||
numfiles = 0;
|
||||
Wads.Clear();
|
||||
LumpInfo.Clear();
|
||||
NumLumps = 0;
|
||||
|
||||
while (*filenames)
|
||||
{
|
||||
|
@ -260,10 +264,10 @@ void FWadCollection::InitMultipleFiles (wadlist_t **filenames)
|
|||
MergeLumps ("HI_START", "HI_END", ns_hires);
|
||||
|
||||
// [RH] Set up hash table
|
||||
FirstLumpIndex = new WORD[NumLumps];
|
||||
NextLumpIndex = new WORD[NumLumps];
|
||||
FirstLumpIndex_FullName = new WORD[NumLumps];
|
||||
NextLumpIndex_FullName = new WORD[NumLumps];
|
||||
FirstLumpIndex = new DWORD[NumLumps];
|
||||
NextLumpIndex = new DWORD[NumLumps];
|
||||
FirstLumpIndex_FullName = new DWORD[NumLumps];
|
||||
NextLumpIndex_FullName = new DWORD[NumLumps];
|
||||
InitHashChains ();
|
||||
}
|
||||
|
||||
|
|
|
@ -224,11 +224,11 @@ protected:
|
|||
class WadFileRecord;
|
||||
struct LumpRecord;
|
||||
|
||||
WORD *FirstLumpIndex; // [RH] Hashing stuff moved out of lumpinfo structure
|
||||
WORD *NextLumpIndex;
|
||||
DWORD *FirstLumpIndex; // [RH] Hashing stuff moved out of lumpinfo structure
|
||||
DWORD *NextLumpIndex;
|
||||
|
||||
WORD *FirstLumpIndex_FullName; // The same information for fully qualified paths from .zips
|
||||
WORD *NextLumpIndex_FullName;
|
||||
DWORD *FirstLumpIndex_FullName; // The same information for fully qualified paths from .zips
|
||||
DWORD *NextLumpIndex_FullName;
|
||||
|
||||
|
||||
TArray<LumpRecord> LumpInfo;
|
||||
|
@ -249,6 +249,7 @@ private:
|
|||
void ScanForFlatHack (int startlump);
|
||||
void RenameSprites (int startlump);
|
||||
void SetLumpAddress(LumpRecord *l);
|
||||
void DeleteAll();
|
||||
};
|
||||
|
||||
extern FWadCollection Wads;
|
||||
|
|
Loading…
Reference in a new issue