shithub: qk1

Download patch

ref: 8a202d6c1fd789cc56a3d6501105a09b041501da
parent: 3e193403431ad74311e85567526bc60f57cf4f53
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Dec 11 22:24:58 EST 2023

unlimited areanodes (thanks mh)

--- a/world.c
+++ b/world.c
@@ -159,19 +159,15 @@
 
 typedef struct areanode_s
 {
-	int		axis;		// -1 = leaf node
-	float	dist;
-	struct areanode_s	*children[2];
-	link_t	trigger_edicts;
-	link_t	solid_edicts;
+	struct areanode_s *children[2];
+	link_t trigger_edicts;
+	link_t solid_edicts;
+	int axis;		// -1 = leaf node
+	float dist;
 } areanode_t;
 
-#define	AREA_DEPTH	4
-#define	AREA_NODES	32
+static areanode_t *sv_areanodes;
 
-static	areanode_t	sv_areanodes[AREA_NODES];
-static	int			sv_numareanodes;
-
 /*
 ===============
 SV_CreateAreaNode
@@ -184,35 +180,29 @@
 	vec3_t		size;
 	vec3_t		mins1, maxs1, mins2, maxs2;
 
-	anode = &sv_areanodes[sv_numareanodes];
-	sv_numareanodes++;
-
+	anode = Hunk_Alloc(sizeof(*anode));
 	ClearLink (&anode->trigger_edicts);
 	ClearLink (&anode->solid_edicts);
+	VectorSubtract(maxs, mins, size);
 
-	if (depth == AREA_DEPTH)
-	{
+	if(size[0] < 1024 && size[1] < 1024){
 		anode->axis = -1;
 		anode->children[0] = anode->children[1] = nil;
 		return anode;
 	}
 
-	VectorSubtract (maxs, mins, size);
-	if (size[0] > size[1])
-		anode->axis = 0;
-	else
-		anode->axis = 1;
-
+	anode->axis = size[0] <= size[1];
 	anode->dist = 0.5 * (maxs[anode->axis] + mins[anode->axis]);
-	VectorCopy (mins, mins1);
-	VectorCopy (mins, mins2);
-	VectorCopy (maxs, maxs1);
-	VectorCopy (maxs, maxs2);
 
+	VectorCopy(mins, mins1);
+	VectorCopy(mins, mins2);
+	VectorCopy(maxs, maxs1);
+	VectorCopy(maxs, maxs2);
+
 	maxs1[anode->axis] = mins2[anode->axis] = anode->dist;
 
-	anode->children[0] = SV_CreateAreaNode (depth+1, mins2, maxs2);
-	anode->children[1] = SV_CreateAreaNode (depth+1, mins1, maxs1);
+	anode->children[0] = SV_CreateAreaNode(depth+1, mins2, maxs2);
+	anode->children[1] = SV_CreateAreaNode(depth+1, mins1, maxs1);
 
 	return anode;
 }
@@ -227,9 +217,7 @@
 {
 	SV_InitBoxHull();
 
-	memset(sv_areanodes, 0, sizeof sv_areanodes);
-	sv_numareanodes = 0;
-	SV_CreateAreaNode (0, sv.worldmodel->mins, sv.worldmodel->maxs);
+	sv_areanodes = SV_CreateAreaNode(0, sv.worldmodel->mins, sv.worldmodel->maxs);
 }