From 729cd50af2908d2d837f7330c5433f2586a1b7f4 Mon Sep 17 00:00:00 2001 From: divverent Date: Sat, 26 Nov 2011 11:51:58 +0000 Subject: [PATCH] runstandardplayerphysics: also implement the no-args case git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11578 d7cf8633-e32d-0410-b094-e92efae38249 ::stable-branch::merge=4b91503dea08798bc9e5275421482be1d390cea4 --- clvm_cmds.c | 58 +++++++++++++++++++++++++++++++++++++------------- prvm_offsets.h | 4 ++++ 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/clvm_cmds.c b/clvm_cmds.c index 8647ff23..a07cee7a 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -1455,33 +1455,61 @@ static void VM_CL_runplayerphysics (prvm_prog_t *prog) 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) diff --git a/prvm_offsets.h b/prvm_offsets.h index 09ac75ed..639240ea 100644 --- a/prvm_offsets.h +++ b/prvm_offsets.h @@ -186,6 +186,8 @@ PRVM_DECLARE_clientglobalvector(pmove_inwater) 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) @@ -522,6 +524,8 @@ PRVM_DECLARE_global(pmove_inwater) 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) -- 2.39.2