cl.cmd.cursor_screen[1] = bound(-1, cl.cmd.cursor_screen[1], 1);
cl.cmd.cursor_screen[2] = 1;
- scale[0] = -r_refdef.frustum_x;
- scale[1] = -r_refdef.frustum_y;
+ scale[0] = -r_view.frustum_x;
+ scale[1] = -r_view.frustum_y;
scale[2] = 1;
// trace distance
// calculate current view matrix
V_CalcRefdef();
VectorClear(temp);
- Matrix4x4_Transform(&r_refdef.viewentitymatrix, temp, cl.cmd.cursor_start);
+ Matrix4x4_Transform(&r_view.matrix, temp, cl.cmd.cursor_start);
VectorSet(temp, cl.cmd.cursor_screen[2] * scale[2], cl.cmd.cursor_screen[0] * scale[0], cl.cmd.cursor_screen[1] * scale[1]);
- Matrix4x4_Transform(&r_refdef.viewentitymatrix, temp, cl.cmd.cursor_end);
+ Matrix4x4_Transform(&r_view.matrix, temp, cl.cmd.cursor_end);
// trace from view origin to the cursor
cl.cmd.cursor_fraction = CL_SelectTraceLine(cl.cmd.cursor_start, cl.cmd.cursor_end, cl.cmd.cursor_impact, cl.cmd.cursor_normal, &cl.cmd.cursor_entitynumber, (chase_active.integer || cl.intermission) ? &cl.entities[cl.playerentity].render : NULL, false);
}
n = cl.movement_numqueue;
cl.movement_numqueue = 0;
for (i = 0;i < n;i++)
+ {
if (cl.movement_queue[i].sequence > cls.netcon->qw.incoming_sequence)
cl.movement_queue[cl.movement_numqueue++] = cl.movement_queue[i];
+ else if (i == 0)
+ cl.movement_replay_canjump = !cl.movement_queue[i].jump;
+ }
// add to input queue if there is room
if (cl.movement_numqueue < (int)(sizeof(cl.movement_queue)/sizeof(cl.movement_queue[0])))
{
if (cl.servermovesequence)
{
for (i = 0;i < n;i++)
+ {
if (cl.movement_queue[i].sequence > cl.servermovesequence)
cl.movement_queue[cl.movement_numqueue++] = cl.movement_queue[i];
+ else if (i == 0)
+ cl.movement_replay_canjump = !cl.movement_queue[i].jump;
+ }
}
else
{
for (i = 0;i < n;i++)
+ {
if (cl.movement_queue[i].time >= cl.mtime[0] - cl_movement_latency.value / 1000.0 && cl.movement_queue[i].time <= cl.mtime[0])
cl.movement_queue[cl.movement_numqueue++] = cl.movement_queue[i];
+ else if (i == 0)
+ cl.movement_replay_canjump = !cl.movement_queue[i].jump;
+ }
}
// add to input queue if there is room
if (cl.movement_numqueue < (int)(sizeof(cl.movement_queue)/sizeof(cl.movement_queue[0])) && cl.mtime[0] > cl.mtime[1])
VectorCopy(cl.entities[cl.playerentity].state_current.origin, s.origin);
VectorCopy(cl.mvelocity[0], s.velocity);
s.crouched = true; // will be updated on first move
- s.canjump = true;
+ s.canjump = cl.movement_replay_canjump;
// set up movement variables
if (cls.protocol == PROTOCOL_QUAKEWORLD)