extern cvar_t v_flipped;
extern cvar_t r_equalize_entities_fullbright;
+r_refdef_view_t csqc_original_r_refdef_view;
+
sfx_t *S_FindName(const char *name);
int Sbar_GetSortedPlayerIndex (int index);
void Sbar_SortFrags (void);
prvm_edict_t *entity;
float volume;
float attenuation;
+ float pitchchange;
+ int flags;
vec3_t org;
- VM_SAFEPARMCOUNT(5, VM_CL_sound);
+ VM_SAFEPARMCOUNTRANGE(5, 7, VM_CL_sound);
entity = PRVM_G_EDICT(OFS_PARM0);
channel = (int)PRVM_G_FLOAT(OFS_PARM1);
return;
}
- if (channel < 0 || channel > 7)
+ if (prog->argc < 6)
+ pitchchange = 0;
+ else
+ pitchchange = PRVM_G_FLOAT(OFS_PARM5);
+ // ignoring prog->argc < 7 for now (no flags supported yet)
+
+ if (prog->argc < 7)
+ flags = 0;
+ else
+ flags = PRVM_G_FLOAT(OFS_PARM6);
+
+ channel = CHAN_USER2ENGINE(channel);
+
+ if (!IS_CHAN(channel))
{
- VM_Warning("VM_CL_sound: channel must be in range 0-7\n");
+ VM_Warning("VM_CL_sound: channel must be in range 0-127\n");
return;
}
CL_VM_GetEntitySoundOrigin(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), org);
- S_StartSound(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), org, volume, attenuation);
+ S_StartSound_StartPosition_Flags(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), org, volume, attenuation, 0, flags, pitchchange > 0.0f ? pitchchange * 0.01f : 1.0f);
}
// #483 void(vector origin, string sample, float volume, float attenuation) pointsound
vec3_t ambientcolor, diffusecolor, diffusenormal;
vec_t *p;
- VM_SAFEPARMCOUNTRANGE(1, 2, VM_CL_getlight);
+ VM_SAFEPARMCOUNTRANGE(1, 3, VM_CL_getlight);
p = PRVM_G_VECTOR(OFS_PARM0);
VectorClear(ambientcolor);
else if (cl.worldmodel && cl.worldmodel->brush.LightPoint)
cl.worldmodel->brush.LightPoint(cl.worldmodel, p, ambientcolor, diffusecolor, diffusenormal);
VectorMA(ambientcolor, 0.5, diffusecolor, PRVM_G_VECTOR(OFS_RETURN));
+ if (PRVM_clientglobalvector(getlight_ambient))
+ VectorCopy(ambientcolor, PRVM_clientglobalvector(getlight_ambient));
+ if (PRVM_clientglobalvector(getlight_diffuse))
+ VectorCopy(diffusecolor, PRVM_clientglobalvector(getlight_diffuse));
+ if (PRVM_clientglobalvector(getlight_dir))
+ VectorCopy(diffusenormal, PRVM_clientglobalvector(getlight_dir));
}
//============================================================================
// clear renderable entity and light lists
r_refdef.scene.numentities = 0;
r_refdef.scene.numlights = 0;
- // FIXME: restore these to the values from VM_CL_UpdateView
- r_refdef.view.x = 0;
- r_refdef.view.y = 0;
- r_refdef.view.z = 0;
- r_refdef.view.width = vid.width;
- r_refdef.view.height = vid.height;
- r_refdef.view.depth = 1;
- // FIXME: restore frustum_x/frustum_y
- r_refdef.view.useperspective = true;
- r_refdef.view.frustum_y = tan(scr_fov.value * M_PI / 360.0) * (3.0/4.0) * cl.viewzoom;
- r_refdef.view.frustum_x = r_refdef.view.frustum_y * (float)r_refdef.view.width / (float)r_refdef.view.height / vid_pixelheight.value;
- r_refdef.view.frustum_x *= r_refdef.frustumscale_x;
- r_refdef.view.frustum_y *= r_refdef.frustumscale_y;
- r_refdef.view.ortho_x = scr_fov.value * (3.0 / 4.0) * (float)r_refdef.view.width / (float)r_refdef.view.height / vid_pixelheight.value;
- r_refdef.view.ortho_y = scr_fov.value * (3.0 / 4.0);
- r_refdef.view.clear = true;
- r_refdef.view.isoverlay = false;
+ // restore the view settings to the values that VM_CL_UpdateView received from the client code
+ r_refdef.view = csqc_original_r_refdef_view;
VectorCopy(cl.csqc_vieworiginfromengine, cl.csqc_vieworigin);
VectorCopy(cl.csqc_viewanglesfromengine, cl.csqc_viewangles);
cl.csqc_vidvars.drawworld = r_drawworld.integer != 0;
//#303 float(float property, ...) setproperty (EXT_CSQC)
//#303 float(float property) getproperty
//#303 vector(float property) getpropertyvec
+//#309 float(float property) getproperty
+//#309 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)
{
case VF_CLEARSCREEN:
PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.isoverlay;
break;
+ case VF_FOG_DENSITY:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_density;
+ break;
+ case VF_FOG_COLOR:
+ PRVM_G_VECTOR(OFS_RETURN)[0] = r_refdef.fog_red;
+ PRVM_G_VECTOR(OFS_RETURN)[1] = r_refdef.fog_green;
+ PRVM_G_VECTOR(OFS_RETURN)[2] = r_refdef.fog_blue;
+ break;
+ case VF_FOG_COLOR_R:
+ PRVM_G_VECTOR(OFS_RETURN)[0] = r_refdef.fog_red;
+ break;
+ case VF_FOG_COLOR_G:
+ PRVM_G_VECTOR(OFS_RETURN)[1] = r_refdef.fog_green;
+ break;
+ case VF_FOG_COLOR_B:
+ PRVM_G_VECTOR(OFS_RETURN)[2] = r_refdef.fog_blue;
+ break;
+ case VF_FOG_ALPHA:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_alpha;
+ break;
+ case VF_FOG_START:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_start;
+ break;
+ case VF_FOG_END:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_end;
+ break;
+ case VF_FOG_HEIGHT:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_height;
+ break;
+ case VF_FOG_FADEDEPTH:
+ PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_fadedepth;
+ break;
default:
PRVM_G_FLOAT(OFS_RETURN) = 0;
VM_Warning("VM_CL_R_GetView : unknown parm %i\n", c);
case VF_CLEARSCREEN:
r_refdef.view.isoverlay = !k;
break;
+ case VF_FOG_DENSITY:
+ r_refdef.fog_density = k;
+ break;
+ case VF_FOG_COLOR:
+ r_refdef.fog_red = f[0];
+ r_refdef.fog_green = f[1];
+ r_refdef.fog_blue = f[2];
+ break;
+ case VF_FOG_COLOR_R:
+ r_refdef.fog_red = k;
+ break;
+ case VF_FOG_COLOR_G:
+ r_refdef.fog_green = k;
+ break;
+ case VF_FOG_COLOR_B:
+ r_refdef.fog_blue = k;
+ break;
+ case VF_FOG_ALPHA:
+ r_refdef.fog_alpha = k;
+ break;
+ case VF_FOG_START:
+ r_refdef.fog_start = k;
+ break;
+ case VF_FOG_END:
+ r_refdef.fog_end = k;
+ break;
+ case VF_FOG_HEIGHT:
+ r_refdef.fog_height = k;
+ break;
+ case VF_FOG_FADEDEPTH:
+ r_refdef.fog_fadedepth = k;
+ break;
default:
PRVM_G_FLOAT(OFS_RETURN) = 0;
VM_Warning("VM_CL_R_SetView : unknown parm %i\n", c);
cl.csqc_paused = false;
}
-//#343 void(float usecursor) setcursormode (EXT_CSQC)
+//#343 void(float usecursor) setcursormode (DP_CSQC)
static void VM_CL_setcursormode (void)
{
VM_SAFEPARMCOUNT(1, VM_CL_setcursormode);
cl_ignoremousemoves = 2;
}
-//#344 vector() getmousepos (EXT_CSQC)
+//#344 vector() getmousepos (DP_CSQC)
static void VM_CL_getmousepos(void)
{
VM_SAFEPARMCOUNT(0,VM_CL_getmousepos);
// we need to update any RENDER_VIEWMODEL entities at this point because
// csqc supplies its own view matrix
CL_UpdateViewEntities();
+
// now draw stuff!
R_RenderView();
rtexture_t *tex = polys->data_triangles[surfacelist[surfacelistindex]].texture;
int drawflag = polys->data_triangles[surfacelist[surfacelistindex]].drawflag;
DrawQ_ProcessDrawFlag(drawflag, polys->data_triangles[surfacelist[surfacelistindex]].hasalpha);
- R_SetupShader_Generic(tex, NULL, GL_MODULATE, 1, false);
+ R_SetupShader_Generic(tex, NULL, GL_MODULATE, 1, false, false, false);
numtriangles = 0;
for (;surfacelistindex < numsurfaces;surfacelistindex++)
{
VM_CL_R_PolygonBegin, // #306 void(string texturename, float flag, float is2d[NYI: , float lines]) R_BeginPolygon
VM_CL_R_PolygonVertex, // #307 void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex
VM_CL_R_PolygonEnd, // #308 void() R_EndPolygon
-NULL /* R_LoadWorldModel in menu VM, should stay unassigned in client*/, // #309
+VM_CL_R_SetView, // #309 float(float property) getproperty (EXT_CSQC)
VM_CL_unproject, // #310 vector (vector v) cs_unproject (EXT_CSQC)
VM_CL_project, // #311 vector (vector v) cs_project (EXT_CSQC)
NULL, // #312
VM_getimagesize, // #318 vector(string picname) draw_getimagesize (EXT_CSQC)
VM_freepic, // #319 void(string name) freepic (EXT_CSQC)
VM_drawcharacter, // #320 float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter (EXT_CSQC)
-VM_drawstring, // #321 float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring (EXT_CSQC)
-VM_drawpic, // #322 float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic (EXT_CSQC)
+VM_drawstring, // #321 float(vector position, string text, vector scale, vector rgb, float alpha[, float flag]) drawstring (EXT_CSQC, DP_CSQC)
+VM_drawpic, // #322 float(vector position, string pic, vector size, vector rgb, float alpha[, float flag]) drawpic (EXT_CSQC)
VM_drawfill, // #323 float(vector position, vector size, vector rgb, float alpha, float flag) drawfill (EXT_CSQC)
VM_drawsetcliparea, // #324 void(float x, float y, float width, float height) drawsetcliparea
VM_drawresetcliparea, // #325 void(void) drawresetcliparea
VM_keynumtostring, // #340 string(float keynum) keynumtostring (EXT_CSQC)
VM_stringtokeynum, // #341 float(string keyname) stringtokeynum (EXT_CSQC)
VM_getkeybind, // #342 string(float keynum[, float bindmap]) getkeybind (EXT_CSQC)
-VM_CL_setcursormode, // #343 void(float usecursor) setcursormode (EXT_CSQC)
-VM_CL_getmousepos, // #344 vector() getmousepos (EXT_CSQC)
+VM_CL_setcursormode, // #343 void(float usecursor) setcursormode (DP_CSQC)
+VM_CL_getmousepos, // #344 vector() getmousepos (DP_CSQC)
VM_CL_getinputstate, // #345 float(float framenum) getinputstate (EXT_CSQC)
VM_CL_setsensitivityscale, // #346 void(float sens) setsensitivityscale (EXT_CSQC)
VM_CL_runplayerphysics, // #347 void() runstandardplayerphysics (EXT_CSQC)
NULL, // #636
NULL, // #637
VM_CL_RotateMoves, // #638
-NULL, // #639
+VM_digest_hex, // #639
+NULL, // #640
};
const int vm_cl_numbuiltins = sizeof(vm_cl_builtins) / sizeof(prvm_builtin_t);