mirror of
https://github.com/ENSL/NS.git
synced 2024-11-28 23:32:04 +00:00
weapon animation fixes
- Fixed animation issues with pistol binary trigger and moved the binary triggering to client code - Fixed reload animation not always playing - Fixed numerous incorrect or broken alien weapon animations on every class - Added transitional animation out of gorge building
This commit is contained in:
parent
d1da0553e8
commit
68b7278072
33 changed files with 276 additions and 107 deletions
|
@ -244,7 +244,9 @@ weapon_data_t none
|
||||||
// DEFINE_DELTA( m_fInZoom, DT_INTEGER, 1, 1.0 ),
|
// DEFINE_DELTA( m_fInZoom, DT_INTEGER, 1, 1.0 ),
|
||||||
// DEFINE_DELTA( m_iWeaponState, DT_INTEGER, 2, 1.0 ),
|
// DEFINE_DELTA( m_iWeaponState, DT_INTEGER, 2, 1.0 ),
|
||||||
DEFINE_DELTA( m_iId, DT_INTEGER, 8, 1.0 ),
|
DEFINE_DELTA( m_iId, DT_INTEGER, 8, 1.0 ),
|
||||||
|
DEFINE_DELTA( iuser2, DT_INTEGER, 1, 1.0 ), // m_fInAttack
|
||||||
DEFINE_DELTA( iuser3, DT_INTEGER, 3, 1.0 ),
|
DEFINE_DELTA( iuser3, DT_INTEGER, 3, 1.0 ),
|
||||||
|
DEFINE_DELTA( iuser4, DT_INTEGER, 1, 1.0 ), // m_bAttackQueued
|
||||||
DEFINE_DELTA( fuser2, DT_SIGNED | DT_FLOAT, 22, 128.0 ),
|
DEFINE_DELTA( fuser2, DT_SIGNED | DT_FLOAT, 22, 128.0 ),
|
||||||
DEFINE_DELTA( fuser3, DT_SIGNED | DT_FLOAT, 22, 128.0 )
|
DEFINE_DELTA( fuser3, DT_SIGNED | DT_FLOAT, 22, 128.0 )
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,7 @@ void HUD_SendWeaponAnim( int iAnim, int body, int force )
|
||||||
|
|
||||||
// Tell animation system new info
|
// Tell animation system new info
|
||||||
gEngfuncs.pfnWeaponAnim( iAnim, body );
|
gEngfuncs.pfnWeaponAnim( iAnim, body );
|
||||||
|
//gEngfuncs.Con_Printf("forcing animation g_currentanim:%d new anim:%d\n", g_currentanim, iAnim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,6 +108,11 @@ int HUD_GetWeaponAnim( void )
|
||||||
return g_currentanim;
|
return g_currentanim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HUD_SetWeaponAnim(int anim)
|
||||||
|
{
|
||||||
|
g_currentanim = anim;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=====================
|
=====================
|
||||||
HUD_PlaySound
|
HUD_PlaySound
|
||||||
|
|
|
@ -28,6 +28,7 @@ float UTIL_SharedRandomFloat( unsigned int seed, float low, float high );
|
||||||
int UTIL_SharedRandomLong( unsigned int seed, int low, int high );
|
int UTIL_SharedRandomLong( unsigned int seed, int low, int high );
|
||||||
|
|
||||||
int HUD_GetWeaponAnim( void );
|
int HUD_GetWeaponAnim( void );
|
||||||
|
void HUD_SetWeaponAnim(int anim);
|
||||||
void HUD_SendWeaponAnim( int iAnim, int body, int force );
|
void HUD_SendWeaponAnim( int iAnim, int body, int force );
|
||||||
void HUD_PlaySound( char *sound, float volume );
|
void HUD_PlaySound( char *sound, float volume );
|
||||||
void HUD_PlaybackEvent( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
|
void HUD_PlaybackEvent( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
|
||||||
|
|
|
@ -151,6 +151,8 @@ int gSiegeViewHitEventID;
|
||||||
int gCommanderPointsAwardedEventID;
|
int gCommanderPointsAwardedEventID;
|
||||||
int gBlinkEffectSuccessEventID;
|
int gBlinkEffectSuccessEventID;
|
||||||
|
|
||||||
|
static float prevUseTime = 0;
|
||||||
|
|
||||||
//bool gPlayingJetpack = false;
|
//bool gPlayingJetpack = false;
|
||||||
//CGlock g_Glock;
|
//CGlock g_Glock;
|
||||||
//CCrowbar g_Crowbar;
|
//CCrowbar g_Crowbar;
|
||||||
|
@ -502,6 +504,21 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
m_fInReload = FALSE;
|
m_fInReload = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_pPlayer->pev->button & IN_USE)
|
||||||
|
{
|
||||||
|
prevUseTime = gpGlobals->time;
|
||||||
|
}
|
||||||
|
else if (gHUD.GetHUDUser3() == AVH_USER3_ALIEN_PLAYER2 && m_pPlayer->m_afButtonReleased & IN_USE && m_pPlayer->pev->weaponanim == 4)
|
||||||
|
{
|
||||||
|
switch (gHUD.GetCurrentWeaponID())
|
||||||
|
{
|
||||||
|
case AVH_WEAPON_SPIT:
|
||||||
|
case AVH_WEAPON_BILEBOMB:
|
||||||
|
this->SendWeaponAnim(7);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Properly propagate the end animation
|
// Properly propagate the end animation
|
||||||
if (this->PrevAttack2Status == true && !(m_pPlayer->pev->button & IN_ATTACK2))
|
if (this->PrevAttack2Status == true && !(m_pPlayer->pev->button & IN_ATTACK2))
|
||||||
{
|
{
|
||||||
|
@ -511,23 +528,21 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
this->SendWeaponAnim(12);
|
this->SendWeaponAnim(12);
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_ACIDROCKET:
|
case AVH_WEAPON_ACIDROCKET:
|
||||||
this->SendWeaponAnim(8);
|
this->SendWeaponAnim(13);
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_CLAWS:
|
case AVH_WEAPON_CLAWS:
|
||||||
this->SendWeaponAnim(9);
|
this->SendWeaponAnim(9);
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_STOMP:
|
case AVH_WEAPON_STOMP:
|
||||||
this->SendWeaponAnim(8);
|
|
||||||
break;
|
|
||||||
case AVH_WEAPON_DEVOUR:
|
|
||||||
this->SendWeaponAnim(11);
|
this->SendWeaponAnim(11);
|
||||||
break;
|
break;
|
||||||
|
case AVH_WEAPON_DEVOUR:
|
||||||
|
this->SendWeaponAnim(12);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pistolAttackUp = ((CVAR_GET_FLOAT("cl_pistoltrigger") != 0) && m_pPlayer->m_afButtonLast & IN_ATTACK && m_pPlayer->m_afButtonReleased & IN_ATTACK && ii.iId == AVH_WEAPON_PISTOL);
|
if ((m_pPlayer->pev->button & IN_ATTACK || (this->m_bAttackQueued && m_flNextPrimaryAttack <= 0.0)) && (!(m_pPlayer->pev->button & IN_ATTACK2) || gHUD.GetHUDUser3() == AVH_USER3_ALIEN_PLAYER3))
|
||||||
|
|
||||||
if ((m_pPlayer->pev->button & IN_ATTACK || this->m_bAttackQueued || pistolAttackUp) && (!(m_pPlayer->pev->button & IN_ATTACK2) || gHUD.GetHUDUser3() == AVH_USER3_ALIEN_PLAYER3))
|
|
||||||
{
|
{
|
||||||
if (GetCanUseWeapon())
|
if (GetCanUseWeapon())
|
||||||
{
|
{
|
||||||
|
@ -573,15 +588,16 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
this->m_flLastAnimationPlayed = gpGlobals->time;
|
this->m_flLastAnimationPlayed = gpGlobals->time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//#ifdef AVH_CLIENT
|
|
||||||
//if((m_iClip == 0) && ?
|
PrimaryAttack();
|
||||||
//#endif
|
|
||||||
PrimaryAttack(pistolAttackUp);
|
|
||||||
//return;
|
//return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QueueAttack(pistolAttackUp);
|
if (m_pPlayer->m_afButtonPressed & IN_ATTACK)
|
||||||
|
{
|
||||||
|
QueueAttack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -653,10 +669,10 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
this->SendWeaponAnim(5);
|
this->SendWeaponAnim(5);
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_DEVOUR:
|
case AVH_WEAPON_DEVOUR:
|
||||||
this->SendWeaponAnim(18);
|
this->SendWeaponAnim(19);
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_STOMP:
|
case AVH_WEAPON_STOMP:
|
||||||
this->SendWeaponAnim(15);
|
this->SendWeaponAnim(16);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -668,6 +684,8 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
else
|
else
|
||||||
this->PrevAttack2Status = true;
|
this->PrevAttack2Status = true;
|
||||||
|
|
||||||
|
this->PrevAttack2Time = gpGlobals->time;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
// if (GetCanUseWeapon())
|
// if (GetCanUseWeapon())
|
||||||
// {
|
// {
|
||||||
|
@ -1236,6 +1254,7 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||||
pCurrent->m_flNextPrimaryAttack = pfrom->m_flNextPrimaryAttack;
|
pCurrent->m_flNextPrimaryAttack = pfrom->m_flNextPrimaryAttack;
|
||||||
pCurrent->m_flNextSecondaryAttack = pfrom->m_flNextSecondaryAttack;
|
pCurrent->m_flNextSecondaryAttack = pfrom->m_flNextSecondaryAttack;
|
||||||
pCurrent->m_flTimeWeaponIdle = pfrom->m_flTimeWeaponIdle;
|
pCurrent->m_flTimeWeaponIdle = pfrom->m_flTimeWeaponIdle;
|
||||||
|
|
||||||
if(pWeapon && (pWeapon->m_iId == pfrom->m_iId))
|
if(pWeapon && (pWeapon->m_iId == pfrom->m_iId))
|
||||||
{
|
{
|
||||||
// Predict clip
|
// Predict clip
|
||||||
|
@ -1260,8 +1279,9 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||||
pCurrent->m_flStartThrow = pfrom->fuser2;
|
pCurrent->m_flStartThrow = pfrom->fuser2;
|
||||||
pCurrent->m_flReleaseThrow = pfrom->fuser3;
|
pCurrent->m_flReleaseThrow = pfrom->fuser3;
|
||||||
// pCurrent->m_chargeReady = pfrom->iuser1;
|
// pCurrent->m_chargeReady = pfrom->iuser1;
|
||||||
// pCurrent->m_fInAttack = pfrom->iuser2;
|
pCurrent->m_fInAttack = pfrom->iuser2;
|
||||||
pCurrent->pev->iuser3 = pfrom->iuser3;
|
pCurrent->pev->iuser3 = pfrom->iuser3;
|
||||||
|
pCurrent->m_bAttackQueued = pfrom->iuser4;
|
||||||
|
|
||||||
// pCurrent->m_iSecondaryAmmoType = (int)from->client.vuser3[2];
|
// pCurrent->m_iSecondaryAmmoType = (int)from->client.vuser3[2];
|
||||||
// pCurrent->m_iPrimaryAmmoType = (int)from->client.vuser4[0];
|
// pCurrent->m_iPrimaryAmmoType = (int)from->client.vuser4[0];
|
||||||
|
@ -1408,18 +1428,50 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||||
|
|
||||||
// Make sure that weapon animation matches what the game .dll is telling us
|
// Make sure that weapon animation matches what the game .dll is telling us
|
||||||
// over the wire ( fixes some animation glitches )
|
// over the wire ( fixes some animation glitches )
|
||||||
// Ensure that the fade and onos won't get these, to play the blink and charge animations correctly
|
if (g_runfuncs && HUD_GetWeaponAnim() != to->client.weaponanim)
|
||||||
bool noRun = (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER4) || (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER5);
|
|
||||||
if (g_runfuncs && ( HUD_GetWeaponAnim() != to->client.weaponanim ) && !(CheckInAttack2()) && !noRun)
|
|
||||||
{
|
{
|
||||||
int body = 2;
|
int body = 2;
|
||||||
|
bool processTheAnim = true;
|
||||||
|
|
||||||
//Pop the model to body 0.
|
//gEngfuncs.Con_Printf("trying to force animation on client currentanim:%d serveranim:%d nextattack:%f time:%f\n", HUD_GetWeaponAnim(), to->client.weaponanim, to->client.m_flNextAttack, gpGlobals->time);
|
||||||
//if ( pWeapon == &g_Tripmine )
|
//// 2024 - Don't correct with +movement transitional animations since +movement animations are hacked in on the client and it bugs out. Remove most of this if alien weapons get refactored to shared code.
|
||||||
// body = 0;
|
if (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER5)
|
||||||
|
{
|
||||||
|
if ((gpGlobals->time - pWeapon->PrevAttack2Time < 1.0f) || (to->client.weaponanim > 4 && to->client.weaponanim < 21))
|
||||||
|
//(to->client.weaponanim == 27 && gpGlobals->time - pWeapon->PrevAttack2Time < 10.0f) ||
|
||||||
|
{
|
||||||
|
processTheAnim = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER4)
|
||||||
|
{
|
||||||
|
if ((gpGlobals->time - pWeapon->PrevAttack2Time < 1.0f) || (to->client.weaponanim > 7 && to->client.weaponanim < 14))
|
||||||
|
//(to->client.weaponanim == 5 && gpGlobals->time - pWeapon->PrevAttack2Time < 10.0f) ||
|
||||||
|
{
|
||||||
|
processTheAnim = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//else if (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER3 && to->client.weaponanim > 6 && to->client.weaponanim < 13)
|
||||||
|
else if (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER1)
|
||||||
|
{
|
||||||
|
if (gpGlobals->time - pWeapon->PrevAttack2Time < 1.0f)
|
||||||
|
processTheAnim = false;
|
||||||
|
}
|
||||||
|
// Gorge building animation fixes since it's server side and the new transition out of it is client side.
|
||||||
|
else if (to->client.iuser3 == AVH_USER3_ALIEN_PLAYER2)
|
||||||
|
{
|
||||||
|
if (player.pev->button & IN_USE ||
|
||||||
|
(to->client.weaponanim == 4 && gpGlobals->time - prevUseTime < 10.0f) ||
|
||||||
|
(to->client.weaponanim < 2 && gpGlobals->time - prevUseTime < 1.0f) ||
|
||||||
|
(HUD_GetWeaponAnim() == 4 && to->client.weaponanim == 5))
|
||||||
|
{
|
||||||
|
processTheAnim = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Force a fixed anim down to viewmodel
|
// Force a fixed anim down to viewmodel
|
||||||
HUD_SendWeaponAnim( to->client.weaponanim, body, 1 );
|
if (processTheAnim)
|
||||||
|
HUD_SendWeaponAnim(to->client.weaponanim, body, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < 32; i++ )
|
for ( i = 0; i < 32; i++ )
|
||||||
|
@ -1445,8 +1497,9 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||||
// pto->fuser2 = pCurrent->m_flStartThrow;
|
// pto->fuser2 = pCurrent->m_flStartThrow;
|
||||||
// pto->fuser3 = pCurrent->m_flReleaseThrow;
|
// pto->fuser3 = pCurrent->m_flReleaseThrow;
|
||||||
// pto->iuser1 = pCurrent->m_chargeReady;
|
// pto->iuser1 = pCurrent->m_chargeReady;
|
||||||
// pto->iuser2 = pCurrent->m_fInAttack;
|
pto->iuser2 = pCurrent->m_fInAttack;
|
||||||
pto->iuser3 = pCurrent->pev->iuser3;
|
pto->iuser3 = pCurrent->pev->iuser3;
|
||||||
|
pto->iuser4 = pCurrent->m_bAttackQueued;
|
||||||
|
|
||||||
// Decrement weapon counters, server does this at same time ( during post think, after doing everything else )
|
// Decrement weapon counters, server does this at same time ( during post think, after doing everything else )
|
||||||
pto->m_flNextReload -= cmd->msec / 1000.0;
|
pto->m_flNextReload -= cmd->msec / 1000.0;
|
||||||
|
|
|
@ -107,6 +107,8 @@ extern cvar_t *in_joystick;
|
||||||
int in_impulse = 0;
|
int in_impulse = 0;
|
||||||
int in_cancel = 0;
|
int in_cancel = 0;
|
||||||
|
|
||||||
|
bool pistolHandlerDown = false;
|
||||||
|
|
||||||
cvar_t *m_pitch;
|
cvar_t *m_pitch;
|
||||||
cvar_t *m_yaw;
|
cvar_t *m_yaw;
|
||||||
cvar_t *m_forward;
|
cvar_t *m_forward;
|
||||||
|
@ -825,6 +827,35 @@ void IN_AttackUpForced(void)
|
||||||
KeyUpForced( &in_attack );
|
KeyUpForced( &in_attack );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IN_AttackHandlerDown(void)
|
||||||
|
{
|
||||||
|
if (gHUD.GetCurrentWeaponID() == AVH_WEAPON_PISTOL && cl_pistoltrigger && cl_pistoltrigger->value)
|
||||||
|
{
|
||||||
|
IN_AttackDown();
|
||||||
|
IN_AttackUp();
|
||||||
|
pistolHandlerDown = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IN_AttackDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IN_AttackHandlerUp(void)
|
||||||
|
{
|
||||||
|
// Pistol binary trigger. Check if attack was down, otherwise the engine will fire the pistol when closing the console or tabbing in as it calls every -command.
|
||||||
|
if (gHUD.GetCurrentWeaponID() == AVH_WEAPON_PISTOL && cl_pistoltrigger && cl_pistoltrigger->value && pistolHandlerDown)
|
||||||
|
{
|
||||||
|
IN_AttackDown();
|
||||||
|
IN_AttackUp();
|
||||||
|
pistolHandlerDown = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IN_AttackUp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Special handling
|
// Special handling
|
||||||
void IN_Cancel(void)
|
void IN_Cancel(void)
|
||||||
{
|
{
|
||||||
|
@ -1642,8 +1673,8 @@ void InitInput (void)
|
||||||
gEngfuncs.pfnAddCommand ("-moveright", IN_MoverightUp);
|
gEngfuncs.pfnAddCommand ("-moveright", IN_MoverightUp);
|
||||||
gEngfuncs.pfnAddCommand ("+speed", IN_SpeedDown);
|
gEngfuncs.pfnAddCommand ("+speed", IN_SpeedDown);
|
||||||
gEngfuncs.pfnAddCommand ("-speed", IN_SpeedUp);
|
gEngfuncs.pfnAddCommand ("-speed", IN_SpeedUp);
|
||||||
gEngfuncs.pfnAddCommand ("+attack", IN_AttackDown);
|
gEngfuncs.pfnAddCommand ("+attack", IN_AttackHandlerDown);
|
||||||
gEngfuncs.pfnAddCommand ("-attack", IN_AttackUp);
|
gEngfuncs.pfnAddCommand ("-attack", IN_AttackHandlerUp);
|
||||||
//gEngfuncs.pfnAddCommand ("+movement", IN_Attack2Down);
|
//gEngfuncs.pfnAddCommand ("+movement", IN_Attack2Down);
|
||||||
//gEngfuncs.pfnAddCommand ("-movement", IN_Attack2Up);
|
//gEngfuncs.pfnAddCommand ("-movement", IN_Attack2Up);
|
||||||
gEngfuncs.pfnAddCommand ("+use", IN_UseDown);
|
gEngfuncs.pfnAddCommand ("+use", IN_UseDown);
|
||||||
|
@ -1727,7 +1758,7 @@ void InitInput (void)
|
||||||
cl_chatbeep = gEngfuncs.pfnRegisterVariable ("cl_chatbeep", "1", FCVAR_ARCHIVE);
|
cl_chatbeep = gEngfuncs.pfnRegisterVariable ("cl_chatbeep", "1", FCVAR_ARCHIVE);
|
||||||
cl_mutemenu = gEngfuncs.pfnRegisterVariable ("cl_mutemenu", "3", FCVAR_ARCHIVE);
|
cl_mutemenu = gEngfuncs.pfnRegisterVariable ("cl_mutemenu", "3", FCVAR_ARCHIVE);
|
||||||
cl_weaponcfgs = gEngfuncs.pfnRegisterVariable ("cl_weaponcfgs", "1", FCVAR_ARCHIVE);
|
cl_weaponcfgs = gEngfuncs.pfnRegisterVariable ("cl_weaponcfgs", "1", FCVAR_ARCHIVE);
|
||||||
cl_pistoltrigger = gEngfuncs.pfnRegisterVariable ("cl_pistoltrigger", "1", FCVAR_ARCHIVE | FCVAR_USERINFO);
|
cl_pistoltrigger = gEngfuncs.pfnRegisterVariable ("cl_pistoltrigger", "1", FCVAR_ARCHIVE);
|
||||||
cl_cmcancellast = gEngfuncs.pfnRegisterVariable("cl_cmcancellast", "0", FCVAR_ARCHIVE);
|
cl_cmcancellast = gEngfuncs.pfnRegisterVariable("cl_cmcancellast", "0", FCVAR_ARCHIVE);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2081,10 +2081,11 @@ int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
||||||
item->fuser2 = gun->m_flStartThrow;
|
item->fuser2 = gun->m_flStartThrow;
|
||||||
item->fuser3 = gun->m_flReleaseThrow;
|
item->fuser3 = gun->m_flReleaseThrow;
|
||||||
//item->iuser1 = gun->m_chargeReady;
|
//item->iuser1 = gun->m_chargeReady;
|
||||||
//item->iuser2 = gun->m_fInAttack;
|
item->iuser2 = gun->m_fInAttack;
|
||||||
|
|
||||||
// Pass along enabled state in iuser3 (for when hives and ensnare enable and disable weapons)
|
// Pass along enabled state in iuser3 (for when hives and ensnare enable and disable weapons)
|
||||||
item->iuser3 = gun->pev->iuser3;
|
item->iuser3 = gun->pev->iuser3;
|
||||||
|
item->iuser4 = gun->m_bAttackQueued;
|
||||||
|
|
||||||
//item->m_flPumpTime = max( gun->m_flPumpTime, -0.001 );
|
//item->m_flPumpTime = max( gun->m_flPumpTime, -0.001 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -361,9 +361,7 @@ public:
|
||||||
// Added by mmcguire.
|
// Added by mmcguire.
|
||||||
virtual bool GetCanUseWeapon() const { return true; }
|
virtual bool GetCanUseWeapon() const { return true; }
|
||||||
|
|
||||||
// Networked user options
|
|
||||||
int m_iAutoWeaponSwap;
|
int m_iAutoWeaponSwap;
|
||||||
int m_iPistolTrigger;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define AUTOAIM_2DEGREES 0.0348994967025
|
#define AUTOAIM_2DEGREES 0.0348994967025
|
||||||
|
|
|
@ -951,8 +951,7 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
{
|
{
|
||||||
// Block attacks during +movement except for lerk.
|
// Block attacks during +movement except for lerk.
|
||||||
bool theAttackPressed = (m_pPlayer->pev->button & IN_ATTACK) && (!(m_pPlayer->pev->button & IN_ATTACK2) || m_pPlayer->pev->iuser3 == AVH_USER3_ALIEN_PLAYER3);
|
bool theAttackPressed = (m_pPlayer->pev->button & IN_ATTACK) && (!(m_pPlayer->pev->button & IN_ATTACK2) || m_pPlayer->pev->iuser3 == AVH_USER3_ALIEN_PLAYER3);
|
||||||
bool pistolAttackUp = (m_pPlayer->m_iPistolTrigger && m_pPlayer->m_afButtonLast & IN_ATTACK && m_pPlayer->m_afButtonReleased & IN_ATTACK && m_iId == AVH_WEAPON_PISTOL);
|
bool attackQueuedAndCanAttack = m_bAttackQueued && CanAttack(m_flNextPrimaryAttack, gpGlobals->time, UseDecrement());
|
||||||
|
|
||||||
bool theWeaponPrimes = (this->GetWeaponPrimeTime() > 0.0f);
|
bool theWeaponPrimes = (this->GetWeaponPrimeTime() > 0.0f);
|
||||||
bool theWeaponIsPriming = this->GetIsWeaponPriming();
|
bool theWeaponIsPriming = this->GetIsWeaponPriming();
|
||||||
bool theWeaponIsPrimed = this->GetIsWeaponPrimed();
|
bool theWeaponIsPrimed = this->GetIsWeaponPrimed();
|
||||||
|
@ -990,7 +989,7 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
else
|
else
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( (theAttackPressed || m_bAttackQueued || pistolAttackUp) && m_pPlayer->GetCanUseWeapon())
|
if ( (theAttackPressed || attackQueuedAndCanAttack) && m_pPlayer->GetCanUseWeapon())
|
||||||
{
|
{
|
||||||
if ((m_fInSpecialReload == 1 || m_fInSpecialReload == 2) && m_iClip != 0)
|
if ((m_fInSpecialReload == 1 || m_fInSpecialReload == 2) && m_iClip != 0)
|
||||||
{
|
{
|
||||||
|
@ -1005,11 +1004,14 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pPlayer->TabulateAmmo();
|
m_pPlayer->TabulateAmmo();
|
||||||
PrimaryAttack(pistolAttackUp);
|
PrimaryAttack();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QueueAttack(pistolAttackUp);
|
if (m_pPlayer->m_afButtonPressed & IN_ATTACK)
|
||||||
|
{
|
||||||
|
QueueAttack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_pPlayer->pev->button & IN_ATTACK2)
|
else if (m_pPlayer->pev->button & IN_ATTACK2)
|
||||||
|
|
|
@ -353,8 +353,8 @@ public:
|
||||||
|
|
||||||
virtual void ItemPostFrame( void ); // called each frame by the player PostThink
|
virtual void ItemPostFrame( void ); // called each frame by the player PostThink
|
||||||
// called by CBasePlayerWeapons ItemPostFrame()
|
// called by CBasePlayerWeapons ItemPostFrame()
|
||||||
virtual void PrimaryAttack( bool fireOnAttackUp = false ) { return; } // do "+ATTACK"
|
virtual void PrimaryAttack( void ) { return; } // do "+ATTACK"
|
||||||
virtual void QueueAttack( bool fireOnAttackUp = false ) { return; } // queue an attack
|
virtual void QueueAttack(void) { return; } // queue an attack
|
||||||
virtual void SecondaryAttack( void ) { return; } // do "+ATTACK2"
|
virtual void SecondaryAttack( void ) { return; } // do "+ATTACK2"
|
||||||
virtual void Reload( void ) { return; } // do "+RELOAD"
|
virtual void Reload( void ) { return; } // do "+RELOAD"
|
||||||
virtual void WeaponIdle( void ) { return; } // called when no buttons pressed
|
virtual void WeaponIdle( void ) { return; } // called when no buttons pressed
|
||||||
|
@ -385,6 +385,7 @@ public:
|
||||||
int m_iDefaultAmmo;// how much ammo you get when you pick up this weapon as placed by a level designer.
|
int m_iDefaultAmmo;// how much ammo you get when you pick up this weapon as placed by a level designer.
|
||||||
|
|
||||||
bool PrevAttack2Status; // HACK: For +movement weapon animations
|
bool PrevAttack2Status; // HACK: For +movement weapon animations
|
||||||
|
float PrevAttack2Time;
|
||||||
float m_flLastAnimationPlayed;
|
float m_flLastAnimationPlayed;
|
||||||
bool m_bAttackQueued;
|
bool m_bAttackQueued;
|
||||||
};
|
};
|
||||||
|
|
|
@ -212,10 +212,10 @@ int AvHAcidRocketGun::GetDeployAnimation() const
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVH_WEAPON_SWIPE:
|
case AVH_WEAPON_SWIPE:
|
||||||
case AVH_WEAPON_BLINK:
|
|
||||||
theDeployAnimation = 8;
|
theDeployAnimation = 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AVH_WEAPON_BLINK:
|
||||||
case AVH_WEAPON_METABOLIZE:
|
case AVH_WEAPON_METABOLIZE:
|
||||||
theDeployAnimation = 13;
|
theDeployAnimation = 13;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -86,7 +86,21 @@ int AvHLeap::GetBarrelLength() const
|
||||||
|
|
||||||
int AvHLeap::GetDeployAnimation() const
|
int AvHLeap::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
return 6;
|
int theDeployAnimation = 5;
|
||||||
|
|
||||||
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
|
switch (thePreviousID)
|
||||||
|
{
|
||||||
|
case AVH_WEAPON_BITE:
|
||||||
|
case AVH_WEAPON_PARASITE:
|
||||||
|
case AVH_ABILITY_LEAP:
|
||||||
|
case AVH_WEAPON_DIVINEWIND:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return theDeployAnimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
float AvHLeap::GetDeployTime() const
|
float AvHLeap::GetDeployTime() const
|
||||||
|
@ -224,11 +238,11 @@ int AvHCharge::GetDeployAnimation() const
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVH_WEAPON_DEVOUR:
|
case AVH_WEAPON_DEVOUR:
|
||||||
theDeployAnimation = 18;
|
theDeployAnimation = 19;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVH_WEAPON_STOMP:
|
case AVH_WEAPON_STOMP:
|
||||||
theDeployAnimation = 15;
|
theDeployAnimation = 16;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1193,6 +1193,8 @@ public:
|
||||||
|
|
||||||
virtual bool GetFiresUnderwater() const;
|
virtual bool GetFiresUnderwater() const;
|
||||||
|
|
||||||
|
virtual int GetIdleAnimation() const;
|
||||||
|
|
||||||
virtual bool GetIsDroppable() const;
|
virtual bool GetIsDroppable() const;
|
||||||
|
|
||||||
virtual int GetShootAnimation() const;
|
virtual int GetShootAnimation() const;
|
||||||
|
|
|
@ -170,7 +170,8 @@ AvHBasePlayerWeapon::AvHBasePlayerWeapon()
|
||||||
this->mEndEvent = 0;
|
this->mEndEvent = 0;
|
||||||
this->mRange = 8012;
|
this->mRange = 8012;
|
||||||
this->mDamage = 10;
|
this->mDamage = 10;
|
||||||
this->mAttackButtonDownLastFrame = false;
|
//this->mAttackButtonDownLastFrame = false;
|
||||||
|
this->m_fInAttack = FALSE;
|
||||||
this->mTimeOfLastResupply = -1;
|
this->mTimeOfLastResupply = -1;
|
||||||
this->mTimeOfLastPrime = -1;
|
this->mTimeOfLastPrime = -1;
|
||||||
this->mWeaponPrimeStarted = false;
|
this->mWeaponPrimeStarted = false;
|
||||||
|
@ -180,8 +181,6 @@ AvHBasePlayerWeapon::AvHBasePlayerWeapon()
|
||||||
this->mIsPersistent = false;
|
this->mIsPersistent = false;
|
||||||
this->mLifetime = -1;
|
this->mLifetime = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
this->mFireOnAttackUp = false;
|
|
||||||
}
|
}
|
||||||
void AvHBasePlayerWeapon::PrintWeaponToClient(CBaseEntity *theAvHPlayer) {
|
void AvHBasePlayerWeapon::PrintWeaponToClient(CBaseEntity *theAvHPlayer) {
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
|
@ -284,6 +283,11 @@ BOOL AvHBasePlayerWeapon::DefaultDeploy( char *szViewModel, char *szWeaponModel,
|
||||||
//this->m_pPlayer->SetAnimation(PLAYER_ANIM(iAnim));
|
//this->m_pPlayer->SetAnimation(PLAYER_ANIM(iAnim));
|
||||||
|
|
||||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + this->GetDeployTime();
|
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + this->GetDeployTime();
|
||||||
|
|
||||||
|
// 2024 - Fix some +movement animation issues on aliens and also make alien idle trigger faster so they look more organic.
|
||||||
|
if (m_pPlayer->pev->iuser3 > 2 && m_pPlayer->pev->iuser3 < 9)
|
||||||
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + this->GetDeployTime() + 2.0f;
|
||||||
|
else
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + this->GetDeployTime() + kDeployIdleInterval;
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + this->GetDeployTime() + kDeployIdleInterval;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -328,6 +332,7 @@ BOOL AvHBasePlayerWeapon::DefaultReload( int iClipSize, int iAnim, float fDelay,
|
||||||
this->m_pPlayer->SetAnimation(PLAYER_RELOAD);
|
this->m_pPlayer->SetAnimation(PLAYER_RELOAD);
|
||||||
|
|
||||||
m_fInReload = TRUE;
|
m_fInReload = TRUE;
|
||||||
|
m_bAttackQueued = false;
|
||||||
|
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + kDeployIdleInterval;
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + kDeployIdleInterval;
|
||||||
|
|
||||||
|
@ -494,7 +499,8 @@ bool AvHBasePlayerWeapon::GetFiresUnderwater() const
|
||||||
|
|
||||||
bool AvHBasePlayerWeapon::GetIsFiring() const
|
bool AvHBasePlayerWeapon::GetIsFiring() const
|
||||||
{
|
{
|
||||||
return this->mAttackButtonDownLastFrame;
|
//return this->mAttackButtonDownLastFrame;
|
||||||
|
return this->m_fInAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvHBasePlayerWeapon::GetHasMuzzleFlash() const
|
bool AvHBasePlayerWeapon::GetHasMuzzleFlash() const
|
||||||
|
@ -679,6 +685,7 @@ void AvHBasePlayerWeapon::Holster( int skiplocal)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
this->m_bAttackQueued = false;
|
this->m_bAttackQueued = false;
|
||||||
|
this->m_fInAttack = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
float AvHBasePlayerWeapon::GetTimePassedThisTick() const
|
float AvHBasePlayerWeapon::GetTimePassedThisTick() const
|
||||||
|
@ -781,7 +788,7 @@ bool AvHBasePlayerWeapon::ProcessValidAttack(void)
|
||||||
{
|
{
|
||||||
if((this->m_flNextPrimaryAttack <= 0) && !this->m_fInSpecialReload)
|
if((this->m_flNextPrimaryAttack <= 0) && !this->m_fInSpecialReload)
|
||||||
{
|
{
|
||||||
if(!this->GetMustPressTriggerForEachShot() || !this->mAttackButtonDownLastFrame || this->mFireOnAttackUp)
|
if(!this->GetMustPressTriggerForEachShot() || !this->m_fInAttack)
|
||||||
{
|
{
|
||||||
//ALERT(at_console, "trueattack1 primammo:%d primatype:%d secammo:%d secatype:%d\n", this->m_pPlayer->m_rgAmmo[this->m_iPrimaryAmmoType], this->m_iPrimaryAmmoType, this->m_pPlayer->m_rgAmmo[this->m_iSecondaryAmmoType], this->m_iSecondaryAmmoType);
|
//ALERT(at_console, "trueattack1 primammo:%d primatype:%d secammo:%d secatype:%d\n", this->m_pPlayer->m_rgAmmo[this->m_iPrimaryAmmoType], this->m_iPrimaryAmmoType, this->m_pPlayer->m_rgAmmo[this->m_iSecondaryAmmoType], this->m_iSecondaryAmmoType);
|
||||||
theAttackIsValid = true;
|
theAttackIsValid = true;
|
||||||
|
@ -1027,15 +1034,16 @@ void AvHBasePlayerWeapon::SetNextAttack(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AvHBasePlayerWeapon::PrimaryAttack(bool fireOnAttackUp)
|
void AvHBasePlayerWeapon::PrimaryAttack(void)
|
||||||
{
|
{
|
||||||
if (this->ProcessValidAttack())
|
if (this->ProcessValidAttack())
|
||||||
{
|
{
|
||||||
|
//if (!this->mAttackButtonDownLastFrame)
|
||||||
if (!this->mAttackButtonDownLastFrame)
|
if (!this->m_fInAttack)
|
||||||
{
|
{
|
||||||
this->PlaybackEvent(this->mStartEvent);
|
this->PlaybackEvent(this->mStartEvent);
|
||||||
this->mAttackButtonDownLastFrame = true;
|
//this->mAttackButtonDownLastFrame = true;
|
||||||
|
this->m_fInAttack = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->PlaybackEvent(this->mEvent, this->GetShootAnimation());
|
this->PlaybackEvent(this->mEvent, this->GetShootAnimation());
|
||||||
|
@ -1059,7 +1067,6 @@ void AvHBasePlayerWeapon::PrimaryAttack(bool fireOnAttackUp)
|
||||||
|
|
||||||
this->DeductCostForShot();
|
this->DeductCostForShot();
|
||||||
this->SetNextAttack();
|
this->SetNextAttack();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1379,10 +1386,12 @@ void AvHBasePlayerWeapon::WeaponIdle(void)
|
||||||
// //gEngfuncs.Con_Printf("during idle, clip is %d\n", sz);
|
// //gEngfuncs.Con_Printf("during idle, clip is %d\n", sz);
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
if(this->mAttackButtonDownLastFrame)
|
//if(this->mAttackButtonDownLastFrame)
|
||||||
|
if (this->m_fInAttack)
|
||||||
{
|
{
|
||||||
this->PlaybackEvent(this->mEndEvent);
|
this->PlaybackEvent(this->mEndEvent);
|
||||||
this->mAttackButtonDownLastFrame = false;
|
//this->mAttackButtonDownLastFrame = false;
|
||||||
|
this->m_fInAttack = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetEmptySound();
|
ResetEmptySound();
|
||||||
|
@ -1391,6 +1400,10 @@ void AvHBasePlayerWeapon::WeaponIdle(void)
|
||||||
|
|
||||||
if(this->m_flTimeWeaponIdle <= UTIL_WeaponTimeBase())
|
if(this->m_flTimeWeaponIdle <= UTIL_WeaponTimeBase())
|
||||||
{
|
{
|
||||||
|
// +movement transitional animation fix
|
||||||
|
#ifdef AVH_CLIENT
|
||||||
|
if (gpGlobals->time - this->PrevAttack2Time > 1.0f)
|
||||||
|
#endif
|
||||||
this->SendWeaponAnim(this->GetIdleAnimation());
|
this->SendWeaponAnim(this->GetIdleAnimation());
|
||||||
|
|
||||||
this->m_pPlayer->SetAnimation(PLAYER_IDLE);
|
this->m_pPlayer->SetAnimation(PLAYER_IDLE);
|
||||||
|
|
|
@ -177,7 +177,7 @@ public:
|
||||||
|
|
||||||
virtual void Precache();
|
virtual void Precache();
|
||||||
|
|
||||||
virtual void PrimaryAttack(bool fireOnAttackUp = false);
|
virtual void PrimaryAttack();
|
||||||
|
|
||||||
virtual void Reload();
|
virtual void Reload();
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ protected:
|
||||||
|
|
||||||
float mRange;
|
float mRange;
|
||||||
float mDamage;
|
float mDamage;
|
||||||
bool mAttackButtonDownLastFrame;
|
//bool mAttackButtonDownLastFrame;
|
||||||
float mTimeOfLastResupply;
|
float mTimeOfLastResupply;
|
||||||
|
|
||||||
float mTimeOfLastPrime;
|
float mTimeOfLastPrime;
|
||||||
|
@ -261,8 +261,6 @@ protected:
|
||||||
|
|
||||||
// sounds
|
// sounds
|
||||||
CStringList mFireSounds;
|
CStringList mFireSounds;
|
||||||
|
|
||||||
bool mFireOnAttackUp;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -73,9 +73,11 @@ int AvHBite2::GetDeployAnimation() const
|
||||||
|
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
|
case AVH_WEAPON_PRIMALSCREAM:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
case AVH_WEAPON_UMBRA:
|
case AVH_WEAPON_UMBRA:
|
||||||
case AVH_WEAPON_SPORES:
|
case AVH_WEAPON_SPORES:
|
||||||
//case AVH_WEAPON_PRIMALSCREAM:
|
|
||||||
theDeployAnimation = 12;
|
theDeployAnimation = 12;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ float AvHClaws::GetRateOfFire() const
|
||||||
int AvHClaws::GetDeployAnimation() const
|
int AvHClaws::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
// Look at most recently used weapon and see if we can transition from it
|
// Look at most recently used weapon and see if we can transition from it
|
||||||
int theDeployAnimation = 9;
|
int theDeployAnimation = 27;
|
||||||
|
|
||||||
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,21 @@ float AvHDivineWind::GetRateOfFire() const
|
||||||
|
|
||||||
int AvHDivineWind::GetDeployAnimation() const
|
int AvHDivineWind::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
return 13;
|
int theDeployAnimation = 5;
|
||||||
|
|
||||||
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
|
switch (thePreviousID)
|
||||||
|
{
|
||||||
|
case AVH_WEAPON_BITE:
|
||||||
|
case AVH_WEAPON_PARASITE:
|
||||||
|
case AVH_ABILITY_LEAP:
|
||||||
|
case AVH_WEAPON_DIVINEWIND:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return theDeployAnimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvHDivineWind::GetFiresUnderwater() const
|
bool AvHDivineWind::GetFiresUnderwater() const
|
||||||
|
|
|
@ -119,6 +119,8 @@
|
||||||
#include "AvHHulls.h"
|
#include "AvHHulls.h"
|
||||||
#include "AvHServerVariables.h"
|
#include "AvHServerVariables.h"
|
||||||
|
|
||||||
|
#include "cl_dll/com_weapons.h"
|
||||||
|
|
||||||
//extern AvHKnife gKnife;
|
//extern AvHKnife gKnife;
|
||||||
//extern AvHMachineGun gMachineGun;
|
//extern AvHMachineGun gMachineGun;
|
||||||
//extern AvHPistol gPistol;
|
//extern AvHPistol gPistol;
|
||||||
|
@ -3606,10 +3608,13 @@ void EV_DistressBeacon(struct event_args_s* inArgs)
|
||||||
|
|
||||||
void EV_WeaponAnimation(struct event_args_s* inArgs)
|
void EV_WeaponAnimation(struct event_args_s* inArgs)
|
||||||
{
|
{
|
||||||
|
//gEngfuncs.Con_Printf("ev_weapanim attempt islocal:%d anim:%d g_currentanim:%d clienttime:%f\n", EV_IsLocal(inArgs->entindex), inArgs->iparam2, HUD_GetWeaponAnim(), gEngfuncs.GetClientTime());
|
||||||
// General x-punch axis
|
// General x-punch axis
|
||||||
if(EV_IsLocal(inArgs->entindex))
|
if(EV_IsLocal(inArgs->entindex))
|
||||||
{
|
{
|
||||||
int theAnimation = max(inArgs->iparam2, 0);
|
int theAnimation = max(inArgs->iparam2, 0);
|
||||||
|
// 2024 - Set this here to be checked in weapons think later to force animations if needed since event playback doesn't always work.
|
||||||
|
HUD_SetWeaponAnim(theAnimation);
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation(theAnimation, 2);
|
gEngfuncs.pEventAPI->EV_WeaponAnimation(theAnimation, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -947,16 +947,11 @@ void AvHGamerules::ClientUserInfoChanged(CBasePlayer *pPlayer, char *infobuffer)
|
||||||
// NOTE: Not currently calling down to parent CHalfLifeTeamplay
|
// NOTE: Not currently calling down to parent CHalfLifeTeamplay
|
||||||
|
|
||||||
const char* theAutoWeapSwapValue = g_engfuncs.pfnInfoKeyValue(infobuffer, "cl_weaponswap");
|
const char* theAutoWeapSwapValue = g_engfuncs.pfnInfoKeyValue(infobuffer, "cl_weaponswap");
|
||||||
|
|
||||||
if (theAutoWeapSwapValue)
|
if (theAutoWeapSwapValue)
|
||||||
{
|
{
|
||||||
pPlayer->m_iAutoWeaponSwap = atoi(theAutoWeapSwapValue);
|
pPlayer->m_iAutoWeaponSwap = atoi(theAutoWeapSwapValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* thePistolTriggerValue = g_engfuncs.pfnInfoKeyValue(infobuffer, "cl_pistoltrigger");
|
|
||||||
if (thePistolTriggerValue)
|
|
||||||
{
|
|
||||||
pPlayer->m_iPistolTrigger = atoi(thePistolTriggerValue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvHGamerules::ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, BOOL bKill, BOOL bGib )
|
void AvHGamerules::ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, BOOL bKill, BOOL bGib )
|
||||||
|
|
|
@ -238,16 +238,18 @@ BOOL AvHGrenade::IsUseable(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AvHGrenade::PrimaryAttack(bool fireOnAttackUp)
|
void AvHGrenade::PrimaryAttack(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (this->ProcessValidAttack())
|
if (this->ProcessValidAttack())
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!this->mAttackButtonDownLastFrame)
|
//if (!this->mAttackButtonDownLastFrame)
|
||||||
|
if (!this->m_fInAttack)
|
||||||
{
|
{
|
||||||
this->PlaybackEvent(this->mStartEvent);
|
this->PlaybackEvent(this->mStartEvent);
|
||||||
this->mAttackButtonDownLastFrame = true;
|
//this->mAttackButtonDownLastFrame = true;
|
||||||
|
this->m_fInAttack = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_flStartThrow == 0)
|
if (m_flStartThrow == 0)
|
||||||
|
|
|
@ -141,6 +141,7 @@
|
||||||
#include "AvHAlienAbilityConstants.h"
|
#include "AvHAlienAbilityConstants.h"
|
||||||
#include <list>
|
#include <list>
|
||||||
#include "../common/entity_types.h"
|
#include "../common/entity_types.h"
|
||||||
|
#include "cl_dll/com_weapons.h"
|
||||||
|
|
||||||
void IN_GetMousePos( int *mx, int *my );
|
void IN_GetMousePos( int *mx, int *my );
|
||||||
|
|
||||||
|
@ -3819,6 +3820,9 @@ void AvHHud::RenderAlienUI()
|
||||||
|
|
||||||
if (GetHUDUser3() == AVH_USER3_ALIEN_EMBRYO)
|
if (GetHUDUser3() == AVH_USER3_ALIEN_EMBRYO)
|
||||||
{
|
{
|
||||||
|
// 2024 - Set this so deploy animations play properly once out of the egg. This is here because weapons think doesn't happen durring gestation.
|
||||||
|
HUD_SetWeaponAnim(-1);
|
||||||
|
|
||||||
if (mMembraneSprite)
|
if (mMembraneSprite)
|
||||||
{
|
{
|
||||||
AvHSpriteSetRenderMode(kRenderTransAdd);
|
AvHSpriteSetRenderMode(kRenderTransAdd);
|
||||||
|
|
|
@ -233,9 +233,9 @@ public:
|
||||||
|
|
||||||
virtual void Precache(void);
|
virtual void Precache(void);
|
||||||
|
|
||||||
virtual void PrimaryAttack(bool fireOnAttackUp = false);
|
virtual void PrimaryAttack();
|
||||||
|
|
||||||
virtual void QueueAttack(bool fireOnAttackUp);
|
virtual void QueueAttack(void);
|
||||||
|
|
||||||
virtual void Spawn();
|
virtual void Spawn();
|
||||||
|
|
||||||
|
@ -624,7 +624,7 @@ public:
|
||||||
|
|
||||||
virtual void WeaponIdle();
|
virtual void WeaponIdle();
|
||||||
|
|
||||||
virtual void PrimaryAttack(bool fireOnAttackUp = false);
|
virtual void PrimaryAttack(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,21 @@ int AvHParasiteGun::GetDamageType() const
|
||||||
|
|
||||||
int AvHParasiteGun::GetDeployAnimation() const
|
int AvHParasiteGun::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
return 6;
|
int theDeployAnimation = 5;
|
||||||
|
|
||||||
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
|
switch (thePreviousID)
|
||||||
|
{
|
||||||
|
case AVH_WEAPON_BITE:
|
||||||
|
case AVH_WEAPON_PARASITE:
|
||||||
|
case AVH_ABILITY_LEAP:
|
||||||
|
case AVH_WEAPON_DIVINEWIND:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return theDeployAnimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvHParasiteGun::GetFiresUnderwater() const
|
bool AvHParasiteGun::GetFiresUnderwater() const
|
||||||
|
|
|
@ -174,25 +174,16 @@ void AvHPistol::Precache()
|
||||||
this->mEvent = PRECACHE_EVENT(1, kHGEventName);
|
this->mEvent = PRECACHE_EVENT(1, kHGEventName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvHPistol::PrimaryAttack(bool fireOnAttackUp)
|
void AvHPistol::PrimaryAttack()
|
||||||
{
|
{
|
||||||
this->m_bAttackQueued = false;
|
this->m_bAttackQueued = false;
|
||||||
this->mFireOnAttackUp = fireOnAttackUp;
|
|
||||||
if (fireOnAttackUp)
|
|
||||||
{
|
|
||||||
this->m_iPlayEmptySound = true;
|
|
||||||
}
|
|
||||||
AvHMarineWeapon::PrimaryAttack();
|
AvHMarineWeapon::PrimaryAttack();
|
||||||
this->mFireOnAttackUp = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvHPistol::QueueAttack(bool fireOnAttackUp)
|
void AvHPistol::QueueAttack(void)
|
||||||
{
|
{
|
||||||
if (!this->mAttackButtonDownLastFrame || fireOnAttackUp)
|
|
||||||
{
|
|
||||||
this->m_bAttackQueued = true;
|
this->m_bAttackQueued = true;
|
||||||
this->mAttackButtonDownLastFrame = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvHPistol::Spawn()
|
void AvHPistol::Spawn()
|
||||||
|
|
|
@ -4863,6 +4863,7 @@ void AvHPlayer::PlayerConstructUse()
|
||||||
if((this->mTimeOfLastConstructUseAnimation == 0) || (gpGlobals->time > (this->mTimeOfLastConstructUseAnimation + kConstructAnimationInterval)))
|
if((this->mTimeOfLastConstructUseAnimation == 0) || (gpGlobals->time > (this->mTimeOfLastConstructUseAnimation + kConstructAnimationInterval)))
|
||||||
{
|
{
|
||||||
// Play special builder animation
|
// Play special builder animation
|
||||||
|
this->pev->weaponanim = kConstructAnimationIndex;
|
||||||
PLAYBACK_EVENT_FULL(0, this->edict(), gWeaponAnimationEventID, 0, this->pev->origin, (float *)&g_vecZero, 0.0, 0.0, 0, kConstructAnimationIndex, 0, 0 );
|
PLAYBACK_EVENT_FULL(0, this->edict(), gWeaponAnimationEventID, 0, this->pev->origin, (float *)&g_vecZero, 0.0, 0.0, 0, kConstructAnimationIndex, 0, 0 );
|
||||||
|
|
||||||
// Delay idle
|
// Delay idle
|
||||||
|
|
|
@ -868,7 +868,6 @@ private:
|
||||||
|
|
||||||
bool mUsedKilled;
|
bool mUsedKilled;
|
||||||
|
|
||||||
|
|
||||||
//TODO: remove this system from AvHPlayer and create an
|
//TODO: remove this system from AvHPlayer and create an
|
||||||
// explicit balance forwarding class registered to each
|
// explicit balance forwarding class registered to each
|
||||||
// client instead. This functionality is tangential to
|
// client instead. This functionality is tangential to
|
||||||
|
|
|
@ -82,14 +82,18 @@ bool AvHPrimalScream::GetFiresUnderwater() const
|
||||||
int AvHPrimalScream::GetDeployAnimation() const
|
int AvHPrimalScream::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
// Look at most recently used weapon and see if we can transition from it
|
// Look at most recently used weapon and see if we can transition from it
|
||||||
int theDeployAnimation = -1;
|
int theDeployAnimation = 1;
|
||||||
|
|
||||||
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
case AVH_WEAPON_BITE2:
|
case AVH_WEAPON_BITE2:
|
||||||
theDeployAnimation = 9;
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
|
case AVH_WEAPON_SPORES:
|
||||||
|
case AVH_WEAPON_UMBRA:
|
||||||
|
theDeployAnimation = 12;
|
||||||
break;
|
break;
|
||||||
case AVH_WEAPON_SPIKE:
|
case AVH_WEAPON_SPIKE:
|
||||||
theDeployAnimation = 8;
|
theDeployAnimation = 8;
|
||||||
|
|
|
@ -177,13 +177,14 @@ int AvHSpitGun::GetDamageType() const
|
||||||
int AvHSpitGun::GetDeployAnimation() const
|
int AvHSpitGun::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
// Look at most recently used weapon and see if we can transition from it
|
// Look at most recently used weapon and see if we can transition from it
|
||||||
int theDeployAnimation = 7;
|
int theDeployAnimation = 11;
|
||||||
|
|
||||||
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
case AVH_WEAPON_SPIT:
|
case AVH_WEAPON_SPIT:
|
||||||
|
case AVH_WEAPON_BILEBOMB:
|
||||||
theDeployAnimation = -1;
|
theDeployAnimation = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -247,15 +247,19 @@ int AvHSpore::GetShootAnimation() const
|
||||||
int AvHSpore::GetDeployAnimation() const
|
int AvHSpore::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
// Look at most recently used weapon and see if we can transition from it
|
// Look at most recently used weapon and see if we can transition from it
|
||||||
int theDeployAnimation = -1;
|
int theDeployAnimation = 2;
|
||||||
|
|
||||||
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
case AVH_WEAPON_BITE2:
|
case AVH_WEAPON_BITE2:
|
||||||
|
case AVH_WEAPON_PRIMALSCREAM:
|
||||||
theDeployAnimation = 9;
|
theDeployAnimation = 9;
|
||||||
break;
|
break;
|
||||||
|
case AVH_WEAPON_UMBRA:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
case AVH_WEAPON_SPIKE:
|
case AVH_WEAPON_SPIKE:
|
||||||
theDeployAnimation = 8;
|
theDeployAnimation = 8;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -224,6 +224,11 @@ bool AvHStomp::GetFiresUnderwater() const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AvHStomp::GetIdleAnimation() const
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
bool AvHStomp::GetIsDroppable() const
|
bool AvHStomp::GetIsDroppable() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -163,15 +163,19 @@ float AvHUmbraGun::GetRateOfFire() const
|
||||||
|
|
||||||
int AvHUmbraGun::GetDeployAnimation() const
|
int AvHUmbraGun::GetDeployAnimation() const
|
||||||
{
|
{
|
||||||
int theDeployAnimation = -1;
|
int theDeployAnimation = 2;
|
||||||
|
|
||||||
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
|
||||||
|
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
case AVH_WEAPON_BITE2:
|
case AVH_WEAPON_BITE2:
|
||||||
|
case AVH_WEAPON_PRIMALSCREAM:
|
||||||
theDeployAnimation = 9;
|
theDeployAnimation = 9;
|
||||||
break;
|
break;
|
||||||
|
case AVH_WEAPON_SPORES:
|
||||||
|
theDeployAnimation = -1;
|
||||||
|
break;
|
||||||
case AVH_WEAPON_SPIKE:
|
case AVH_WEAPON_SPIKE:
|
||||||
theDeployAnimation = 8;
|
theDeployAnimation = 8;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -297,6 +297,7 @@ int AvHWebSpinner::GetDeployAnimation() const
|
||||||
switch(thePreviousID)
|
switch(thePreviousID)
|
||||||
{
|
{
|
||||||
case AVH_WEAPON_WEBSPINNER:
|
case AVH_WEAPON_WEBSPINNER:
|
||||||
|
case AVH_WEAPON_HEALINGSPRAY:
|
||||||
theDeployAnimation = -1;
|
theDeployAnimation = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,8 @@ void AvHWelder::Holster( int skiplocal )
|
||||||
void AvHWelder::WeaponIdle(void)
|
void AvHWelder::WeaponIdle(void)
|
||||||
{
|
{
|
||||||
#ifdef AVH_SERVER
|
#ifdef AVH_SERVER
|
||||||
if(this->GetIsWelding() && this->mAttackButtonDownLastFrame)
|
//if(this->GetIsWelding() && this->mAttackButtonDownLastFrame)
|
||||||
|
if (this->GetIsWelding() && this->m_fInAttack)
|
||||||
{
|
{
|
||||||
PLAYBACK_EVENT_FULL(0, this->m_pPlayer->edict(), gWelderConstEventID, 0, this->m_pPlayer->pev->origin, (float *)&g_vecZero, 0.0, 0.0, 1, 0, 0, 0 );
|
PLAYBACK_EVENT_FULL(0, this->m_pPlayer->edict(), gWelderConstEventID, 0, this->m_pPlayer->pev->origin, (float *)&g_vecZero, 0.0, 0.0, 1, 0, 0, 0 );
|
||||||
this->SetIsWelding(false);
|
this->SetIsWelding(false);
|
||||||
|
|
Loading…
Reference in a new issue