//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. ========= // // The copyright to the contents herein is the property of Charles G. Cleveland. // The contents may be used and/or copied only with the written permission of // Charles G. Cleveland, or in accordance with the terms and conditions stipulated in // the agreement/contract under which the contents have been supplied. // // Purpose: // // $Workfile: AvHAlienAbilities.cpp $ // $Date: 2002/11/22 21:28:15 $ // //------------------------------------------------------------------------------- // $Log: AvHAlienAbilities.cpp,v $ // Revision 1.13 2002/11/22 21:28:15 Flayra // - mp_consistency changes // // Revision 1.12 2002/10/16 00:43:58 Flayra // - Removed blink fail event // // Revision 1.11 2002/09/23 22:06:33 Flayra // - Updated anims for new view model artwork // // Revision 1.10 2002/08/09 00:52:51 Flayra // - Speed up deploying of charge and leap, removed old hard-coded number // // Revision 1.9 2002/07/26 23:03:08 Flayra // - New artwork // // Revision 1.8 2002/07/23 16:54:36 Flayra // - Updates for new viewmodel artwork // // Revision 1.7 2002/07/08 16:42:38 Flayra // - Refactoring for cheat protection, moved blinking in here from separate class // // Revision 1.6 2002/06/25 17:25:56 Flayra // - Regular update for leap and charge // // Revision 1.5 2002/06/10 19:49:06 Flayra // - Updated with new alien view model artwork (with running anims) // // Revision 1.4 2002/06/03 16:20:11 Flayra // - Proper anims for alien abilities // // Revision 1.3 2002/05/23 02:34:00 Flayra // - Post-crash checkin. Restored @Backup from around 4/16. Contains changes for last four weeks of development. // //=============================================================================== #include "mod/AvHAlienAbilities.h" #include "mod/AvHAlienWeaponConstants.h" #include "mod/AvHAlienAbilityConstants.h" #include "mod/AvHConstants.h" #include "mod/AvHSpecials.h" #include "mod/AvHPlayer.h" #ifdef AVH_CLIENT #include "cl_dll/hud.h" #include "mod/AvHHud.h" extern int g_runfuncs; void IN_Attack2Down(); #endif LINK_ENTITY_TO_CLASS(kwLeap, AvHLeap); BOOL AvHLeap::Deploy() { BOOL theSuccess = DefaultDeploy(kLevel1ViewModel, kLeapPModel, this->GetDeployAnimation(), this->GetAnimationExtension()); // Super-fast deploy time this->m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + this->GetDeployTime(); return theSuccess; } AvHMessageID AvHLeap::GetAbilityImpulse() const { return ALIEN_ABILITY_LEAP; } int AvHLeap::GetBarrelLength() const { return 0; } int AvHLeap::GetDeployAnimation() const { return 6; } float AvHLeap::GetDeployTime() const { // Supa-fast! return 0.0f; } int AvHLeap::GetIdleAnimation() const { // TODO: Add idle here return 0; } int AvHLeap::GetShootAnimation() const { return 3; } bool AvHLeap::GetFiresUnderwater() const { return true; } bool AvHLeap::GetIsDroppable() const { return false; } void AvHLeap::Precache(void) { AvHAlienAbilityWeapon::Precache(); PRECACHE_UNMODIFIED_MODEL(kLevel1ViewModel); PRECACHE_UNMODIFIED_MODEL(kLeapPModel); PRECACHE_UNMODIFIED_SOUND(kLeapSound); PRECACHE_UNMODIFIED_SOUND(kLeapHitSound1); PRECACHE_UNMODIFIED_SOUND(kLeapKillSound); this->mEvent = PRECACHE_EVENT(1, kLeapEventName); this->mAbilityEvent = PRECACHE_EVENT(1, kAbilityEventName); } void AvHLeap::Spawn() { AvHAlienAbilityWeapon::Spawn(); Precache(); this->m_iId = AVH_ABILITY_LEAP; // Set our class name this->pev->classname = MAKE_STRING(kwsLeap); SET_MODEL(ENT(this->pev), kNullModel); FallInit();// get ready to fall down. } float AvHLeap::GetRateOfFire(void) const { // Dunno why the 2 has to be there ... return 2 * (float)BALANCE_VAR(kLeapROF); } bool AvHLeap::UsesAmmo(void) const { return false; } void AvHLeap::SecondaryAttack() { #ifdef AVH_CLIENT this->FireProjectiles(); #endif } void AvHLeap::FireProjectiles(void) { #ifdef AVH_SERVER AvHPlayer* thePlayer = dynamic_cast(this->m_pPlayer); if(thePlayer) { thePlayer->TriggerUncloak(); } #endif #ifdef AVH_CLIENT if(g_runfuncs) { //IN_Attack2Down(); gHUD.SetAlienAbility(this->GetAbilityImpulse()); } #endif } void AvHLeap::Init() { } LINK_ENTITY_TO_CLASS(kwCharge, AvHCharge); BOOL AvHCharge::Deploy() { BOOL theSuccess = DefaultDeploy(kLevel5ViewModel, kNullModel, this->GetDeployAnimation(), this->GetAnimationExtension()); // Super-fast deploy time this->m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + this->GetDeployTime(); return theSuccess; } AvHMessageID AvHCharge::GetAbilityImpulse() const { return ALIEN_ABILITY_CHARGE; } int AvHCharge::GetBarrelLength() const { return 0; } int AvHCharge::GetDeployAnimation() const { // Look at most recently used weapon and see if we can transition from it int theDeployAnimation = 5; AvHWeaponID thePreviousID = this->GetPreviousWeaponID(); switch(thePreviousID) { case AVH_WEAPON_CLAWS: theDeployAnimation = 5; break; case AVH_WEAPON_DEVOUR: theDeployAnimation = 18; break; case AVH_WEAPON_STOMP: theDeployAnimation = 15; break; } return theDeployAnimation; } float AvHCharge::GetDeployTime() const { return 0.0f; //.6f; } bool AvHCharge::GetFiresUnderwater() const { return false; } int AvHCharge::GetIdleAnimation() const { return 1; } bool AvHCharge::GetIsDroppable() const { return false; } int AvHCharge::GetShootAnimation() const { return 22; } void AvHCharge::Precache(void) { AvHAlienAbilityWeapon::Precache(); PRECACHE_UNMODIFIED_MODEL(kLevel5ViewModel); PRECACHE_UNMODIFIED_MODEL(kNullModel); PRECACHE_UNMODIFIED_SOUND(kChargeSound); PRECACHE_UNMODIFIED_SOUND(kChargeKillSound); this->mEvent = PRECACHE_EVENT(1, kChargeEventName); this->mAbilityEvent = PRECACHE_EVENT(1, kAbilityEventName); } void AvHCharge::Spawn() { AvHAlienAbilityWeapon::Spawn(); Precache(); this->m_iId = AVH_ABILITY_CHARGE; // Set our class name this->pev->classname = MAKE_STRING(kwsCharge); SET_MODEL(ENT(this->pev), kNullModel); FallInit();// get ready to fall down. } bool AvHCharge::UsesAmmo(void) const { return false; } void AvHCharge::SecondaryAttack() { #ifdef AVH_CLIENT this->FireProjectiles(); #endif } void AvHCharge::FireProjectiles(void) { #ifdef AVH_CLIENT IN_Attack2Down(); //gHUD.SetAlienAbility(this->GetAbilityImpulse()); #endif // Event is played back. Mark pmove with proper flag so the alien Charges forward. //PLAYBACK_EVENT_FULL(0, this->m_pPlayer->edict(), this->mAbilityEvent, 0, this->m_pPlayer->pev->origin, (float *)&g_vecZero, 0.0, 0.0, this->GetAbilityImpulse(), 0, 1, 0 ); // Send fire anim //SendWeaponAnim(5); //this->PlaybackEvent(this->mWeaponAnimationEvent, 5); } void AvHCharge::Init() { } float AvHCharge::GetRateOfFire() const { // Approximate length of charge sound return 1.0f; }