cl_clientmovement_state_t s;
prvm_edict_t *ent;
- VM_SAFEPARMCOUNT(1, VM_CL_runplayerphysics);
+ VM_SAFEPARMCOUNTRANGE(0, 1, VM_CL_runplayerphysics);
+
+ ent = (prog->argc == 1 ? PRVM_G_EDICT(OFS_PARM0) : prog->edicts);
+ if(ent == prog->edicts)
+ {
+ // deprecated use
+ VectorCopy(PRVM_clientglobalvector(pmove_org), s.origin);
+ VectorCopy(PRVM_clientglobalvector(pmove_vel), s.velocity);
+ VectorCopy(PRVM_clientglobalvector(pmove_mins), s.mins);
+ VectorCopy(PRVM_clientglobalvector(pmove_maxs), s.maxs);
+ s.crouched = 0;
+ s.waterjumptime = PRVM_clientglobalfloat(pmove_waterjumptime);
+ s.cmd.canjump = (int)PRVM_clientglobalfloat(pmove_jump_held) == 0;
+ }
+ else
+ {
+ // new use
+ VectorCopy(PRVM_clientedictvector(ent, origin), s.origin);
+ VectorCopy(PRVM_clientedictvector(ent, velocity), s.velocity);
+ 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
+ s.cmd.canjump = ((int)PRVM_clientedictfloat(ent, pmove_flags) & PMF_JUMP_HELD) == 0;
+ }
- ent = PRVM_G_EDICT(OFS_PARM0);
- VectorCopy(PRVM_clientedictvector(ent, origin), s.origin);
- VectorCopy(PRVM_clientedictvector(ent, velocity), s.velocity);
- 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 = ((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;
CL_ClientMovement_PlayerMove(&s);
- 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) |
- (s.onground ? PMF_ONGROUND : 0);
+ if(ent == prog->edicts)
+ {
+ // deprecated use
+ VectorCopy(s.origin, PRVM_clientglobalvector(pmove_org));
+ VectorCopy(s.velocity, PRVM_clientglobalvector(pmove_vel));
+ PRVM_clientglobalfloat(pmove_jump_held) = !s.cmd.canjump;
+ PRVM_clientglobalfloat(pmove_waterjumptime) = s.waterjumptime;
+ }
+ else
+ {
+ // new use
+ 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) |
+ (s.onground ? PMF_ONGROUND : 0);
+ }
}
//#348 string(float playernum, string keyname) getplayerkeyvalue (EXT_CSQC)
PRVM_DECLARE_clientglobalvector(pmove_maxs)
PRVM_DECLARE_clientglobalvector(pmove_mins)
PRVM_DECLARE_clientglobalvector(pmove_onground)
+PRVM_DECLARE_clientglobalfloat(pmove_waterjumptime)
+PRVM_DECLARE_clientglobalfloat(pmove_jump_held)
PRVM_DECLARE_clientglobalvector(pmove_org)
PRVM_DECLARE_clientglobalvector(pmove_vel)
PRVM_DECLARE_clientglobalvector(trace_endpos)
PRVM_DECLARE_global(pmove_maxs)
PRVM_DECLARE_global(pmove_mins)
PRVM_DECLARE_global(pmove_onground)
+PRVM_DECLARE_global(pmove_waterjumptime)
+PRVM_DECLARE_global(pmove_jump_held)
PRVM_DECLARE_global(pmove_org)
PRVM_DECLARE_global(pmove_vel)
PRVM_DECLARE_global(require_spawnfunc_prefix)