It looks like there are still some people struggling with updating past build 10. I'm trying hard to figure out what makes it "feel totally different." There's really only two things I can think of that I've changed that would impact that:
1) I added a threshold to the movement input so joysticks won't cause it to spam packets. If you don't have a joystick, this isn't going to make any difference.
2) I increased the precision of the packet rate calculations, so the number of packets sent more accurately reflects the cl_cmdrate setting.
I'll even post the code for ya:
Build 10:
cmd->msec = sys_frame_time - old_frame_time;
ppsstate = cl_cmdrate->value;
if(ppsstate < 5)
ppsstate = 5;
if ((cl.time+1000) < ppscount)
ppscount=cl.time+1000/ppsstate;
if (cl.time > ppscount ||
cmd->buttons != oldcmd.buttons ||
cmd->forwardmove != oldcmd.forwardmove ||
cmd->impulse != oldcmd.impulse ||
cmd->sidemove != oldcmd.sidemove ||
cmd->upmove != oldcmd.upmove) // user input has changed (jitodo -- check for text cmds)
{
ppscount = cl.time + 1000/ppsstate;
memcpy(&oldcmd, cmd, sizeof(usercmd_t));
old_frame_time = sys_frame_time;
}
else
{
return;
}
Current build:
cmd->msec = sys_frame_time - old_frame_time;
if (cls.state == ca_connected)
ppsstate = 10; // only send 10 packets/sec while downloading at console (jitodo - window sliding)
else
ppsstate = cl_cmdrate->value;
if (ppsstate < 5)
ppsstate = 5;
if ((cl.time + 1000) < ppscount)
ppscount = cl.time + 1000 / ppsstate;
if (cl.time > ppscount ||
cmd->buttons != oldcmd.buttons ||
// Check within a threshold of 200, so joystick movement doesn't spam packets
((abs(cmd->forwardmove - oldcmd.forwardmove) > 200) && ((abs(oldcmd.forwardmove) < 200) || (abs(cmd->forwardmove) < 200))) ||
((abs(cmd->sidemove - oldcmd.sidemove) > 200) && ((abs(oldcmd.sidemove) < 200) || (abs(cmd->sidemove) < 200))) ||
((abs(cmd->upmove - oldcmd.upmove) > 200) && ((abs(oldcmd.upmove) < 200) || (abs(cmd->upmove) < 200))) ||
cmd->impulse != oldcmd.impulse) // user input has changed (jitodo -- check for text cmds)
{
if (cl.time > ppscount + 1000.0f/ppsstate+0.5f || cl.time < ppscount)
ppscount = cl.time + 1000.0f/ppsstate+0.5f;
else // (cl.time > ppscount)
ppscount = cl.time - (cl.time-ppscount) + 1000.0f/ppsstate+0.5f;
memcpy(&oldcmd, cmd, sizeof(usercmd_t));
old_frame_time = sys_frame_time;
}
else
{
return;
}
The only thing that should change is that you'd be sending more packets with the newer builds. If you don't like that, set your cl_cmdrate to a lower value. I really don't get where this different "feeling" comes from...
If it's THAT big of a difference, I could include some setting to use the old code, but I think tweaking cl_cmdrate should effectively do the same thing.
Anyway, those of you who are dead set on using build 10 had better start helping me out now, because it probably won't be long before newer builds are required for anti-cheat purposes.