fixed extra directory issues

This commit is contained in:
aap 2020-04-21 13:56:33 +02:00
parent 9c2fd41bce
commit 959f84ff95
3 changed files with 20 additions and 1 deletions

View file

@ -41,9 +41,23 @@ void
CDirectory::AddItem(const DirectoryInfo &dirinfo)
{
assert(numEntries < maxEntries);
#ifdef FIX_BUGS
// don't add if already exists
uint32 offset, size;
if(FindItem(dirinfo.name, offset, size))
return;
#endif
entries[numEntries++] = dirinfo;
}
void
CDirectory::AddItem(const DirectoryInfo &dirinfo, int32 imgId)
{
DirectoryInfo di = dirinfo;
di.offset |= imgId<<24;
AddItem(di);
}
bool
CDirectory::FindItem(const char *name, uint32 &offset, uint32 &size)
{

View file

@ -18,5 +18,6 @@ public:
void ReadDirFile(const char *filename);
bool WriteDirFile(const char *filename);
void AddItem(const DirectoryInfo &dirinfo);
void AddItem(const DirectoryInfo &dirinfo, int32 imgId);
bool FindItem(const char *name, uint32 &offset, uint32 &size);
};

View file

@ -369,8 +369,12 @@ CStreaming::LoadCdDirectory(const char *dirname, int n)
lastID = modelId;
}
}else{
// BUG: doesn't remember which cdimage this was in
#ifdef FIX_BUGS
// remember which cdimage this came from
ms_pExtraObjectsDir->AddItem(direntry, n);
#else
ms_pExtraObjectsDir->AddItem(direntry);
#endif
lastID = -1;
}
}else if(!CGeneral::faststrcmp(dot+1, "TXD") || !CGeneral::faststrcmp(dot+1, "txd")){