Skip to content

Commit 91e615e

Browse files
committed
fix hlrad crashing on created BSP models
don't know why it happens but this fixed it
1 parent 9b444e8 commit 91e615e

File tree

1 file changed

+31
-38
lines changed

1 file changed

+31
-38
lines changed

src/bsp/Bsp.cpp

+31-38
Original file line numberDiff line numberDiff line change
@@ -5007,25 +5007,18 @@ void Bsp::create_node_box(vec3 min, vec3 max, BSPMODEL* targetModel, int texture
50075007
// add new edges (minimum needed to refrence every vertex once)
50085008
int startEdge = edgeCount;
50095009
{
5010-
BSPEDGE* newEdges = new BSPEDGE[edgeCount + 4];
5010+
BSPEDGE* newEdges = new BSPEDGE[edgeCount + 8];
50115011
memcpy(newEdges, edges, edgeCount * sizeof(BSPEDGE));
50125012

5013-
newEdges[startEdge + 0] = BSPEDGE(startVert + 0, startVert + 1);
5014-
newEdges[startEdge + 1] = BSPEDGE(startVert + 2, startVert + 3);
5015-
newEdges[startEdge + 2] = BSPEDGE(startVert + 4, startVert + 5);
5016-
newEdges[startEdge + 3] = BSPEDGE(startVert + 6, startVert + 7);
5013+
// defining an edge for every vertex because otherwise hlrad crashes, even though
5014+
// only 4 edges are required to reference every vertex on the cube
5015+
for (int i = 0; i < 8; i++) {
5016+
newEdges[startEdge + i] = BSPEDGE(startVert + i, startVert + i);
5017+
}
50175018

5018-
replace_lump(LUMP_EDGES, newEdges, (edgeCount + 4) * sizeof(BSPEDGE));
5019+
replace_lump(LUMP_EDGES, newEdges, (edgeCount + 8) * sizeof(BSPEDGE));
50195020
}
50205021

5021-
// maps a vertex number to a surfedge value
5022-
int32_t vertToSurfEdge[8] = {
5023-
(startEdge + 0), -(startEdge + 0), // negative value = use 2nd vertex in edge struct
5024-
(startEdge + 1), -(startEdge + 1),
5025-
(startEdge + 2), -(startEdge + 2),
5026-
(startEdge + 3), -(startEdge + 3),
5027-
};
5028-
50295022
// add new surfedges (vertex lookups into edges which define the faces, 4 per face, clockwise order)
50305023
int startSurfedge = surfedgeCount;
50315024
{
@@ -5035,40 +5028,40 @@ void Bsp::create_node_box(vec3 min, vec3 max, BSPMODEL* targetModel, int texture
50355028
int32_t surfEdgeIdx = startSurfedge;
50365029

50375030
// left face
5038-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[7];
5039-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[4];
5040-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[0];
5041-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[3];
5031+
newSurfedges[surfEdgeIdx++] = startEdge + 7;
5032+
newSurfedges[surfEdgeIdx++] = startEdge + 4;
5033+
newSurfedges[surfEdgeIdx++] = startEdge + 0;
5034+
newSurfedges[surfEdgeIdx++] = startEdge + 3;
50425035

50435036
// right face
5044-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[5];
5045-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[6];
5046-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[2];
5047-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[1];
5037+
newSurfedges[surfEdgeIdx++] = startEdge + 5;
5038+
newSurfedges[surfEdgeIdx++] = startEdge + 6;
5039+
newSurfedges[surfEdgeIdx++] = startEdge + 2;
5040+
newSurfedges[surfEdgeIdx++] = startEdge + 1;
50485041

50495042
// front face
5050-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[4];
5051-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[5];
5052-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[1];
5053-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[0];
5043+
newSurfedges[surfEdgeIdx++] = startEdge + 4;
5044+
newSurfedges[surfEdgeIdx++] = startEdge + 5;
5045+
newSurfedges[surfEdgeIdx++] = startEdge + 1;
5046+
newSurfedges[surfEdgeIdx++] = startEdge + 0;
50545047

50555048
// back face
5056-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[6];
5057-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[7];
5058-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[3];
5059-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[2];
5049+
newSurfedges[surfEdgeIdx++] = startEdge + 6;
5050+
newSurfedges[surfEdgeIdx++] = startEdge + 7;
5051+
newSurfedges[surfEdgeIdx++] = startEdge + 3;
5052+
newSurfedges[surfEdgeIdx++] = startEdge + 2;
50605053

50615054
// bottom face
5062-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[0];
5063-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[1];
5064-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[2];
5065-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[3];
5055+
newSurfedges[surfEdgeIdx++] = startEdge + 0;
5056+
newSurfedges[surfEdgeIdx++] = startEdge + 1;
5057+
newSurfedges[surfEdgeIdx++] = startEdge + 2;
5058+
newSurfedges[surfEdgeIdx++] = startEdge + 3;
50665059

50675060
// top face
5068-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[7];
5069-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[6];
5070-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[5];
5071-
newSurfedges[surfEdgeIdx++] = vertToSurfEdge[4];
5061+
newSurfedges[surfEdgeIdx++] = startEdge + 7;
5062+
newSurfedges[surfEdgeIdx++] = startEdge + 6;
5063+
newSurfedges[surfEdgeIdx++] = startEdge + 5;
5064+
newSurfedges[surfEdgeIdx++] = startEdge + 4;
50725065

50735066
replace_lump(LUMP_SURFEDGES, newSurfedges, (surfedgeCount + 24) * sizeof(int32_t));
50745067
}

0 commit comments

Comments
 (0)