Make P_LoadMapData() a return a boolean as well as P_LoadMapFromFile(); if they fail to load, they return false, and thus P_SetupLevel() will also return false.

TextmapCount() also now returns false if brackets are left open inside a textmap.
This commit is contained in:
Nev3r 2019-12-30 14:47:48 +01:00
parent f9d6e26558
commit 4a5498473c

View file

@ -1261,7 +1261,7 @@ static boolean TextmapCount(UINT8 *data, size_t size)
if (!fastcmp(tkn, "namespace")) if (!fastcmp(tkn, "namespace"))
{ {
Z_Free(tkn); Z_Free(tkn);
CONS_Alert(CONS_WARNING, "No namespace at beginning of lump!\n"); CONS_Alert(CONS_ERROR, "No namespace at beginning of lump!\n");
return false; return false;
} }
Z_Free(tkn); Z_Free(tkn);
@ -1302,6 +1302,13 @@ static boolean TextmapCount(UINT8 *data, size_t size)
} }
Z_Free(tkn); Z_Free(tkn);
if (brackets)
{
CONS_Alert(CONS_ERROR, "Unclosed brackets detected in textmap lump.\n");
return false;
}
return true; return true;
} }
@ -1594,14 +1601,17 @@ static void P_LoadTextmap (void)
} }
} }
static void P_LoadMapData(const virtres_t *virt) static boolean P_LoadMapData(const virtres_t *virt)
{ {
virtlump_t *virtvertexes = NULL, *virtsectors = NULL, *virtsidedefs = NULL, *virtlinedefs = NULL, *virtthings = NULL; virtlump_t *virtvertexes = NULL, *virtsectors = NULL, *virtsidedefs = NULL, *virtlinedefs = NULL, *virtthings = NULL;
virtlump_t *textmap = vres_Find(virt, "TEXTMAP"); virtlump_t *textmap = vres_Find(virt, "TEXTMAP");
// Count map data. // Count map data.
if (textmap) // Count how many entries for each type we got in textmap. if (textmap) // Count how many entries for each type we got in textmap.
TextmapCount(textmap->data, textmap->size); {
if (!TextmapCount(textmap->data, textmap->size))
return false;
}
else else
{ {
virtthings = vres_Find(virt, "THINGS"); virtthings = vres_Find(virt, "THINGS");
@ -1684,6 +1694,8 @@ static void P_LoadMapData(const virtres_t *virt)
memcpy(spawnsectors, sectors, numsectors * sizeof (*sectors)); memcpy(spawnsectors, sectors, numsectors * sizeof (*sectors));
memcpy(spawnlines, lines, numlines * sizeof (*lines)); memcpy(spawnlines, lines, numlines * sizeof (*lines));
memcpy(spawnsides, sides, numsides * sizeof (*sides)); memcpy(spawnsides, sides, numsides * sizeof (*sides));
return true;
} }
static void P_InitializeSubsector(subsector_t *ss) static void P_InitializeSubsector(subsector_t *ss)
@ -2685,11 +2697,12 @@ static void P_MakeMapMD5(virtres_t *virt, void *dest)
M_Memcpy(dest, &resmd5, 16); M_Memcpy(dest, &resmd5, 16);
} }
static void P_LoadMapFromFile(void) static boolean P_LoadMapFromFile(void)
{ {
virtres_t *virt = vres_GetMap(lastloadedmaplumpnum); virtres_t *virt = vres_GetMap(lastloadedmaplumpnum);
P_LoadMapData(virt); if (!P_LoadMapData(virt))
return false;
P_LoadMapBSP(virt); P_LoadMapBSP(virt);
P_LoadMapLUT(virt); P_LoadMapLUT(virt);
@ -2701,6 +2714,7 @@ static void P_LoadMapFromFile(void)
P_MakeMapMD5(virt, &mapmd5); P_MakeMapMD5(virt, &mapmd5);
vres_Free(virt); vres_Free(virt);
return true;
} }
// //
@ -3549,8 +3563,8 @@ boolean P_LoadLevel(boolean fromnetsave)
P_MapStart(); P_MapStart();
if (lastloadedmaplumpnum) if (!P_LoadMapFromFile())
P_LoadMapFromFile(); return false;
// init gravity, tag lists, // init gravity, tag lists,
// anything that P_ResetDynamicSlopes/P_LoadThings needs to know // anything that P_ResetDynamicSlopes/P_LoadThings needs to know