@@ -5007,25 +5007,18 @@ void Bsp::create_node_box(vec3 min, vec3 max, BSPMODEL* targetModel, int texture
5007
5007
// add new edges (minimum needed to refrence every vertex once)
5008
5008
int startEdge = edgeCount;
5009
5009
{
5010
- BSPEDGE* newEdges = new BSPEDGE[edgeCount + 4 ];
5010
+ BSPEDGE* newEdges = new BSPEDGE[edgeCount + 8 ];
5011
5011
memcpy (newEdges, edges, edgeCount * sizeof (BSPEDGE));
5012
5012
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
+ }
5017
5018
5018
- replace_lump (LUMP_EDGES, newEdges, (edgeCount + 4 ) * sizeof (BSPEDGE));
5019
+ replace_lump (LUMP_EDGES, newEdges, (edgeCount + 8 ) * sizeof (BSPEDGE));
5019
5020
}
5020
5021
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
-
5029
5022
// add new surfedges (vertex lookups into edges which define the faces, 4 per face, clockwise order)
5030
5023
int startSurfedge = surfedgeCount;
5031
5024
{
@@ -5035,40 +5028,40 @@ void Bsp::create_node_box(vec3 min, vec3 max, BSPMODEL* targetModel, int texture
5035
5028
int32_t surfEdgeIdx = startSurfedge;
5036
5029
5037
5030
// 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 ;
5042
5035
5043
5036
// 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 ;
5048
5041
5049
5042
// 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 ;
5054
5047
5055
5048
// 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 ;
5060
5053
5061
5054
// 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 ;
5066
5059
5067
5060
// 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 ;
5072
5065
5073
5066
replace_lump (LUMP_SURFEDGES, newSurfedges, (surfedgeCount + 24 ) * sizeof (int32_t ));
5074
5067
}
0 commit comments