r_refdef.view.isoverlay = false;
// FIXME: restore cl.csqc_origin
// FIXME: restore cl.csqc_angles
- cl.csqc_vidvars.drawworld = true;
+ cl.csqc_vidvars.drawworld = r_drawworld.integer;
cl.csqc_vidvars.drawenginesbar = false;
cl.csqc_vidvars.drawcrosshair = false;
}
}
//#303 float(float property, ...) setproperty (EXT_CSQC)
+//#303 float(float property) getproperty
+//#303 vector(float property) getpropertyvec
+// VorteX: make this function be able to return previously set property if new value is not given
void VM_CL_R_SetView (void)
{
int c;
float *f;
float k;
- VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_R_SetView);
+ VM_SAFEPARMCOUNTRANGE(1, 3, VM_CL_R_SetView);
c = (int)PRVM_G_FLOAT(OFS_PARM0);
+
+ // return value?
+ if (prog->argc < 2)
+ {
+ switch(c)
+ {
+ case VF_MIN:
+ VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.x, r_refdef.view.y, 0);
+ break;
+ case VF_MIN_X:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.x;
+ break;
+ case VF_MIN_Y:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.y;
+ break;
+ case VF_SIZE:
+ VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.width, r_refdef.view.height, 0);
+ break;
+ case VF_SIZE_X:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.width;
+ break;
+ case VF_SIZE_Y:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.height;
+ break;
+ case VF_VIEWPORT:
+ VM_Warning("VM_CL_R_GetView : VF_VIEWPORT can't be retrieved, use VF_MIN/VF_SIZE instead\n");
+ break;
+ case VF_FOV:
+ VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.ortho_x, r_refdef.view.ortho_y, 0);
+ break;
+ case VF_FOVX:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.ortho_x;
+ break;
+ case VF_FOVY:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.ortho_y;
+ break;
+ case VF_ORIGIN:
+ VectorCopy(cl.csqc_origin, PRVM_G_VECTOR(OFS_RETURN));
+ break;
+ case VF_ORIGIN_X:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[0];
+ break;
+ case VF_ORIGIN_Y:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[1];
+ break;
+ case VF_ORIGIN_Z:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[2];
+ break;
+ case VF_ANGLES:
+ VectorCopy(cl.csqc_angles, PRVM_G_VECTOR(OFS_RETURN));
+ break;
+ case VF_ANGLES_X:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[0];
+ break;
+ case VF_ANGLES_Y:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[1];
+ break;
+ case VF_ANGLES_Z:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[2];
+ break;
+ case VF_DRAWWORLD:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawworld;
+ break;
+ case VF_DRAWENGINESBAR:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawenginesbar;
+ break;
+ case VF_DRAWCROSSHAIR:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawcrosshair;
+ break;
+ case VF_CL_VIEWANGLES:
+ VectorCopy(cl.viewangles, PRVM_G_VECTOR(OFS_RETURN));;
+ break;
+ case VF_CL_VIEWANGLES_X:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[0];
+ break;
+ case VF_CL_VIEWANGLES_Y:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[1];
+ break;
+ case VF_CL_VIEWANGLES_Z:
+ PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[2];
+ break;
+ case VF_PERSPECTIVE:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.useperspective;
+ break;
+ case VF_CLEARSCREEN:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.isoverlay;
+ break;
+ default:
+ PRVM_G_FLOAT(OFS_RETURN) = 0;
+ VM_Warning("VM_CL_R_GetView : unknown parm %i\n", c);
+ return;
+ }
+ return;
+ }
+
f = PRVM_G_VECTOR(OFS_PARM1);
k = PRVM_G_FLOAT(OFS_PARM1);
-
switch(c)
{
case VF_MIN:
CSQC_R_RecalcView();
break;
case VF_DRAWWORLD:
- cl.csqc_vidvars.drawworld = k != 0;
+ cl.csqc_vidvars.drawworld = ((k != 0) && r_drawworld.integer);
break;
case VF_DRAWENGINESBAR:
cl.csqc_vidvars.drawenginesbar = k != 0;
if (i < 0)
return;
- CL_ParticleEffect(i, VectorDistance(start, end), start, end, t->fields.client->velocity, t->fields.client->velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
+ CL_ParticleEffect(i, 1, start, end, t->fields.client->velocity, t->fields.client->velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
}
//#337 void(float effectnum, vector origin, vector dir, float count[, float color]) pointparticles (EXT_CSQC)
static void VM_CL_pointparticles (void)
{
- int i, n;
+ int i;
+ float n;
float *f, *v;
VM_SAFEPARMCOUNTRANGE(4, 5, VM_CL_pointparticles);
i = (int)PRVM_G_FLOAT(OFS_PARM0);
f = PRVM_G_VECTOR(OFS_PARM1);
v = PRVM_G_VECTOR(OFS_PARM2);
- n = (int)PRVM_G_FLOAT(OFS_PARM3);
+ n = PRVM_G_FLOAT(OFS_PARM3);
if (i < 0)
return;
CL_ParticleEffect(i, n, f, f, v, v, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
}
+//#502 void(float effectnum, entity own, vector origin_from, vector origin_to, vector dir_from, vector dir_to, float count, float extflags) boxparticles (DP_CSQC_BOXPARTICLES)
+static void VM_CL_boxparticles (void)
+{
+ int effectnum;
+ prvm_edict_t *own;
+ float *origin_from, *origin_to, *dir_from, *dir_to;
+ float count;
+ int flags;
+ float tintmins[4], tintmaxs[4];
+ prvm_eval_t *val;
+ VM_SAFEPARMCOUNTRANGE(7, 8, VM_CL_boxparticles);
+
+ effectnum = (int)PRVM_G_FLOAT(OFS_PARM0);
+ own = PRVM_G_EDICT(OFS_PARM1); // TODO find use for this
+ origin_from = PRVM_G_VECTOR(OFS_PARM2);
+ origin_to = PRVM_G_VECTOR(OFS_PARM3);
+ dir_from = PRVM_G_VECTOR(OFS_PARM4);
+ dir_to = PRVM_G_VECTOR(OFS_PARM5);
+ count = PRVM_G_FLOAT(OFS_PARM6);
+ if(prog->argc >= 8)
+ flags = PRVM_G_FLOAT(OFS_PARM7);
+ else
+ flags = 0;
+ Vector4Set(tintmins, 1, 1, 1, 1);
+ Vector4Set(tintmaxs, 1, 1, 1, 1);
+ if(flags & 1) // read alpha
+ {
+ if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_alphamin)))
+ tintmins[3] = val->_float;
+ if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_alphamax)))
+ tintmaxs[3] = val->_float;
+ }
+ if(flags & 2) // read color
+ {
+ if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_colormin)))
+ VectorCopy(val->vector, tintmins);
+ if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_colormax)))
+ VectorCopy(val->vector, tintmaxs);
+ }
+ if (effectnum < 0)
+ return;
+ CL_ParticleTrail(effectnum, count, origin_from, origin_to, dir_from, dir_to, NULL, 0, true, true, tintmins, tintmaxs);
+}
+
//#531 void(float pause) setpause
static void VM_CL_setpause(void)
{
if (prog->argc < 3) // global-set particle
{
- part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)(vmpartspawner.particle_color1[0]) << 16) + ((int)(vmpartspawner.particle_color1[1]) << 8) + ((int)(vmpartspawner.particle_color1[2])), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, (int)(vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]), (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin);
+ part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)(vmpartspawner.particle_color1[0]) << 16) + ((int)(vmpartspawner.particle_color1[1]) << 8) + ((int)(vmpartspawner.particle_color1[2])), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, (int)(vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]), (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin, NULL);
if (!part)
{
PRVM_G_FLOAT(OFS_RETURN) = 0;
return;
}
theme = &vmpartspawner.themes[themenum];
- part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin);
+ part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin, NULL);
if (!part)
{
PRVM_G_FLOAT(OFS_RETURN) = 0;
org = PRVM_G_VECTOR(OFS_PARM0);
dir = PRVM_G_VECTOR(OFS_PARM1);
if (prog->argc < 5) // global-set particle
- part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)vmpartspawner.particle_color1[0] << 16) + ((int)vmpartspawner.particle_color1[1] << 8) + ((int)vmpartspawner.particle_color1[2]), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, ((int)vmpartspawner.particle_staincolor1[0] << 16) + ((int)vmpartspawner.particle_staincolor1[1] << 8) + ((int)vmpartspawner.particle_staincolor1[2]), ((int)vmpartspawner.particle_staincolor2[0] << 16) + ((int)vmpartspawner.particle_staincolor2[1] << 8) + ((int)vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin);
+ part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)vmpartspawner.particle_color1[0] << 16) + ((int)vmpartspawner.particle_color1[1] << 8) + ((int)vmpartspawner.particle_color1[2]), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, ((int)vmpartspawner.particle_staincolor1[0] << 16) + ((int)vmpartspawner.particle_staincolor1[1] << 8) + ((int)vmpartspawner.particle_staincolor1[2]), ((int)vmpartspawner.particle_staincolor2[0] << 16) + ((int)vmpartspawner.particle_staincolor2[1] << 8) + ((int)vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin, NULL);
else // themed particle
{
themenum = (int)PRVM_G_FLOAT(OFS_PARM4);
return;
}
theme = &vmpartspawner.themes[themenum];
- part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin);
+ part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin, NULL);
}
if (!part)
{
VM_getentityfieldstring, // #499 string(float fieldnum, entity ent) getentityfieldstring = #499; (DP_QC_ENTITYDATA)
VM_putentityfieldstring, // #500 float(float fieldnum, entity ent, string s) putentityfieldstring = #500; (DP_QC_ENTITYDATA)
VM_CL_ReadPicture, // #501 string() ReadPicture = #501;
-NULL, // #502
+VM_CL_boxparticles, // #502 void(float effectnum, entity own, vector origin_from, vector origin_to, vector dir_from, vector dir_to, float count) boxparticles (DP_CSQC_BOXPARTICLES)
VM_whichpack, // #503 string(string) whichpack = #503;
VM_CL_GetEntity, // #504 float(float entitynum, float fldnum) getentity = #504; vector(float entitynum, float fldnum) getentityvec = #504;
NULL, // #505