Fix two issues with GL nodes handling

Fix inability to load GL nodes for maps with names longer than 5 characters.
Fix inability to load GL nodes from external GWA files.
This commit is contained in:
alexey.lysiuk 2014-03-15 13:17:22 +02:00
parent 40771d22a5
commit 6aa56202b6

View file

@ -724,9 +724,10 @@ static bool DoLoadGLNodes(FileReader ** lumps)
static bool MatchHeader(const char * label, const char * hdata) static bool MatchHeader(const char * label, const char * hdata)
{ {
if (!memcmp(hdata, "LEVEL=", 6) == 0) if (memcmp(hdata, "LEVEL=", 6) == 0)
{ {
size_t labellen = strlen(label); size_t labellen = strlen(label);
labellen = MIN(size_t(8), labellen);
if (strnicmp(hdata+6, label, labellen)==0 && if (strnicmp(hdata+6, label, labellen)==0 &&
(hdata[6+labellen]==0xa || hdata[6+labellen]==0xd)) (hdata[6+labellen]==0xa || hdata[6+labellen]==0xd))
@ -771,7 +772,7 @@ static int FindGLNodesInWAD(int labellump)
if (Wads.GetLumpFile(lump)==wadfile) if (Wads.GetLumpFile(lump)==wadfile)
{ {
FMemLump mem = Wads.ReadLump(lump); FMemLump mem = Wads.ReadLump(lump);
if (MatchHeader(Wads.GetLumpFullName(labellump), (const char *)mem.GetMem())) return true; if (MatchHeader(Wads.GetLumpFullName(labellump), (const char *)mem.GetMem())) return lump;
} }
} }
} }
@ -781,7 +782,7 @@ static int FindGLNodesInWAD(int labellump)
//=========================================================================== //===========================================================================
// //
// FindGLNodesInWAD // FindGLNodesInFile
// //
// Looks for GL nodes in the same WAD as the level itself // Looks for GL nodes in the same WAD as the level itself
// Function returns the lump number within the file. Returns -1 if the input // Function returns the lump number within the file. Returns -1 if the input
@ -929,13 +930,13 @@ bool P_LoadGLNodes(MapData * map)
result=true; result=true;
for(unsigned i=0; i<4;i++) for(unsigned i=0; i<4;i++)
{ {
if (strnicmp(f_gwa->GetLump(i)->Name, check[i], 8)) if (strnicmp(f_gwa->GetLump(i+1)->Name, check[i], 8))
{ {
result=false; result=false;
break; break;
} }
else else
gwalumps[i] = f_gwa->GetLump(i)->NewReader(); gwalumps[i] = f_gwa->GetLump(i+1)->NewReader();
} }
if (result) result = DoLoadGLNodes(gwalumps); if (result) result = DoLoadGLNodes(gwalumps);
} }