#include "cl_model.qh"
#include "common.qh"
#include "interpolate.qh"
-#include "../../client/defs.qh"
-#include "../../client/main.qh"
-#include "../../common/constants.qh"
-#include "../../common/physics.qh"
-#include "../../common/stats.qh"
-#include "../../common/triggers/trigger/viewloc.qh"
-#include "../../common/util.qh"
-#include "../../common/viewloc.qh"
+#include <client/defs.qh>
+#include <client/main.qh>
+#include <common/constants.qh>
+#include <common/physics/player.qh>
+#include <common/stats.qh>
+#include <common/triggers/trigger/viewloc.qh>
+#include <common/util.qh>
+#include <common/viewloc.qh>
float autocvar_cl_movement_errorcompensation = 0;
return;
}
*/
- if(vlen(o) > 32 || vlen(v) > 192)
+ if(vdist(o, >, 32) || vdist(v, >, 192))
{
//printf("TOO BIG: x=%v v=%v\n", o, v);
return;
void CSQCPlayer_SetMinsMaxs(entity this)
{
- if (this.flags & FL_DUCKED)
+ if ((this.flags & FL_DUCKED) || !this.isplayermodel)
{
- this.mins = PL_CROUCH_MIN;
- this.maxs = PL_CROUCH_MAX;
- this.view_ofs = PL_CROUCH_VIEW_OFS;
+ this.mins = STAT(PL_CROUCH_MIN, NULL);
+ this.maxs = STAT(PL_CROUCH_MAX, NULL);
+ this.view_ofs = STAT(PL_CROUCH_VIEW_OFS, NULL);
}
else
{
- this.mins = PL_MIN;
- this.maxs = PL_MAX;
- this.view_ofs = PL_VIEW_OFS;
+ this.mins = STAT(PL_MIN, NULL);
+ this.maxs = STAT(PL_MAX, NULL);
+ this.view_ofs = STAT(PL_VIEW_OFS, NULL);
}
}
{
if(autocvar_cl_movement)
{
- if(autocvar_cl_movement == 3)
+ if(autocvar_cl_movement == 1)
CSQCPlayer_CheckWater(this); // we apparently need to check water *before* physics so it can use this for water jump
+ vector oldv_angle = this.v_angle;
+ vector oldangles = this.angles; // we need to save these, as they're abused by other code
+ this.v_angle = PHYS_INPUT_ANGLES(this);
+ this.angles = PHYS_WORLD_ANGLES(this);
+
CSQC_ClientMovement_PlayerMove_Frame(this);
- if(autocvar_cl_movement == 3)
+ if(autocvar_cl_movement == 1)
{
this.move_origin = this.origin;
this.move_angles = this.angles;
//this.move_movetype = MOVETYPE_WALK; // temp
this.move_velocity = this.velocity;
this.move_avelocity = this.avelocity;
- this.move_flags = BITSET(this.move_flags, FL_ONGROUND, boolean(this.flags & FL_ONGROUND));
+ this.move_flags = BITSET(this.move_flags, FL_ONGROUND, IS_ONGROUND(this));
this.move_flags = BITSET(this.move_flags, FL_WATERJUMP, boolean(this.flags & FL_WATERJUMP));
this.move_waterlevel = this.waterlevel;
this.move_watertype = this.watertype;
Movetype_Physics_Spam(this);
}
+ view_angles = this.v_angle;
+ input_angles = this.angles;
+ this.v_angle = oldv_angle;
+ this.angles = oldangles;
+
this.pmove_flags =
((this.flags & FL_DUCKED) ? PMF_DUCKED : 0) |
(!(this.flags & FL_JUMPRELEASED) ? PMF_JUMP_HELD : 0) |
- ((this.flags & FL_ONGROUND) ? PMF_ONGROUND : 0);
+ ((IS_ONGROUND(this)) ? PMF_ONGROUND : 0);
}
}
#if 0
// we don't need this
// darkplaces makes servercommandframe == 0 in these cases anyway
- if (getstatf(STAT_HEALTH) <= 0)
+ if (STAT(HEALTH) <= 0)
{
csqcplayer_moveframe = clientcommandframe;
getinputstate(csqcplayer_moveframe-1);
void CSQCPlayer_SetCamera()
{
const vector v0 = pmove_vel; // TRICK: pmove_vel is set by the engine when we get here. No need to network velocity
- const float vh = getstati(STAT_VIEWHEIGHT);
- const vector pl_viewofs = PL_VIEW_OFS;
- const vector pl_viewofs_crouch = PL_CROUCH_VIEW_OFS;
+ const float vh = STAT(VIEWHEIGHT);
+ const vector pl_viewofs = STAT(PL_VIEW_OFS, NULL);
+ const vector pl_viewofs_crouch = STAT(PL_CROUCH_VIEW_OFS, NULL);
const entity e = csqcplayer;
if (e)
{
const vector o = e.origin;
csqcplayer_status = CSQCPLAYERSTATUS_PREDICTED;
CSQCPlayer_PredictTo(e, servercommandframe + 1, false);
- CSQCPlayer_SetPredictionError(e.origin - o, e.velocity - v0, pmove_onground - boolean(e.flags & FL_ONGROUND));
+ CSQCPlayer_SetPredictionError(e.origin - o, e.velocity - v0, pmove_onground - IS_ONGROUND(e));
e.origin = o;
e.velocity = v0;
if (view.csqcmodel_teleported) refdefflags |= REFDEFFLAG_TELEPORTED;
if (input_buttons & BIT(1)) refdefflags |= REFDEFFLAG_JUMPING;
// note: these two only work in WIP2, but are harmless in WIP1
- if (getstati(STAT_HEALTH) <= 0) refdefflags |= REFDEFFLAG_DEAD;
+ if (STAT(HEALTH) <= 0 && STAT(HEALTH) != -666 && STAT(HEALTH) != -2342) refdefflags |= REFDEFFLAG_DEAD;
if (intermission) refdefflags |= REFDEFFLAG_INTERMISSION;
V_CalcRefdef(view, refdefflags);
}
CSQCPLAYER_HOOK_POSTCAMERASETUP();
}
-void CSQCPlayer_Remove()
+void CSQCPlayer_Remove(entity this)
{
csqcplayer = NULL;
cvar_settemp("cl_movement_replay", "1");