]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
expose r_refdef.view.quality to CSQC R_SetView VF_MINFPS_QUALITY
[xonotic/darkplaces.git] / clvm_cmds.c
index ed960e8e8c539b875216951b4444dd0a5b8dc70e..094f550e389dedbcef67530d70bd552ad6873a98 100644 (file)
@@ -911,6 +911,9 @@ static void VM_CL_R_SetView (prvm_prog_t *prog)
                case VF_FOG_FADEDEPTH:
                        PRVM_G_FLOAT(OFS_RETURN) = r_refdef.fog_fadedepth;
                        break;
+               case VF_MINFPS_QUALITY:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.quality;
+                       break;
                default:
                        PRVM_G_FLOAT(OFS_RETURN) = 0;
                        VM_Warning(prog, "VM_CL_R_GetView : unknown parm %i\n", c);
@@ -1061,6 +1064,9 @@ static void VM_CL_R_SetView (prvm_prog_t *prog)
        case VF_FOG_FADEDEPTH:
                r_refdef.fog_fadedepth = k;
                break;
+       case VF_MINFPS_QUALITY:
+               r_refdef.view.quality = k;
+               break;
        default:
                PRVM_G_FLOAT(OFS_RETURN) = 0;
                VM_Warning(prog, "VM_CL_R_SetView : unknown parm %i\n", c);
@@ -1416,6 +1422,7 @@ static void VM_CL_getinputstate (prvm_prog_t *prog)
                        PRVM_clientglobalvector(input_movevalues)[1] = cl.movecmd[i].sidemove;
                        PRVM_clientglobalvector(input_movevalues)[2] = cl.movecmd[i].upmove;
                        PRVM_clientglobalfloat(input_timelength) = cl.movecmd[i].frametime;
+                       // this probably shouldn't be here
                        if(cl.movecmd[i].crouch)
                        {
                                VectorCopy(cl.playercrouchmins, PRVM_clientglobalvector(pmove_mins));
@@ -1439,6 +1446,9 @@ static void VM_CL_setsensitivityscale (prvm_prog_t *prog)
 }
 
 //#347 void() runstandardplayerphysics (EXT_CSQC)
+#define PMF_JUMP_HELD 1
+#define PMF_LADDER 2 // not used by DP
+#define PMF_DUCKED 4 // FIXME FTEQW doesn't have this for Q1 like movement
 static void VM_CL_runplayerphysics (prvm_prog_t *prog)
 {
        cl_clientmovement_state_t s;
@@ -1449,20 +1459,17 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog)
        ent = PRVM_G_EDICT(OFS_PARM0);
        VectorCopy(PRVM_clientedictvector(ent, origin), s.origin);
        VectorCopy(PRVM_clientedictvector(ent, velocity), s.velocity);
-       VectorCopy(PRVM_clientglobalvector(pmove_mins), s.mins);
-       VectorCopy(PRVM_clientglobalvector(pmove_maxs), s.maxs);
-       s.onground = 0; // ???
-       s.crouched = 0; // ???
-       s.watertype = 0; // ???
-       s.waterlevel = 0; // ???
-       s.waterjumptime = 0; // ???
+       VectorCopy(PRVM_clientedictvector(ent, mins), s.mins);
+       VectorCopy(PRVM_clientedictvector(ent, maxs), s.maxs);
+       s.crouched = ((int)PRVM_clientedictfloat(ent, pmove_flags) & PMF_DUCKED) != 0;
+       s.waterjumptime = 0; // FIXME where do we get this from? FTEQW lacks support for this too
        VectorCopy(PRVM_clientglobalvector(input_angles), s.cmd.viewangles);
        s.cmd.forwardmove = PRVM_clientglobalvector(input_movevalues)[0];
        s.cmd.sidemove = PRVM_clientglobalvector(input_movevalues)[1];
        s.cmd.upmove = PRVM_clientglobalvector(input_movevalues)[2];
        s.cmd.buttons = PRVM_clientglobalfloat(input_buttons);
        s.cmd.frametime = PRVM_clientglobalfloat(input_timelength);
-       s.cmd.canjump = 1; // ???
+       s.cmd.canjump = ((int)PRVM_clientedictfloat(ent, pmove_flags) & PMF_JUMP_HELD) == 0;
        s.cmd.jump = (s.cmd.buttons & 2) != 0;
        s.cmd.crouch = (s.cmd.buttons & 16) != 0;
 
@@ -1470,6 +1477,9 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog)
 
        VectorCopy(s.origin, PRVM_clientedictvector(ent, origin));
        VectorCopy(s.velocity, PRVM_clientedictvector(ent, velocity));
+       PRVM_clientedictfloat(ent, pmove_flags) =
+               (s.crouched ? PMF_DUCKED : 0) |
+               (s.cmd.canjump ? 0 : PMF_JUMP_HELD);
 }
 
 //#348 string(float playernum, string keyname) getplayerkeyvalue (EXT_CSQC)