X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=progs.h;h=a8a5f3b7d0320ed07f1db3a391abae9bc9df7756;hp=85a0e3a9d500c7e85fe66c539e5b317dd0c934a7;hb=7139b3ada26cb263795aa7f965197428c4c7ea7d;hpb=fb5638603d5fb14033bb41a99dbaba135b5e7985 diff --git a/progs.h b/progs.h index 85a0e3a9..a8a5f3b7 100644 --- a/progs.h +++ b/progs.h @@ -30,6 +30,7 @@ typedef union eval_s float _float; float vector[3]; func_t function; + int ivector[3]; int _int; int edict; } eval_t; @@ -39,21 +40,33 @@ typedef struct link_s struct link_s *prev, *next; } link_t; -// LordHavoc: increased number of leafs per entity limit from 16 to 256 -#define MAX_ENT_LEAFS 256 +// the entire server entity structure typedef struct edict_s { - qboolean free; // true if this edict is unused - link_t area; // physics area this edict is linked into + // true if this edict is unused + qboolean free; + // physics area this edict is linked into + link_t area; + // old entity protocol, not used #ifdef QUAKEENTITIES - entity_state_t baseline; // baseline values - entity_state_t deltabaseline; // LordHavoc: previous frame + // baseline values + entity_state_t baseline; + // LordHavoc: previous frame + entity_state_t deltabaseline; #endif - int suspendedinairflag; // LordHavoc: gross hack to make floating items still work - float freetime; // sv.time when the object was freed - entvars_t *v; // edict fields + // LordHavoc: gross hack to make floating items still work + int suspendedinairflag; + // sv.time when the object was freed (to prevent early reuse which could + // mess up client interpolation or obscure severe QuakeC bugs) + float freetime; + // used by PushMove to keep track of where objects were before they were + // moved, in case they need to be moved back + vec3_t moved_from; + vec3_t moved_fromangles; + // edict fields (stored in another array) + entvars_t *v; } edict_t; // LordHavoc: in an effort to eliminate time wasted on GetEdictFieldValue... see pr_edict.c for the functions which use these. @@ -155,14 +168,14 @@ edict_t *PROG_TO_EDICT(int n); #define G_EDICT(o) (PROG_TO_EDICT(*(int *)&pr_globals[o])) #define G_EDICTNUM(o) NUM_FOR_EDICT(G_EDICT(o)) #define G_VECTOR(o) (&pr_globals[o]) -#define G_STRING(o) (pr_strings + *(string_t *)&pr_globals[o]) +#define G_STRING(o) (PR_GetString(*(string_t *)&pr_globals[o])) //#define G_FUNCTION(o) (*(func_t *)&pr_globals[o]) // FIXME: make these go away? #define E_FLOAT(e,o) (((float*)e->v)[o]) //#define E_INT(e,o) (((int*)e->v)[o]) //#define E_VECTOR(e,o) (&((float*)e->v)[o]) -#define E_STRING(e,o) (pr_strings + *(string_t *)&((float*)e->v)[o]) +#define E_STRING(e,o) (PR_GetString(*(string_t *)&((float*)e->v)[o])) extern int type_size[8]; @@ -172,7 +185,7 @@ extern int pr_numbuiltins; extern int pr_argc; -extern qboolean pr_trace; +extern int pr_trace; extern dfunction_t *pr_xfunction; extern int pr_xstatement; @@ -183,5 +196,8 @@ void PR_Execute_ProgsLoaded(void); void ED_PrintEdicts (void); void ED_PrintNum (int ent); +#define PR_GetString(num) (pr_strings + num) +#define PR_SetString(s) ((int) (s - pr_strings)) + #endif