Some more work towards player animations

This commit is contained in:
Marco Cawthorne 2017-01-10 22:55:12 +01:00
parent 2a8cb32326
commit 47932e57a0
34 changed files with 236 additions and 45 deletions

View file

@ -186,6 +186,7 @@ typedef struct {
int iCrosshairMinDistance; // Some weapons just are inaccurate by design...
int iCrosshairDeltaDistance; // Scale factor of sorts
float fWeaponArmorRatio; // Some weapons seem to do more damage to the kevlar than others I guess
float fAnimType;
} weaponinfo_t;
typedef struct {
@ -246,6 +247,21 @@ enum {
IMPACT_ROCK,
};
// Animation types
enum {
ATYPE_ONEHAND,
ATYPE_DUALPISTOLS,
ATYPE_CARBINE,
ATYPE_RIFLE,
ATYPE_MP5,
ATYPE_SHOTGUN,
ATYPE_PARA,
ATYPE_GRENADE,
ATYPE_C4,
ATYPE_KNIFE,
ATYPE_AK47
};
// Actually used by input_button etc.
#define INPUT_BUTTON0 1
#define INPUT_BUTTON2 2

View file

@ -19,6 +19,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
.float baseframe_time;
.float baseframe_old;
.float fWasCrouching;
enum {
ANIM_DUMMY1,
@ -94,7 +96,7 @@ enum {
ANIM_DUPLICATE6,
ANIM_DUPLICATE7,
ANIM_DUPLICATE8,
ANIM_AIM_KNIFE9,
ANIM_CROUCH_AIM_KNIFE,
ANIM_CROUCH_SHOOT_KNIFE,
ANIM_AIM_KNIFE,
ANIM_SHOOT_KNIFE,
@ -129,8 +131,44 @@ depending on what the player is doing
void Animation_PlayerUpdate( void ) {
self.basebone = 40;
// TODO: Make this faster
if ( self.baseframe_time < time ) {
self.baseframe = ANIM_AIM_SHOTGUN;
switch ( Weapon_GetAnimType( self.weapon ) && self.baseframe != self.baseframe_old ) {
case ATYPE_AK47:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_AK47 : ANIM_AIM_AK47;
break;
case ATYPE_C4:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_C4 : ANIM_AIM_C4;
break;
case ATYPE_CARBINE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_CARBINE : ANIM_AIM_CARBINE;
break;
case ATYPE_DUALPISTOLS:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_DUALPISTOLS : ANIM_AIM_DUALPISTOLS;
break;
case ATYPE_GRENADE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_GRENADE : ANIM_AIM_GRENADE;
break;
case ATYPE_KNIFE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_KNIFE : ANIM_AIM_KNIFE;
break;
case ATYPE_MP5:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_MP5 : ANIM_AIM_MP5;
break;
case ATYPE_ONEHAND:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_ONEHAND : ANIM_AIM_ONEHAND;
break;
case ATYPE_PARA:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_PARA : ANIM_AIM_PARA;
break;
case ATYPE_RIFLE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_RIFLE : ANIM_AIM_RIFLE;
break;
case ATYPE_SHOTGUN:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_SHOTGUN : ANIM_AIM_SHOTGUN;
break;
}
self.baseframe_old = self.baseframe;
}
if ( vlen( self.velocity ) == 0 ) {
@ -156,6 +194,13 @@ void Animation_PlayerUpdate( void ) {
if ( !( self.flags & FL_ONGROUND ) ) {
self.frame = ANIM_JUMP;
}
// Force the code above to update if we switched positions
if ( self.fWasCrouching != ( self.flags & FL_CROUCHING ) ) {
self.baseframe_old = 0;
self.baseframe_time = 0;
self.fWasCrouching = ( self.flags & FL_CROUCHING );
}
}
/*
@ -165,7 +210,92 @@ Animation_PlayerTop
Changes the animation sequence for the upper body part
=================
*/
void Animation_PlayerTop( float fFrame, float fTime ) {
void Animation_PlayerTop( float fFrame ) {
self.baseframe = fFrame;
self.baseframe_old = fFrame;
}
void Animation_PlayerTopTemp( float fFrame, float fTime ) {
self.baseframe = fFrame;
self.baseframe_time = time + fTime;
}
void Animation_ShootWeapon( void ) {
switch ( Weapon_GetAnimType( self.weapon ) ) {
case ATYPE_AK47:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_AK47 : ANIM_SHOOT_AK47;
break;
case ATYPE_C4:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_C4 : ANIM_SHOOT_C4;
break;
case ATYPE_CARBINE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_CARBINE : ANIM_SHOOT_CARBINE;
break;
case ATYPE_DUALPISTOLS:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_DUALPISTOLS : ANIM_SHOOT_DUALPISTOLS;
break;
case ATYPE_GRENADE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_GRENADE : ANIM_SHOOT_GRENADE;
break;
case ATYPE_KNIFE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_KNIFE : ANIM_SHOOT_KNIFE;
break;
case ATYPE_MP5:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_MP5 : ANIM_SHOOT_MP5;
break;
case ATYPE_ONEHAND:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_ONEHAND : ANIM_SHOOT_ONEHAND;
break;
case ATYPE_PARA:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_PARA : ANIM_SHOOT_PARA;
break;
case ATYPE_RIFLE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_RIFLE : ANIM_SHOOT_RIFLE;
break;
case ATYPE_SHOTGUN:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_SHOOT_SHOTGUN : ANIM_SHOOT_SHOTGUN;
break;
}
self.baseframe_time = time + Weapon_GetFireRate( self.weapon );
}
void Animation_ReloadWeapon( void ) {
switch ( Weapon_GetAnimType( self.weapon ) ) {
case ATYPE_AK47:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_AK47 : ANIM_RELOAD_AK47;
break;
case ATYPE_C4:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_C4 : ANIM_AIM_C4;
break;
case ATYPE_CARBINE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_CARBINE : ANIM_RELOAD_CARBINE;
break;
case ATYPE_DUALPISTOLS:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_DUALPISTOLS : ANIM_RELOAD_DUALPISTOLS;
break;
case ATYPE_GRENADE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_GRENADE : ANIM_AIM_GRENADE;
break;
case ATYPE_KNIFE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_KNIFE : ANIM_AIM_KNIFE;
break;
case ATYPE_MP5:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_MP5 : ANIM_RELOAD_MP5;
break;
case ATYPE_ONEHAND:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_ONEHAND : ANIM_RELOAD_ONEHAND;
break;
case ATYPE_PARA:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_PARA : ANIM_RELOAD_PARA;
break;
case ATYPE_RIFLE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_RIFLE : ANIM_RELOAD_RIFLE;
break;
case ATYPE_SHOTGUN:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_RELOAD_SHOTGUN : ANIM_RELOAD_SHOTGUN;
break;
}
self.baseframe_time = time + Weapon_GetReloadTime( self.weapon );
}

View file

@ -121,6 +121,9 @@ void Client_SendEvent( entity eClient, float fEVType );
void Client_TriggerCamera( entity eTarget, vector vPos, vector vEndPos, float fResetTime );
void Weapon_SwitchBest( void );
void Weapon_UpdateCurrents( void );
float Weapon_GetAnimType( float fWeapon );
float Weapon_GetFireRate( float fWeapon );
float Weapon_GetReloadTime( float fWeapon );
void OpenCSGunBase_AccuracyCalc( void );
void OpenCSGunBase_Draw( void );
@ -146,6 +149,9 @@ void Ammo_BuySecondary( float fFree );
void Input_Handle( void );
void Animation_PlayerTop( float fFrame );
void Animation_PlayerTopTemp( float fFrame, float fTime );
// WIP
string __fullspawndata;
hashtable hashMaterials;

View file

@ -53,9 +53,9 @@ Player_Pain
*/
void Player_Pain( int iHitBody ) {
if ( iHitBody == BODY_HEAD ) {
Animation_PlayerTop( ANIM_HEAD_FLINCH, 0.1f );
Animation_PlayerTopTemp( ANIM_HEAD_FLINCH, 0.1f );
} else {
Animation_PlayerTop( ANIM_GUT_FLINCH, 0.1f );
Animation_PlayerTopTemp( ANIM_GUT_FLINCH, 0.1f );
}
sound( self, CHAN_VOICE, sPainSounds[ floor( random() * 5 ) ], 1, ATTN_IDLE );

View file

@ -37,7 +37,6 @@ void Timer_Begin( float fTime, float fMode) {
}
fGameTime = fTime;
bprint( sprintf( "Setting Timer to Mode %d, Time %d\n", fMode, fTime ) );
}
/*

View file

@ -9,6 +9,7 @@
Defs.h
Money.c
Animations.c
../Shared/Radio.c
../Shared/WeaponAK47.c
@ -64,7 +65,6 @@ FuncDoor.c
FuncDoorRotating.c
AmbientSound.c
Animations.c
Light.c
Main.c
Player.c

View file

@ -43,7 +43,8 @@ weaponinfo_t wptAK47 = {
1.25, // Max Inaccuracy
4, // Minimum Crosshair Distance
4, // Crosshair Movement Delta
1.55 // Armor penetration ratio
1.55, // Armor penetration ratio
ATYPE_AK47 // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptAUG = {
1.0, // Max Inaccuracy
3, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.4 // Armor penetration ratio
1.4, // Armor penetration ratio
ATYPE_RIFLE // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptAWP = {
0, // Max Inaccuracy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.95 // Armor penetration ratio
1.95, // Armor penetration ratio
ATYPE_CARBINE // Animation Type
};
// Anim Table

View file

@ -105,6 +105,7 @@ float OpenCSGunBase_PrimaryFire( void ) {
OpenCSGunBase_ShotMultiplierHandle( wptTable[ self.weapon ].iBullets );
OpenCSGunBase_AccuracyCalc();
TraceAttack_FireBullets( wptTable[ self.weapon ].iBullets, ( self.origin + self.view_ofs ) );
Animation_ShootWeapon();
self.(wptTable[ self.weapon ].iMagfld) -= 1;
self.fAttackFinished = time + wptTable[ self.weapon ].fAttackFinished;
@ -142,6 +143,7 @@ float OpenCSGunBase_Reload( void ) {
self.nextthink = time + wptTable[ self.weapon ].fReloadFinished;
self.fAttackFinished = self.nextthink;
Animation_ReloadWeapon();
Client_SendEvent( self, EV_WEAPON_RELOAD );
return TRUE;
}

View file

@ -45,8 +45,10 @@ weaponinfo_t wptC4BOMB = {
1, // Accuracy Divisor
1, // Accuracy Offset
1, // Max Inaccuracy
8,
4
8, // Minimum Crosshair Distance
4, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_C4 // Animation Type
};
// Anim Table
@ -198,6 +200,7 @@ void WeaponC4BOMB_PrimaryFire( void ) {
// If we aren't aiming at a place or look in the wrong location... stop it
if ( trace_fraction == 1 || self.fInBombZone == FALSE ) {
Animation_ReloadWeapon();
WeaponC4BOMB_Release();
self.fAttackFinished = time + 1.0;
return;
@ -206,6 +209,7 @@ void WeaponC4BOMB_PrimaryFire( void ) {
// Play the sequence at the start
if ( self.fBombProgress == 0 ) {
Client_SendEvent( self, EV_WEAPON_PRIMARYATTACK );
Animation_ShootWeapon();
}
// Add onto the planting-time thing

View file

@ -43,7 +43,8 @@ weaponinfo_t wptDEAGLE = {
1.4, // Max Inaccuracy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.5 // Armor penetration ratio
1.5, // Armor penetration ratio
ATYPE_ONEHAND // Animation Type
};
// Anim Table
@ -91,7 +92,7 @@ void WeaponDEAGLE_PrimaryFire( void ) {
void WeaponDEAGLE_Reload( void ) {
#ifdef SSQC
if ( OpenCSGunBase_Reload() == TRUE ) {
// Play Sound
}
#else
View_PlayAnimation( ANIM_DEAGLE_RELOAD );

View file

@ -49,7 +49,8 @@ weaponinfo_t wptELITES = {
1.4, // Max Inaccuracy
4, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.05 // Armor penetration ratio
1.05, // Armor penetration ratio
ATYPE_DUALPISTOLS // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptFIVESEVEN = {
1.4, // Max Inaccuracy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.5 // Armor penetration ratio
1.5, // Armor penetration ratio
ATYPE_ONEHAND // Animation Type
};
// Anim Table
@ -57,21 +58,21 @@ enum {
};
void WeaponFIVESEVEN_Draw( void ) {
#ifdef SSQC
#ifdef SSQC
OpenCSGunBase_Draw();
#else
#else
View_PlayAnimation( ANIM_FIVESEVEN_DRAW );
Sound_Delayed( "weapons/fiveseven_slidepull.wav", 1.0, 0.5 );
#endif
#endif
}
void WeaponFIVESEVEN_PrimaryFire( void ) {
#ifdef SSQC
#ifdef SSQC
if ( OpenCSGunBase_PrimaryFire() == TRUE ) {
// Play Sound
sound( self, CHAN_WEAPON, "weapons/fiveseven-1.wav", 1, ATTN_NORM );
}
#else
#else
if ( getstatf( STAT_CURRENT_MAG ) == 0 ) {
View_PlayAnimation( ANIM_FIVESEVEN_SHOOT_EMPTY );
} else {
@ -82,19 +83,18 @@ void WeaponFIVESEVEN_PrimaryFire( void ) {
}
}
OpenCSGunBase_ShotMultiplierHandle( 1 );
#endif
#endif
}
void WeaponFIVESEVEN_Reload( void ) {
#ifdef SSQC
#ifdef SSQC
if ( OpenCSGunBase_Reload() == TRUE ) {
// Play Sound
}
#else
#else
View_PlayAnimation( ANIM_FIVESEVEN_RELOAD );
Sound_Delayed( "weapons/p228_clipout.wav", 1.0, 0.5 );
Sound_Delayed( "weapons/p228_clipin.wav", 1.0, 1.5 );
Sound_Delayed( "weapons/p228_sliderelease.wav", 1.0, 2.4 );
#endif
#endif
}

View file

@ -43,7 +43,8 @@ weaponinfo_t wptG3SG1 = {
1.4, // Max Inaccuracy
6, // Minimum Crosshair Distance
4, // Crosshair Movement Delta
1.65 // Armor penetration ratio
1.65, // Armor penetration ratio
ATYPE_CARBINE // Animation Type
};
// Anim Table

View file

@ -49,7 +49,8 @@ weaponinfo_t wptGLOCK18 = {
1.4, // Max Inaccuracyy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.05 // Armor penetration ratio
1.05, // Armor penetration ratio
ATYPE_ONEHAND // Animation Type
};
// Anim Table

View file

@ -41,7 +41,8 @@ weaponinfo_t wptKNIFE = {
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.7 // Armor penetration ratio
1.7, // Armor penetration ratio
ATYPE_KNIFE // Animation Type
};
// Anim Table
@ -77,6 +78,7 @@ void WeaponKNIFE_PrimaryFire( void ) {
}
}
Animation_ShootWeapon();
self.fAttackFinished = time + wptKNIFE.fAttackFinished;
#else
if ( random() <= 0.5 ) {

View file

@ -49,7 +49,8 @@ weaponinfo_t wptM3 = {
1.25, // Max Inaccuracy
8, // Minimum Crosshair Distance
6, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_SHOTGUN // Animation Type
};
// Anim Table

View file

@ -49,7 +49,8 @@ weaponinfo_t wptM4A1 = {
1.0, // Max Inaccuracy
4, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.4 // Armor penetration ratio
1.4, // Armor penetration ratio
ATYPE_RIFLE // Animation Type
};
enum {

View file

@ -43,7 +43,8 @@ weaponinfo_t wptMP5 = {
0.75, // Max Inaccuracy
6, // Minimum Crosshair Distance
2, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_MP5 // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptMAC10 = {
1.65, // Max Inaccuracy
9, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
0.95 // Armor penetration ratio
0.95, // Armor penetration ratio
ATYPE_MP5 // Animation Type
};
// Anim Table

View file

@ -42,7 +42,8 @@ weaponinfo_t wptP228 = {
1.4, // Max Inaccuracy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.25 // Armor penetration ratio
1.25, // Armor penetration ratio
ATYPE_ONEHAND // Animation Type
};
// Anim Table
@ -93,7 +94,6 @@ void WeaponP228_PrimaryFire( void ) {
void WeaponP228_Reload( void ) {
#ifdef SSQC
if ( OpenCSGunBase_Reload() == TRUE ) {
// Play Sound
}
#else
View_PlayAnimation( ANIM_P228_RELOAD );

View file

@ -43,7 +43,8 @@ weaponinfo_t wptP90 = {
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.5 // Armor penetration ratio
1.5, // Armor penetration ratio
ATYPE_MP5 // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptPARA = {
0.9, // Max Inaccuracy
6, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.6 // Armor penetration ratio
1.6, // Armor penetration ratio
ATYPE_PARA // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptSG550 = {
1.4, // Max Inaccuracy
5, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.45 // Armor penetration ratio
1.45, // Armor penetration ratio
ATYPE_RIFLE // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptSG552 = {
1.0, // Max Inaccuracy
5, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.4 // Armor penetration ratio
1.4, // Armor penetration ratio
ATYPE_RIFLE // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptSCOUT = {
1.4, // Max Inaccuracy
5, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.7 // Armor penetration ratio
1.7, // Armor penetration ratio
ATYPE_CARBINE // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptTMP = {
1.4, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_MP5 // Animation Type
};
// Anim Table

View file

@ -43,7 +43,8 @@ weaponinfo_t wptUMP45 = {
1, // Max Inaccuracy
6, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_MP5 // Animation Type
};
// Anim Table

View file

@ -49,7 +49,8 @@ weaponinfo_t wptUSP45 = {
1.4, // Max Inaccuracy
8, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_ONEHAND // Animation Type
};
enum {
@ -157,7 +158,7 @@ void WeaponUSP45_Secondary( void ) {
void WeaponUSP45_Reload( void ) {
#ifdef SSQC
if ( OpenCSGunBase_Reload() == TRUE ) {
// Play Sound
}
#else
if ( iWeaponMode_USP45 == TRUE ) {

View file

@ -49,7 +49,8 @@ weaponinfo_t wptXM1014 = {
1.25, // Max Inaccuracy
9, // Minimum Crosshair Distance
4, // Crosshair Movement Delta
1.0 // Armor penetration ratio
1.0, // Armor penetration ratio
ATYPE_SHOTGUN // Animation Type
};
// Anim Table

View file

@ -208,4 +208,16 @@ void CSEv_PlayerSwitchWeapon_f( float fWeapon ) {
self.fAttackFinished = time + 1.0;
}
float Weapon_GetAnimType( float fWeapon ) {
return wptTable[ fWeapon ].fAnimType;
}
float Weapon_GetFireRate( float fWeapon ) {
return wptTable[ fWeapon ].fAttackFinished;
}
float Weapon_GetReloadTime( float fWeapon ) {
return wptTable[ fWeapon ].fReloadFinished;
}
#endif

Binary file not shown.

Binary file not shown.