X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=clvm_cmds.c;h=67c8b70b964229522519ac75d5be5912fdad17b6;hb=416a6242fb6d9e6676da2ff28d6b33478f84d3fe;hp=cedd20815f1da92d18f43f4d1356a13b75d530a6;hpb=135f08ba52321984c05e36cdf42ad81420a4d2fd;p=xonotic%2Fdarkplaces.git diff --git a/clvm_cmds.c b/clvm_cmds.c index cedd2081..67c8b70b 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -23,6 +23,8 @@ 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); @@ -161,9 +163,11 @@ static void VM_CL_sound (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); @@ -183,14 +187,27 @@ static void VM_CL_sound (void) 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 @@ -666,7 +683,7 @@ static void VM_CL_getlight (void) 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); @@ -677,6 +694,12 @@ static void VM_CL_getlight (void) 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)); } //============================================================================ @@ -701,23 +724,8 @@ void VM_CL_R_ClearScene (void) // 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; @@ -775,6 +783,8 @@ void VM_CL_R_AddEntity (void) //#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) { @@ -872,6 +882,38 @@ 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); @@ -987,6 +1029,38 @@ void VM_CL_R_SetView (void) 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); @@ -1303,7 +1377,7 @@ static void VM_CL_setpause(void) 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); @@ -1311,7 +1385,7 @@ static void VM_CL_setcursormode (void) 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); @@ -3017,6 +3091,7 @@ void VM_CL_R_RenderScene (void) // 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(); @@ -3091,7 +3166,7 @@ static void VM_DrawPolygonCallback (const entity_render_t *ent, const rtlight_t 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); numtriangles = 0; for (;surfacelistindex < numsurfaces;surfacelistindex++) { @@ -4360,7 +4435,7 @@ VM_CL_R_AddDynamicLight, // #305 void(vector org, float radius, vector lightcol 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 @@ -4372,8 +4447,8 @@ VM_precache_pic, // #317 string(string name, float trywad) precache_pic (EXT_ 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 @@ -4394,8 +4469,8 @@ VM_print, // #339 void(string s, ...) print (EXT_CSQC, DP_SV_PRINT) 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) @@ -4691,7 +4766,8 @@ NULL, // #635 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);