Split P_LoadLineDefs2 into P_ProcessLinedefsWithSidedefs and P_CompressSidedefs

This commit is contained in:
MascaraSnake 2019-12-28 16:49:56 +01:00
parent 04dcc177ea
commit 06bcb74b37

View file

@ -1807,7 +1807,7 @@ static void P_LoadMapLUT(const virtres_t *virt)
P_CreateBlockMap(); P_CreateBlockMap();
} }
static void P_LoadLineDefs2(void) static void P_ProcessLinedefsWithSidedefs(void)
{ {
size_t i = numlines; size_t i = numlines;
register line_t *ld = lines; register line_t *ld = lines;
@ -1846,67 +1846,69 @@ static void P_LoadLineDefs2(void)
break; break;
} }
} }
}
// Optimize sidedefs static void P_CompressSidedefs(void)
if (M_CheckParm("-compress")) {
side_t *newsides;
size_t numnewsides = 0;
size_t z;
size_t i;
for (i = 0; i < numsides; i++)
{ {
side_t *newsides; size_t j, k;
size_t numnewsides = 0; line_t *ld;
size_t z;
for (i = 0; i < numsides; i++) if (!sides[i].sector)
continue;
for (k = numlines, ld = lines; k--; ld++)
{ {
size_t j, k; if (ld->sidenum[0] == i)
if (sides[i].sector == NULL) ld->sidenum[0] = (UINT16)numnewsides;
if (ld->sidenum[1] == i)
ld->sidenum[1] = (UINT16)numnewsides;
}
for (j = i + 1; j < numsides; j++)
{
if (!sides[j].sector)
continue; continue;
for (k = numlines, ld = lines; k--; ld++) if (!memcmp(&sides[i], &sides[j], sizeof(side_t)))
{ {
if (ld->sidenum[0] == i) // Find the linedefs that belong to this one
ld->sidenum[0] = (UINT16)numnewsides; for (k = numlines, ld = lines; k--; ld++)
if (ld->sidenum[1] == i)
ld->sidenum[1] = (UINT16)numnewsides;
}
for (j = i+1; j < numsides; j++)
{
if (sides[j].sector == NULL)
continue;
if (!memcmp(&sides[i], &sides[j], sizeof(side_t)))
{ {
// Find the linedefs that belong to this one if (ld->sidenum[0] == j)
for (k = numlines, ld = lines; k--; ld++) ld->sidenum[0] = (UINT16)numnewsides;
{
if (ld->sidenum[0] == j)
ld->sidenum[0] = (UINT16)numnewsides;
if (ld->sidenum[1] == j) if (ld->sidenum[1] == j)
ld->sidenum[1] = (UINT16)numnewsides; ld->sidenum[1] = (UINT16)numnewsides;
}
sides[j].sector = NULL; // Flag for deletion
} }
sides[j].sector = NULL; // Flag for deletion
} }
numnewsides++;
} }
numnewsides++;
// We're loading crap into this block anyhow, so no point in zeroing it out.
newsides = Z_Malloc(numnewsides * sizeof(*newsides), PU_LEVEL, NULL);
// Copy the sides to their new block of memory.
for (i = 0, z = 0; i < numsides; i++)
{
if (sides[i].sector != NULL)
M_Memcpy(&newsides[z++], &sides[i], sizeof(side_t));
}
CONS_Debug(DBG_SETUP, "Old sides is %s, new sides is %s\n", sizeu1(numsides), sizeu1(numnewsides));
Z_Free(sides);
sides = newsides;
numsides = numnewsides;
} }
// We're loading crap into this block anyhow, so no point in zeroing it out.
newsides = Z_Malloc(numnewsides*sizeof(*newsides), PU_LEVEL, NULL);
// Copy the sides to their new block of memory.
for (i = 0, z = 0; i < numsides; i++)
{
if (sides[i].sector)
M_Memcpy(&newsides[z++], &sides[i], sizeof(side_t));
}
CONS_Debug(DBG_SETUP, "P_CompressSidedefs: Old sides is %s, new sides is %s\n", sizeu1(numsides), sizeu1(numnewsides));
Z_Free(sides);
sides = newsides;
numsides = numnewsides;
} }
// //
@ -2066,7 +2068,9 @@ static void P_LoadMapFromFile(void)
P_LoadMapBSP(virt); P_LoadMapBSP(virt);
P_LoadMapLUT(virt); P_LoadMapLUT(virt);
P_LoadLineDefs2(); P_ProcessLinedefsWithSidedefs();
if (M_CheckParm("-compress"))
P_CompressSidedefs();
P_GroupLines(); P_GroupLines();
P_MakeMapMD5(virt, &mapmd5); P_MakeMapMD5(virt, &mapmd5);