Track areas properly, so we don't bug out when a client has multiple cameras in different areas.
Fix up r_ignoreentpvs 0 to check areas properly. checkpvs builtin can no longer mess up area checks elsewhere. Write out foo.db files for release builds, in the hopes of at least getting function names from release-build crashes. Implement _skyroom worldspawn field, still needs a few tweaks though. Try to fix android surface-related crashes, AGAIN. Separate parsing of connect requests, in preparation for formal logins (and removal of the old ranking code). A few tweaks to try to improve compatibility with q3 mods. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5484 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
6c7220324e
commit
8197e0875f
64 changed files with 1336 additions and 959 deletions
|
@ -801,6 +801,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#define MAX_QPATH 128 // max length of a quake game pathname
|
||||
#define MAX_OSPATH 1024 // max length of a filesystem pathname (260 on windows, but needs to be longer for utf8)
|
||||
#define OLD_MAX_QPATH 64 // it was baked into various file formats, which is unfortunate.
|
||||
|
||||
#define ON_EPSILON 0.1 // point on plane side epsilon
|
||||
|
||||
|
|
|
@ -788,7 +788,7 @@ typedef struct
|
|||
|
||||
typedef struct
|
||||
{
|
||||
char shadername[64];
|
||||
char shadername[OLD_MAX_QPATH];
|
||||
int surfflags;
|
||||
int contents;
|
||||
} dq3shader_t;
|
||||
|
@ -828,7 +828,7 @@ typedef struct
|
|||
|
||||
struct Q3FOG
|
||||
{
|
||||
char shadername[64] ;
|
||||
char shadername[OLD_MAX_QPATH] ;
|
||||
int brushnum;
|
||||
int visibleside;
|
||||
};
|
||||
|
|
|
@ -2930,7 +2930,6 @@ void Cmd_ExecuteString (const char *text, int level)
|
|||
//a number of things check for seats if nothing else, and security says is safer to do this than to be in doubt.
|
||||
int olev = Cmd_ExecLevel;
|
||||
Cmd_ExecuteStringGlobalsAreEvil(text, level);
|
||||
Cmd_ExecLevel = level;
|
||||
Cmd_ExecLevel = olev;
|
||||
}
|
||||
|
||||
|
|
|
@ -1010,7 +1010,7 @@ typedef struct
|
|||
float frac[FRAME_BLENDS*2]; //weight of this animation (1 if lerpcount is 1)
|
||||
float *pose[FRAME_BLENDS*2]; //pointer to the raw frame data for bone 0.
|
||||
} skellerps_t;
|
||||
static qboolean Alias_BuildSkelLerps(skellerps_t *lerps, struct framestateregion_s *fs, int numbones, galiasinfo_t *inf)
|
||||
static qboolean Alias_BuildSkelLerps(skellerps_t *lerps, const struct framestateregion_s *fs, int numbones, const galiasinfo_t *inf)
|
||||
{
|
||||
int frame1; //signed, because frametime might be negative...
|
||||
int frame2;
|
||||
|
@ -1129,7 +1129,7 @@ static qboolean Alias_BuildSkelLerps(skellerps_t *lerps, struct framestateregion
|
|||
/*
|
||||
finds the various blend info. returns number of bone blocks used.
|
||||
*/
|
||||
static int Alias_FindRawSkelData(galiasinfo_t *inf, framestate_t *fstate, skellerps_t *lerps, size_t firstbone, size_t lastbone)
|
||||
static int Alias_FindRawSkelData(galiasinfo_t *inf, const framestate_t *fstate, skellerps_t *lerps, size_t firstbone, size_t lastbone)
|
||||
{
|
||||
int bonegroup;
|
||||
int cbone = 0;
|
||||
|
@ -1220,7 +1220,7 @@ static int Alias_BlendBoneData(galiasinfo_t *inf, framestate_t *fstate, float *r
|
|||
only writes targetbuffer if needed. the return value is the only real buffer result.
|
||||
assumes that all blended types are the same. probably buggy, but meh.
|
||||
*/
|
||||
static const float *Alias_GetBoneInformation(galiasinfo_t *inf, framestate_t *framestate, skeltype_t targettype, float *targetbuffer, float *targetbufferalt, size_t maxbufferbones)
|
||||
static const float *Alias_GetBoneInformation(galiasinfo_t *inf, const framestate_t *framestate, skeltype_t targettype, float *targetbuffer, float *targetbufferalt, size_t maxbufferbones)
|
||||
{
|
||||
skellerps_t lerps[FS_COUNT], *lerp;
|
||||
size_t numgroups;
|
||||
|
@ -2215,7 +2215,7 @@ void Mod_AddSingleSurface(entity_t *ent, int surfaceidx, shader_t *shader, qbool
|
|||
#endif
|
||||
|
||||
|
||||
static float PlaneNearest(vec3_t normal, vec3_t mins, vec3_t maxs)
|
||||
static float PlaneNearest(const vec3_t normal, const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
float result;
|
||||
#if 0
|
||||
|
@ -2235,7 +2235,7 @@ static float PlaneNearest(vec3_t normal, vec3_t mins, vec3_t maxs)
|
|||
}
|
||||
|
||||
void CLQ1_DrawLine(shader_t *shader, vec3_t v1, vec3_t v2, float r, float g, float b, float a);
|
||||
static qboolean Mod_Trace_Trisoup(vecV_t *posedata, index_t *indexes, int numindexes, vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, trace_t *trace)
|
||||
static qboolean Mod_Trace_Trisoup(vecV_t *posedata, index_t *indexes, int numindexes, const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, trace_t *fte_restrict trace)
|
||||
{
|
||||
qboolean impacted = false;
|
||||
int i, j;
|
||||
|
@ -2412,7 +2412,7 @@ static qboolean Mod_Trace_Trisoup(vecV_t *posedata, index_t *indexes, int numind
|
|||
}
|
||||
|
||||
//The whole reason why model loading is supported in the server.
|
||||
static qboolean Mod_Trace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int contentsmask, trace_t *trace)
|
||||
static qboolean Mod_Trace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int contentsmask, trace_t *trace)
|
||||
{
|
||||
galiasinfo_t *mod = Mod_Extradata(model);
|
||||
|
||||
|
@ -8166,7 +8166,7 @@ static galiasinfo_t *Mod_ParseMD5MeshModel(model_t *mod, char *buffer, char *mod
|
|||
else if (!strcmp(token, "numJoints"))
|
||||
{
|
||||
if (numjoints)
|
||||
MD5ERROR0PARAM("MD5MESH: numMeshes was already declared");
|
||||
MD5ERROR0PARAM("MD5MESH: numJoints was already declared");
|
||||
buffer = COM_ParseOut(buffer, token, sizeof(token));
|
||||
numjoints = atoi(token);
|
||||
if (numjoints <= 0)
|
||||
|
|
|
@ -224,7 +224,7 @@ typedef struct modplugfuncs_s
|
|||
|
||||
void (QDECL *ConcatTransforms) (const float in1[3][4], const float in2[3][4], float out[3][4]);
|
||||
void (QDECL *M3x4_Invert) (const float *in1, float *out);
|
||||
void (QDECL *VectorAngles)(float *forward, float *up, float *result, qboolean meshpitch);
|
||||
void (QDECL *VectorAngles)(const float *forward, const float *up, float *result, qboolean meshpitch);
|
||||
void (QDECL *AngleVectors)(const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
||||
void (QDECL *GenMatrixPosQuat4Scale)(const vec3_t pos, const vec4_t quat, const vec3_t scale, float result[12]);
|
||||
|
||||
|
|
|
@ -57,16 +57,16 @@ void Mod_LoadEntities (model_t *loadmodel, qbyte *mod_base, lump_t *l);
|
|||
extern void BuildLightMapGammaTable (float g, float c);
|
||||
|
||||
#if defined(Q2BSPS) || defined(Q3BSPS)
|
||||
static qboolean CM_NativeTrace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace);
|
||||
static unsigned int CM_NativeContents(struct model_s *model, int hulloverride, framestate_t *framestate, vec3_t axis[3], vec3_t p, vec3_t mins, vec3_t maxs);
|
||||
static unsigned int Q2BSP_PointContents(model_t *mod, vec3_t axis[3], vec3_t p);
|
||||
static int CM_PointCluster (model_t *mod, vec3_t p);
|
||||
static qboolean CM_NativeTrace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace);
|
||||
static unsigned int CM_NativeContents(struct model_s *model, int hulloverride, const framestate_t *framestate, const vec3_t axis[3], const vec3_t p, const vec3_t mins, const vec3_t maxs);
|
||||
static unsigned int Q2BSP_PointContents(model_t *mod, const vec3_t axis[3], const vec3_t p);
|
||||
static int CM_PointCluster (model_t *mod, const vec3_t p, int *area);
|
||||
struct cminfo_s;
|
||||
static struct bihnode_s *CM_BuildBIH (model_t *mod, struct cminfo_s *prv);
|
||||
static unsigned int CM_PointContentsBIH (const struct bihnode_s *fte_restrict node, const vec3_t p);
|
||||
#endif
|
||||
|
||||
float RadiusFromBounds (vec3_t mins, vec3_t maxs)
|
||||
float RadiusFromBounds (const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
int i;
|
||||
vec3_t corner;
|
||||
|
@ -4236,8 +4236,6 @@ static void GLR_Q2BSP_StainNode (mnode_t *node, float *parms)
|
|||
|
||||
#endif
|
||||
|
||||
void GLQ2BSP_LightPointValues(model_t *mod, vec3_t point, vec3_t res_diffuse, vec3_t res_ambient, vec3_t res_dir);
|
||||
|
||||
/*
|
||||
==================
|
||||
CM_LoadMap
|
||||
|
@ -4870,8 +4868,8 @@ mplane_t box_planes[6];
|
|||
model_t box_model;
|
||||
q2cbrush_t box_brush;
|
||||
q2cbrushside_t box_sides[6];
|
||||
static qboolean BM_NativeTrace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace);
|
||||
static unsigned int BM_NativeContents(struct model_s *model, int hulloverride, framestate_t *framestate, vec3_t axis[3], vec3_t p, vec3_t mins, vec3_t maxs)
|
||||
static qboolean BM_NativeTrace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace);
|
||||
static unsigned int BM_NativeContents(struct model_s *model, int hulloverride, const framestate_t *framestate, const vec3_t axis[3], const vec3_t p, const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
unsigned int j;
|
||||
q2cbrushside_t *brushside = box_sides;
|
||||
|
@ -4947,7 +4945,7 @@ To keep everything totally uniform, bounding boxes are turned into small
|
|||
BSP trees instead of being compared directly.
|
||||
===================
|
||||
*/
|
||||
static void CM_SetTempboxSize (vec3_t mins, vec3_t maxs)
|
||||
static void CM_SetTempboxSize (const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
box_planes[0].dist = maxs[0];
|
||||
box_planes[1].dist = maxs[1];
|
||||
|
@ -4957,7 +4955,7 @@ static void CM_SetTempboxSize (vec3_t mins, vec3_t maxs)
|
|||
box_planes[5].dist = -mins[2];
|
||||
}
|
||||
|
||||
model_t *CM_TempBoxModel(vec3_t mins, vec3_t maxs)
|
||||
model_t *CM_TempBoxModel(const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
CM_SetTempboxSize(mins, maxs);
|
||||
return &box_model;
|
||||
|
@ -4969,7 +4967,7 @@ CM_PointLeafnum_r
|
|||
|
||||
==================
|
||||
*/
|
||||
static int CM_PointLeafnum_r (model_t *mod, vec3_t p, int num)
|
||||
static int CM_PointLeafnum_r (model_t *mod, const vec3_t p, int num)
|
||||
{
|
||||
float d;
|
||||
mnode_t *node;
|
||||
|
@ -4993,18 +4991,23 @@ static int CM_PointLeafnum_r (model_t *mod, vec3_t p, int num)
|
|||
return -1 - num;
|
||||
}
|
||||
|
||||
int CM_PointLeafnum (model_t *mod, vec3_t p)
|
||||
int CM_PointLeafnum (model_t *mod, const vec3_t p)
|
||||
{
|
||||
if (!mod || mod->loadstate != MLS_LOADED)
|
||||
return 0; // sound may call this without map loaded
|
||||
return CM_PointLeafnum_r (mod, p, 0);
|
||||
}
|
||||
|
||||
static int CM_PointCluster (model_t *mod, vec3_t p)
|
||||
static int CM_PointCluster (model_t *mod, const vec3_t p, int *area)
|
||||
{
|
||||
int leaf;
|
||||
if (!mod || mod->loadstate != MLS_LOADED)
|
||||
return 0; // sound may call this without map loaded
|
||||
return CM_LeafCluster(mod, CM_PointLeafnum_r (mod, p, 0));
|
||||
|
||||
leaf = CM_PointLeafnum_r (mod, p, 0);
|
||||
if (area)
|
||||
*area = CM_LeafArea(mod, leaf);
|
||||
return CM_LeafCluster(mod, leaf);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -5016,7 +5019,7 @@ Fills in a list of all the leafs touched
|
|||
*/
|
||||
int leaf_count, leaf_maxcount;
|
||||
int *leaf_list;
|
||||
float *leaf_mins, *leaf_maxs;
|
||||
const float *leaf_mins, *leaf_maxs;
|
||||
int leaf_topnode;
|
||||
|
||||
static void CM_BoxLeafnums_r (model_t *mod, int nodenum)
|
||||
|
@ -5057,7 +5060,7 @@ static void CM_BoxLeafnums_r (model_t *mod, int nodenum)
|
|||
}
|
||||
}
|
||||
|
||||
static int CM_BoxLeafnums_headnode (model_t *mod, vec3_t mins, vec3_t maxs, int *list, int listsize, int headnode, int *topnode)
|
||||
static int CM_BoxLeafnums_headnode (model_t *mod, const vec3_t mins, const vec3_t maxs, int *list, int listsize, int headnode, int *topnode)
|
||||
{
|
||||
leaf_list = list;
|
||||
leaf_count = 0;
|
||||
|
@ -5075,7 +5078,7 @@ static int CM_BoxLeafnums_headnode (model_t *mod, vec3_t mins, vec3_t maxs, int
|
|||
return leaf_count;
|
||||
}
|
||||
|
||||
int CM_BoxLeafnums (model_t *mod, vec3_t mins, vec3_t maxs, int *list, int listsize, int *topnode)
|
||||
int CM_BoxLeafnums (model_t *mod, const vec3_t mins, const vec3_t maxs, int *list, int listsize, int *topnode)
|
||||
{
|
||||
return CM_BoxLeafnums_headnode (mod, mins, maxs, list,
|
||||
listsize, mod->hulls[0].firstclipnode, topnode);
|
||||
|
@ -5089,7 +5092,7 @@ CM_PointContents
|
|||
|
||||
==================
|
||||
*/
|
||||
int CM_PointContents (model_t *mod, vec3_t p)
|
||||
int CM_PointContents (model_t *mod, const vec3_t p)
|
||||
{
|
||||
cminfo_t *prv = (cminfo_t*)mod->meshinfo;
|
||||
int i, j, contents;
|
||||
|
@ -5146,7 +5149,7 @@ int CM_PointContents (model_t *mod, vec3_t p)
|
|||
return contents;
|
||||
}
|
||||
|
||||
unsigned int CM_NativeContents(struct model_s *model, int hulloverride, framestate_t *framestate, vec3_t axis[3], vec3_t p, vec3_t mins, vec3_t maxs)
|
||||
unsigned int CM_NativeContents(struct model_s *model, int hulloverride, const framestate_t *framestate, const vec3_t axis[3], const vec3_t p, const vec3_t mins, const vec3_t maxs)
|
||||
{
|
||||
cminfo_t *prv = (cminfo_t*)model->meshinfo;
|
||||
int contents;
|
||||
|
@ -5210,7 +5213,7 @@ Handles offseting and rotation of the end points for moving and
|
|||
rotating entities
|
||||
==================
|
||||
*/
|
||||
int CM_TransformedPointContents (model_t *mod, vec3_t p, int headnode, vec3_t origin, vec3_t angles)
|
||||
int CM_TransformedPointContents (model_t *mod, const vec3_t p, int headnode, const vec3_t origin, const vec3_t angles)
|
||||
{
|
||||
vec3_t p_l;
|
||||
vec3_t temp;
|
||||
|
@ -6699,8 +6702,8 @@ static struct bihnode_s *CM_BuildBIH (model_t *mod, cminfo_t *prv)
|
|||
CM_BoxTrace
|
||||
==================
|
||||
*/
|
||||
static trace_t CM_BoxTrace (model_t *mod, vec3_t start, vec3_t end,
|
||||
vec3_t mins, vec3_t maxs, qboolean capsule,
|
||||
static trace_t CM_BoxTrace (model_t *mod, const vec3_t start, const vec3_t end,
|
||||
const vec3_t mins, const vec3_t maxs, qboolean capsule,
|
||||
int brushmask)
|
||||
{
|
||||
int i;
|
||||
|
@ -6897,7 +6900,7 @@ static trace_t CM_BoxTrace (model_t *mod, vec3_t start, vec3_t end,
|
|||
return trace_trace;
|
||||
}
|
||||
|
||||
static qboolean BM_NativeTrace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace)
|
||||
static qboolean BM_NativeTrace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace)
|
||||
{
|
||||
int i;
|
||||
memset (trace, 0, sizeof(*trace));
|
||||
|
@ -6941,7 +6944,7 @@ static qboolean BM_NativeTrace(model_t *model, int forcehullnum, framestate_t *f
|
|||
}
|
||||
return trace->fraction != 1;
|
||||
}
|
||||
static qboolean CM_NativeTrace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace)
|
||||
static qboolean CM_NativeTrace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int contents, trace_t *trace)
|
||||
{
|
||||
if (axis)
|
||||
{
|
||||
|
@ -7200,7 +7203,7 @@ qbyte *CM_ClusterPHS (model_t *mod, int cluster, pvsbuffer_t *buffer)
|
|||
return buffer->buffer;
|
||||
}
|
||||
|
||||
static unsigned int SV_Q2BSP_FatPVS (model_t *mod, vec3_t org, pvsbuffer_t *result, qboolean merge)
|
||||
static unsigned int SV_Q2BSP_FatPVS (model_t *mod, const vec3_t org, pvsbuffer_t *result, qboolean merge)
|
||||
{
|
||||
int leafs[64];
|
||||
int i, j, count;
|
||||
|
@ -7249,7 +7252,7 @@ static unsigned int SV_Q2BSP_FatPVS (model_t *mod, vec3_t org, pvsbuffer_t *res
|
|||
}
|
||||
|
||||
static int clientarea;
|
||||
unsigned int Q23BSP_FatPVS(model_t *mod, vec3_t org, pvsbuffer_t *buffer, qboolean merge)
|
||||
unsigned int Q23BSP_FatPVS(model_t *mod, const vec3_t org, pvsbuffer_t *fte_restrict buffer, qboolean merge)
|
||||
{//fixme: this doesn't add areas
|
||||
int leafnum;
|
||||
leafnum = CM_PointLeafnum (mod, org);
|
||||
|
@ -7258,21 +7261,29 @@ unsigned int Q23BSP_FatPVS(model_t *mod, vec3_t org, pvsbuffer_t *buffer, qboole
|
|||
return SV_Q2BSP_FatPVS (mod, org, buffer, merge);
|
||||
}
|
||||
|
||||
qboolean Q23BSP_EdictInFatPVS(model_t *mod, pvscache_t *ent, qbyte *pvs)
|
||||
qboolean Q23BSP_EdictInFatPVS(model_t *mod, const pvscache_t *ent, const qbyte *pvs, const int *areas)
|
||||
{
|
||||
int i,l;
|
||||
int nullarea = (mod->fromgame == fg_quake2)?0:-1;
|
||||
if (clientarea == ent->areanum)
|
||||
if (areas)
|
||||
{
|
||||
if (clientarea == nullarea)
|
||||
return false;
|
||||
}
|
||||
else if (!CM_AreasConnected (mod, clientarea, ent->areanum))
|
||||
{ // doors can legally straddle two areas, so
|
||||
// we may need to check another one
|
||||
if (ent->areanum2 == nullarea
|
||||
|| !CM_AreasConnected (mod, clientarea, ent->areanum2))
|
||||
return false; // blocked by a door
|
||||
for (i = 1; ; i++)
|
||||
{
|
||||
if (i > areas[0])
|
||||
return false; //none of the camera's areas could see the entity
|
||||
if (areas[i] == ent->areanum)
|
||||
{
|
||||
if (areas[i] != nullarea)
|
||||
break;
|
||||
//else entity is fully outside the world, invisible to all...
|
||||
}
|
||||
else if (CM_AreasConnected (mod, areas[i], ent->areanum))
|
||||
break;
|
||||
// doors can legally straddle two areas, so
|
||||
// we may need to check another one
|
||||
else if (ent->areanum2 != nullarea && CM_AreasConnected (mod, areas[i], ent->areanum2))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ent->num_leafs == -1)
|
||||
|
@ -7564,7 +7575,7 @@ Returns true if any leaf under headnode has a cluster that
|
|||
is potentially visible
|
||||
=============
|
||||
*/
|
||||
qboolean CM_HeadnodeVisible (model_t *mod, int nodenum, qbyte *visbits)
|
||||
qboolean CM_HeadnodeVisible (model_t *mod, int nodenum, const qbyte *visbits)
|
||||
{
|
||||
int leafnum;
|
||||
int cluster;
|
||||
|
@ -7587,7 +7598,7 @@ qboolean CM_HeadnodeVisible (model_t *mod, int nodenum, qbyte *visbits)
|
|||
return CM_HeadnodeVisible(mod, node->childnum[1], visbits);
|
||||
}
|
||||
|
||||
unsigned int Q2BSP_PointContents(model_t *mod, vec3_t axis[3], vec3_t p)
|
||||
unsigned int Q2BSP_PointContents(model_t *mod, const vec3_t axis[3], const vec3_t p)
|
||||
{
|
||||
int pc;
|
||||
pc = CM_PointContents (mod, p);
|
||||
|
|
|
@ -167,7 +167,7 @@ BoxOnPlaneSide
|
|||
Returns 1, 2, or 1 + 2
|
||||
==================
|
||||
*/
|
||||
int VARGS BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, mplane_t *p)
|
||||
int VARGS BoxOnPlaneSide (const vec3_t emins, const vec3_t emaxs, const mplane_t *p)
|
||||
{
|
||||
float dist1, dist2;
|
||||
int sides;
|
||||
|
@ -291,7 +291,7 @@ void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up)
|
|||
CrossProduct(right, forward, up);
|
||||
}
|
||||
|
||||
void QDECL VectorAngles(float *forward, float *up, float *result, qboolean meshpitch) //up may be NULL
|
||||
void QDECL VectorAngles(const float *forward, const float *up, float *result, qboolean meshpitch) //up may be NULL
|
||||
{
|
||||
float yaw, pitch, roll;
|
||||
|
||||
|
@ -583,7 +583,7 @@ void QDECL R_ConcatTransforms (const float in1[3][4], const float in2[3][4], flo
|
|||
}
|
||||
|
||||
//R_ConcatTransforms where there's no offset values, and a transposed axis
|
||||
void R_ConcatTransformsAxis (float in1[3][3], float in2[3][4], float out[3][4])
|
||||
void R_ConcatTransformsAxis (const float in1[3][3], const float in2[3][4], float out[3][4])
|
||||
{
|
||||
out[0][0] = in1[0][0] * in2[0][0] + in1[1][0] * in2[1][0] +
|
||||
in1[2][0] * in2[2][0];
|
||||
|
@ -1910,7 +1910,7 @@ vec_t QDECL VectorNormalize2 (const vec3_t v, vec3_t out)
|
|||
|
||||
return length;
|
||||
}
|
||||
float ColorNormalize (vec3_t in, vec3_t out)
|
||||
float ColorNormalize (const vec3_t in, vec3_t out)
|
||||
{
|
||||
float f = max (max (in[0], in[1]), in[2]);
|
||||
|
||||
|
@ -1928,7 +1928,7 @@ float ColorNormalize (vec3_t in, vec3_t out)
|
|||
return f;
|
||||
}
|
||||
|
||||
void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up)
|
||||
void MakeNormalVectors (const vec3_t forward, vec3_t right, vec3_t up)
|
||||
{
|
||||
float d;
|
||||
|
||||
|
|
|
@ -129,17 +129,17 @@ typedef struct {
|
|||
void AddPointToBounds (const vec3_t v, vec3_t mins, vec3_t maxs);
|
||||
float anglemod (float a);
|
||||
void QDECL AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
||||
void QDECL VectorAngles (float *forward, float *up, float *angles, qboolean meshpitch); //up may be NULL
|
||||
void QDECL VectorAngles (const float *forward, const float *up, float *angles, qboolean meshpitch); //up may be NULL
|
||||
void VARGS BOPS_Error (void);
|
||||
int VARGS BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct mplane_s *plane);
|
||||
int VARGS BoxOnPlaneSide (const vec3_t emins, const vec3_t emaxs, const struct mplane_s *plane);
|
||||
void ClearBounds (vec3_t mins, vec3_t maxs);
|
||||
float ColorNormalize (vec3_t in, vec3_t out);
|
||||
float ColorNormalize (const vec3_t in, vec3_t out);
|
||||
void CrossProduct (const vec3_t v1, const vec3_t v2, vec3_t cross);
|
||||
void FloorDivMod (double numer, double denom, int *quotient, int *rem);
|
||||
int GreatestCommonDivisor (int i1, int i2);
|
||||
fixed16_t Invert24To16 (fixed16_t val);
|
||||
vec_t Length (const vec3_t v);
|
||||
void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up);
|
||||
void MakeNormalVectors (const vec3_t forward, vec3_t right, vec3_t up);
|
||||
float Q_rsqrt(float number);
|
||||
|
||||
/*
|
||||
|
@ -205,7 +205,8 @@ int Q_log2 (int val);
|
|||
void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]);
|
||||
void R_ConcatRotationsPad (float in1[3][4], float in2[3][4], float out[3][4]);
|
||||
void QDECL R_ConcatTransforms (const matrix3x4 in1, const matrix3x4 in2, matrix3x4 out);
|
||||
void R_ConcatTransformsAxis (float in1[3][3], float in2[3][4], float out[3][4]);
|
||||
void R_ConcatTransformsAxis (const float in1[3][3], const float in2[3][4], float out[3][4]);
|
||||
void PerpendicularVector(vec3_t dst, const vec3_t src);
|
||||
void RotatePointAroundVector (vec3_t dst, const vec3_t dir, const vec3_t point, float degrees);
|
||||
void RotateLightVector(const vec3_t *axis, const vec3_t origin, const vec3_t lightpoint, vec3_t result);
|
||||
int VectorCompare (const vec3_t v1, const vec3_t v2);
|
||||
|
|
|
@ -1291,7 +1291,7 @@ static void PM_NudgePosition (void)
|
|||
VectorCopy (pmove.safeorigin, pmove.origin);
|
||||
else
|
||||
VectorCopy (base, pmove.origin);
|
||||
// Com_DPrintf ("NudgePosition: stuck\n");
|
||||
// Con_DPrintf ("NudgePosition: stuck\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
#if !defined(CLIENTONLY) || defined(CSQC_DAT) || defined(MENU_DAT)
|
||||
|
||||
#include "pr_common.h"
|
||||
#ifdef SQL
|
||||
#include "sv_sql.h"
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
|
@ -1122,26 +1125,28 @@ void QCBUILTIN PF_getsurfacepointattribute(pubprogfuncs_t *prinst, struct global
|
|||
}
|
||||
}
|
||||
|
||||
pvsbuffer_t qcpvs;
|
||||
//#240 float(vector viewpos, entity viewee) checkpvs (FTE_QC_CHECKPVS)
|
||||
//note: this requires a correctly setorigined entity.
|
||||
void QCBUILTIN PF_checkpvs(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
world_t *world = prinst->parms->user;
|
||||
model_t *worldmodel = world->worldmodel;
|
||||
float *viewpos = G_VECTOR(OFS_PARM0);
|
||||
wedict_t *ent = G_WEDICT(prinst, OFS_PARM1);
|
||||
int cluster;
|
||||
int qcpvsarea[2];
|
||||
qbyte *pvs;
|
||||
|
||||
if (!world->worldmodel || world->worldmodel->loadstate != MLS_LOADED)
|
||||
if (!worldmodel || worldmodel->loadstate != MLS_LOADED)
|
||||
G_FLOAT(OFS_RETURN) = false;
|
||||
else if (!world->worldmodel->funcs.FatPVS)
|
||||
else if (!worldmodel->funcs.FatPVS)
|
||||
G_FLOAT(OFS_RETURN) = true;
|
||||
else
|
||||
{
|
||||
//FIXME: Make all alternatives of FatPVS not recalulate the pvs.
|
||||
//and yeah, this is overkill what with the whole fat thing and all.
|
||||
world->worldmodel->funcs.FatPVS(world->worldmodel, viewpos, &qcpvs, false);
|
||||
|
||||
G_FLOAT(OFS_RETURN) = world->worldmodel->funcs.EdictInFatPVS(world->worldmodel, &ent->pvsinfo, qcpvs.buffer);
|
||||
qcpvsarea[0] = 1;
|
||||
cluster = worldmodel->funcs.ClusterForPoint(worldmodel, viewpos, &qcpvsarea[1]);
|
||||
pvs = worldmodel->funcs.ClusterPVS(worldmodel, cluster, NULL, PVM_FAST);
|
||||
G_FLOAT(OFS_RETURN) = worldmodel->funcs.EdictInFatPVS(worldmodel, &ent->pvsinfo, pvs, qcpvsarea);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6423,6 +6428,9 @@ void PR_Common_Shutdown(pubprogfuncs_t *progs, qboolean errored)
|
|||
#endif
|
||||
#ifdef TEXTEDITOR
|
||||
Editor_ProgsKilled(progs);
|
||||
#endif
|
||||
#ifdef SQL
|
||||
SQL_KillServers(progs);
|
||||
#endif
|
||||
tokenize_flush();
|
||||
}
|
||||
|
|
|
@ -637,7 +637,7 @@ typedef struct
|
|||
void (QDECL *ReleaseCollisionMesh) (wedict_t *ed);
|
||||
void (QDECL *LinkEdict)(world_t *w, wedict_t *ed, qboolean touchtriggers);
|
||||
|
||||
void (QDECL *VectorAngles)(float *forward, float *up, float *result, qboolean meshpitch);
|
||||
void (QDECL *VectorAngles)(const float *forward, const float *up, float *result, qboolean meshpitch);
|
||||
void (QDECL *AngleVectors)(const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
||||
} rbeplugfuncs_t;
|
||||
#define RBEPLUGFUNCS_VERSION 1
|
||||
|
|
|
@ -1360,6 +1360,7 @@ typedef struct q1usercmd_s
|
|||
#define RDF_ANTIALIAS (1u<<20) //fxaa, or possibly even just fsaa
|
||||
#define RDF_RENDERSCALE (1u<<21)
|
||||
#define RDF_SCENEGAMMA (1u<<22)
|
||||
#define RDF_DISABLEPARTICLES (1u<<23) //mostly for skyrooms
|
||||
|
||||
#define RDF_ALLPOSTPROC (RDF_BLOOM|RDF_FISHEYE|RDF_WATERWARP|RDF_CUSTOMPOSTPROC|RDF_ANTIALIAS|RDF_SCENEGAMMA) //these flags require rendering to an fbo for the various different post-processing shaders.
|
||||
|
||||
|
|
|
@ -671,7 +671,7 @@ void Q1BSP_CheckHullNodes(hull_t *hull)
|
|||
}
|
||||
|
||||
|
||||
static int Q1_ModelPointContents (mnode_t *node, vec3_t p)
|
||||
static int Q1_ModelPointContents (mnode_t *node, const vec3_t p)
|
||||
{
|
||||
float d;
|
||||
mplane_t *plane;
|
||||
|
@ -694,7 +694,7 @@ SV_HullPointContents
|
|||
|
||||
==================
|
||||
*/
|
||||
static int Q1_HullPointContents (hull_t *hull, int num, vec3_t p)
|
||||
static int Q1_HullPointContents (hull_t *hull, int num, const vec3_t p)
|
||||
{
|
||||
float d;
|
||||
mclipnode_t *node;
|
||||
|
@ -754,7 +754,7 @@ struct rhtctx_s
|
|||
mclipnode_t *clipnodes;
|
||||
mplane_t *planes;
|
||||
};
|
||||
static int Q1BSP_RecursiveHullTrace (struct rhtctx_s *ctx, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, trace_t *trace)
|
||||
static int Q1BSP_RecursiveHullTrace (struct rhtctx_s *ctx, int num, float p1f, float p2f, const vec3_t p1, const vec3_t p2, trace_t *trace)
|
||||
{
|
||||
mclipnode_t *node;
|
||||
mplane_t *plane;
|
||||
|
@ -873,7 +873,7 @@ reenter:
|
|||
return rht_impact;
|
||||
}
|
||||
|
||||
qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, vec3_t p1, vec3_t p2, unsigned int hitcontents, trace_t *trace)
|
||||
qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, const vec3_t p1, const vec3_t p2, unsigned int hitcontents, trace_t *trace)
|
||||
{
|
||||
if (VectorEquals(p1, p2))
|
||||
{
|
||||
|
@ -1222,7 +1222,7 @@ static void Q1BSP_InsertBrush(mnode_t *node, mbrush_t *brush, vec3_t bmins, vec3
|
|||
}
|
||||
}
|
||||
}
|
||||
static void Q1BSP_RecursiveBrushCheck (struct traceinfo_s *traceinfo, mnode_t *node, float p1f, float p2f, vec3_t p1, vec3_t p2)
|
||||
static void Q1BSP_RecursiveBrushCheck (struct traceinfo_s *traceinfo, mnode_t *node, float p1f, float p2f, const vec3_t p1, const vec3_t p2)
|
||||
{
|
||||
mplane_t *plane;
|
||||
float t1, t2;
|
||||
|
@ -1366,13 +1366,13 @@ static unsigned int Q1BSP_TranslateContents(int contents)
|
|||
}
|
||||
}
|
||||
|
||||
int Q1BSP_HullPointContents(hull_t *hull, vec3_t p)
|
||||
int Q1BSP_HullPointContents(hull_t *hull, const vec3_t p)
|
||||
{
|
||||
return Q1BSP_TranslateContents(Q1_HullPointContents(hull, hull->firstclipnode, p));
|
||||
}
|
||||
|
||||
#ifdef Q1BSPS
|
||||
unsigned int Q1BSP_PointContents(model_t *model, vec3_t axis[3], vec3_t point)
|
||||
unsigned int Q1BSP_PointContents(model_t *model, const vec3_t axis[3], const vec3_t point)
|
||||
{
|
||||
int contents;
|
||||
if (axis)
|
||||
|
@ -1513,7 +1513,7 @@ void Q1BSP_LoadBrushes(model_t *model, bspx_header_t *bspx, void *mod_base)
|
|||
model->engineflags |= MDLF_HASBRUSHES;
|
||||
}
|
||||
|
||||
hull_t *Q1BSP_ChooseHull(model_t *model, int forcehullnum, vec3_t mins, vec3_t maxs, vec3_t offset)
|
||||
hull_t *Q1BSP_ChooseHull(model_t *model, int forcehullnum, const vec3_t mins, const vec3_t maxs, vec3_t offset)
|
||||
{
|
||||
hull_t *hull;
|
||||
vec3_t size;
|
||||
|
@ -1559,7 +1559,7 @@ hull_t *Q1BSP_ChooseHull(model_t *model, int forcehullnum, vec3_t mins, vec3_t m
|
|||
VectorSubtract (hull->clip_mins, mins, offset);
|
||||
return hull;
|
||||
}
|
||||
qboolean Q1BSP_Trace(model_t *model, int forcehullnum, framestate_t *framestate, vec3_t axis[3], vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, qboolean capsule, unsigned int hitcontentsmask, trace_t *trace)
|
||||
qboolean Q1BSP_Trace(model_t *model, int forcehullnum, const framestate_t *framestate, const vec3_t axis[3], const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, qboolean capsule, unsigned int hitcontentsmask, trace_t *trace)
|
||||
{
|
||||
hull_t *hull;
|
||||
vec3_t start_l, end_l;
|
||||
|
@ -1779,7 +1779,7 @@ Server only functions
|
|||
static qbyte *Q1BSP_ClusterPVS (model_t *model, int cluster, pvsbuffer_t *buffer, pvsmerge_t merge);
|
||||
|
||||
//does the recursive work of Q1BSP_FatPVS
|
||||
static void SV_Q1BSP_AddToFatPVS (model_t *mod, vec3_t org, mnode_t *node, pvsbuffer_t *pvsbuffer)
|
||||
static void SV_Q1BSP_AddToFatPVS (model_t *mod, const vec3_t org, mnode_t *node, pvsbuffer_t *pvsbuffer)
|
||||
{
|
||||
mplane_t *plane;
|
||||
float d;
|
||||
|
@ -1818,7 +1818,7 @@ Calculates a PVS that is the inclusive or of all leafs within 8 pixels of the
|
|||
given point.
|
||||
=============
|
||||
*/
|
||||
static unsigned int Q1BSP_FatPVS (model_t *mod, vec3_t org, pvsbuffer_t *pvsbuffer, qboolean add)
|
||||
static unsigned int Q1BSP_FatPVS (model_t *mod, const vec3_t org, pvsbuffer_t *pvsbuffer, qboolean add)
|
||||
{
|
||||
if (pvsbuffer->buffersize < mod->pvsbytes)
|
||||
pvsbuffer->buffer = BZ_Realloc(pvsbuffer->buffer, pvsbuffer->buffersize=mod->pvsbytes);
|
||||
|
@ -1829,10 +1829,12 @@ static unsigned int Q1BSP_FatPVS (model_t *mod, vec3_t org, pvsbuffer_t *pvsbuff
|
|||
}
|
||||
|
||||
#endif
|
||||
static qboolean Q1BSP_EdictInFatPVS(model_t *mod, struct pvscache_s *ent, qbyte *pvs)
|
||||
static qboolean Q1BSP_EdictInFatPVS(model_t *mod, const struct pvscache_s *ent, const qbyte *pvs, const int *areas)
|
||||
{
|
||||
int i;
|
||||
|
||||
//if (areas)areas[0] is the area count... but q1bsp has no areas so we ignore it entirely.
|
||||
|
||||
if (ent->num_leafs < 0)
|
||||
return true; //it's in too many leafs for us to cope with. Just trivially accept it.
|
||||
|
||||
|
@ -1850,7 +1852,7 @@ SV_FindTouchedLeafs
|
|||
Links the edict to the right leafs so we can get it's potential visability.
|
||||
===============
|
||||
*/
|
||||
static void Q1BSP_RFindTouchedLeafs (model_t *wm, struct pvscache_s *ent, mnode_t *node, float *mins, float *maxs)
|
||||
static void Q1BSP_RFindTouchedLeafs (model_t *wm, struct pvscache_s *ent, mnode_t *node, const float *mins, const float *maxs)
|
||||
{
|
||||
mplane_t *splitplane;
|
||||
mleaf_t *leaf;
|
||||
|
@ -1891,7 +1893,7 @@ static void Q1BSP_RFindTouchedLeafs (model_t *wm, struct pvscache_s *ent, mnode_
|
|||
if (sides & 2)
|
||||
Q1BSP_RFindTouchedLeafs (wm, ent, node->children[1], mins, maxs);
|
||||
}
|
||||
static void Q1BSP_FindTouchedLeafs(model_t *mod, struct pvscache_s *ent, float *mins, float *maxs)
|
||||
static void Q1BSP_FindTouchedLeafs(model_t *mod, struct pvscache_s *ent, const float *mins, const float *maxs)
|
||||
{
|
||||
ent->num_leafs = 0;
|
||||
if (mins && maxs)
|
||||
|
@ -2085,7 +2087,7 @@ mleaf_t *Q1BSP_LeafForPoint (model_t *model, vec3_t p)
|
|||
return model->leafs + Q1BSP_LeafnumForPoint(model, p);
|
||||
}
|
||||
|
||||
static void Q1BSP_ClustersInSphere_Union(mleaf_t *firstleaf, vec3_t center, float radius, mnode_t *node, qbyte *out, qbyte *unionwith)
|
||||
static void Q1BSP_ClustersInSphere_Union(mleaf_t *firstleaf, const vec3_t center, float radius, mnode_t *node, qbyte *out, qbyte *unionwith)
|
||||
{ //this is really for rtlights.
|
||||
float t1, t2;
|
||||
mplane_t *plane;
|
||||
|
@ -2129,7 +2131,7 @@ static void Q1BSP_ClustersInSphere_Union(mleaf_t *firstleaf, vec3_t center, floa
|
|||
continue;
|
||||
}
|
||||
}
|
||||
static qbyte *Q1BSP_ClustersInSphere(model_t *mod, vec3_t center, float radius, pvsbuffer_t *pvsbuffer, qbyte *unionwith)
|
||||
static qbyte *Q1BSP_ClustersInSphere(model_t *mod, const vec3_t center, float radius, pvsbuffer_t *fte_restrict pvsbuffer, const qbyte *unionwith)
|
||||
{
|
||||
if (!mod)
|
||||
Sys_Error ("Mod_PointInLeaf: bad model");
|
||||
|
@ -2145,7 +2147,7 @@ static qbyte *Q1BSP_ClustersInSphere(model_t *mod, vec3_t center, float radius,
|
|||
|
||||
//returns the leaf number, which is used as a direct bit index into the pvs.
|
||||
//-1 for invalid
|
||||
static int Q1BSP_ClusterForPoint (model_t *model, vec3_t p)
|
||||
static int Q1BSP_ClusterForPoint (model_t *model, const vec3_t p, int *area)
|
||||
{
|
||||
mnode_t *node;
|
||||
float d;
|
||||
|
@ -2155,6 +2157,8 @@ static int Q1BSP_ClusterForPoint (model_t *model, vec3_t p)
|
|||
{
|
||||
Sys_Error ("Mod_PointInLeaf: bad model");
|
||||
}
|
||||
if (area)
|
||||
*area = 0; //no areas with q1bsp.
|
||||
if (!model->nodes)
|
||||
return -1;
|
||||
|
||||
|
|
|
@ -1722,4 +1722,26 @@ void MSG_Q3_ReadDeltaUsercmd(int key, const usercmd_t *from, usercmd_t *to)
|
|||
}
|
||||
}
|
||||
|
||||
qint64_t Q3VM_GetRealtime(q3time_t *qtime)
|
||||
{ //this is useful mostly for saved games, or other weird stuff.
|
||||
time_t t = time(NULL);
|
||||
if (qtime)
|
||||
{
|
||||
struct tm *tm = localtime(&t);
|
||||
if (tm)
|
||||
{
|
||||
qtime->tm_sec = tm->tm_sec;
|
||||
qtime->tm_hour = tm->tm_hour;
|
||||
qtime->tm_mday = tm->tm_mday;
|
||||
qtime->tm_mon = tm->tm_mon;
|
||||
qtime->tm_year = tm->tm_year;
|
||||
qtime->tm_wday = tm->tm_wday;
|
||||
qtime->tm_yday = tm->tm_yday;
|
||||
qtime->tm_isdst = tm->tm_isdst;
|
||||
}
|
||||
else
|
||||
memset(qtime, 0, sizeof(*qtime));
|
||||
}
|
||||
return t;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -371,7 +371,7 @@ pubsubserver_t *Sys_ForkServer(void)
|
|||
DL_DeThread();
|
||||
#endif
|
||||
#ifdef SQL
|
||||
SQL_KillServers(); //FIXME: this is bad...
|
||||
SQL_KillServers(NULL); //FIXME: this is bad...
|
||||
#endif
|
||||
//FIXME: we should probably use posix_atfork for those.
|
||||
|
||||
|
|
|
@ -124,4 +124,17 @@ typedef struct {
|
|||
int VMQ3_Cvar_Register(q3vmcvar_t *v, char *name, char *defval, int flags);
|
||||
int VMQ3_Cvar_Update(q3vmcvar_t *v);
|
||||
|
||||
typedef struct {
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
int tm_hour;
|
||||
int tm_mday;
|
||||
int tm_mon;
|
||||
int tm_year;
|
||||
int tm_wday;
|
||||
int tm_yday;
|
||||
int tm_isdst;
|
||||
} q3time_t;
|
||||
qint64_t Q3VM_GetRealtime(q3time_t *qtime);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -361,14 +361,14 @@ typedef struct q2edict_s q2edict_t;
|
|||
|
||||
void VARGS WorldQ2_LinkEdict(world_t *w, q2edict_t *ent);
|
||||
void VARGS WorldQ2_UnlinkEdict(world_t *w, q2edict_t *ent);
|
||||
int VARGS WorldQ2_AreaEdicts (world_t *w, vec3_t mins, vec3_t maxs, q2edict_t **list,
|
||||
int VARGS WorldQ2_AreaEdicts (world_t *w, const vec3_t mins, const vec3_t maxs, q2edict_t **list,
|
||||
int maxcount, int areatype);
|
||||
trace_t WorldQ2_Move (world_t *w, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int hitcontentsmask, q2edict_t *passedict);
|
||||
#endif
|
||||
#if defined(Q2BSPS) || defined(Q3BSPS)
|
||||
unsigned int Q23BSP_FatPVS(model_t *mod, vec3_t org, pvsbuffer_t *buffer, qboolean merge);
|
||||
qboolean Q23BSP_EdictInFatPVS(model_t *mod, struct pvscache_s *ent, qbyte *pvs);
|
||||
void Q23BSP_FindTouchedLeafs(model_t *mod, struct pvscache_s *ent, float *mins, float *maxs);
|
||||
unsigned int Q23BSP_FatPVS(model_t *mod, const vec3_t org, pvsbuffer_t *buffer, qboolean merge);
|
||||
qboolean Q23BSP_EdictInFatPVS(model_t *mod, const struct pvscache_s *ent, const qbyte *pvs, const int *areas);
|
||||
void Q23BSP_FindTouchedLeafs(model_t *mod, struct pvscache_s *ent, const float *mins, const float *maxs);
|
||||
#endif
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue