From c287b86fabf7098f19eea92d717dd289b1744cff Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sun, 29 Dec 2019 19:04:50 +0100
Subject: [PATCH] Get rid of duplicated code in the extended seg parsing

---
 src/p_setup.c | 42 +++++-------------------------------------
 1 file changed, 5 insertions(+), 37 deletions(-)

diff --git a/src/p_setup.c b/src/p_setup.c
index bd68d72cc..c11f216b1 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -1619,6 +1619,7 @@ static void P_LoadExtendedBSP(UINT8 *data, nodetype_t nodetype)
 		switch (nodetype)
 		{
 		case NT_XGLN:
+		case NT_XGL3:
 			for (m = 0; m < subsectors[i].numlines; m++, k++)
 			{
 				UINT16 linenum;
@@ -1630,44 +1631,11 @@ static void P_LoadExtendedBSP(UINT8 *data, nodetype_t nodetype)
 				else
 					segs[k - 1].v2 = segs[k].v1;
 				data += 4; // partner; can be ignored by software renderer;
+				if (nodetype == NT_XGL3)
+					data += 2; // Line number is 32-bit in XGL3, but we're limited to 16 bits.
 				linenum = READUINT16(data);
-				if (linenum == 0xFFFF)
-				{
-					segs[k].glseg = true;
-					segs[k].linedef = NULL;
-				}
-				else
-				{
-					segs[k].glseg = false;
-					segs[k].linedef = &lines[linenum];
-				}
-				segs[k].side = READUINT8(data);
-			}
-			break;
-
-		case NT_XGL3:
-			for (m = 0; m < subsectors[i].numlines; m++, k++)
-			{
-				UINT32 linenum;
-				UINT32 vert;
-				vert = READUINT32(data);
-				segs[k].v1 = &vertexes[vert];
-				if (m == 0)
-					segs[k + subsectors[i].numlines - 1].v2 = &vertexes[vert];
-				else
-					segs[k - 1].v2 = segs[k].v1;
-				data += 4; // partner; can be ignored by software renderer;
-				linenum = READUINT32(data);
-				if (linenum == 0xFFFFFFFF)
-				{
-					segs[k].glseg = true;
-					segs[k].linedef = NULL;
-				}
-				else
-				{
-					segs[k].glseg = false;
-					segs[k].linedef = &lines[linenum];
-				}
+				segs[k].glseg = (linenum == 0xFFFF);
+				segs[k].linedef = (linenum == 0xFFFF) ? NULL : &lines[linenum];
 				segs[k].side = READUINT8(data);
 			}
 			break;