diff --git a/pr_cmds.c b/pr_cmds.c index 953041a..839716f 100644 --- a/pr_cmds.c +++ b/pr_cmds.c @@ -1870,7 +1870,7 @@ void PF_SetAreaPortalState(void) int area1 = G_FLOAT(OFS_PARM0); int area2 = G_FLOAT(OFS_PARM1); int open = G_FLOAT(OFS_PARM2); - CM_SetAreaPortalState(area1,area2,open); + CM_SetAreaPortalState(sv.worldmodel, area1,area2,open); } diff --git a/sv_main.c b/sv_main.c index abba576..23b0fbf 100644 --- a/sv_main.c +++ b/sv_main.c @@ -444,7 +444,7 @@ void SV_WriteEntitiesToClient (edict_t *clent, sizebuf_t *msg) //find the client's Area Portal state clientleaf = Mod_PointInLeaf(org, sv.worldmodel); - areabytes = CM_WriteAreaBits(areabits, clientleaf->area); + areabytes = CM_WriteAreaBits(sv.worldmodel, areabits, clientleaf->area); // send over all entities (excpet the client) that touch the pvs ent = NEXT_EDICT(sv.edicts); diff --git a/sv_q3support.c b/sv_q3support.c index a5f8966..d797e9b 100644 --- a/sv_q3support.c +++ b/sv_q3support.c @@ -28,7 +28,7 @@ mplane_t *box_planes; int box_firstbrush; mbrush_t *box_brush; -#define M sv.worldmodel +//#define M sv.worldmodel //timestamp variables int c_pointcontents = 0; @@ -44,7 +44,7 @@ Set up the planes and nodes so that the six floats of a bounding box can just be stored out and get a proper clipping hull structure. =================== */ -void CM_InitBoxHull (void) +void CM_InitBoxHull (model_t *M) { int i; int side; @@ -65,7 +65,7 @@ void CM_InitBoxHull (void) // brush sides s = &M->brushsides[M->numbrushsides+i]; s->plane = M->planes + (M->numplanes+i*2+side); - s->texture = NULL; + s->shader = NULL; // planes p = &box_planes[i*2]; @@ -139,7 +139,7 @@ CM_PointLeafnum_r ================== */ -int CM_PointLeafnum_r (vec3_t p, int num) +int CM_PointLeafnum_r (model_t *M, vec3_t p, int num) { float d; mnode_t *node; @@ -165,11 +165,11 @@ int CM_PointLeafnum_r (vec3_t p, int num) return -1 - num; } -int CM_PointLeafnum (vec3_t p) +int CM_PointLeafnum (model_t *M, vec3_t p) { if (!M->numplanes) return 0; // sound may call this without map loaded - return CM_PointLeafnum_r (p, 0); + return CM_PointLeafnum_r (M, p, 0); } @@ -186,7 +186,7 @@ int *leaf_list; float *leaf_mins, *leaf_maxs; int leaf_topnode; -void CM_BoxLeafnums_r (int nodenum) +void CM_BoxLeafnums_r (model_t *M, int nodenum) { mplane_t *plane; mnode_t *node; @@ -217,14 +217,14 @@ void CM_BoxLeafnums_r (int nodenum) { // go down both if (leaf_topnode == -1) leaf_topnode = nodenum; - CM_BoxLeafnums_r (node->ichildren[0]); + CM_BoxLeafnums_r (M, node->ichildren[0]); nodenum = node->ichildren[1]; } } } -int CM_BoxLeafnums_headnode (vec3_t mins, vec3_t maxs, int *list, int listsize, int headnode, int *topnode) +int CM_BoxLeafnums_headnode (model_t *M, vec3_t mins, vec3_t maxs, int *list, int listsize, int headnode, int *topnode) { leaf_list = list; leaf_count = 0; @@ -234,7 +234,7 @@ int CM_BoxLeafnums_headnode (vec3_t mins, vec3_t maxs, int *list, int listsize, leaf_topnode = -1; - CM_BoxLeafnums_r (headnode); + CM_BoxLeafnums_r (M, headnode); if (topnode) *topnode = leaf_topnode; @@ -242,9 +242,9 @@ int CM_BoxLeafnums_headnode (vec3_t mins, vec3_t maxs, int *list, int listsize, return leaf_count; } -int CM_BoxLeafnums (vec3_t mins, vec3_t maxs, int *list, int listsize, int *topnode) +int CM_BoxLeafnums (model_t *M,vec3_t mins, vec3_t maxs, int *list, int listsize, int *topnode) { - return CM_BoxLeafnums_headnode (mins, maxs, list, + return CM_BoxLeafnums_headnode (M,mins, maxs, list, listsize, 0 /*headnode??*/, topnode); } @@ -256,7 +256,7 @@ CM_PointContents ================== */ -int CM_PointContents (vec3_t p, int headnode) +int CM_PointContents (model_t *M, vec3_t p, int headnode) { int l, contents, i, j; mleaf_t *leaf; @@ -266,7 +266,7 @@ int CM_PointContents (vec3_t p, int headnode) if (!M->numnodes) // map not loaded return 0; - l = CM_PointLeafnum_r (p, 0 /*headnode*/); + l = CM_PointLeafnum_r (M, p, 0 /*headnode*/); //PENTA: Based on qfusion contents soucre leaf = &M->leafs[l]; @@ -307,7 +307,7 @@ Handles offseting and rotation of the end points for moving and rotating entities ================== */ -int CM_TransformedPointContents (vec3_t p, int headnode, vec3_t origin, vec3_t angles) +int CM_TransformedPointContents (model_t *M, vec3_t p, int headnode, vec3_t origin, vec3_t angles) { vec3_t p_l; vec3_t temp; @@ -328,7 +328,7 @@ int CM_TransformedPointContents (vec3_t p, int headnode, vec3_t origin, vec3_t a p_l[2] = DotProduct (temp, up); } - l = CM_PointLeafnum_r (p_l, headnode); + l = CM_PointLeafnum_r (M, p_l, headnode); return M->leafs[l].contents; } @@ -358,7 +358,7 @@ qboolean trace_ispoint; // optimized case CM_ClipBoxToBrush ================ */ -void CM_ClipBoxToBrush (vec3_t mins, vec3_t maxs, vec3_t p1, vec3_t p2, +void CM_ClipBoxToBrush (model_t *M, vec3_t mins, vec3_t maxs, vec3_t p1, vec3_t p2, trace_t *trace, mbrush_t *brush) { int i, j; @@ -474,7 +474,7 @@ void CM_ClipBoxToBrush (vec3_t mins, vec3_t maxs, vec3_t p1, vec3_t p2, CM_TestBoxInBrush ================ */ -void CM_TestBoxInBrush (vec3_t mins, vec3_t maxs, vec3_t p1, +void CM_TestBoxInBrush (model_t *M, vec3_t mins, vec3_t maxs, vec3_t p1, trace_t *trace, mbrush_t *brush) { int i, j; @@ -531,7 +531,7 @@ void CM_TestBoxInBrush (vec3_t mins, vec3_t maxs, vec3_t p1, CM_TraceToLeaf ================ */ -void CM_TraceToLeaf (int leafnum) +void CM_TraceToLeaf (model_t *M, int leafnum) { int k; int brushnum; @@ -568,7 +568,7 @@ void CM_TraceToLeaf (int leafnum) if ( !(b->contents & trace_contents)) continue; - CM_ClipBoxToBrush (trace_mins, trace_maxs, trace_start, trace_end, &trace_trace, b); + CM_ClipBoxToBrush (M, trace_mins, trace_maxs, trace_start, trace_end, &trace_trace, b); if (!trace_trace.fraction) return; } @@ -583,7 +583,7 @@ PENTA: Clips to the given brush model Q3 doesn't have bsp's associated with map models anymore, just a list of brushes ================ */ -void CM_TraceToBrushModel (int firstbrush, int numbrushes, vec3_t mins, vec3_t maxs, +void CM_TraceToBrushModel (model_t *M, int firstbrush, int numbrushes, vec3_t mins, vec3_t maxs, vec3_t start, vec3_t end, trace_t *trace, int brushmask) { int i, brushnum; @@ -605,7 +605,7 @@ void CM_TraceToBrushModel (int firstbrush, int numbrushes, vec3_t mins, vec3_t m if ( !(b->contents & trace_contents)) continue; - CM_ClipBoxToBrush (mins, maxs, start, end, trace, b); + CM_ClipBoxToBrush (M, mins, maxs, start, end, trace, b); if (!trace->fraction) return; } @@ -627,7 +627,7 @@ void CM_TraceToBrushModel (int firstbrush, int numbrushes, vec3_t mins, vec3_t m CM_TestInLeaf ================ */ -void CM_TestInLeaf (int leafnum) +void CM_TestInLeaf (model_t *M, int leafnum) { int k; int brushnum; @@ -648,7 +648,7 @@ void CM_TestInLeaf (int leafnum) if ( !(b->contents & trace_contents)) continue; - CM_TestBoxInBrush (trace_mins, trace_maxs, trace_start, &trace_trace, b); + CM_TestBoxInBrush (M, trace_mins, trace_maxs, trace_start, &trace_trace, b); if (!trace_trace.fraction) return; } @@ -662,7 +662,7 @@ CM_RecursiveHullCheck ================== */ -void CM_RecursiveHullCheck (int num, float p1f, float p2f, vec3_t p1, vec3_t p2) +void CM_RecursiveHullCheck (model_t *M, int num, float p1f, float p2f, vec3_t p1, vec3_t p2) { mnode_t *node; mplane_t *plane; @@ -680,7 +680,7 @@ void CM_RecursiveHullCheck (int num, float p1f, float p2f, vec3_t p1, vec3_t p2) // if < 0, we are in a leaf node if (num < 0) { - CM_TraceToLeaf (-1-num); + CM_TraceToLeaf (M, -1-num); return; } @@ -711,20 +711,20 @@ void CM_RecursiveHullCheck (int num, float p1f, float p2f, vec3_t p1, vec3_t p2) #if 0 -CM_RecursiveHullCheck (node->ichildren[0], p1f, p2f, p1, p2); -CM_RecursiveHullCheck (node->ichildren[1], p1f, p2f, p1, p2); +CM_RecursiveHullCheck (M, node->ichildren[0], p1f, p2f, p1, p2); +CM_RecursiveHullCheck (M, node->ichildren[1], p1f, p2f, p1, p2); return; #endif // see which sides we need to consider if (t1 >= offset && t2 >= offset) { - CM_RecursiveHullCheck (node->ichildren[0], p1f, p2f, p1, p2); + CM_RecursiveHullCheck (M, node->ichildren[0], p1f, p2f, p1, p2); return; } if (t1 < -offset && t2 < -offset) { - CM_RecursiveHullCheck (node->ichildren[1], p1f, p2f, p1, p2); + CM_RecursiveHullCheck (M, node->ichildren[1], p1f, p2f, p1, p2); return; } @@ -760,7 +760,7 @@ return; for (i=0 ; i<3 ; i++) mid[i] = p1[i] + frac*(p2[i] - p1[i]); - CM_RecursiveHullCheck (node->ichildren[side], p1f, midf, p1, mid); + CM_RecursiveHullCheck (M, node->ichildren[side], p1f, midf, p1, mid); // go past the node @@ -773,7 +773,7 @@ return; for (i=0 ; i<3 ; i++) mid[i] = p1[i] + frac2*(p2[i] - p1[i]); - CM_RecursiveHullCheck (node->ichildren[side^1], midf, p2f, mid, p2); + CM_RecursiveHullCheck (M, node->ichildren[side^1], midf, p2f, mid, p2); } @@ -785,7 +785,7 @@ return; CM_BoxTrace ================== */ -trace_t CM_BoxTrace (vec3_t start, vec3_t end, +trace_t CM_BoxTrace (model_t *M, vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, int headnode, int brushmask) { @@ -828,10 +828,10 @@ trace_t CM_BoxTrace (vec3_t start, vec3_t end, c2[i] += 1; } - numleafs = CM_BoxLeafnums_headnode (c1, c2, leafs, 1024, headnode, &topnode); + numleafs = CM_BoxLeafnums_headnode (M, c1, c2, leafs, 1024, headnode, &topnode); for (i=0 ; i M->numareas || area2 > M->numareas) { Con_Printf ("CM_SetAreaPortalState: area > M->numareas\n"); @@ -1085,7 +1085,7 @@ void CM_SetAreaPortalState (int area1, int area2, qboolean open) } } -qboolean CM_AreasConnected (int area1, int area2) +qboolean CM_AreasConnected (model_t *M, int area1, int area2) { int i; /* @@ -1120,7 +1120,7 @@ that area in the same flood as the area parameter This is used by the client refreshes to cull visibility ================= */ -int CM_WriteAreaBits (byte *buffer, int area) +int CM_WriteAreaBits (model_t *M, byte *buffer, int area) { int i; int bytes; @@ -1138,7 +1138,7 @@ int CM_WriteAreaBits (byte *buffer, int area) for (i=1 ; inumareas ; i++) { - if (!area || CM_AreasConnected ( i, area ) || i == area) + if (!area || CM_AreasConnected (M, i, area ) || i == area) buffer[i>>3] |= 1<<(i&7); } } @@ -1153,13 +1153,13 @@ int CM_WriteAreaBits (byte *buffer, int area) CM_MergeAreaBits ================= */ -void CM_MergeAreaBits (byte *buffer, int area) +void CM_MergeAreaBits (model_t *M, byte *buffer, int area) { int i; for (i=1 ; inumareas ; i++) { - if ( CM_AreasConnected ( i, area ) || i == area) + if ( CM_AreasConnected (M, i, area ) || i == area) buffer[i>>3] |= 1<<(i&7); } } @@ -1171,7 +1171,7 @@ CM_WritePortalState Writes the portal state to a savegame file =================== */ -void CM_WritePortalState (FILE *f) +void CM_WritePortalState (model_t *M, FILE *f) { } @@ -1183,7 +1183,7 @@ Reads the portal state from a savegame file and recalculates the area connections =================== */ -void CM_ReadPortalState (FILE *f) +void CM_ReadPortalState (model_t *M, FILE *f) { } diff --git a/world.c b/world.c index 7e5ebb6..0f0fb3d 100644 --- a/world.c +++ b/world.c @@ -253,7 +253,7 @@ SV_ClearWorld void SV_ClearWorld (void) { SV_InitBoxHull (); - CM_InitBoxHull (); + CM_InitBoxHull (sv.worldmodel); memset (sv_areanodes, 0, sizeof(sv_areanodes)); sv_numareanodes = 0; @@ -562,7 +562,7 @@ int SV_PointContents (vec3_t p) int cont; //cont = SV_HullPointContents (&sv.worldmodel->hulls[0], 0, p); - cont = CM_PointContents(p,0); + cont = CM_PointContents(sv.worldmodel, p,0); if (cont <= CONTENTS_CURRENT_0 && cont >= CONTENTS_CURRENT_DOWN) cont = CONTENTS_WATER; return cont; @@ -591,7 +591,7 @@ int SV_SimplePointContents (int c) int SV_TruePointContents (vec3_t p) { // return SV_HullPointContents (&sv.worldmodel->hulls[0], 0, p); - return CM_PointContents(p,0); + return CM_PointContents(sv.worldmodel, p,0); } //=========================================================================== @@ -845,7 +845,7 @@ trace_t SV_ClipMoveToEntity (edict_t *ent, vec3_t start, vec3_t mins, vec3_t max // trace a line through the apropriate brushes //SV_RecursiveHullCheck (hull, hull->firstclipnode, 0, 1, start_l, end_l, &trace); - CM_TraceToBrushModel (firstbrush, numbrushes, mins, maxs, start_l, end_l, &trace, CONTENTS_SOLID); + CM_TraceToBrushModel (sv.worldmodel, firstbrush, numbrushes, mins, maxs, start_l, end_l, &trace, CONTENTS_SOLID); // rotate endpos back to world frame of reference if (rotated && trace.fraction != 1.0) @@ -1013,7 +1013,7 @@ trace_t SV_Move (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int type, e // clip to world //clip.trace = SV_ClipMoveToEntity ( sv.edicts, start, mins, maxs, end ); - clip.trace = CM_BoxTrace (start, end, mins, maxs, 0, CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_MONSTERCLIP); + clip.trace = CM_BoxTrace (sv.worldmodel, start, end, mins, maxs, 0, CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_MONSTERCLIP); clip.trace.ent = &sv.edicts[0]; //world if (clip.trace.fraction == 0)