Fixed trimping not working with cl_jumpqueue 0 when holding jump continuously (from initial jump to touching the ramp)

This commit is contained in:
squeek 2014-01-03 23:55:47 +00:00
parent 53ce519f9c
commit 09be698c71

View file

@ -204,15 +204,29 @@ bool CFF_SH_GameMovement::CanJump( void )
return false;
}
bool bUseJumpQueue;
#ifdef CLIENT_DLL
bUseJumpQueue = cl_jumpqueue.GetBool();
#else
bUseJumpQueue = (Q_atoi( engine->GetClientConVarValue( player->entindex(), "cl_jumpqueue" ) ) ) != 0;
#endif
// No more effect
if (player->GetGroundEntity() == NULL)
{
// FF --> Allow holding jump in the air to make you jump when you land
if(!(mv->m_nOldButtons & IN_JUMP))
if( bUseJumpQueue && !(mv->m_nOldButtons & IN_JUMP) )
{
// FF Port Note: For only allowing holding jump while in the downward part of a jump, do a (mv->m_vecVelocity[2] < 0.0f) check here
// Jump wasn't held last frame, so act like jump isn't held for the rest of the airtime
// FF TODO: Potentially add a jump-specific button-held-state variable to handle jump queueing, since manipulating the button states directly is rather hacky
mv->m_nButtons &= ~IN_JUMP;
}
else if (!bUseJumpQueue)
{
// act like the jump key was never held last frame; this is needed because of how the trimping code interacts with the rampslide code
mv->m_nOldButtons &= ~IN_JUMP;
}
// FF <--
return false; // in air, so no effect
}
@ -223,13 +237,9 @@ bool CFF_SH_GameMovement::CanJump( void )
return false;
#endif
#ifdef CLIENT_DLL
if ( mv->m_nOldButtons & IN_JUMP && cl_jumpqueue.GetBool() )
// If jump queue is enabled and we have been holding jump since we last jumped, then don't allow jumping again until it's been released for at least one frame
if ( bUseJumpQueue && mv->m_nOldButtons & IN_JUMP )
return false; // don't pogo stick
#else
if ( mv->m_nOldButtons & IN_JUMP && (Q_atoi( engine->GetClientConVarValue( player->entindex(), "cl_jumpqueue" ) ) ) )
return false; // don't pogo stick
#endif
return true;
}