//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CHLMachineGun::DoMachineGunKick( CBasePlayer *pPlayer, float dampEasy, float maxVerticleKickAngle, float fireDurationTime, float slideLimitTime ) { #define KICK_MIN_X 0.2f //Degrees #define KICK_MIN_Y 0.2f //Degrees #define KICK_MIN_Z 0.1f //Degrees QAngle vecScratch; //Find how far into our accuracy degradation we are float duration = ( fireDurationTime > slideLimitTime ) ? slideLimitTime : fireDurationTime; float kickPerc = duration / slideLimitTime; // do this to get a hard discontinuity, clear out anything under 10 degrees punch pPlayer->ViewPunchReset( 10 ); //Apply this to the view angles as well vecScratch.x = -( KICK_MIN_X + ( maxVerticleKickAngle * kickPerc ) ); vecScratch.y = -( KICK_MIN_Y + ( maxVerticleKickAngle * kickPerc ) ) / 3; vecScratch.z = KICK_MIN_Z + ( maxVerticleKickAngle * kickPerc ) / 8; //Wibble left and right if ( random->RandomInt( -1, 1 ) >= 0 ) vecScratch.y *= -1; //Wobble up and down if ( random->RandomInt( -1, 1 ) >= 0 ) vecScratch.z *= -1; //If we're in easy, dampen the effect a bit if ( g_pGameRules->IsSkillLevel( SKILL_EASY ) ) { for ( int i = 0; i < 3; i++ ) { vecScratch[i] *= dampEasy; } } //Clip this to our desired min/max UTIL_ClipPunchAngleOffset( vecScratch, pPlayer->m_Local.m_vecPunchAngle, QAngle( 24.0f, 3.0f, 1.0f ) ); //Add it to the view punch // NOTE: 0.5 is just tuned to match the old effect before the punch became simulated // VR SOURCE // pPlayer->ViewPunch( vecScratch * 0.5 ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CHL2MPMachineGun::DoMachineGunKick( CBasePlayer *pPlayer, float dampEasy, float maxVerticleKickAngle, float fireDurationTime, float slideLimitTime ) { #define KICK_MIN_X 0.2f //Degrees #define KICK_MIN_Y 0.2f //Degrees #define KICK_MIN_Z 0.1f //Degrees QAngle vecScratch; int iSeed = CBaseEntity::GetPredictionRandomSeed() & 255; //Find how far into our accuracy degradation we are float duration = ( fireDurationTime > slideLimitTime ) ? slideLimitTime : fireDurationTime; float kickPerc = duration / slideLimitTime; // do this to get a hard discontinuity, clear out anything under 10 degrees punch pPlayer->ViewPunchReset( 10 ); //Apply this to the view angles as well vecScratch.x = -( KICK_MIN_X + ( maxVerticleKickAngle * kickPerc ) ); vecScratch.y = -( KICK_MIN_Y + ( maxVerticleKickAngle * kickPerc ) ) / 3; vecScratch.z = KICK_MIN_Z + ( maxVerticleKickAngle * kickPerc ) / 8; RandomSeed( iSeed ); //Wibble left and right if ( RandomInt( -1, 1 ) >= 0 ) vecScratch.y *= -1; iSeed++; //Wobble up and down if ( RandomInt( -1, 1 ) >= 0 ) vecScratch.z *= -1; //Clip this to our desired min/max UTIL_ClipPunchAngleOffset( vecScratch, pPlayer->m_Local.m_vecPunchAngle, QAngle( 24.0f, 3.0f, 1.0f ) ); //Add it to the view punch // NOTE: 0.5 is just tuned to match the old effect before the punch became simulated pPlayer->ViewPunch( vecScratch * 0.5 ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CHLMachineGun::DoMachineGunKick( CBasePlayer *pPlayer, float dampEasy, float maxVerticleKickAngle, float fireDurationTime, float slideLimitTime ) { #define KICK_MIN_X 0.2f //Degrees #define KICK_MIN_Y 0.2f //Degrees #define KICK_MIN_Z 0.1f //Degrees QAngle vecScratch; //Find how far into our accuracy degradation we are float duration = ( fireDurationTime > slideLimitTime ) ? slideLimitTime : fireDurationTime; float kickPerc = duration / slideLimitTime; // do this to get a hard discontinuity, clear out anything under 10 degrees punch pPlayer->ViewPunchReset( 10 ); //Apply this to the view angles as well vecScratch.x = -( KICK_MIN_X + ( maxVerticleKickAngle * kickPerc ) ); vecScratch.y = -( KICK_MIN_Y + ( maxVerticleKickAngle * kickPerc ) ) / 3; vecScratch.z = KICK_MIN_Z + ( maxVerticleKickAngle * kickPerc ) / 8; //Wibble left and right if ( random->RandomInt( -1, 1 ) >= 0 ) vecScratch.y *= -1; //Wobble up and down if ( random->RandomInt( -1, 1 ) >= 0 ) vecScratch.z *= -1; //If we're in easy, dampen the effect a bit if ( g_pGameRules->IsSkillLevel( SKILL_EASY ) ) { for ( int i = 0; i < 3; i++ ) { vecScratch[i] *= dampEasy; } } //Clip this to our desired min/max UTIL_ClipPunchAngleOffset( vecScratch, pPlayer->m_Local.m_vecPunchAngle, QAngle( 24.0f, 3.0f, 1.0f ) ); //Add it to the view punch // NOTE: 0.5 is just tuned to match the old effect before the punch became simulated // FAKEFACTORY IRONSIGHT // old // pPlayer->ViewPunch( vecScratch * 0.5 ); // new if ( ff_weapons_recoil.GetInt() == 1 ) { CBaseCombatWeapon *pWeapon = pPlayer->GetActiveWeapon(); if ( pWeapon == NULL ) return; if ( pWeapon->IsIronsighted() ) { QAngle angle = pPlayer->GetPunchAngle(); angle.x -= random->RandomInt( 2.75, 3.25) + ( angle.x / 4 ); angle.y += random->RandomInt( -0.75, 0.75); pPlayer->SetPunchAngle( angle ); } else { QAngle angle = pPlayer->GetPunchAngle(); angle.x -= random->RandomInt( 2.75, 3.25) + ( angle.x / 4 ); angle.y += random->RandomInt( -1.25, 1.5); pPlayer->SetPunchAngle( angle ); } } else { pPlayer->ViewPunch( vecScratch * 0.5 ); } // FAKEFACTORY IRONSIGHT }