diff --git a/sp/src/game/client/hl2/c_basehlplayer.cpp b/sp/src/game/client/hl2/c_basehlplayer.cpp index 461990c0dff..f5e626811c9 100644 --- a/sp/src/game/client/hl2/c_basehlplayer.cpp +++ b/sp/src/game/client/hl2/c_basehlplayer.cpp @@ -11,6 +11,10 @@ #include "c_ai_basenpc.h" #include "in_buttons.h" #include "collisionutils.h" +#ifdef EZ2 +#include "view_scene.h" +#include "viewrender.h" +#endif // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" @@ -38,6 +42,9 @@ IMPLEMENT_CLIENTCLASS_DT(C_BaseHLPlayer, DT_HL2_Player, CHL2_Player) RecvPropFloat( RECVINFO( m_flAnimRenderYaw ) ), RecvPropFloat( RECVINFO( m_flAnimRenderZ ) ), #endif +#ifdef EZ2 + RecvPropFloat( RECVINFO( m_flNextKickAttack ) ), +#endif END_RECV_TABLE() BEGIN_PREDICTION_DATA( C_BaseHLPlayer ) @@ -691,6 +698,64 @@ void C_BaseHLPlayer::BuildTransformations( CStudioHdr *hdr, Vector *pos, Quatern if (!DrawingLegs() || !InPerspectiveView() || !InFirstPersonView()) #endif*/ BuildFirstPersonMeathookTransformations( hdr, pos, q, cameraTransform, boneMask, boneComputed, "ValveBiped.Bip01_Head1" ); + +#ifdef EZ2 + // While kicking or admiring gloves, retract the playermodel in a 0-1 parabola + if (InPerspectiveView() && InFirstPersonView() && DrawingLegs()) + { + if (m_flNextKickAttack > gpGlobals->curtime) + { + float flPerc = sin( (m_flNextKickAttack - gpGlobals->curtime) * M_PI_F ); + + Vector vDeltaToAdd; + GetVectors( &vDeltaToAdd, NULL, NULL ); + + vDeltaToAdd *= -(64.0f * flPerc); + + for (int i = 0; i < hdr->numbones(); i++) + { + // Only update bones reference by the bone mask. + if (!(hdr->boneFlags( i ) & boneMask)) + { + continue; + } + matrix3x4_t &bone = GetBoneForWrite( i ); + Vector vBonePos; + MatrixGetTranslation( bone, vBonePos ); + vBonePos += vDeltaToAdd; + MatrixSetTranslation( vBonePos, bone ); + } + } + else if (C_BaseViewModel *pVM = GetViewModel( 0 )) + { + if (!pVM->GetOwningWeapon() && pVM->GetCycle() < 1.0f) + { + float flPerc = sin( pVM->GetCycle() * M_PI_F ); + + Vector vDeltaToAdd; + GetVectors( &vDeltaToAdd, NULL, NULL ); + + vDeltaToAdd *= -(32.0f * flPerc); + + FOR_EACH_MAP_FAST( GetFirstPersonArmScales(), i ) + { + int nBone = GetFirstPersonArmScales().Key( i ); + if (nBone == -1) + continue; + + if (!(hdr->boneFlags( nBone ) & boneMask)) + continue; + + matrix3x4_t &bone = GetBoneForWrite( nBone ); + Vector vBonePos; + MatrixGetTranslation( bone, vBonePos ); + vBonePos += vDeltaToAdd; + MatrixSetTranslation( vBonePos, bone ); + } + } + } + } +#endif } diff --git a/sp/src/game/client/hl2/c_basehlplayer.h b/sp/src/game/client/hl2/c_basehlplayer.h index 3bdc7015e49..e763e402820 100644 --- a/sp/src/game/client/hl2/c_basehlplayer.h +++ b/sp/src/game/client/hl2/c_basehlplayer.h @@ -108,6 +108,10 @@ class C_BaseHLPlayer : public C_BasePlayer QAngle m_angAnimRender; #endif +#ifdef EZ2 + float m_flNextKickAttack; +#endif + friend class CHL2GameMovement; }; diff --git a/sp/src/game/server/hl2/hl2_player.cpp b/sp/src/game/server/hl2/hl2_player.cpp index 1c5ed71d17d..d1373c41581 100644 --- a/sp/src/game/server/hl2/hl2_player.cpp +++ b/sp/src/game/server/hl2/hl2_player.cpp @@ -798,6 +798,9 @@ IMPLEMENT_SERVERCLASS_ST(CHL2_Player, DT_HL2_Player) SendPropFloat( SENDINFO(m_flAnimRenderYaw), 0, SPROP_NOSCALE ), SendPropFloat( SENDINFO(m_flAnimRenderZ), 0, SPROP_NOSCALE ), #endif +#ifdef EZ2 + SendPropFloat( SENDINFO(m_flNextKickAttack), 0, SPROP_NOSCALE ), +#endif END_SEND_TABLE() @@ -2310,6 +2313,8 @@ bool CHL2_Player::CommanderExecuteOne( CAI_BaseNPC *pNpc, const commandgoal_t &g if ( GetActiveWeapon() && goal.m_pGoalEntity == this && sv_command_viewmodel_anims.GetBool()) { GetActiveWeapon()->SendWeaponAnim( ACT_VM_COMMAND_RECALL ); } + + AddAnimStateLayer( SelectWeightedSequence( ACT_GESTURE_SIGNAL_GROUP ) ); // 1upD - Fire player proxy output helperFireSquadCommandOuput("OnPlayerRecallSquad", Allies); @@ -2324,6 +2329,8 @@ bool CHL2_Player::CommanderExecuteOne( CAI_BaseNPC *pNpc, const commandgoal_t &g if (GetActiveWeapon() && sv_command_viewmodel_anims.GetBool()) { GetActiveWeapon()->SendWeaponAnim( ACT_VM_COMMAND_SEND ); } + + AddAnimStateLayer( SelectWeightedSequence( ACT_GESTURE_SIGNAL_ADVANCE ) ); // 1upD - Fire player proxy output helperFireSquadCommandOuput("OnPlayerSendSquad", Allies); @@ -5066,6 +5073,8 @@ void CHL2_Player::StartKickAnimation( void ) vm->SetPlaybackRate( 1.0f ); } } + + SetAnimation( PLAYER_ATTACK3 ); } void CHL2_Player::HandleKickAnimation( void ) diff --git a/sp/src/game/server/hl2/hl2_player.h b/sp/src/game/server/hl2/hl2_player.h index 6138ad8365d..52743b944f4 100644 --- a/sp/src/game/server/hl2/hl2_player.h +++ b/sp/src/game/server/hl2/hl2_player.h @@ -489,7 +489,7 @@ class CHL2_Player : public CBasePlayer EHANDLE m_hFlashlightColorCorrection; bool m_bHandledColorCorrection; // NOT saved - this tells us that within this session, CC hasn't been cleaned up yet - float m_flNextKickAttack; + CNetworkVar( float, m_flNextKickAttack ); bool m_bKickWeaponLowered; string_t m_LegModelName; diff --git a/sp/src/game/server/hl2/weapon_pistol.cpp b/sp/src/game/server/hl2/weapon_pistol.cpp index d206554eda5..e579e18fc0d 100644 --- a/sp/src/game/server/hl2/weapon_pistol.cpp +++ b/sp/src/game/server/hl2/weapon_pistol.cpp @@ -780,6 +780,8 @@ acttable_t CWeaponPulsePistol::m_acttable[] = { ACT_GESTURE_RELOAD, ACT_GESTURE_RELOAD_PULSE_PISTOL, false }, { ACT_COMBINE_AR2_ALTFIRE, ACT_CHARGE_PULSE_PISTOL, false }, { ACT_GESTURE_COMBINE_AR2_ALTFIRE, ACT_GESTURE_CHARGE_PULSE_PISTOL, false }, + + { ACT_HL2MP_GESTURE_RELOAD, ACT_GESTURE_CHARGE_PULSE_PISTOL, false }, }; IMPLEMENT_ACTTABLE( CWeaponPulsePistol ); diff --git a/sp/src/game/shared/mapbase/mapbase_playeranimstate.cpp b/sp/src/game/shared/mapbase/mapbase_playeranimstate.cpp index 50154d632a4..9ab4991330c 100644 --- a/sp/src/game/shared/mapbase/mapbase_playeranimstate.cpp +++ b/sp/src/game/shared/mapbase/mapbase_playeranimstate.cpp @@ -201,6 +201,14 @@ void CMapbasePlayerAnimState::SetPlayerAnimation( PLAYER_ANIM playerAnim ) m_bReloading = false; m_flReloadCycle = 0; } +#ifdef EZ2 + if ( playerAnim == PLAYER_ATTACK3 ) + { + m_iFireSequence = SelectWeightedSequence( TranslateActivity( ACT_GESTURE_MELEE_ATTACK2 ) ); + m_bFiring = m_iFireSequence != -1; + m_flFireCycle = 0; + } +#endif else if ( playerAnim == PLAYER_JUMP ) { // Play the jump animation.