diff --git a/engine/client/pr_csqc.c b/engine/client/pr_csqc.c index b67ac6024..22285a3d6 100644 --- a/engine/client/pr_csqc.c +++ b/engine/client/pr_csqc.c @@ -354,86 +354,6 @@ static void CSQC_FindGlobals(qboolean nofuncs) *csqcg.maxclients = cl.allocated_client_slots; } - - -//note: doesn't even have to match the clprogs.dat :) -typedef struct { - -#define comfieldfloat(csqcname,desc) float csqcname; -#define comfieldvector(csqcname,desc) vec3_t csqcname; -#define comfieldentity(csqcname,desc) int csqcname; -#define comfieldstring(csqcname,desc) string_t csqcname; -#define comfieldfunction(csqcname, typestr,desc) func_t csqcname; -comqcfields -#undef comfieldfloat -#undef comfieldvector -#undef comfieldentity -#undef comfieldstring -#undef comfieldfunction - -#ifdef VM_Q1 -} csqcentvars_t; -typedef struct { -#endif - -#define comfieldfloat(name,desc) float name; -#define comfieldint(name,desc) int name; -#define comfieldvector(name,desc) vec3_t name; -#define comfieldentity(name,desc) int name; -#define comfieldstring(name,desc) string_t name; -#define comfieldfunction(name, typestr,desc) func_t name; -comextqcfields -csqcextfields -#undef comfieldfloat -#undef comfieldint -#undef comfieldvector -#undef comfieldentity -#undef comfieldstring -#undef comfieldfunction - -#ifdef VM_Q1 -} csqcextentvars_t; -#else -} csqcentvars_t; -#endif - -typedef struct csqcedict_s -{ - enum ereftype_e ereftype; - float freetime; // sv.time when the object was freed - int entnum; - unsigned int fieldsize; - pbool readonly; //world -#ifdef VM_Q1 - csqcentvars_t *v; - csqcextentvars_t *xv; -#else - union { - csqcentvars_t *v; - csqcentvars_t *xv; - }; -#endif - /*the above is shared with qclib*/ -#ifdef USEAREAGRID - areagridlink_t gridareas[AREAGRIDPERENT]; //on overflow, use the inefficient overflow list. - size_t gridareasequence; //used to avoid iterrating the same ent twice. -#else - link_t area; -#endif - pvscache_t pvsinfo; - int lastruntime; - int solidsize; -#ifdef USERBE - entityrbe_t rbe; -#endif - /*the above is shared with ssqc*/ - - //add whatever you wish here - trailkey_t trailstate; - int skinobject; -} csqcedict_t; - - static void CSQC_InitFields(void) { //CHANGING THIS FUNCTION REQUIRES CHANGES TO csqcentvars_t #define comfieldfloat(name,desc) PR_RegisterFieldVar(csqcprogs, ev_float, #name, (size_t)&((csqcentvars_t*)0)->name, -1); diff --git a/engine/common/pr_common.h b/engine/common/pr_common.h index 897bad1fb..dc248c05b 100644 --- a/engine/common/pr_common.h +++ b/engine/common/pr_common.h @@ -1176,6 +1176,84 @@ enum ENDLIST +//note: doesn't even have to match the clprogs.dat :) +typedef struct { + +#define comfieldfloat(csqcname,desc) float csqcname; +#define comfieldvector(csqcname,desc) vec3_t csqcname; +#define comfieldentity(csqcname,desc) int csqcname; +#define comfieldstring(csqcname,desc) string_t csqcname; +#define comfieldfunction(csqcname, typestr,desc) func_t csqcname; +comqcfields +#undef comfieldfloat +#undef comfieldvector +#undef comfieldentity +#undef comfieldstring +#undef comfieldfunction + +#ifdef VM_Q1 +} csqcentvars_t; +typedef struct { +#endif + +#define comfieldfloat(name,desc) float name; +#define comfieldint(name,desc) int name; +#define comfieldvector(name,desc) vec3_t name; +#define comfieldentity(name,desc) int name; +#define comfieldstring(name,desc) string_t name; +#define comfieldfunction(name, typestr,desc) func_t name; +comextqcfields +csqcextfields +#undef comfieldfloat +#undef comfieldint +#undef comfieldvector +#undef comfieldentity +#undef comfieldstring +#undef comfieldfunction + +#ifdef VM_Q1 +} csqcextentvars_t; +#else +} csqcentvars_t; +#endif + +typedef struct csqcedict_s +{ + enum ereftype_e ereftype; + float freetime; // sv.time when the object was freed + int entnum; + unsigned int fieldsize; + pbool readonly; //world +#ifdef VM_Q1 + csqcentvars_t *v; + csqcextentvars_t *xv; +#else + union { + csqcentvars_t *v; + csqcentvars_t *xv; + }; +#endif + /*the above is shared with qclib*/ +#ifdef USEAREAGRID + areagridlink_t gridareas[AREAGRIDPERENT]; //on overflow, use the inefficient overflow list. + size_t gridareasequence; //used to avoid iterrating the same ent twice. +#else + link_t area; +#endif + pvscache_t pvsinfo; + int lastruntime; + int solidsize; +#ifdef USERBE + entityrbe_t rbe; +#endif + /*the above is shared with ssqc*/ + + //add whatever you wish here + trailkey_t trailstate; + int skinobject; +} csqcedict_t; + + #ifdef __cplusplus }; #endif diff --git a/engine/server/world.c b/engine/server/world.c index a198ba815..5b4e616b6 100644 --- a/engine/server/world.c +++ b/engine/server/world.c @@ -2137,13 +2137,22 @@ static void World_ClipToNetwork (world_t *w, moveclip_t *clip) float *ang; trace_t trace; static framestate_t framestate; //meh + int skip; if ((clip->type & MOVE_ENTCHAIN) || !pe) return; + skip = ((csqcedict_t*)clip->passedict)->xv->entnum; + + //lets say that ssqc ents are in dimension 0x1, as far as the csqc can see. + if (clip->passedict && !((int)clip->passedict->xv->dimension_hit & 1)) + return; + for (i = 0; i < pe->num_entities; i++) { touch = &pe->entities[i]; + if (touch->number == skip) + continue; //can happen with deltalisten or certain evil hacks. if (touch->solidsize == ES_SOLID_BSP) { @@ -2225,10 +2234,6 @@ static void World_ClipToNetwork (world_t *w, moveclip_t *clip) || clip->boxmaxs[2] < touch->origin[2]+bmins[2] ) continue; - //lets say that ssqc ents are in dimension 0x1, as far as the csqc can see. - if (clip->passedict && !((int)clip->passedict->xv->dimension_hit & 1)) - continue; - framestate.g[FS_REG].frame[0] = touch->frame; framestate.g[FS_REG].lerpweight[0] = 1;