@@ -191,6 +191,7 @@ class CASWPlayerAnimState : public CBasePlayerAnimState, public IASWPlayerAnimSt
191191 int m_iReloadSequence;
192192 float m_flReloadBlendOut, m_flReloadBlendIn;
193193 float m_fReloadPlaybackRate;
194+ float m_fReloadAnimTime;
194195
195196 bool m_bWeaponSwitching;
196197 float m_flWeaponSwitchCycle;
@@ -340,20 +341,48 @@ void CASWPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event )
340341 fReloadTime *= MarineSkills ()->GetSkillBasedValueByMarine ( pMarine, ASW_MARINE_SKILL_RELOADING, ASW_MARINE_SUBSKILL_RELOADING_SPEED_SCALE );
341342 }
342343
343- // calc playback rate needed to play the whole anim in this time
344+ // calc playback time needed to play the whole anim
344345 // normal weapon reload anim is 48fps and 105 frames = 2.1875 seconds
345346 // normal weapon reload time in script is 2.2 seconds
346347 // pistol weapon reload anim is 38fps and 38 frames = 1 second
347348 // pistol weapon reload time in script is 1.0 seconds
348349 if (bShortReloadAnim)
349- m_fReloadPlaybackRate = 1 .0f / fReloadTime ; // 38.0f / (fReloadTime * 38.0f) ;
350+ m_fReloadAnimTime = 1 .0f ; // 38.0f / 38.0f;
350351 else
351- m_fReloadPlaybackRate = 105 .6f / (fReloadTime * 48 .0f );
352+ m_fReloadAnimTime = 105 .6f / 48 .0f ;
353+
354+ m_fReloadPlaybackRate = m_fReloadAnimTime / fReloadTime ;
352355
353356 m_bReloading = true ;
354357 m_flReloadCycle = 0 ;
355358 }
356359 }
360+ else if ( event == PLAYERANIMEVENT_RELOAD_SUCCEED )
361+ {
362+ if ( m_bReloading == true && m_flReloadCycle < 1 .0f )
363+ {
364+ // readjust animation speed to match new attack delay
365+ const float fFastReloadTime = 0 .5f ;
366+
367+ const float fRemainingCycle = 1 .0f - m_flReloadCycle;
368+ m_fReloadPlaybackRate = m_fReloadAnimTime * fRemainingCycle / fFastReloadTime ;
369+ }
370+ }
371+ else if ( event == PLAYERANIMEVENT_RELOAD_FAIL )
372+ {
373+ if ( m_bReloading == true && m_flReloadCycle < 1 .0f )
374+ {
375+ // readjust animation speed to match new attack delay
376+ const float fFailReloadMinDelay = 2 .0f ;
377+
378+ CASW_Marine *pOuter = CASW_Marine::AsMarine ( GetOuter () );
379+ CASW_Weapon *pWeapon = pOuter ? pOuter->GetActiveASWWeapon () : NULL ;
380+ const float fFailReloadTime = pWeapon ? pWeapon->GetReloadFailTime () : fFailReloadMinDelay ;
381+
382+ const float fRemainingCycle = 1 .0f - m_flReloadCycle;
383+ m_fReloadPlaybackRate = m_fReloadAnimTime * fRemainingCycle / fFailReloadTime ;
384+ }
385+ }
357386 else if ( event == PLAYERANIMEVENT_DROP_MAGAZINE_GIB )
358387 {
359388#ifdef CLIENT_DLL
0 commit comments