Index: src/game/g_active.c =================================================================== --- src/game/g_active.c (revision 802) +++ src/game/g_active.c (working copy) @@ -524,7 +524,8 @@ if( client->ps.stats[ STAT_MISC ] < pounceSpeed && ucmd->buttons & BUTTON_ATTACK2 ) client->ps.stats[ STAT_MISC ] += ( 100.0f / (float)LEVEL3_POUNCE_CHARGE_TIME ) * pounceSpeed; - if( !( ucmd->buttons & BUTTON_ATTACK2 ) ) + if( !( ucmd->buttons & BUTTON_ATTACK2 ) + && !( client->ps.stats[ STAT_STATE ] & SS_CHARGING ) ) { if( client->ps.stats[ STAT_MISC ] > 0 ) { Index: src/game/bg_pmove.c =================================================================== --- src/game/bg_pmove.c (revision 802) +++ src/game/bg_pmove.c (working copy) @@ -510,7 +510,8 @@ pm->ps->weapon != WP_ALEVEL3_UPG ) return qfalse; - if( pm->cmd.buttons & BUTTON_ATTACK2 ) + if( ( pm->cmd.buttons & BUTTON_ATTACK2 ) && + !( pm->ps->stats[ STAT_STATE ] & SS_CHARGING ) ) { pm->ps->pm_flags &= ~PMF_CHARGE; return qfalse; @@ -552,6 +553,9 @@ pm->ps->pm_flags |= PMF_BACKWARDS_JUMP; } + // used to track when a pounce finishes + pm->ps->stats[ STAT_STATE ] |= SS_CHARGING; + return qtrue; } @@ -3406,6 +3410,13 @@ // set groundentity PM_GroundTrace( ); + // when on the ground we are not pouncing + if( ( pm->ps->weapon == WP_ALEVEL3 || pm->ps->weapon == WP_ALEVEL3_UPG ) + && pm->ps->groundEntityNum != ENTITYNUM_NONE ) + { + pm->ps->stats[ STAT_STATE ] &= ~SS_CHARGING; + } + // update the viewangles PM_UpdateViewAngles( pm->ps, &pm->cmd );