Split P_LoadLineDefs2 into P_ProcessLinedefsWithSidedefs and P_CompressSidedefs

This commit is contained in:
MascaraSnake 2019-12-28 16:49:56 +01:00
parent 21b7507aee
commit 86d1fb73f4

View file

@ -1807,7 +1807,7 @@ static void P_LoadMapLUT(const virtres_t *virt)
P_CreateBlockMap();
}
static void P_LoadLineDefs2(void)
static void P_ProcessLinedefsWithSidedefs(void)
{
size_t i = numlines;
register line_t *ld = lines;
@ -1846,67 +1846,69 @@ static void P_LoadLineDefs2(void)
break;
}
}
}
// Optimize sidedefs
if (M_CheckParm("-compress"))
static void P_CompressSidedefs(void)
{
side_t *newsides;
size_t numnewsides = 0;
size_t z;
size_t i;
for (i = 0; i < numsides; i++)
{
side_t *newsides;
size_t numnewsides = 0;
size_t z;
size_t j, k;
line_t *ld;
for (i = 0; i < numsides; i++)
if (!sides[i].sector)
continue;
for (k = numlines, ld = lines; k--; ld++)
{
size_t j, k;
if (sides[i].sector == NULL)
if (ld->sidenum[0] == i)
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;
for (k = numlines, ld = lines; k--; ld++)
if (!memcmp(&sides[i], &sides[j], sizeof(side_t)))
{
if (ld->sidenum[0] == i)
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 == NULL)
continue;
if (!memcmp(&sides[i], &sides[j], sizeof(side_t)))
// Find the linedefs that belong to this one
for (k = numlines, ld = lines; k--; ld++)
{
// Find the linedefs that belong to this one
for (k = numlines, ld = lines; k--; ld++)
{
if (ld->sidenum[0] == j)
ld->sidenum[0] = (UINT16)numnewsides;
if (ld->sidenum[0] == j)
ld->sidenum[0] = (UINT16)numnewsides;
if (ld->sidenum[1] == j)
ld->sidenum[1] = (UINT16)numnewsides;
}
sides[j].sector = NULL; // Flag for deletion
if (ld->sidenum[1] == j)
ld->sidenum[1] = (UINT16)numnewsides;
}
sides[j].sector = NULL; // Flag for deletion
}
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;
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_LoadMapLUT(virt);
P_LoadLineDefs2();
P_ProcessLinedefsWithSidedefs();
if (M_CheckParm("-compress"))
P_CompressSidedefs();
P_GroupLines();
P_MakeMapMD5(virt, &mapmd5);