Try to switch some types in preparation for potentially switching to 64bit types (so qc timer can use doubles for longer map uptime).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5718 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2020-06-27 19:32:49 +00:00
parent ee55057f8d
commit 856cad09cc
30 changed files with 384 additions and 406 deletions

View file

@ -184,7 +184,7 @@ static void bonemat_fromidentity(float *out)
out[10] = 1; out[10] = 1;
out[11] = 0; out[11] = 0;
} }
static void bonemat_fromqcvectors(float *out, const float vx[3], const float vy[3], const float vz[3], const float t[3]) static void bonemat_fromqcvectors(float *out, const pvec_t vx[3], const pvec_t vy[3], const pvec_t vz[3], const pvec_t t[3])
{ {
out[0] = vx[0]; out[0] = vx[0];
out[1] = -vy[0]; out[1] = -vy[0];
@ -227,7 +227,7 @@ static void bonemat_fromentity(world_t *w, wedict_t *ed, float *trans)
AngleVectors(a, d[0], d[1], d[2]); AngleVectors(a, d[0], d[1], d[2]);
bonemat_fromqcvectors(trans, d[0], d[1], d[2], ed->v->origin); bonemat_fromqcvectors(trans, d[0], d[1], d[2], ed->v->origin);
} }
static void bonemat_toqcvectors(const float *in, float vx[3], float vy[3], float vz[3], float t[3]) static void bonemat_toqcvectors(const float *in, pvec_t vx[3], pvec_t vy[3], pvec_t vz[3], pvec_t t[3])
{ {
vx[0] = in[0]; vx[0] = in[0];
vx[1] = in[4]; vx[1] = in[4];
@ -1680,7 +1680,7 @@ void QCBUILTIN PF_skel_ragedit(pubprogfuncs_t *prinst, struct globalvars_s *pr_g
doll_t *doll; doll_t *doll;
float emat[12]; float emat[12];
vec3_t d[3], a; pvec3_t d[3], a;
//fixme: respond to renderflags&USEAXIS? scale? //fixme: respond to renderflags&USEAXIS? scale?
a[0] = wed->v->angles[0] * r_meshpitch.value; /*mod_alias bug*/ a[0] = wed->v->angles[0] * r_meshpitch.value; /*mod_alias bug*/
a[1] = wed->v->angles[1]; a[1] = wed->v->angles[1];
@ -2327,7 +2327,7 @@ void QCBUILTIN PF_skel_set_bone_world (pubprogfuncs_t *prinst, struct globalvars
world_t *w = prinst->parms->user; world_t *w = prinst->parms->user;
wedict_t *ent = G_WEDICT(prinst, OFS_PARM0); wedict_t *ent = G_WEDICT(prinst, OFS_PARM0);
unsigned int boneidx = G_FLOAT(OFS_PARM1)-1; unsigned int boneidx = G_FLOAT(OFS_PARM1)-1;
float *matrix[3]; pvec_t *matrix[3];
skelobject_t *skelobj; skelobject_t *skelobj;
float *bone; float *bone;
float childworld[12], parentinv[12]; float childworld[12], parentinv[12];
@ -2335,7 +2335,7 @@ void QCBUILTIN PF_skel_set_bone_world (pubprogfuncs_t *prinst, struct globalvars
/*sort out the parameters*/ /*sort out the parameters*/
if (prinst->callargc == 4) if (prinst->callargc == 4)
{ {
vec3_t d[3], a; pvec3_t d[3], a;
a[0] = G_VECTOR(OFS_PARM3)[0] * r_meshpitch.value; /*mod_alias bug*/ a[0] = G_VECTOR(OFS_PARM3)[0] * r_meshpitch.value; /*mod_alias bug*/
a[1] = G_VECTOR(OFS_PARM3)[1]; a[1] = G_VECTOR(OFS_PARM3)[1];
a[2] = G_VECTOR(OFS_PARM3)[2]; a[2] = G_VECTOR(OFS_PARM3)[2];

View file

@ -936,7 +936,7 @@ void MSG_WriteString (sizebuf_t *sb, const char *s)
SZ_Write (sb, s, Q_strlen(s)+1); SZ_Write (sb, s, Q_strlen(s)+1);
} }
float MSG_FromCoord(coorddata c, int type) vec_t MSG_FromCoord(coorddata c, int type)
{ {
switch(type) switch(type)
{ {

View file

@ -14,7 +14,6 @@
#define VMUTF8 utf8_enable.ival #define VMUTF8 utf8_enable.ival
#define VMUTF8MARKUP false #define VMUTF8MARKUP false
static char *cvargroup_progs = "Progs variables"; static char *cvargroup_progs = "Progs variables";
cvar_t utf8_enable = CVARD("utf8_enable", "0", "When 1, changes the qc builtins to act upon codepoints instead of bytes. Do not use unless com_parseutf8 is also set."); cvar_t utf8_enable = CVARD("utf8_enable", "0", "When 1, changes the qc builtins to act upon codepoints instead of bytes. Do not use unless com_parseutf8 is also set.");
@ -812,7 +811,7 @@ void QCBUILTIN PF_getsurfacetexture(pubprogfuncs_t *prinst, struct globalvars_s
(n)[1] = ((a)[2] - (b)[2]) * ((c)[0] - (b)[0]) - ((a)[0] - (b)[0]) * ((c)[2] - (b)[2]), \ (n)[1] = ((a)[2] - (b)[2]) * ((c)[0] - (b)[0]) - ((a)[0] - (b)[0]) * ((c)[2] - (b)[2]), \
(n)[2] = ((a)[0] - (b)[0]) * ((c)[1] - (b)[1]) - ((a)[1] - (b)[1]) * ((c)[0] - (b)[0]) \ (n)[2] = ((a)[0] - (b)[0]) * ((c)[1] - (b)[1]) - ((a)[1] - (b)[1]) * ((c)[0] - (b)[0]) \
) )
static float getsurface_clippointpoly(model_t *model, msurface_t *surf, vec3_t point, vec3_t bestcpoint, float bestdist) static float getsurface_clippointpoly(model_t *model, msurface_t *surf, pvec3_t point, pvec3_t bestcpoint, float bestdist)
{ {
int e, edge; int e, edge;
vec3_t edgedir, edgenormal, cpoint, temp; vec3_t edgedir, edgenormal, cpoint, temp;
@ -861,7 +860,7 @@ static float getsurface_clippointpoly(model_t *model, msurface_t *surf, vec3_t p
} }
return bestdist; return bestdist;
} }
static float getsurface_clippointtri(model_t *model, msurface_t *surf, vec3_t point, vec3_t bestcpoint, float bestdist) static float getsurface_clippointtri(model_t *model, msurface_t *surf, pvec3_t point, pvec3_t bestcpoint, float bestdist)
{ {
int j; int j;
mesh_t *mesh = surf->mesh; mesh_t *mesh = surf->mesh;
@ -916,12 +915,12 @@ static float getsurface_clippointtri(model_t *model, msurface_t *surf, vec3_t po
} }
return bestdist; return bestdist;
} }
msurface_t *Mod_GetSurfaceNearPoint(model_t *model, vec3_t point) msurface_t *Mod_GetSurfaceNearPoint(model_t *model, pvec3_t point)
{ {
msurface_t *surf; msurface_t *surf;
int i; int i;
vec3_t cpoint = {0,0,0}; pvec3_t cpoint = {0,0,0};
float bestdist = 0x7fffffff, dist; float bestdist = 0x7fffffff, dist;
msurface_t *bestsurf = NULL; msurface_t *bestsurf = NULL;
@ -959,7 +958,7 @@ msurface_t *Mod_GetSurfaceNearPoint(model_t *model, vec3_t point)
void QCBUILTIN PF_getsurfacenearpoint(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_getsurfacenearpoint(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
wedict_t *ent = G_WEDICT(prinst, OFS_PARM0); wedict_t *ent = G_WEDICT(prinst, OFS_PARM0);
float *point = G_VECTOR(OFS_PARM1); pvec_t *point = G_VECTOR(OFS_PARM1);
world_t *w = prinst->parms->user; world_t *w = prinst->parms->user;
model_t *model = w->Get_CModel(w, ent->v->modelindex); model_t *model = w->Get_CModel(w, ent->v->modelindex);
@ -984,7 +983,7 @@ void QCBUILTIN PF_getsurfaceclippedpoint(pubprogfuncs_t *prinst, struct globalva
unsigned int surfnum; unsigned int surfnum;
world_t *w = prinst->parms->user; world_t *w = prinst->parms->user;
float *result = G_VECTOR(OFS_RETURN); pvec_t *result = G_VECTOR(OFS_RETURN);
ent = G_WEDICT(prinst, OFS_PARM0); ent = G_WEDICT(prinst, OFS_PARM0);
surfnum = G_FLOAT(OFS_PARM1); surfnum = G_FLOAT(OFS_PARM1);
@ -1145,7 +1144,7 @@ void QCBUILTIN PF_checkpvs(pubprogfuncs_t *prinst, struct globalvars_s *pr_globa
{ {
world_t *world = prinst->parms->user; world_t *world = prinst->parms->user;
model_t *worldmodel = world->worldmodel; model_t *worldmodel = world->worldmodel;
float *viewpos = G_VECTOR(OFS_PARM0); VM_VECTORARG(viewpos, OFS_PARM0);
wedict_t *ent = G_WEDICT(prinst, OFS_PARM1); wedict_t *ent = G_WEDICT(prinst, OFS_PARM1);
int cluster; int cluster;
int qcpvsarea[2]; int qcpvsarea[2];
@ -1227,7 +1226,7 @@ void QCBUILTIN PF_touchtriggers(pubprogfuncs_t *prinst, struct globalvars_s *pr_
//Finding //Finding
//entity(string field, float match) findchainflags = #450 //entity(string field, float match) findchainflags = #450
//chained search for float, int, and entity reference fields //chained search for float reference fields
void QCBUILTIN PF_findchainflags (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_findchainflags (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
int i, ff, cf; int i, ff, cf;
@ -1241,17 +1240,17 @@ void QCBUILTIN PF_findchainflags (pubprogfuncs_t *prinst, struct globalvars_s *p
if (prinst->callargc > 2) if (prinst->callargc > 2)
cf = G_INT(OFS_PARM2)+prinst->fieldadjust; cf = G_INT(OFS_PARM2)+prinst->fieldadjust;
else else
cf = &((comentvars_t*)NULL)->chain - (int*)NULL; cf = &((comentvars_t*)NULL)->chain - (pint_t*)NULL;
for (i = 1; i < *prinst->parms->num_edicts; i++) for (i = 1; i < *prinst->parms->num_edicts; i++)
{ {
ent = WEDICT_NUM_PB(prinst, i); ent = WEDICT_NUM_PB(prinst, i);
if (ED_ISFREE(ent)) if (ED_ISFREE(ent))
continue; continue;
if (!((int)((float *)ent->v)[ff] & s)) if (!((int)((pvec_t *)ent->v)[ff] & s))
continue; continue;
((int*)ent->v)[cf] = EDICT_TO_PROG(prinst, chain); ((pint_t*)ent->v)[cf] = EDICT_TO_PROG(prinst, chain);
chain = ent; chain = ent;
} }
@ -1259,6 +1258,7 @@ void QCBUILTIN PF_findchainflags (pubprogfuncs_t *prinst, struct globalvars_s *p
} }
//entity(string field, float match) findchainfloat = #403 //entity(string field, float match) findchainfloat = #403
//chained search for float, int, and entity reference fields
void QCBUILTIN PF_findchainfloat (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_findchainfloat (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
int i, ff, cf; int i, ff, cf;
@ -1272,17 +1272,17 @@ void QCBUILTIN PF_findchainfloat (pubprogfuncs_t *prinst, struct globalvars_s *p
if (prinst->callargc > 2) if (prinst->callargc > 2)
cf = G_INT(OFS_PARM2)+prinst->fieldadjust; cf = G_INT(OFS_PARM2)+prinst->fieldadjust;
else else
cf = &((comentvars_t*)NULL)->chain - (int*)NULL; cf = &((comentvars_t*)NULL)->chain - (pint_t*)NULL;
for (i = 1; i < *prinst->parms->num_edicts; i++) for (i = 1; i < *prinst->parms->num_edicts; i++)
{ {
ent = WEDICT_NUM_PB(prinst, i); ent = WEDICT_NUM_PB(prinst, i);
if (ED_ISFREE(ent)) if (ED_ISFREE(ent))
continue; continue;
if (((float *)ent->v)[ff] != s) if (((pvec_t *)ent->v)[ff] != s)
continue; continue;
((int*)ent->v)[cf] = EDICT_TO_PROG(prinst, chain); ((pint_t*)ent->v)[cf] = EDICT_TO_PROG(prinst, chain);
chain = ent; chain = ent;
} }
@ -3330,8 +3330,8 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
extern cvar_t dpcompat_findradiusarealinks; extern cvar_t dpcompat_findradiusarealinks;
wedict_t *ent, *chain; wedict_t *ent, *chain;
float rad; float rad;
float *org; pvec_t *org;
vec3_t eorg; pvec3_t eorg;
int i, j; int i, j;
int f; int f;
@ -3343,14 +3343,13 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
if (prinst->callargc > 2) if (prinst->callargc > 2)
f = G_INT(OFS_PARM2)+prinst->fieldadjust; f = G_INT(OFS_PARM2)+prinst->fieldadjust;
else else
f = &((comentvars_t*)NULL)->chain - (int*)NULL; f = &((comentvars_t*)NULL)->chain - (pint_t*)NULL;
if (dpcompat_findradiusarealinks.ival) if (dpcompat_findradiusarealinks.ival)
{ {
static wedict_t *nearent[32768]; static wedict_t *nearent[32768];
vec3_t mins, maxs; vec3_t mins, maxs;
int numents; int numents;
extern int World_AreaEdicts (world_t *w, vec3_t mins, vec3_t maxs, wedict_t **list, int maxcount, int areatype);
mins[0] = org[0] - rad; mins[0] = org[0] - rad;
mins[1] = org[1] - rad; mins[1] = org[1] - rad;
@ -3364,7 +3363,7 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
for (i=0 ; i<numents ; i++) for (i=0 ; i<numents ; i++)
{ {
ent = nearent[i]; ent = nearent[i];
if (ent->v->solid == SOLID_NOT && (!((int)ent->v->flags & FL_FINDABLE_NONSOLID)) && !sv_gameplayfix_blowupfallenzombies.ival) if (ent->v->solid == SOLID_NOT && (!((pint_t)ent->v->flags & FL_FINDABLE_NONSOLID)) && !sv_gameplayfix_blowupfallenzombies.ival)
continue; continue;
if (sv_gameplayfix_findradiusdistancetobox.ival) if (sv_gameplayfix_findradiusdistancetobox.ival)
{ {
@ -3382,7 +3381,7 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
if (DotProduct(eorg,eorg) > rad) if (DotProduct(eorg,eorg) > rad)
continue; continue;
((int*)ent->v)[f] = EDICT_TO_PROG(prinst, chain); ((pint_t*)ent->v)[f] = EDICT_TO_PROG(prinst, chain);
chain = ent; chain = ent;
} }
} }
@ -3394,7 +3393,7 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
ent = WEDICT_NUM_PB(prinst, i); ent = WEDICT_NUM_PB(prinst, i);
if (ED_ISFREE(ent)) if (ED_ISFREE(ent))
continue; continue;
if (ent->v->solid == SOLID_NOT && (!((int)ent->v->flags & FL_FINDABLE_NONSOLID)) && !sv_gameplayfix_blowupfallenzombies.value) if (ent->v->solid == SOLID_NOT && (!((pint_t)ent->v->flags & FL_FINDABLE_NONSOLID)) && !sv_gameplayfix_blowupfallenzombies.value)
continue; continue;
if (sv_gameplayfix_findradiusdistancetobox.ival) if (sv_gameplayfix_findradiusdistancetobox.ival)
{ {
@ -3412,7 +3411,7 @@ void QCBUILTIN PF_findradius (pubprogfuncs_t *prinst, struct globalvars_s *pr_gl
if (DotProduct(eorg,eorg) > rad) if (DotProduct(eorg,eorg) > rad)
continue; continue;
((int*)ent->v)[f] = EDICT_TO_PROG(prinst, chain); ((pint_t*)ent->v)[f] = EDICT_TO_PROG(prinst, chain);
chain = ent; chain = ent;
} }
} }
@ -5754,7 +5753,9 @@ void QCBUILTIN PF_vectorvectors (pubprogfuncs_t *prinst, struct globalvars_s *pr
void QCBUILTIN PF_crossproduct (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_crossproduct (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
CrossProduct(G_VECTOR(OFS_PARM0), G_VECTOR(OFS_PARM1), G_VECTOR(OFS_RETURN)); VM_VECTORARG(v0, OFS_PARM0);
VM_VECTORARG(v1, OFS_PARM1);
CrossProduct(v0, v1, G_VECTOR(OFS_RETURN));
} }
//Maths functions //Maths functions
@ -5809,7 +5810,7 @@ void QCBUILTIN PF_droptofloor (pubprogfuncs_t *prinst, struct globalvars_s *pr_g
vec3_t end; vec3_t end;
vec3_t start; vec3_t start;
trace_t trace; trace_t trace;
const float *gravitydir; const pvec_t *gravitydir;
ent = PROG_TO_WEDICT(prinst, *world->g.self); ent = PROG_TO_WEDICT(prinst, *world->g.self);
@ -6753,7 +6754,7 @@ void QCBUILTIN PF_getentityfieldstring (pubprogfuncs_t *prinst, struct globalvar
#if !defined(CLIENTONLY) && defined(HAVE_LEGACY) #if !defined(CLIENTONLY) && defined(HAVE_LEGACY)
qboolean isserver = (prinst == sv.world.progs); qboolean isserver = (prinst == sv.world.progs);
#endif #endif
eval = (eval_t *)&((float *)ent->v)[fdef[fidx].ofs]; eval = (eval_t *)&((pvec_t *)ent->v)[fdef[fidx].ofs];
#ifdef HAVE_LEGACY //extra code to be lazy so that xonotic doesn't go crazy and spam the fuck out of e #ifdef HAVE_LEGACY //extra code to be lazy so that xonotic doesn't go crazy and spam the fuck out of e
if ((fdef->type & 0xff) == ev_vector) if ((fdef->type & 0xff) == ev_vector)
{ {
@ -6762,17 +6763,17 @@ void QCBUILTIN PF_getentityfieldstring (pubprogfuncs_t *prinst, struct globalvar
} }
#ifndef CLIENTONLY #ifndef CLIENTONLY
#ifdef HEXEN2 #ifdef HEXEN2
else if (isserver && (float*)eval == &((edict_t*)ent)->xv->drawflags && eval->_float == 96) else if (isserver && (pvec_t*)eval == &((edict_t*)ent)->xv->drawflags && eval->_float == 96)
return; return;
#endif #endif
else if (isserver && (float*)eval == &((edict_t*)ent)->xv->uniquespawnid) else if (isserver && (pvec_t*)eval == &((edict_t*)ent)->xv->uniquespawnid)
return; return;
#endif #endif
else if (((float*)eval == &ent->xv->dimension_solid || else if (((pvec_t*)eval == &ent->xv->dimension_solid ||
(float*)eval == &ent->xv->dimension_hit (pvec_t*)eval == &ent->xv->dimension_hit
#ifndef CLIENTONLY #ifndef CLIENTONLY
|| (isserver && ((float*)eval == &((edict_t*)ent)->xv->dimension_see || (isserver && ((pvec_t*)eval == &((edict_t*)ent)->xv->dimension_see
|| (float*)eval == &((edict_t*)ent)->xv->dimension_seen)) || (pvec_t*)eval == &((edict_t*)ent)->xv->dimension_seen))
#endif #endif
) && eval->_float == 255) ) && eval->_float == 255)
return; return;

View file

@ -65,6 +65,12 @@ void PF_InitTempStrings(pubprogfuncs_t *prinst);
string_t PR_TempString(pubprogfuncs_t *prinst, const char *str); //returns a tempstring containing str string_t PR_TempString(pubprogfuncs_t *prinst, const char *str); //returns a tempstring containing str
char *PF_TempStr(pubprogfuncs_t *prinst); //returns a tempstring which can be filled in with whatever junk you want. char *PF_TempStr(pubprogfuncs_t *prinst); //returns a tempstring which can be filled in with whatever junk you want.
#ifdef QCVM_64
#define VM_VECTORARG(name, ofs) vec3_t name = {G_FLOAT(ofs+0),G_FLOAT(ofs+1),G_FLOAT(ofs+2)}
#else
#define VM_VECTORARG(name, ofs) pvec_t *name = G_VECTOR(ofs)
#endif
#define RETURN_SSTRING(s) (((int *)pr_globals)[OFS_RETURN] = PR_SetString(prinst, s)) //static - exe will not change it. #define RETURN_SSTRING(s) (((int *)pr_globals)[OFS_RETURN] = PR_SetString(prinst, s)) //static - exe will not change it.
#define RETURN_TSTRING(s) (((int *)pr_globals)[OFS_RETURN] = PR_TempString(prinst, s)) //temp (static but cycle buffers) #define RETURN_TSTRING(s) (((int *)pr_globals)[OFS_RETURN] = PR_TempString(prinst, s)) //temp (static but cycle buffers)
extern cvar_t pr_tempstringsize; extern cvar_t pr_tempstringsize;

View file

@ -244,21 +244,21 @@ struct world_s
/*qc globals*/ /*qc globals*/
struct { struct {
int *self; pint_t *self;
int *other; pint_t *other;
int *newmis; pint_t *newmis;
float *time; pvec_t *time;
float *frametime; pvec_t *frametime;
float *force_retouch; pvec_t *force_retouch;
float *physics_mode; pvec_t *physics_mode;
float *v_forward; pvec_t *v_forward;
float *v_right; pvec_t *v_right;
float *v_up; pvec_t *v_up;
float *defaultgravitydir; pvec_t *defaultgravitydir;
//used by menu+csqc. //used by menu+csqc.
float *drawfont; pvec_t *drawfont;
float *drawfontscale; pvec_t *drawfontscale;
} g; } g;
#ifdef USERBE #ifdef USERBE

View file

@ -1178,7 +1178,7 @@ void DecompileCalcProfiles(void)
} }
strcat(fname, ") "); strcat(fname, ") ");
line[0] = '\0'; line[0] = '\0';
QC_snprintfz(line, sizeof(line), strings + functions[i].s_name); QC_snprintfz(line, sizeof(line), "%s", strings + functions[i].s_name);
strcat(fname, line); strcat(fname, line);
} }
@ -3090,7 +3090,7 @@ pbool TrySynthName(const char *first)
{ {
if (!strcmp(filenames[i], first)) if (!strcmp(filenames[i], first))
{ {
QC_snprintfz(synth_name, sizeof(synth_name), filenames[i + 1]); QC_snprintfz(synth_name, sizeof(synth_name), "%s", filenames[i + 1]);
return true; return true;
} }
} }
@ -3131,7 +3131,7 @@ void DecompileDecompileFunctions(const char *origcopyright)
if (lastglob != 1) if (lastglob != 1)
{ {
QC_snprintfz(synth_name, sizeof(synth_name), "sysdefs.qc"); QC_snprintfz(synth_name, sizeof(synth_name), "sysdefs.qc");
QC_snprintfz(fname, sizeof(fname), synth_name); QC_snprintfz(fname, sizeof(fname), "%s", synth_name);
if (!DecompileAlreadySeen(fname, &f)) if (!DecompileAlreadySeen(fname, &f))
{ {
printf("decompiling %s\n", fname); printf("decompiling %s\n", fname);
@ -3190,7 +3190,7 @@ void DecompileDecompileFunctions(const char *origcopyright)
if(!TrySynthName(qcva("%s", strings + d->s_name)) && !synth_name[0]) if(!TrySynthName(qcva("%s", strings + d->s_name)) && !synth_name[0])
QC_snprintfz(synth_name, sizeof(synth_name), "frik%i.qc", fake_name++); QC_snprintfz(synth_name, sizeof(synth_name), "frik%i.qc", fake_name++);
QC_snprintfz(fname, sizeof(fname), synth_name); QC_snprintfz(fname, sizeof(fname), "%s", synth_name);
} }
else else
synth_name[0] = 0; synth_name[0] = 0;

View file

@ -402,9 +402,9 @@ reeval:
break; break;
case OP_STOREP_V: case OP_STOREP_V:
i = OPB->_int + (OPC->_int*sizeof(ptr->_int)); i = OPB->_int + (OPC->_int*sizeof(ptr->_int));
errorif (QCPOINTERWRITEFAIL(i, sizeof(vec3_t))) errorif (QCPOINTERWRITEFAIL(i, sizeof(pvec3_t)))
{ {
if (!(ptr=PR_GetWriteTempStringPtr(progfuncs, OPB->_int, OPC->_int*sizeof(ptr->_int), sizeof(vec3_t)))) if (!(ptr=PR_GetWriteTempStringPtr(progfuncs, OPB->_int, OPC->_int*sizeof(ptr->_int), sizeof(pvec3_t))))
{ {
if (i == -1) if (i == -1)
break; break;
@ -1010,9 +1010,9 @@ reeval:
case OP_LOADP_V: case OP_LOADP_V:
i = OPA->_int + OPB->_int*4; //NOTE: inconsistant, but a bit more practical for the qcc when structs etc are involved i = OPA->_int + OPB->_int*4; //NOTE: inconsistant, but a bit more practical for the qcc when structs etc are involved
errorif (QCPOINTERREADFAIL(i, sizeof(vec3_t))) errorif (QCPOINTERREADFAIL(i, sizeof(pvec3_t)))
{ {
if (!(ptr=PR_GetReadTempStringPtr(progfuncs, OPA->_int, OPB->_int*4, sizeof(vec3_t)))) if (!(ptr=PR_GetReadTempStringPtr(progfuncs, OPA->_int, OPB->_int*4, sizeof(pvec3_t))))
{ {
if (i == -1) if (i == -1)
{ {

View file

@ -609,7 +609,7 @@ static struct entvars_s *PDECL PR_entvars (pubprogfuncs_t *ppf, struct edict_s *
return (struct entvars_s *)edvars(ed); return (struct entvars_s *)edvars(ed);
} }
static pbool PDECL PR_GetFunctionInfo(pubprogfuncs_t *ppf, func_t func, int *args, qbyte **argsizes, int *builtinnum, char *funcname, size_t funcnamesize) static pbool PDECL PR_GetFunctionInfo(pubprogfuncs_t *ppf, func_t func, int *args, pbyte **argsizes, int *builtinnum, char *funcname, size_t funcnamesize)
{ {
progfuncs_t *progfuncs = (progfuncs_t*)ppf; progfuncs_t *progfuncs = (progfuncs_t*)ppf;
@ -1031,7 +1031,7 @@ const char *ASMCALL PR_StringToNative (pubprogfuncs_t *ppf, string_t str)
eval_t *PR_GetReadTempStringPtr(progfuncs_t *progfuncs, string_t str, size_t offset, size_t datasize) eval_t *PR_GetReadTempStringPtr(progfuncs_t *progfuncs, string_t str, size_t offset, size_t datasize)
{ {
static vec3_t dummy; //don't resize anything when reading. static pvec3_t dummy; //don't resize anything when reading.
if (((unsigned int)str & STRING_SPECMASK) == STRING_TEMP) if (((unsigned int)str & STRING_SPECMASK) == STRING_TEMP)
{ {
unsigned int i = str & ~STRING_SPECMASK; unsigned int i = str & ~STRING_SPECMASK;

View file

@ -6,6 +6,7 @@ Setting them should be fine.
*/ */
#ifndef __PR_COMP_H__ #ifndef __PR_COMP_H__
#define __PR_COMP_H__ #define __PR_COMP_H__
#include "progtype.h"
/* /*
#ifdef USE_MSVCRT_DEBUG #ifdef USE_MSVCRT_DEBUG
@ -559,7 +560,7 @@ typedef struct
string_t s_file; // source file defined in string_t s_file; // source file defined in
int numparms; int numparms;
qbyte parm_size[MAX_PARMS]; pbyte parm_size[MAX_PARMS];
} dfunction_t; } dfunction_t;
typedef struct typedef struct
@ -576,7 +577,7 @@ typedef struct
string_t s_file; // source file defined in string_t s_file; // source file defined in
int numparms; int numparms;
qbyte parm_size[MAX_PARMS]; pbyte parm_size[MAX_PARMS];
} mfunction_t; } mfunction_t;
#define PROG_QTESTVERSION 3 #define PROG_QTESTVERSION 3

View file

@ -496,7 +496,7 @@ mfunction_t *ED_FindFunction (progfuncs_t *progfuncs, const char *name, progsnum
if ((unsigned)pnum > (unsigned)prinst.maxprogs) if ((unsigned)pnum > (unsigned)prinst.maxprogs)
{ {
externs->Printf("Progsnum %i out of bounds\n", pnum); externs->Printf("Progsnum %"pPRIi" out of bounds\n", pnum);
return NULL; return NULL;
} }
@ -592,15 +592,15 @@ char *PR_ValueString (progfuncs_t *progfuncs, etype_t type, eval_t *val, pbool v
else else
{ {
if ((val->function & 0xff000000)>>24 >= prinst.maxprogs || !pr_progstate[(val->function & 0xff000000)>>24].functions) if ((val->function & 0xff000000)>>24 >= prinst.maxprogs || !pr_progstate[(val->function & 0xff000000)>>24].functions)
QC_snprintfz (line, sizeof(line), "Bad function %i:%i", (val->function & 0xff000000)>>24, val->function & ~0xff000000); QC_snprintfz (line, sizeof(line), "Bad function %"pPRIi":%"pPRIi"", (val->function & 0xff000000)>>24, val->function & ~0xff000000);
else else
{ {
if ((val->function &~0xff000000) >= pr_progs->numfunctions) if ((val->function &~0xff000000) >= pr_progs->numfunctions)
QC_snprintfz (line, sizeof(line), "bad function %i:%i\n", (val->function & 0xff000000)>>24, val->function & ~0xff000000); QC_snprintfz (line, sizeof(line), "bad function %"pPRIi":%"pPRIi"\n", (val->function & 0xff000000)>>24, val->function & ~0xff000000);
else else
{ {
f = pr_progstate[(val->function & 0xff000000)>>24].functions + (val->function & ~0xff000000); f = pr_progstate[(val->function & 0xff000000)>>24].functions + (val->function & ~0xff000000);
QC_snprintfz (line, sizeof(line), "%i:%s()", (val->function & 0xff000000)>>24, f->s_name+progfuncs->funcs.stringtable); QC_snprintfz (line, sizeof(line), "%"pPRIi":%s()", (val->function & 0xff000000)>>24, f->s_name+progfuncs->funcs.stringtable);
} }
} }
} }
@ -728,7 +728,7 @@ char *PDECL PR_UglyValueString (pubprogfuncs_t *ppf, etype_t type, eval_t *val)
case ev_function: case ev_function:
i = (val->function & 0xff000000)>>24; //progs number i = (val->function & 0xff000000)>>24; //progs number
if ((unsigned)i >= prinst.maxprogs || !pr_progstate[(unsigned)i].progs) if ((unsigned)i >= prinst.maxprogs || !pr_progstate[(unsigned)i].progs)
sprintf (line, "BAD FUNCTION INDEX: %i", val->function); sprintf (line, "BAD FUNCTION INDEX: %#"pPRIx"", val->function);
else else
{ {
j = (val->function & ~0xff000000); //function number j = (val->function & ~0xff000000); //function number
@ -1178,6 +1178,7 @@ pbool PDECL ED_ParseEval (pubprogfuncs_t *ppf, eval_t *eval, int type, const cha
{ {
progfuncs_t *progfuncs = (progfuncs_t*)ppf; progfuncs_t *progfuncs = (progfuncs_t*)ppf;
int i; int i;
progsnum_t module;
char string[128]; char string[128];
fdef_t *def; fdef_t *def;
char *v, *w; char *v, *w;
@ -1248,13 +1249,13 @@ pbool PDECL ED_ParseEval (pubprogfuncs_t *ppf, eval_t *eval, int type, const cha
eval->function = 0; eval->function = 0;
return true; return true;
} }
func = ED_FindFunction (progfuncs, s, &i, -1); func = ED_FindFunction (progfuncs, s, &module, -1);
if (!func) if (!func)
{ {
externs->Printf ("Can't find function %s\n", s); externs->Printf ("Can't find function %s\n", s);
return false; return false;
} }
eval->function = (func - pr_progstate[i].functions) | (i<<24); eval->function = (func - pr_progstate[module].functions) | (module<<24);
break; break;
default: default:
@ -1266,6 +1267,7 @@ pbool PDECL ED_ParseEval (pubprogfuncs_t *ppf, eval_t *eval, int type, const cha
pbool ED_ParseEpair (progfuncs_t *progfuncs, size_t qcptr, unsigned int fldofs, int fldtype, char *s) pbool ED_ParseEpair (progfuncs_t *progfuncs, size_t qcptr, unsigned int fldofs, int fldtype, char *s)
{ {
int i; int i;
progsnum_t module;
fdef_t *def; fdef_t *def;
string_t st; string_t st;
mfunction_t *func; mfunction_t *func;
@ -1337,13 +1339,13 @@ pbool ED_ParseEpair (progfuncs_t *progfuncs, size_t qcptr, unsigned int fldofs,
*(func_t *)(progfuncs->funcs.stringtable + qcptr) = 0; *(func_t *)(progfuncs->funcs.stringtable + qcptr) = 0;
return true; return true;
} }
func = ED_FindFunction (progfuncs, s, &i, -1); func = ED_FindFunction (progfuncs, s, &module, -1);
if (!func) if (!func)
{ {
externs->Printf ("Can't find function %s\n", s); externs->Printf ("Can't find function %s\n", s);
return false; return false;
} }
*(func_t *)(progfuncs->funcs.stringtable + qcptr) = (func - pr_progstate[i].functions) | (i<<24); *(func_t *)(progfuncs->funcs.stringtable + qcptr) = (func - pr_progstate[module].functions) | (module<<24);
break; break;
default: default:
@ -2605,7 +2607,7 @@ unsigned char *PDECL PR_GetHeapBuffer (void *ctx, size_t bufsize)
PR_LoadProgs PR_LoadProgs
=============== ===============
*/ */
int PR_ReallyLoadProgs (progfuncs_t *progfuncs, const char *filename, progstate_t *progstate, pbool complain) pbool PR_ReallyLoadProgs (progfuncs_t *progfuncs, const char *filename, progstate_t *progstate, pbool complain)
{ {
unsigned int i, j, type; unsigned int i, j, type;
// float fl; // float fl;
@ -2777,13 +2779,13 @@ retry:
return false; return false;
} }
fnc = (dfunction_t *)((qbyte *)pr_progs + pr_progs->ofs_functions); fnc = (dfunction_t *)((pbyte *)pr_progs + pr_progs->ofs_functions);
pr_strings = ((char *)pr_progs + pr_progs->ofs_strings); pr_strings = ((char *)pr_progs + pr_progs->ofs_strings);
current_progstate->globaldefs = *(void**)&gd16 = (void *)((qbyte *)pr_progs + pr_progs->ofs_globaldefs); current_progstate->globaldefs = *(void**)&gd16 = (void *)((pbyte *)pr_progs + pr_progs->ofs_globaldefs);
current_progstate->fielddefs = *(void**)&fld16 = (void *)((qbyte *)pr_progs + pr_progs->ofs_fielddefs); current_progstate->fielddefs = *(void**)&fld16 = (void *)((pbyte *)pr_progs + pr_progs->ofs_fielddefs);
current_progstate->statements = (void *)((qbyte *)pr_progs + pr_progs->ofs_statements); current_progstate->statements = (void *)((pbyte *)pr_progs + pr_progs->ofs_statements);
glob = pr_globals = (void *)((qbyte *)pr_progs + pr_progs->ofs_globals); glob = pr_globals = (void *)((pbyte *)pr_progs + pr_progs->ofs_globals);
current_progstate->globals_bytes = pr_progs->numglobals*sizeof(*pr_globals); current_progstate->globals_bytes = pr_progs->numglobals*sizeof(*pr_globals);
pr_linenums=NULL; pr_linenums=NULL;
@ -2791,9 +2793,9 @@ retry:
if (pr_progs->version == PROG_EXTENDEDVERSION) if (pr_progs->version == PROG_EXTENDEDVERSION)
{ {
if (pr_progs->ofslinenums) if (pr_progs->ofslinenums)
pr_linenums = (int *)((qbyte *)pr_progs + pr_progs->ofslinenums); pr_linenums = (int *)((pbyte *)pr_progs + pr_progs->ofslinenums);
if (pr_progs->ofs_types) if (pr_progs->ofs_types)
pr_types = (typeinfo_t *)((qbyte *)pr_progs + pr_progs->ofs_types); pr_types = (typeinfo_t *)((pbyte *)pr_progs + pr_progs->ofs_types);
//start decompressing stuff... //start decompressing stuff...
if (pr_progs->blockscompressed & 1) //statements if (pr_progs->blockscompressed & 1) //statements
@ -2940,8 +2942,8 @@ retry:
pr_cp_functions = NULL; pr_cp_functions = NULL;
// pr_strings = ((char *)pr_progs + pr_progs->ofs_strings); // pr_strings = ((char *)pr_progs + pr_progs->ofs_strings);
gd16 = *(ddef16_t**)&current_progstate->globaldefs = (ddef16_t *)((qbyte *)pr_progs + pr_progs->ofs_globaldefs); gd16 = *(ddef16_t**)&current_progstate->globaldefs = (ddef16_t *)((pbyte *)pr_progs + pr_progs->ofs_globaldefs);
fld16 = (ddef16_t *)((qbyte *)pr_progs + pr_progs->ofs_fielddefs); fld16 = (ddef16_t *)((pbyte *)pr_progs + pr_progs->ofs_fielddefs);
// pr_statements16 = (dstatement16_t *)((qbyte *)pr_progs + pr_progs->ofs_statements); // pr_statements16 = (dstatement16_t *)((qbyte *)pr_progs + pr_progs->ofs_statements);
pr_globals = glob; pr_globals = glob;
st16 = pr_statements16; st16 = pr_statements16;

View file

@ -1038,8 +1038,8 @@ char *PDECL PR_EvaluateDebugString(pubprogfuncs_t *ppf, const char *key)
case ev_function: case ev_function:
{ {
mfunction_t *func; mfunction_t *func;
int i; progsnum_t i;
int progsnum = -1; progsnum_t progsnum = -1;
if (str[0] && str[1] == ':') if (str[0] && str[1] == ':')
{ {
progsnum = atoi(str); progsnum = atoi(str);
@ -1813,7 +1813,7 @@ void PDECL PR_ExecuteProgram (pubprogfuncs_t *ppf, func_t fnum)
{ {
if (newprogs >= prinst.maxprogs || !pr_progstate[newprogs].globals) //can happen with hexen2... if (newprogs >= prinst.maxprogs || !pr_progstate[newprogs].globals) //can happen with hexen2...
{ {
externs->Printf("PR_ExecuteProgram: tried branching into invalid progs (%#x)\n", fnum); externs->Printf("PR_ExecuteProgram: tried branching into invalid progs (%#"pPRIx")\n", fnum);
return; return;
} }
PR_SwitchProgsParms(progfuncs, newprogs); PR_SwitchProgsParms(progfuncs, newprogs);

View file

@ -27,7 +27,7 @@ pbool PR_SwitchProgs(progfuncs_t *progfuncs, progsnum_t type)
current_progstate = NULL; current_progstate = NULL;
return true; return true;
} }
PR_RunError(&progfuncs->funcs, "QCLIB: Bad prog type - %i", type); PR_RunError(&progfuncs->funcs, "QCLIB: Bad prog type - %"pPRIi, type);
// Sys_Error("Bad prog type - %i", type); // Sys_Error("Bad prog type - %i", type);
} }
@ -47,7 +47,7 @@ pbool PR_SwitchProgsParms(progfuncs_t *progfuncs, progsnum_t newpr) //from 2 to
unsigned int a; unsigned int a;
progstate_t *np; progstate_t *np;
progstate_t *op; progstate_t *op;
int oldpr = prinst.pr_typecurrent; progsnum_t oldpr = prinst.pr_typecurrent;
if (newpr == oldpr) if (newpr == oldpr)
{ {
@ -60,7 +60,7 @@ pbool PR_SwitchProgsParms(progfuncs_t *progfuncs, progsnum_t newpr) //from 2 to
if ((unsigned)newpr >= prinst.maxprogs || !np->globals) if ((unsigned)newpr >= prinst.maxprogs || !np->globals)
{ {
externs->Printf("QCLIB: Bad prog type - %i", newpr); externs->Printf("QCLIB: Bad prog type - %"pPRIi, newpr);
return false; return false;
} }
if ((unsigned)oldpr >= prinst.maxprogs || !op->globals) //startup? if ((unsigned)oldpr >= prinst.maxprogs || !op->globals) //startup?

View file

@ -36,7 +36,7 @@
#endif #endif
//#define _inline inline //#define _inline inline
#endif #endif
typedef unsigned char qbyte; typedef unsigned char pbyte;
#include <stdio.h> #include <stdio.h>
#define DLL_PROG #define DLL_PROG
@ -215,10 +215,11 @@ typedef struct
//ASSIGNS_IC //ASSIGNS_IC
} QCC_opcode_t; } QCC_opcode_t;
extern QCC_opcode_t pr_opcodes[]; // sized by initialization extern QCC_opcode_t pr_opcodes[]; // sized by initialization
#define OPF_STD 0x1 //reads a+b, writes c. #define OPF_VALID 0x01 //we're allowed to use this opcode in the current target.
#define OPF_STORE 0x2 //b+=a or just b=a #define OPF_STD 0x10 //reads a+b, writes c.
#define OPF_STOREPTR 0x4 //the form of c=(*b+=a) #define OPF_STORE 0x20 //b+=a or just b=a
#define OPF_LOADPTR 0x8 #define OPF_STOREPTR 0x40 //the form of c=(*b+=a)
#define OPF_LOADPTR 0x80
//FIXME: add jumps //FIXME: add jumps
@ -394,8 +395,8 @@ void PR_Init (void);
pbool PR_RunWarning (pubprogfuncs_t *progfuncs, char *error, ...); pbool PR_RunWarning (pubprogfuncs_t *progfuncs, char *error, ...);
void PDECL PR_ExecuteProgram (pubprogfuncs_t *progfuncs, func_t fnum); void PDECL PR_ExecuteProgram (pubprogfuncs_t *progfuncs, func_t fnum);
int PDECL PR_LoadProgs(pubprogfuncs_t *progfncs, const char *s); progsnum_t PDECL PR_LoadProgs(pubprogfuncs_t *progfncs, const char *s);
int PR_ReallyLoadProgs (progfuncs_t *progfuncs, const char *filename, progstate_t *progstate, pbool complain); pbool PR_ReallyLoadProgs (progfuncs_t *progfuncs, const char *filename, progstate_t *progstate, pbool complain);
void *PRHunkAlloc(progfuncs_t *progfuncs, int ammount, const char *name); void *PRHunkAlloc(progfuncs_t *progfuncs, int ammount, const char *name);
@ -503,7 +504,7 @@ prclocks_t Sys_GetClockRate(void);
//pr_multi.c //pr_multi.c
extern vec3_t vec3_origin; extern pvec3_t pvec3_origin;
struct qcthread_s *PDECL PR_ForkStack (pubprogfuncs_t *progfuncs); struct qcthread_s *PDECL PR_ForkStack (pubprogfuncs_t *progfuncs);
void PDECL PR_ResumeThread (pubprogfuncs_t *progfuncs, struct qcthread_s *thread); void PDECL PR_ResumeThread (pubprogfuncs_t *progfuncs, struct qcthread_s *thread);

View file

@ -327,18 +327,18 @@ typedef union eval_s
#define PR_SetString(pf, s) (*pf->StringToProgs) (pf, s) #define PR_SetString(pf, s) (*pf->StringToProgs) (pf, s)
#define NEXT_EDICT(pf,o) EDICT_NUM(pf, NUM_FOR_EDICT(pf, o)+1) #define NEXT_EDICT(pf,o) EDICT_NUM(pf, NUM_FOR_EDICT(pf, o)+1)
#define RETURN_EDICT(pf, e) (((int *)pr_globals)[OFS_RETURN] = EDICT_TO_PROG(pf, e)) #define RETURN_EDICT(pf, e) (((pint_t *)pr_globals)[OFS_RETURN] = EDICT_TO_PROG(pf, e))
//builtin funcs (which operate on globals) //builtin funcs (which operate on globals)
//To use these outside of builtins, you will likly have to use the 'globals' method. //To use these outside of builtins, you will likly have to use the 'globals' method.
#define G_FLOAT(o) (((float *)pr_globals)[o]) #define G_FLOAT(o) (((pvec_t *)pr_globals)[o])
#define G_FLOAT2(o) (((float *)pr_globals)[OFS_PARM0 + o*3]) #define G_FLOAT2(o) (((pvec_t *)pr_globals)[OFS_PARM0 + o*3])
#define G_INT(o) (((int *)pr_globals)[o]) #define G_INT(o) (((pint_t *)pr_globals)[o])
#define G_EDICT(pf, o) PROG_TO_EDICT(pf, G_INT(o)) //((edict_t *)((char *) sv.edicts+ *(int *)&((float *)pr_globals)[o])) #define G_EDICT(pf, o) PROG_TO_EDICT(pf, G_INT(o)) //((edict_t *)((char *) sv.edicts+ *(int *)&((float *)pr_globals)[o]))
#define G_EDICTNUM(pf, o) NUM_FOR_EDICT(pf, G_EDICT(pf, o)) #define G_EDICTNUM(pf, o) NUM_FOR_EDICT(pf, G_EDICT(pf, o))
#define G_VECTOR(o) (&((float *)pr_globals)[o]) #define G_VECTOR(o) (&((pvec_t *)pr_globals)[o])
#define G_FUNCTION(o) (*(func_t *)&((float *)pr_globals)[o]) #define G_FUNCTION(o) (*(func_t *)&((pvec_t *)pr_globals)[o])
/* /*
#define PR_GetString(p,s) (s?s + p->stringtable:"") #define PR_GetString(p,s) (s?s + p->stringtable:"")
@ -356,7 +356,7 @@ typedef union eval_s
#define ev_prog ev_integer #define ev_prog ev_integer
#define E_STRING(o) (char *)(((int *)((char *)ed) + progparms.edictsize)[o]) #define E_STRING(o) (char *)(((pint_t *)((char *)ed) + progparms.edictsize)[o])
//#define pr_global_struct pr_globals //#define pr_global_struct pr_globals

View file

@ -1,23 +1,42 @@
#ifndef QCLIB_PROGTYPE_H #ifndef QCLIB_PROGTYPE_H
#define QCLIB_PROGTYPE_H #define QCLIB_PROGTYPE_H
#ifndef DLL_PROG #if 0
//64bit primitives allows for:
// greater precision timers (so maps can last longer without getting restarted)
// planet-sized maps (with the engine's vec_t types changed too, and with some sort of magic for the gpu's precision).
//TODO: for this to work, someone'll have to go through the code to somehow deal with the vec_t/pvec_t/float differences.
#warning FTE isnt ready for this.
#include <stdint.h>
typedef double pvec_t;
typedef int64_t pint_t;
typedef uint64_t puint_t;
#include <inttypes.h>
#define pPRId PRId64
#define pPRIi PRIi64
#define pPRIu PRIu64
#define pPRIx PRIx64
#define QCVM_64
#else #else
typedef float vec_t; //use 32bit types, for sanity.
typedef vec_t vec3_t[3]; typedef float pvec_t;
typedef int pint_t;
typedef unsigned int puint_t;
#define pPRId "d"
#define pPRIi "i"
#define pPRIu "u"
#define pPRIx "x"
#define QCVM_32
#endif #endif
#ifndef t_bool
#define t_bool
typedef unsigned int pbool; typedef unsigned int pbool;
typedef pvec_t pvec3_t[3];
typedef pint_t progsnum_t;
typedef puint_t func_t;
typedef puint_t string_t;
#else extern pvec3_t pvec3_origin;
#define t_bool
#endif
typedef int progsnum_t;
typedef int func_t;
typedef int string_t;
#endif /* QCLIB_PROGTYPE_H */ #endif /* QCLIB_PROGTYPE_H */

View file

@ -86,6 +86,7 @@ extern int MAX_CONSTANTS;
typedef enum {QCF_STANDARD, QCF_HEXEN2, QCF_DARKPLACES, QCF_FTE, QCF_FTEDEBUG, QCF_FTEH2, QCF_KK7, QCF_QTEST} qcc_targetformat_t; typedef enum {QCF_STANDARD, QCF_HEXEN2, QCF_DARKPLACES, QCF_FTE, QCF_FTEDEBUG, QCF_FTEH2, QCF_KK7, QCF_QTEST} qcc_targetformat_t;
extern qcc_targetformat_t qcc_targetformat; extern qcc_targetformat_t qcc_targetformat;
void QCC_OPCodeSetTarget(qcc_targetformat_t targfmt);
/* /*
@ -317,14 +318,14 @@ typedef struct QCC_function_s QCC_function_t;
typedef union QCC_eval_s typedef union QCC_eval_s
{ {
QCC_string_t string; QCC_string_t string;
float _float; pvec_t _float;
#ifdef __GNUC__ #ifdef __GNUC__
float vector[0]; //gnuc extension. I'm using it to mute clang warnings. pvec_t vector[0]; //gnuc extension. I'm using it to mute clang warnings.
#else #else
float vector[1]; //should be 3, except that then eval_t would be too big. pvec_t vector[1]; //should be 3, except that then eval_t would be too big.
#endif #endif
func_t function; func_t function;
int _int; pint_t _int;
// union QCC_eval_s *ptr; // union QCC_eval_s *ptr;
} QCC_eval_t; } QCC_eval_t;
@ -332,10 +333,10 @@ typedef union QCC_eval_s
typedef union QCC_evalstorage_s typedef union QCC_evalstorage_s
{ {
QCC_string_t string; QCC_string_t string;
float _float; pvec_t _float;
float vector[3]; pvec_t vector[3];
func_t function; func_t function;
int _int; pint_t _int;
// union QCC_eval_s *ptr; // union QCC_eval_s *ptr;
} QCC_evalstorage_t; } QCC_evalstorage_t;

View file

@ -68,7 +68,7 @@ float (*PRLittleFloat) (float l);
static short QCC_SwapShort (short l) static short QCC_SwapShort (short l)
{ {
qbyte b1,b2; pbyte b1,b2;
b1 = l&255; b1 = l&255;
b2 = (l>>8)&255; b2 = (l>>8)&255;
@ -84,12 +84,12 @@ static short QCC_Short (short l)
static int QCC_SwapLong (int l) static int QCC_SwapLong (int l)
{ {
qbyte b1,b2,b3,b4; pbyte b1,b2,b3,b4;
b1 = (qbyte)l; b1 = (pbyte)l;
b2 = (qbyte)(l>>8); b2 = (pbyte)(l>>8);
b3 = (qbyte)(l>>16); b3 = (pbyte)(l>>16);
b4 = (qbyte)(l>>24); b4 = (pbyte)(l>>24);
return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
} }
@ -102,7 +102,7 @@ static int QCC_Long (int l)
static float QCC_SwapFloat (float l) static float QCC_SwapFloat (float l)
{ {
union {qbyte b[4]; float f;} in, out; union {pbyte b[4]; float f;} in, out;
in.f = l; in.f = l;
out.b[0] = in.b[3]; out.b[0] = in.b[3];
@ -120,7 +120,7 @@ static float QCC_Float (float l)
void SetEndian(void) void SetEndian(void)
{ {
union {qbyte b[2]; unsigned short s;} ed; union {pbyte b[2]; unsigned short s;} ed;
ed.s = 255; ed.s = 255;
if (ed.b[0] == 255) if (ed.b[0] == 255)
{ {

View file

@ -244,10 +244,10 @@ QCC_sref_t QCC_PR_GenerateFunctionCall2 (QCC_sref_t newself, QCC_sref_t func, QC
QCC_sref_t QCC_MakeTranslateStringConst(const char *value); QCC_sref_t QCC_MakeTranslateStringConst(const char *value);
QCC_sref_t QCC_MakeStringConst(const char *value); QCC_sref_t QCC_MakeStringConst(const char *value);
QCC_sref_t QCC_MakeStringConstLength(const char *value, int length); QCC_sref_t QCC_MakeStringConstLength(const char *value, int length);
QCC_sref_t QCC_MakeFloatConst(float value); QCC_sref_t QCC_MakeFloatConst(pvec_t value);
QCC_sref_t QCC_MakeFloatConstFromInt(longlong llvalue); QCC_sref_t QCC_MakeFloatConstFromInt(longlong llvalue);
QCC_sref_t QCC_MakeIntConst(longlong llvalue); QCC_sref_t QCC_MakeIntConst(longlong llvalue);
QCC_sref_t QCC_MakeVectorConst(float a, float b, float c); QCC_sref_t QCC_MakeVectorConst(pvec_t a, pvec_t b, pvec_t c);
enum enum
{ {
@ -2121,20 +2121,20 @@ const char *QCC_VarAtOffset(QCC_sref_t ref)
if (val->_int>0 && val->_int < numfunctions && *functions[val->_int].name) if (val->_int>0 && val->_int < numfunctions && *functions[val->_int].name)
QC_snprintfz(message, sizeof(message), "%s", functions[val->_int].name); QC_snprintfz(message, sizeof(message), "%s", functions[val->_int].name);
else else
QC_snprintfz(message, sizeof(message), "%ii", val->_int); QC_snprintfz(message, sizeof(message), "%"pPRIi"i", val->_int);
return message; return message;
case ev_field: case ev_field:
case ev_integer: case ev_integer:
QC_snprintfz(message, sizeof(message), "%ii", val->_int); QC_snprintfz(message, sizeof(message), "%"pPRIi"i", val->_int);
return message; return message;
case ev_entity: case ev_entity:
QC_snprintfz(message, sizeof(message), "%ie", val->_int); QC_snprintfz(message, sizeof(message), "%"pPRIi"e", val->_int);
return message; return message;
case ev_float: case ev_float:
if (!val->_float || val->_int & 0x7f800000) if (!val->_float || val->_int & 0x7f800000)
QC_snprintfz(message, sizeof(message), "%gf", val->_float); QC_snprintfz(message, sizeof(message), "%gf", val->_float);
else else
QC_snprintfz(message, sizeof(message), "%%%i", val->_int); QC_snprintfz(message, sizeof(message), "%%%"pPRIi, val->_int);
return message; return message;
case ev_vector: case ev_vector:
QC_snprintfz(message, sizeof(message), "'%g %g %g'", val->vector[0], val->vector[1], val->vector[2]); QC_snprintfz(message, sizeof(message), "'%g %g %g'", val->vector[0], val->vector[1], val->vector[2]);
@ -6826,7 +6826,7 @@ QCC_sref_t QCC_MakeIntConst(longlong llvalue)
}*/ }*/
// allocate a new one // allocate a new one
cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(int)); cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(pint_t));
cn->next = NULL; cn->next = NULL;
pr.def_tail->next = cn; pr.def_tail->next = cn;
pr.def_tail = cn; pr.def_tail = cn;
@ -6856,7 +6856,7 @@ static QCC_sref_t QCC_MakeUniqueConst(QCC_type_t *type, void *data)
QCC_def_t *cn; QCC_def_t *cn;
// allocate a new one // allocate a new one
cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(int) * type->size); cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(pint_t) * type->size);
cn->next = NULL; cn->next = NULL;
pr.def_tail->next = cn; pr.def_tail->next = cn;
pr.def_tail = cn; pr.def_tail = cn;
@ -6873,14 +6873,14 @@ static QCC_sref_t QCC_MakeUniqueConst(QCC_type_t *type, void *data)
cn->symbolsize = cn->type->size; cn->symbolsize = cn->type->size;
cn->symboldata = (QCC_eval_t*)(cn+1); cn->symboldata = (QCC_eval_t*)(cn+1);
memcpy(cn->symboldata, data, sizeof(int) * type->size); memcpy(cn->symboldata, data, sizeof(pint_t) * type->size);
return QCC_MakeSRefForce(cn, 0, type); return QCC_MakeSRefForce(cn, 0, type);
} }
QCC_sref_t QCC_PR_GenerateVector(QCC_sref_t x, QCC_sref_t y, QCC_sref_t z); QCC_sref_t QCC_PR_GenerateVector(QCC_sref_t x, QCC_sref_t y, QCC_sref_t z);
QCC_sref_t QCC_MakeVectorConst(float a, float b, float c) QCC_sref_t QCC_MakeVectorConst(pvec_t a, pvec_t b, pvec_t c)
{ {
QCC_def_t *cn; QCC_def_t *cn;
@ -6921,7 +6921,7 @@ QCC_sref_t QCC_MakeVectorConst(float a, float b, float c)
*/ */
// allocate a new one // allocate a new one
cn = (void *)qccHunkAlloc (sizeof(QCC_def_t)+sizeof(float)*3); cn = (void *)qccHunkAlloc (sizeof(QCC_def_t)+sizeof(pvec_t)*3);
cn->next = NULL; cn->next = NULL;
pr.def_tail->next = cn; pr.def_tail->next = cn;
pr.def_tail = cn; pr.def_tail = cn;
@ -6947,13 +6947,13 @@ QCC_sref_t QCC_MakeVectorConst(float a, float b, float c)
} }
extern hashtable_t floatconstdefstable; extern hashtable_t floatconstdefstable;
QCC_sref_t QCC_MakeFloatConst(float value) QCC_sref_t QCC_MakeFloatConst(pvec_t value)
{ {
QCC_def_t *cn; QCC_def_t *cn;
union { union {
float f; pvec_t f;
int i; pint_t i;
} fi; } fi;
fi.f = value; fi.f = value;
@ -6963,7 +6963,7 @@ QCC_sref_t QCC_MakeFloatConst(float value)
return QCC_MakeSRefForce(cn, 0, type_float); return QCC_MakeSRefForce(cn, 0, type_float);
// allocate a new one // allocate a new one
cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(float)); cn = (void *)qccHunkAlloc (sizeof(QCC_def_t) + sizeof(pvec_t));
cn->next = NULL; cn->next = NULL;
pr.def_tail->next = cn; pr.def_tail->next = cn;
pr.def_tail = cn; pr.def_tail = cn;

View file

@ -1357,7 +1357,7 @@ static pbool QCC_PR_Precompiler(void)
QCC_PR_ParseWarning(WARN_BADTARGET, "Cannot switch to hexen2 target \'%s\' after the first statement. Ignored.", msg); QCC_PR_ParseWarning(WARN_BADTARGET, "Cannot switch to hexen2 target \'%s\' after the first statement. Ignored.", msg);
} }
qcc_targetformat = newtype; QCC_OPCodeSetTarget(newtype);
} }
else if (!QC_strcasecmp(qcc_token, "PROGS_SRC")) else if (!QC_strcasecmp(qcc_token, "PROGS_SRC"))
{ //doesn't make sence, but silenced if you are switching between using a certain precompiler app used with CuTF. { //doesn't make sence, but silenced if you are switching between using a certain precompiler app used with CuTF.

View file

@ -698,7 +698,7 @@ static void QCC_PrintAutoCvars (void)
externs->Printf ("set %s\t\"%g %g %g\"%s%s\n", n, val->vector[0], val->vector[1], val->vector[2], desc?"\t//":"", desc?desc:""); externs->Printf ("set %s\t\"%g %g %g\"%s%s\n", n, val->vector[0], val->vector[1], val->vector[2], desc?"\t//":"", desc?desc:"");
break; break;
case ev_integer: case ev_integer:
externs->Printf ("set %s\t%i%s%s\n", n, val->_int, desc?"\t//":"", desc?desc:""); externs->Printf ("set %s\t%"pPRIi"%s%s\n", n, val->_int, desc?"\t//":"", desc?desc:"");
break; break;
case ev_string: case ev_string:
externs->Printf ("set %s\t\"%s\"%s%s\n", n, strings + val->_int, desc?"\t//":"", desc?desc:""); externs->Printf ("set %s\t\"%s\"%s%s\n", n, strings + val->_int, desc?"\t//":"", desc?desc:"");
@ -3336,7 +3336,7 @@ static void QCC_CRC_Init(unsigned short *crcvalue)
*crcvalue = CRC_INIT_VALUE; *crcvalue = CRC_INIT_VALUE;
} }
static void QCC_CRC_ProcessByte(unsigned short *crcvalue, qbyte data) static void QCC_CRC_ProcessByte(unsigned short *crcvalue, pbyte data)
{ {
*crcvalue = ((*crcvalue << 8) ^ QCC_crctable[(*crcvalue >> 8) ^ data]) & 0xffff; *crcvalue = ((*crcvalue << 8) ^ QCC_crctable[(*crcvalue >> 8) ^ data]) & 0xffff;
} }
@ -3692,7 +3692,7 @@ static void QCC_PackFile (char *src, char *name)
#endif #endif
if ( (qbyte *)pf - (qbyte *)pfiles > sizeof(pfiles) ) if ( (pbyte *)pf - (pbyte *)pfiles > sizeof(pfiles) )
QCC_Error (ERR_TOOMANYPAKFILES, "Too many files in pak file"); QCC_Error (ERR_TOOMANYPAKFILES, "Too many files in pak file");
#if 1 #if 1
@ -3878,7 +3878,7 @@ static void _QCC_CopyFiles (int blocknum, int copytype, char *srcdir, char *dest
header.id[1] = 'A'; header.id[1] = 'A';
header.id[2] = 'C'; header.id[2] = 'C';
header.id[3] = 'K'; header.id[3] = 'K';
dirlen = (qbyte *)pf - (qbyte *)pfiles; dirlen = (pbyte *)pf - (pbyte *)pfiles;
header.dirofs = PRLittleLong(SafeSeek (packhandle, 0, SEEK_CUR)); header.dirofs = PRLittleLong(SafeSeek (packhandle, 0, SEEK_CUR));
header.dirlen = PRLittleLong(dirlen); header.dirlen = PRLittleLong(dirlen);
@ -3891,7 +3891,7 @@ static void _QCC_CopyFiles (int blocknum, int copytype, char *srcdir, char *dest
// do a crc of the file // do a crc of the file
QCC_CRC_Init (&crc); QCC_CRC_Init (&crc);
for (i=0 ; i<dirlen ; i++) for (i=0 ; i<dirlen ; i++)
QCC_CRC_ProcessByte (&crc, ((qbyte *)pfiles)[i]); QCC_CRC_ProcessByte (&crc, ((pbyte *)pfiles)[i]);
i = pf - pfiles; i = pf - pfiles;
externs->Printf ("%i files packed in %i bytes (%i crc)\n",i, packbytes, crc); externs->Printf ("%i files packed in %i bytes (%i crc)\n",i, packbytes, crc);

View file

@ -885,31 +885,31 @@ void PR_Deinit(void)
void PR_LoadGlabalStruct(qboolean muted) void PR_LoadGlabalStruct(qboolean muted)
{ {
static float svphysicsmode = 2; static pvec_t svphysicsmode = 2;
static float writeonly; static pvec_t writeonly;
static int writeonly_int; static pint_t writeonly_int;
static int endcontentsi, surfaceflagsi; static pint_t endcontentsi, surfaceflagsi;
#ifdef HAVE_LEGACY #ifdef HAVE_LEGACY
static float endcontentsf, surfaceflagsf; static pvec_t endcontentsf, surfaceflagsf;
#endif #endif
static float dimension_send_default; static pvec_t dimension_send_default;
static float dimension_default = 255; static pvec_t dimension_default = 255;
static float zero_default; static pvec_t zero_default;
static float input_buttons_default; static pvec_t input_buttons_default;
static float input_timelength_default; static pvec_t input_timelength_default;
static float input_impulse_default; static pvec_t input_impulse_default;
static vec3_t input_angles_default; static pvec3_t input_angles_default;
static vec3_t input_movevalues_default; static pvec3_t input_movevalues_default;
static vec3_t global_gravitydir_default = {0,0,-1}; static pvec3_t global_gravitydir_default = {0,0,-1};
int i; int i;
int *v; pint_t *v;
globalptrs_t *pr_globals = pr_global_ptrs; globalptrs_t *pr_globals = pr_global_ptrs;
memset(pr_global_ptrs, 0, sizeof(*pr_global_ptrs)); memset(pr_global_ptrs, 0, sizeof(*pr_global_ptrs));
#define globalfloat(need,name) (pr_globals)->name = (float *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static float fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");} #define globalfloat(need,name) (pr_globals)->name = (pvec_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static pvec_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");}
#define globalint(need,name) (pr_globals)->name = (int *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static int fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");} #define globalint(need,name) (pr_globals)->name = (pint_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static pint_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");}
#define globalstring(need,name) (pr_globals)->name = (int *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static string_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");} #define globalstring(need,name) (pr_globals)->name = (string_t*)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static string_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");}
#define globalvec(need,name) (pr_globals)->name = (vec3_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static vec3_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");} #define globalvec(need,name) (pr_globals)->name = (pvec3_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (need && !(pr_globals)->name) {static pvec3_t fallback##name; (pr_globals)->name = &fallback##name; if (!muted) Con_DPrintf("Could not find \""#name"\" export in progs\n");}
#define globalfunc(need,name) (pr_globals)->name = (func_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (!(pr_globals)->name) {static func_t stripped##name; stripped##name = PR_FindFunction(svprogfuncs, #name, 0); if (stripped##name) (pr_globals)->name = &stripped##name; else if (need && !muted) Con_DPrintf("Could not find function \""#name"\" in progs\n"); } #define globalfunc(need,name) (pr_globals)->name = (func_t *)PR_FindGlobal(svprogfuncs, #name, 0, NULL); if (!(pr_globals)->name) {static func_t stripped##name; stripped##name = PR_FindFunction(svprogfuncs, #name, 0); if (stripped##name) (pr_globals)->name = &stripped##name; else if (need && !muted) Con_DPrintf("Could not find function \""#name"\" in progs\n"); }
// globalint(pad); // globalint(pad);
globalint (true, self); //we need the qw ones, but any in standard quake and not quakeworld, we don't really care about. globalint (true, self); //we need the qw ones, but any in standard quake and not quakeworld, we don't really care about.
@ -993,7 +993,7 @@ void PR_LoadGlabalStruct(qboolean muted)
if (pr_global_ptrs->serverid) if (pr_global_ptrs->serverid)
*pr_global_ptrs->serverid = svs.clusterserverid; *pr_global_ptrs->serverid = svs.clusterserverid;
for (i = 0; i < NUM_SPAWN_PARMS; i++) for (i = 0; i < NUM_SPAWN_PARMS; i++)
pr_global_ptrs->spawnparamglobals[i] = (float *)PR_FindGlobal(svprogfuncs, va("parm%i", i+1), 0, NULL); pr_global_ptrs->spawnparamglobals[i] = (pvec_t *)PR_FindGlobal(svprogfuncs, va("parm%i", i+1), 0, NULL);
#define ensureglobal(name,var) if (!(pr_globals)->name) (pr_globals)->name = &var; #define ensureglobal(name,var) if (!(pr_globals)->name) (pr_globals)->name = &var;
@ -1008,18 +1008,18 @@ void PR_LoadGlabalStruct(qboolean muted)
etype_t etype; etype_t etype;
eval_t *v = PR_FindGlobal(svprogfuncs, "trace_surfaceflags", 0, &etype); eval_t *v = PR_FindGlobal(svprogfuncs, "trace_surfaceflags", 0, &etype);
if (etype == ev_float) if (etype == ev_float)
(pr_globals)->trace_surfaceflagsf = (float*)v; (pr_globals)->trace_surfaceflagsf = (pvec_t*)v;
else if (etype == ev_integer) else if (etype == ev_integer)
(pr_globals)->trace_surfaceflagsi = (int*)v; (pr_globals)->trace_surfaceflagsi = (pint_t*)v;
} }
if (!(pr_globals)->trace_endcontentsf && !(pr_globals)->trace_endcontentsi) if (!(pr_globals)->trace_endcontentsf && !(pr_globals)->trace_endcontentsi)
{ {
etype_t etype; etype_t etype;
eval_t *v = PR_FindGlobal(svprogfuncs, "trace_endcontents", 0, &etype); eval_t *v = PR_FindGlobal(svprogfuncs, "trace_endcontents", 0, &etype);
if (etype == ev_float) if (etype == ev_float)
(pr_globals)->trace_endcontentsf = (float*)v; (pr_globals)->trace_endcontentsf = (pvec_t*)v;
else if (etype == ev_integer) else if (etype == ev_integer)
(pr_globals)->trace_endcontentsi = (int*)v; (pr_globals)->trace_endcontentsi = (pint_t*)v;
} }
ensureglobal(trace_endcontentsf, endcontentsf); ensureglobal(trace_endcontentsf, endcontentsf);
ensureglobal(trace_surfaceflagsf, surfaceflagsf); ensureglobal(trace_surfaceflagsf, surfaceflagsf);
@ -1046,10 +1046,10 @@ void PR_LoadGlabalStruct(qboolean muted)
// qtest renames and missing variables // qtest renames and missing variables
if (!(pr_globals)->trace_plane_normal) if (!(pr_globals)->trace_plane_normal)
{ {
(pr_globals)->trace_plane_normal = (vec3_t *)PR_FindGlobal(svprogfuncs, "trace_normal", 0, NULL); (pr_globals)->trace_plane_normal = (pvec3_t *)PR_FindGlobal(svprogfuncs, "trace_normal", 0, NULL);
if (!(pr_globals)->trace_plane_normal) if (!(pr_globals)->trace_plane_normal)
{ {
static vec3_t fallback_trace_plane_normal; static pvec3_t fallback_trace_plane_normal;
(pr_globals)->trace_plane_normal = &fallback_trace_plane_normal; (pr_globals)->trace_plane_normal = &fallback_trace_plane_normal;
if (!muted) if (!muted)
Con_DPrintf("Could not find trace_plane_normal export in progs\n"); Con_DPrintf("Could not find trace_plane_normal export in progs\n");
@ -1057,10 +1057,10 @@ void PR_LoadGlabalStruct(qboolean muted)
} }
if (!(pr_globals)->trace_endpos) if (!(pr_globals)->trace_endpos)
{ {
(pr_globals)->trace_endpos = (vec3_t *)PR_FindGlobal(svprogfuncs, "trace_impact", 0, NULL); (pr_globals)->trace_endpos = (pvec3_t *)PR_FindGlobal(svprogfuncs, "trace_impact", 0, NULL);
if (!(pr_globals)->trace_endpos) if (!(pr_globals)->trace_endpos)
{ {
static vec3_t fallback_trace_endpos; static pvec3_t fallback_trace_endpos;
(pr_globals)->trace_endpos = &fallback_trace_endpos; (pr_globals)->trace_endpos = &fallback_trace_endpos;
if (!muted) if (!muted)
Con_DPrintf("Could not find trace_endpos export in progs\n"); Con_DPrintf("Could not find trace_endpos export in progs\n");
@ -1068,10 +1068,10 @@ void PR_LoadGlabalStruct(qboolean muted)
} }
if (!(pr_globals)->trace_fraction) if (!(pr_globals)->trace_fraction)
{ {
(pr_globals)->trace_fraction = (float *)PR_FindGlobal(svprogfuncs, "trace_frac", 0, NULL); (pr_globals)->trace_fraction = (pvec_t *)PR_FindGlobal(svprogfuncs, "trace_frac", 0, NULL);
if (!(pr_globals)->trace_fraction) if (!(pr_globals)->trace_fraction)
{ {
static float fallback_trace_fraction; static pvec_t fallback_trace_fraction;
(pr_globals)->trace_fraction = &fallback_trace_fraction; (pr_globals)->trace_fraction = &fallback_trace_fraction;
if (!muted) if (!muted)
Con_DPrintf("Could not find trace_fraction export in progs\n"); Con_DPrintf("Could not find trace_fraction export in progs\n");
@ -1131,10 +1131,10 @@ void PR_LoadGlabalStruct(qboolean muted)
SV_PlayerPhysicsQC = PR_FindFunction(svprogfuncs, "SV_PlayerPhysics", PR_ANY); SV_PlayerPhysicsQC = PR_FindFunction(svprogfuncs, "SV_PlayerPhysics", PR_ANY);
EndFrameQC = PR_FindFunction (svprogfuncs, "EndFrame", PR_ANY); EndFrameQC = PR_FindFunction (svprogfuncs, "EndFrame", PR_ANY);
v = (int *)PR_globals(svprogfuncs, PR_CURRENT); v = (pint_t *)PR_globals(svprogfuncs, PR_CURRENT);
svprogfuncs->AddSharedVar(svprogfuncs, (int *)(pr_global_ptrs)->self-v, 1); svprogfuncs->AddSharedVar(svprogfuncs, (pint_t *)(pr_global_ptrs)->self-v, 1);
svprogfuncs->AddSharedVar(svprogfuncs, (int *)(pr_global_ptrs)->other-v, 1); svprogfuncs->AddSharedVar(svprogfuncs, (pint_t *)(pr_global_ptrs)->other-v, 1);
svprogfuncs->AddSharedVar(svprogfuncs, (int *)(pr_global_ptrs)->time-v, 1); svprogfuncs->AddSharedVar(svprogfuncs, (pint_t *)(pr_global_ptrs)->time-v, 1);
//test the global rather than the field - fte internally always has the field. //test the global rather than the field - fte internally always has the field.
sv.haveitems2 = !!PR_FindGlobal(svprogfuncs, "items2", 0, NULL); sv.haveitems2 = !!PR_FindGlobal(svprogfuncs, "items2", 0, NULL);
@ -2855,7 +2855,7 @@ setorigin (entity, origin)
static void QCBUILTIN PF_setorigin (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_setorigin (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
edict_t *e; edict_t *e;
float *org; pvec_t *org;
e = G_EDICT(prinst, OFS_PARM0); e = G_EDICT(prinst, OFS_PARM0);
if (e->readonly) if (e->readonly)
@ -2881,7 +2881,7 @@ setsize (entity, minvector, maxvector)
static void QCBUILTIN PF_setsize (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_setsize (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
edict_t *e; edict_t *e;
float *min, *max; pvec_t *min, *max;
e = G_EDICT(prinst, OFS_PARM0); e = G_EDICT(prinst, OFS_PARM0);
if (ED_ISFREE(e)) if (ED_ISFREE(e))
@ -3327,15 +3327,12 @@ particle(origin, color, count)
*/ */
void QCBUILTIN PF_particle (pubprogfuncs_t *prinst, globalvars_t *pr_globals) //I said it was for compatability only. void QCBUILTIN PF_particle (pubprogfuncs_t *prinst, globalvars_t *pr_globals) //I said it was for compatability only.
{ {
float *org, *dir;
int color;
int count;
int i, v; int i, v;
org = G_VECTOR(OFS_PARM0); VM_VECTORARG(org, OFS_PARM0);
dir = G_VECTOR(OFS_PARM1); VM_VECTORARG(dir, OFS_PARM1);
color = G_FLOAT(OFS_PARM2); int color = G_FLOAT(OFS_PARM2);
count = G_FLOAT(OFS_PARM3); int count = G_FLOAT(OFS_PARM3);
count = bound(0, count, 255); count = bound(0, count, 255);
color &= 0xff; color &= 0xff;
@ -3413,14 +3410,12 @@ void QCBUILTIN PF_particle (pubprogfuncs_t *prinst, globalvars_t *pr_globals) //
static void QCBUILTIN PF_te_blooddp (pubprogfuncs_t *prinst, globalvars_t *pr_globals) static void QCBUILTIN PF_te_blooddp (pubprogfuncs_t *prinst, globalvars_t *pr_globals)
{ {
float count;
float *org, *dir;
#ifdef NQPROT #ifdef NQPROT
int i, v; int i, v;
#endif #endif
org = G_VECTOR(OFS_PARM0); VM_VECTORARG(org, OFS_PARM0);
dir = G_VECTOR(OFS_PARM1); VM_VECTORARG(dir, OFS_PARM1);
count = G_FLOAT(OFS_PARM2); int count = G_FLOAT(OFS_PARM2);
#ifdef NQPROT #ifdef NQPROT
MSG_WriteByte (&sv.nqmulticast, svc_particle); MSG_WriteByte (&sv.nqmulticast, svc_particle);
@ -3443,7 +3438,7 @@ static void QCBUILTIN PF_te_blooddp (pubprogfuncs_t *prinst, globalvars_t *pr_gl
(void)dir; //FIXME: sould be sending TEDP_BLOOD (void)dir; //FIXME: sould be sending TEDP_BLOOD
MSG_WriteByte (&sv.multicast, svc_temp_entity); MSG_WriteByte (&sv.multicast, svc_temp_entity);
MSG_WriteByte (&sv.multicast, TEQW_QWBLOOD); MSG_WriteByte (&sv.multicast, TEQW_QWBLOOD);
MSG_WriteByte (&sv.multicast, count<10?1:(count+10)/20); MSG_WriteByte (&sv.multicast, (count>0&&count<10)?1:(count+10)/20);
MSG_WriteCoord (&sv.multicast, org[0]); MSG_WriteCoord (&sv.multicast, org[0]);
MSG_WriteCoord (&sv.multicast, org[1]); MSG_WriteCoord (&sv.multicast, org[1]);
MSG_WriteCoord (&sv.multicast, org[2]); MSG_WriteCoord (&sv.multicast, org[2]);
@ -3460,17 +3455,12 @@ particle(origin, dmin, dmax, color, effect, count)
*/ */
static void QCBUILTIN PF_particle2 (pubprogfuncs_t *prinst, globalvars_t *pr_globals) static void QCBUILTIN PF_particle2 (pubprogfuncs_t *prinst, globalvars_t *pr_globals)
{ {
float *org, *dmin, *dmax; VM_VECTORARG(org, OFS_PARM0);
float color; VM_VECTORARG(dmin, OFS_PARM1);
float count; VM_VECTORARG(dmax, OFS_PARM2);
float effect; float color = G_FLOAT(OFS_PARM3);
float effect = G_FLOAT(OFS_PARM4);
org = G_VECTOR(OFS_PARM0); float count = G_FLOAT(OFS_PARM5);
dmin = G_VECTOR(OFS_PARM1);
dmax = G_VECTOR(OFS_PARM2);
color = G_FLOAT(OFS_PARM3);
effect = G_FLOAT(OFS_PARM4);
count = G_FLOAT(OFS_PARM5);
MSG_WriteByte (&sv.multicast, svcfte_particle2); MSG_WriteByte (&sv.multicast, svcfte_particle2);
MSG_WriteCoord (&sv.multicast, org[0]); MSG_WriteCoord (&sv.multicast, org[0]);
@ -3500,16 +3490,11 @@ particle(origin, box, color, effect, count)
*/ */
static void QCBUILTIN PF_particle3 (pubprogfuncs_t *prinst, globalvars_t *pr_globals) static void QCBUILTIN PF_particle3 (pubprogfuncs_t *prinst, globalvars_t *pr_globals)
{ {
float *org, *box; VM_VECTORARG(org, OFS_PARM0);
float color; VM_VECTORARG(box, OFS_PARM1);
float count; float color = G_FLOAT(OFS_PARM2);
float effect; float effect = G_FLOAT(OFS_PARM3);
float count = G_FLOAT(OFS_PARM4);
org = G_VECTOR(OFS_PARM0);
box = G_VECTOR(OFS_PARM1);
color = G_FLOAT(OFS_PARM2);
effect = G_FLOAT(OFS_PARM3);
count = G_FLOAT(OFS_PARM4);
MSG_WriteByte (&sv.multicast, svcfte_particle3); MSG_WriteByte (&sv.multicast, svcfte_particle3);
MSG_WriteCoord (&sv.multicast, org[0]); MSG_WriteCoord (&sv.multicast, org[0]);
@ -3535,17 +3520,11 @@ particle(origin, radius, color, effect, count)
*/ */
static void QCBUILTIN PF_particle4 (pubprogfuncs_t *prinst, globalvars_t *pr_globals) static void QCBUILTIN PF_particle4 (pubprogfuncs_t *prinst, globalvars_t *pr_globals)
{ {
float *org; VM_VECTORARG(org, OFS_PARM0);
float radius; int radius = G_FLOAT(OFS_PARM1);
float color; int color = G_FLOAT(OFS_PARM2);
float count; int effect = G_FLOAT(OFS_PARM3);
float effect; int count = G_FLOAT(OFS_PARM4);
org = G_VECTOR(OFS_PARM0);
radius = G_FLOAT(OFS_PARM1);
color = G_FLOAT(OFS_PARM2);
effect = G_FLOAT(OFS_PARM3);
count = G_FLOAT(OFS_PARM4);
MSG_WriteByte (&sv.multicast, svcfte_particle4); MSG_WriteByte (&sv.multicast, svcfte_particle4);
MSG_WriteCoord (&sv.multicast, org[0]); MSG_WriteCoord (&sv.multicast, org[0]);
@ -3563,13 +3542,11 @@ static void QCBUILTIN PF_particle4 (pubprogfuncs_t *prinst, globalvars_t *pr_glo
static void QCBUILTIN PF_h2particleexplosion(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_h2particleexplosion(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
//used by the (regular) ice staff, and multiple other things. //used by the (regular) ice staff, and multiple other things.
float *org; VM_VECTORARG(org, OFS_PARM0);
int color,radius,count, effect; int radius = G_FLOAT(OFS_PARM1);
org = G_VECTOR(OFS_PARM0); int color = G_FLOAT(OFS_PARM2);
radius = G_FLOAT(OFS_PARM1); int effect = 255; //special explosion thing
color = G_FLOAT(OFS_PARM2); int count = G_FLOAT(OFS_PARM3);
effect = 255; //special explosion thing
count = G_FLOAT(OFS_PARM3);
MSG_WriteByte (&sv.multicast, svcfte_particle4); MSG_WriteByte (&sv.multicast, svcfte_particle4);
MSG_WriteCoord (&sv.multicast, org[0]); MSG_WriteCoord (&sv.multicast, org[0]);
@ -3624,14 +3601,10 @@ void PF_ambientsound_Internal (float *pos, const char *samp, float vol, float at
static void QCBUILTIN PF_ambientsound (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_ambientsound (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
const char *samp; VM_VECTORARG(pos, OFS_PARM0);
float *pos; const char *samp = PR_GetStringOfs(prinst, OFS_PARM1);
float vol, attenuation; float vol = G_FLOAT(OFS_PARM2);
float attenuation = G_FLOAT(OFS_PARM3);
pos = G_VECTOR (OFS_PARM0);
samp = PR_GetStringOfs(prinst, OFS_PARM1);
vol = G_FLOAT(OFS_PARM2);
attenuation = G_FLOAT(OFS_PARM3);
PF_ambientsound_Internal(pos, samp, vol, attenuation); PF_ambientsound_Internal(pos, samp, vol, attenuation);
} }
@ -3698,20 +3671,11 @@ static void QCBUILTIN PF_sound (pubprogfuncs_t *prinst, struct globalvars_s *pr_
static void QCBUILTIN PF_pointsound(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_pointsound(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
const char *sample; VM_VECTORARG(origin, OFS_PARM0);
float *origin; const char *sample = PR_GetStringOfs(prinst, OFS_PARM1);
float volume; float volume = G_FLOAT(OFS_PARM2);
float attenuation; float attenuation = G_FLOAT(OFS_PARM3);
float pitchpct; float pitchpct = (prinst->callargc > 4)?G_FLOAT(OFS_PARM4)*0.01:0;
origin = G_VECTOR(OFS_PARM0);
sample = PR_GetStringOfs(prinst, OFS_PARM1);
volume = G_FLOAT(OFS_PARM2);
attenuation = G_FLOAT(OFS_PARM3);
if (prinst->callargc >= 5)
pitchpct = G_FLOAT(OFS_PARM4)*0.01;
else
pitchpct = 0;
SVQ1_StartSound (origin, sv.world.edicts, 0, sample, volume, attenuation, pitchpct, 0, 0); SVQ1_StartSound (origin, sv.world.edicts, 0, sample, volume, attenuation, pitchpct, 0, 0);
} }
@ -3723,8 +3687,8 @@ static void QCBUILTIN PF_ss_LocalSound(pubprogfuncs_t *prinst, struct globalvars
sfx_t *sfx; sfx_t *sfx;
const char * s = PR_GetStringOfs(prinst, OFS_PARM0); const char * s = PR_GetStringOfs(prinst, OFS_PARM0);
float chan = (prinst->callargc>=1)?G_FLOAT(OFS_PARM1):0; float chan = (prinst->callargc>1)?G_FLOAT(OFS_PARM1):0;
float vol = (prinst->callargc>=2)?G_FLOAT(OFS_PARM2):1; float vol = (prinst->callargc>2)?G_FLOAT(OFS_PARM2):1;
if (!isDedicated) if (!isDedicated)
{ {
@ -3796,7 +3760,7 @@ traceline (vector1, vector2, tryents)
*/ */
void QCBUILTIN PF_svtraceline (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_svtraceline (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
float *v1, *v2, *mins, *maxs; vec_t *v1, *v2, *mins, *maxs;
trace_t trace; trace_t trace;
int nomonsters; int nomonsters;
edict_t *ent; edict_t *ent;
@ -3831,42 +3795,30 @@ void QCBUILTIN PF_svtraceline (pubprogfuncs_t *prinst, struct globalvars_s *pr_g
#ifdef HEXEN2 #ifdef HEXEN2
static void QCBUILTIN PF_traceboxh2 (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_traceboxh2 (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
float *v1, *v2, *mins, *maxs; VM_VECTORARG(v1, OFS_PARM0);
trace_t trace; VM_VECTORARG(v2, OFS_PARM1);
int nomonsters; VM_VECTORARG(mins, OFS_PARM2);
edict_t *ent; VM_VECTORARG(maxs, OFS_PARM3);
int nomonsters = G_FLOAT(OFS_PARM4);
v1 = G_VECTOR(OFS_PARM0); edict_t *ent = G_EDICT(prinst, OFS_PARM5);
v2 = G_VECTOR(OFS_PARM1);
mins = G_VECTOR(OFS_PARM2);
maxs = G_VECTOR(OFS_PARM3);
nomonsters = G_FLOAT(OFS_PARM4);
ent = G_EDICT(prinst, OFS_PARM5);
trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters|MOVE_IGNOREHULL, (wedict_t*)ent);
trace_t trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters|MOVE_IGNOREHULL, (wedict_t*)ent);
set_trace_globals(prinst, &trace); set_trace_globals(prinst, &trace);
} }
#endif #endif
static void QCBUILTIN PF_traceboxdp (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_traceboxdp (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
float *v1, *v2, *mins, *maxs; VM_VECTORARG(v1, OFS_PARM0);
trace_t trace; VM_VECTORARG(mins, OFS_PARM1);
int nomonsters; VM_VECTORARG(maxs, OFS_PARM2);
edict_t *ent; VM_VECTORARG(v2, OFS_PARM3);
int nomonsters = G_FLOAT(OFS_PARM4);
v1 = G_VECTOR(OFS_PARM0); edict_t *ent = G_EDICT(prinst, OFS_PARM5);
mins = G_VECTOR(OFS_PARM1);
maxs = G_VECTOR(OFS_PARM2);
v2 = G_VECTOR(OFS_PARM3);
nomonsters = G_FLOAT(OFS_PARM4);
ent = G_EDICT(prinst, OFS_PARM5);
// PR_StackTrace(prinst, 2); // PR_StackTrace(prinst, 2);
trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters|MOVE_IGNOREHULL, (wedict_t*)ent); trace_t trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters|MOVE_IGNOREHULL, (wedict_t*)ent);
set_trace_globals(prinst, &trace); set_trace_globals(prinst, &trace);
} }
@ -4902,10 +4854,9 @@ static void QCBUILTIN PF_pointcontents (pubprogfuncs_t *prinst, struct globalvar
{ {
world_t *w = prinst->parms->user; world_t *w = prinst->parms->user;
float *v;
int cont; int cont;
v = G_VECTOR(OFS_PARM0); VM_VECTORARG(v, OFS_PARM0);
cont = World_PointContentsWorldOnly(w, v); cont = World_PointContentsWorldOnly(w, v);
if (cont & FTECONTENTS_SOLID) if (cont & FTECONTENTS_SOLID)
@ -6454,11 +6405,8 @@ void(vector where, float set) multicast
*/ */
void QCBUILTIN PF_multicast (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) void QCBUILTIN PF_multicast (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
float *o; VM_VECTORARG(o, OFS_PARM0);
int to; int to = G_FLOAT(OFS_PARM1);
o = G_VECTOR(OFS_PARM0);
to = G_FLOAT(OFS_PARM1);
#ifdef NETPREPARSE #ifdef NETPREPARSE
NPP_Flush(); NPP_Flush();
@ -7954,11 +7902,11 @@ static void QCBUILTIN PF_h2v_factor(pubprogfuncs_t *prinst, struct globalvars_s
static void QCBUILTIN PF_h2v_factorrange(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_h2v_factorrange(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
// returns (v_right * factor_x) + (v_forward * factor_y) + (v_up * factor_z) // returns (v_right * factor_x) + (v_forward * factor_y) + (v_up * factor_z)
{ {
float num,*minv,*maxv; float num;
vec3_t result,r2; vec3_t result,r2;
minv = G_VECTOR(OFS_PARM0); VM_VECTORARG(minv, OFS_PARM0);
maxv = G_VECTOR(OFS_PARM1); VM_VECTORARG(maxv, OFS_PARM1);
num = (rand ()&0x7fff) / ((float)0x7fff); num = (rand ()&0x7fff) / ((float)0x7fff);
result[0] = ((maxv[0]-minv[0]) * num) + minv[0]; result[0] = ((maxv[0]-minv[0]) * num) + minv[0];

View file

@ -560,7 +560,7 @@ static eval_t *QDECL Q1QVMPF_FindGlobal (pubprogfuncs_t *prinst, const char *na
return NULL; return NULL;
} }
static globalvars_t *QDECL Q1QVMPF_Globals(pubprogfuncs_t *prinst, int prnum) static globalvars_t *QDECL Q1QVMPF_Globals(pubprogfuncs_t *prinst, progsnum_t prnum)
{ {
return NULL; return NULL;
} }
@ -985,8 +985,8 @@ static qintptr_t QVM_WalkMove (void *offset, quintptr_t mask, const qintptr_t *a
static qintptr_t QVM_DropToFloor (void *offset, quintptr_t mask, const qintptr_t *arg) static qintptr_t QVM_DropToFloor (void *offset, quintptr_t mask, const qintptr_t *arg)
{ {
edict_t *ent; edict_t *ent;
vec3_t end; pvec3_t end;
vec3_t start; pvec3_t start;
trace_t trace; trace_t trace;
extern cvar_t pr_droptofloorunits; extern cvar_t pr_droptofloorunits;
@ -2161,12 +2161,12 @@ static qboolean QDECL Q1QVM_Event_ContentsTransition(world_t *w, wedict_t *ent,
qboolean PR_LoadQ1QVM(void) qboolean PR_LoadQ1QVM(void)
{ {
static int writable_int; static pint_t writable_int;
static float writable; static pvec_t writable;
static float dimensionsend = 255; static pvec_t dimensionsend = 255;
static float dimensiondefault = 255; static pvec_t dimensiondefault = 255;
static float physics_mode = 2; static pvec_t physics_mode = 2;
static vec3_t defaultgravity = {0,0,-1}; static pvec3_t defaultgravity = {0,0,-1};
int i; int i;
gameDataPrivate_t gd; gameDataPrivate_t gd;
gameDataN_t *gdn; gameDataN_t *gdn;

View file

@ -22,71 +22,71 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
typedef struct globalvars_s typedef struct globalvars_s
{ {
int null; pint_t null;
union { union {
vec3_t vec; pvec3_t vec;
float f; pvec_t f;
int i; pint_t i;
} ret; } ret;
union { union {
vec3_t vec; pvec3_t vec;
float f; pvec_t f;
int i; pint_t i;
} param[8]; } param[8];
} globalvars_t; } globalvars_t;
#define NUM_SPAWN_PARMS 64 #define NUM_SPAWN_PARMS 64
typedef struct nqglobalvars_s typedef struct nqglobalvars_s
{ {
int *self; pint_t *self;
int *other; pint_t *other;
int *world; pint_t *world;
float *time; pvec_t *time;
float *frametime; pvec_t *frametime;
int *newmis; pint_t *newmis;
float *force_retouch; pvec_t *force_retouch;
string_t *mapname; string_t *mapname;
float *deathmatch; pvec_t *deathmatch;
float *coop; pvec_t *coop;
float *teamplay; pvec_t *teamplay;
float *serverflags; pvec_t *serverflags;
float *total_secrets; pvec_t *total_secrets;
float *total_monsters; pvec_t *total_monsters;
float *found_secrets; pvec_t *found_secrets;
float *killed_monsters; pvec_t *killed_monsters;
vec3_t *v_forward; pvec3_t *v_forward;
vec3_t *v_up; pvec3_t *v_up;
vec3_t *v_right; pvec3_t *v_right;
float *trace_allsolid; pvec_t *trace_allsolid;
float *trace_startsolid; pvec_t *trace_startsolid;
float *trace_fraction; pvec_t *trace_fraction;
#ifdef HAVE_LEGACY #ifdef HAVE_LEGACY
float *trace_surfaceflagsf; pvec_t *trace_surfaceflagsf;
#endif #endif
int *trace_surfaceflagsi; pint_t *trace_surfaceflagsi;
string_t*trace_surfacename; string_t*trace_surfacename;
#ifdef HAVE_LEGACY #ifdef HAVE_LEGACY
float *trace_endcontentsf; pvec_t *trace_endcontentsf;
#endif #endif
int *trace_endcontentsi; pint_t *trace_endcontentsi;
int *trace_brush_id; pint_t *trace_brush_id;
int *trace_brush_faceid; pint_t *trace_brush_faceid;
int *trace_surface_id; pint_t *trace_surface_id;
int *trace_bone_id; pint_t *trace_bone_id;
int *trace_triangle_id; pint_t *trace_triangle_id;
vec3_t *trace_endpos; pvec3_t *trace_endpos;
vec3_t *trace_plane_normal; pvec3_t *trace_plane_normal;
float *trace_plane_dist; pvec_t *trace_plane_dist;
int *trace_ent; pint_t *trace_ent;
float *trace_inopen; pvec_t *trace_inopen;
float *trace_inwater; pvec_t *trace_inwater;
#ifdef HAVE_LEGACY #ifdef HAVE_LEGACY
string_t*trace_dphittexturename; string_t*trace_dphittexturename;
float *trace_dpstartcontents; pvec_t *trace_dpstartcontents;
float *trace_dphitcontents; pvec_t *trace_dphitcontents;
float *trace_dphitq3surfaceflags; pvec_t *trace_dphitq3surfaceflags;
#endif #endif
int *msg_entity; pint_t *msg_entity;
func_t *main; func_t *main;
func_t *StartFrame; func_t *StartFrame;
func_t *PlayerPreThink; func_t *PlayerPreThink;
@ -97,21 +97,21 @@ typedef struct nqglobalvars_s
func_t *ClientDisconnect; func_t *ClientDisconnect;
func_t *SetNewParms; func_t *SetNewParms;
func_t *SetChangeParms; func_t *SetChangeParms;
float *cycle_wrapped; pvec_t *cycle_wrapped;
float *dimension_send; pvec_t *dimension_send;
float *dimension_default; pvec_t *dimension_default;
float *physics_mode; pvec_t *physics_mode;
float *clientcommandframe; pvec_t *clientcommandframe;
float *input_timelength; pvec_t *input_timelength;
float *input_impulse; pvec_t *input_impulse;
vec3_t *input_angles; pvec3_t *input_angles;
vec3_t *input_movevalues; pvec3_t *input_movevalues;
float *input_buttons; pvec_t *input_buttons;
vec3_t *global_gravitydir; pvec3_t *global_gravitydir;
float *spawnparamglobals[NUM_SPAWN_PARMS]; pvec_t *spawnparamglobals[NUM_SPAWN_PARMS];
string_t *parm_string; string_t *parm_string;
int *serverid; pint_t *serverid;
} globalptrs_t; } globalptrs_t;
#define P_VEC(v) (pr_global_struct->v) #define P_VEC(v) (pr_global_struct->v)
@ -371,9 +371,9 @@ and the extension fields are added on the end and can have extra vm-specific stu
typedef struct stdentvars_s //standard = standard for qw typedef struct stdentvars_s //standard = standard for qw
{ {
#define comfieldfloat(sharedname,desc) float sharedname; #define comfieldfloat(sharedname,desc) pvec_t sharedname;
#define comfieldvector(sharedname,desc) vec3_t sharedname; #define comfieldvector(sharedname,desc) pvec3_t sharedname;
#define comfieldentity(sharedname,desc) int sharedname; #define comfieldentity(sharedname,desc) pint_t sharedname;
#define comfieldstring(sharedname,desc) string_t sharedname; #define comfieldstring(sharedname,desc) string_t sharedname;
#define comfieldfunction(sharedname, typestr,desc) func_t sharedname; #define comfieldfunction(sharedname, typestr,desc) func_t sharedname;
comqcfields comqcfields
@ -388,10 +388,10 @@ comqcfields
typedef struct extentvars_s typedef struct extentvars_s
{ {
#endif #endif
#define comfieldfloat(name,desc) float name; #define comfieldfloat(name,desc) pvec_t name;
#define comfieldint(name,desc) int name; #define comfieldint(name,desc) pint_t name;
#define comfieldvector(name,desc) vec3_t name; #define comfieldvector(name,desc) pvec3_t name;
#define comfieldentity(name,desc) int name; #define comfieldentity(name,desc) pint_t name;
#define comfieldstring(name,desc) string_t name; #define comfieldstring(name,desc) string_t name;
#define comfieldfunction(name, typestr,desc) func_t name; #define comfieldfunction(name, typestr,desc) func_t name;
comextqcfields comextqcfields
@ -410,9 +410,9 @@ svextqcfields
#endif #endif
typedef struct { typedef struct {
#define comfieldfloat(sharedname,desc) float sharedname; #define comfieldfloat(sharedname,desc) pvec_t sharedname;
#define comfieldvector(sharedname,desc) vec3_t sharedname; #define comfieldvector(sharedname,desc) pvec3_t sharedname;
#define comfieldentity(sharedname,desc) int sharedname; #define comfieldentity(sharedname,desc) pint_t sharedname;
#define comfieldstring(sharedname,desc) string_t sharedname; #define comfieldstring(sharedname,desc) string_t sharedname;
#define comfieldfunction(sharedname, typestr,desc) func_t sharedname; #define comfieldfunction(sharedname, typestr,desc) func_t sharedname;
comqcfields comqcfields
@ -427,10 +427,10 @@ comqcfields
typedef struct { typedef struct {
#endif #endif
#define comfieldfloat(name,desc) float name; #define comfieldfloat(name,desc) pvec_t name;
#define comfieldint(name,desc) int name; #define comfieldint(name,desc) pint_t name;
#define comfieldvector(name,desc) vec3_t name; #define comfieldvector(name,desc) pvec3_t name;
#define comfieldentity(name,desc) int name; #define comfieldentity(name,desc) pint_t name;
#define comfieldstring(name,desc) string_t name; #define comfieldstring(name,desc) string_t name;
#define comfieldfunction(name, typestr,desc) func_t name; #define comfieldfunction(name, typestr,desc) func_t name;
comextqcfields comextqcfields

View file

@ -174,7 +174,7 @@ typedef struct
qbyte h2cdtrack; qbyte h2cdtrack;
#endif #endif
vec3_t skyroom_pos; //parsed from world._skyroom pvec3_t skyroom_pos; //parsed from world._skyroom
qboolean skyroom_pos_known; qboolean skyroom_pos_known;
int allocated_client_slots; //number of slots available. (used mostly to stop single player saved games cacking up) int allocated_client_slots; //number of slots available. (used mostly to stop single player saved games cacking up)
@ -1318,7 +1318,7 @@ void SV_MulticastProtExt(vec3_t origin, multicast_t to, int dimension_mask, int
void SV_MulticastCB(vec3_t origin, multicast_t to, const char *reliableinfokey, int dimension_mask, void (*callback)(client_t *cl, sizebuf_t *msg, void *ctx), void *ctx); void SV_MulticastCB(vec3_t origin, multicast_t to, const char *reliableinfokey, int dimension_mask, void (*callback)(client_t *cl, sizebuf_t *msg, void *ctx), void *ctx);
void SV_StartSound (int ent, vec3_t origin, float *velocity, int seenmask, int channel, const char *sample, int volume, float attenuation, float pitchadj, float timeofs, unsigned int flags); void SV_StartSound (int ent, vec3_t origin, float *velocity, int seenmask, int channel, const char *sample, int volume, float attenuation, float pitchadj, float timeofs, unsigned int flags);
void QDECL SVQ1_StartSound (float *origin, wedict_t *entity, int channel, const char *sample, int volume, float attenuation, float pitchadj, float timeofs, unsigned int chflags); void QDECL SVQ1_StartSound (vec_t *origin, wedict_t *entity, int channel, const char *sample, int volume, float attenuation, float pitchadj, float timeofs, unsigned int chflags);
void SV_PrintToClient(client_t *cl, int level, const char *string); void SV_PrintToClient(client_t *cl, int level, const char *string);
void SV_TPrintToClient(client_t *cl, int level, const char *string); void SV_TPrintToClient(client_t *cl, int level, const char *string);
void SV_StuffcmdToClient(client_t *cl, const char *string); void SV_StuffcmdToClient(client_t *cl, const char *string);

View file

@ -3909,7 +3909,7 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
} }
} }
void SV_AddCameraEntity(pvscamera_t *cameras, edict_t *ent, vec3_t viewofs) void SV_AddCameraEntity(pvscamera_t *cameras, edict_t *ent, pvec3_t viewofs)
{ {
int i; int i;
vec3_t org; vec3_t org;

View file

@ -628,7 +628,7 @@ qboolean World_MoveToGoal (world_t *world, wedict_t *ent, float dist)
#ifdef ENGINE_ROUTING #ifdef ENGINE_ROUTING
#ifndef SERVERONLY #ifdef HAVE_CLIENT
static cvar_t route_shownodes = CVAR("route_shownodes", "0"); static cvar_t route_shownodes = CVAR("route_shownodes", "0");
#endif #endif
@ -737,7 +737,7 @@ static struct waypointnetwork_s *WayNet_Begin(void **ctxptr, model_t *worldmodel
net->waypoints[net->numwaypoints].org[0] = atof(Cmd_Argv(0)); net->waypoints[net->numwaypoints].org[0] = atof(Cmd_Argv(0));
net->waypoints[net->numwaypoints].org[1] = atof(Cmd_Argv(1)); net->waypoints[net->numwaypoints].org[1] = atof(Cmd_Argv(1));
net->waypoints[net->numwaypoints].org[2] = atof(Cmd_Argv(2)); net->waypoints[net->numwaypoints].org[2] = atof(Cmd_Argv(2));
net->waypoints[net->numwaypoints].radius = 64;//atof(Cmd_Argv(3)); net->waypoints[net->numwaypoints].radius = atof(Cmd_Argv(3));
numlinks = bound(0, atoi(Cmd_Argv(4)), maxlinks); numlinks = bound(0, atoi(Cmd_Argv(4)), maxlinks);
//make sure the links are valid, and clamp to avoid problems (even if we're then going to mis-parse. //make sure the links are valid, and clamp to avoid problems (even if we're then going to mis-parse.
@ -1127,7 +1127,7 @@ void QCBUILTIN PF_route_calculate (pubprogfuncs_t *prinst, struct globalvars_s *
COM_AddWork(WG_LOADER, Route_Calculate, NULL, route, 0, 0); COM_AddWork(WG_LOADER, Route_Calculate, NULL, route, 0, 0);
} }
#ifndef SERVERONLY #ifdef HAVE_CLIENT
static void Route_Visualise_f(void) static void Route_Visualise_f(void)
{ {
extern world_t csqc_world; extern world_t csqc_world;
@ -1252,17 +1252,17 @@ void PR_Route_Shutdown (world_t *world)
static void Route_Reload_f(void) static void Route_Reload_f(void)
{ {
#if !defined(SERVERONLY) && defined(CSQC_DAT) #if defined(HAVE_CLIENT) && defined(CSQC_DAT)
extern world_t csqc_world; extern world_t csqc_world;
PR_Route_Shutdown(&csqc_world); PR_Route_Shutdown(&csqc_world);
#endif #endif
#ifndef CLIENTONLY #ifdef HAVE_SERVER
PR_Route_Shutdown(&sv.world); PR_Route_Shutdown(&sv.world);
#endif #endif
} }
void PR_Route_Init (void) void PR_Route_Init (void)
{ {
#if !defined(SERVERONLY) && defined(CSQC_DAT) #if defined(HAVE_CLIENT) && defined(CSQC_DAT)
Cvar_Register(&route_shownodes, NULL); Cvar_Register(&route_shownodes, NULL);
Cmd_AddCommand("route_visualise", Route_Visualise_f); Cmd_AddCommand("route_visualise", Route_Visualise_f);
#endif #endif

View file

@ -1458,8 +1458,7 @@ void QDECL SVQ1_StartSound (float *origin, wedict_t *wentity, int channel, const
{ {
edict_t *entity = (edict_t*)wentity; edict_t *entity = (edict_t*)wentity;
int i, solid; int i, solid;
vec3_t originbuf; vec3_t originbuf, velocity={0,0,0};
float *velocity = NULL;
if (!origin) if (!origin)
{ {
origin = originbuf; origin = originbuf;
@ -1487,7 +1486,7 @@ void QDECL SVQ1_StartSound (float *origin, wedict_t *wentity, int channel, const
} }
if (chflags & CF_SV_SENDVELOCITY) if (chflags & CF_SV_SENDVELOCITY)
velocity = entity->v->velocity; VectorCopy(entity->v->velocity, velocity);
} }
SV_StartSound(NUM_FOR_EDICT(svprogfuncs, entity), origin, velocity, entity->xv->dimension_seen, channel, sample, volume, attenuation, pitchadj, timeofs, chflags); SV_StartSound(NUM_FOR_EDICT(svprogfuncs, entity), origin, velocity, entity->xv->dimension_seen, channel, sample, volume, attenuation, pitchadj, timeofs, chflags);
@ -1629,7 +1628,7 @@ void SV_SendFixAngle(client_t *client, sizebuf_t *msg, int fixtype, qboolean rol
unsigned i; unsigned i;
client_t *controller = client->controller?client->controller:client; client_t *controller = client->controller?client->controller:client;
edict_t *ent = client->edict; edict_t *ent = client->edict;
float *ang; pvec_t *ang;
if (!ent || client->protocol == SCP_QUAKE2) if (!ent || client->protocol == SCP_QUAKE2)
return; return;
ang = ent->v->fixangle?ent->v->angles:ent->v->v_angle; //angles is just WEIRD for mdls, but then quake sucks. ang = ent->v->fixangle?ent->v->angles:ent->v->v_angle; //angles is just WEIRD for mdls, but then quake sucks.

View file

@ -8847,8 +8847,7 @@ void SV_UserInit (void)
static vec3_t forward, right, up, wishdir; static vec3_t forward, right, up, wishdir;
static float *origin, *velocity, *angles; static pvec_t *origin, *velocity, *angles;
static float wishspeed;
extern cvar_t sv_accelerate, sv_friction; extern cvar_t sv_accelerate, sv_friction;
static qboolean onground; static qboolean onground;
@ -8904,7 +8903,7 @@ static void SV_UserFriction (void)
vel[2] = vel[2] * newspeed; vel[2] = vel[2] * newspeed;
} }
static void SV_Accelerate (void) static void SV_Accelerate (float wishspeed)
{ {
int i; int i;
float addspeed, accelspeed, currentspeed; float addspeed, accelspeed, currentspeed;
@ -8921,7 +8920,7 @@ static void SV_Accelerate (void)
velocity[i] += accelspeed*wishdir[i]; velocity[i] += accelspeed*wishdir[i];
} }
static void SV_AirAccelerate (vec3_t wishveloc) static void SV_AirAccelerate (vec3_t wishveloc, float wishspeed)
{ {
int i; int i;
float addspeed, wishspd, accelspeed, currentspeed; float addspeed, wishspd, accelspeed, currentspeed;
@ -8954,6 +8953,7 @@ static void SV_AirMove (void)
vec3_t wishvel; vec3_t wishvel;
float fmove, smove; float fmove, smove;
float scale, maxspeed; float scale, maxspeed;
float wishspeed;
AngleVectors (sv_player->v->angles, forward, right, up); AngleVectors (sv_player->v->angles, forward, right, up);
@ -8999,11 +8999,11 @@ static void SV_AirMove (void)
else if ( onground ) else if ( onground )
{ {
SV_UserFriction (); SV_UserFriction ();
SV_Accelerate (); SV_Accelerate (wishspeed);
} }
else else
{ // not on ground, so little effect on velocity { // not on ground, so little effect on velocity
SV_AirAccelerate (wishvel); SV_AirAccelerate (wishvel, wishspeed);
} }
} }
@ -9234,7 +9234,7 @@ void SV_ClientThink (void)
VectorCopy (sv_player->v->v_angle, v_angle); VectorCopy (sv_player->v->v_angle, v_angle);
// VectorAdd (sv_player->v->v_angle, sv_player->v->punchangle, v_angle); // VectorAdd (sv_player->v->v_angle, sv_player->v->punchangle, v_angle);
//FIXME: gravitydir stuff, the roll value gets destroyed for intents //FIXME: gravitydir stuff, the roll value gets destroyed for intents
angles[ROLL] = V_CalcRoll (sv_player->v->angles, sv_player->v->velocity)*4; angles[ROLL] = V_CalcRoll (angles, velocity)*4;
if (!sv_player->v->fixangle) if (!sv_player->v->fixangle)
{ {
angles[PITCH] = -v_angle[PITCH]/3; angles[PITCH] = -v_angle[PITCH]/3;

View file

@ -511,8 +511,8 @@ SV_LinkEdict
*/ */
void QDECL World_LinkEdict (world_t *w, wedict_t *ent, qboolean touch_triggers) void QDECL World_LinkEdict (world_t *w, wedict_t *ent, qboolean touch_triggers)
{ {
vec_t *mins; pvec_t *mins;
vec_t *maxs; pvec_t *maxs;
int solid; int solid;
#ifdef USEAREAGRID #ifdef USEAREAGRID

View file

@ -44,7 +44,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//#define vec3_origin vec3_origin_ //#define vec3_origin vec3_origin_
//static vec3_t vec3_origin; //static vec3_t vec3_origin;
#define VectorCompare VectorCompare_ #define VectorCompare VectorCompare_
static int VectorCompare (const vec3_t v1, const vec3_t v2) static int VectorCompare (const pvec3_t v1, const pvec3_t v2)
{ {
int i; int i;
for (i=0 ; i<3 ; i++) for (i=0 ; i<3 ; i++)
@ -216,7 +216,7 @@ static btTransform transformFromQuake(world_t *world, wedict_t *ent)
vec3_t forward, left, up; vec3_t forward, left, up;
if (NegativeMeshPitch(world, ent)) if (NegativeMeshPitch(world, ent))
{ {
vec3_t iangles = {-ent->v->angles[0], ent->v->angles[1], ent->v->angles[2]}; pvec3_t iangles = {-ent->v->angles[0], ent->v->angles[1], ent->v->angles[2]};
rbefuncs->AngleVectors(iangles, forward, left, up); rbefuncs->AngleVectors(iangles, forward, left, up);
} }
else else