summaryrefslogtreecommitdiff
path: root/game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp')
-rw-r--r--game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp b/game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp
new file mode 100644
index 0000000..1be6822
--- /dev/null
+++ b/game/server/tf/halloween/merasmus/merasmus_behavior/merasmus_zap.cpp
@@ -0,0 +1,73 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+//
+//
+//=============================================================================
+#include "cbase.h"
+
+#include "../merasmus.h"
+#include "merasmus_zap.h"
+#include "merasmus_stunned.h"
+
+ActionResult< CMerasmus > CMerasmusZap::OnStart( CMerasmus *me, Action< CMerasmus > *priorAction )
+{
+ me->GetBodyInterface()->StartActivity( ACT_RANGE_ATTACK2 );
+ m_zapTimer.Start( 1.3f );
+
+ m_spellType = SpellType_t( RandomInt( 0, SPELL_COUNT - 1 ) );
+ PlayCastSound( me );
+
+ return Continue();
+}
+
+
+ActionResult< CMerasmus > CMerasmusZap::Update( CMerasmus *me, float interval )
+{
+ // Interupt if stunned
+ if ( me->HasStunTimer() )
+ {
+ return ChangeTo( new CMerasmusStunned, "Stun Interupt!" );
+ }
+
+ if ( m_zapTimer.HasStarted() && m_zapTimer.IsElapsed() )
+ {
+ m_zapTimer.Invalidate();
+
+ const float flSpellRange = 600.f + 50.f * ( me->GetLevel() - 1 );
+ const int nTargetCount = 6 + ( me->GetLevel() - 1 );
+ const float flMaxDamage = 50.f + ( 5 * (me->GetLevel() - 1) );
+ const float flMinDamage = 20.f + ( 5 * (me->GetLevel() - 1) );
+
+ if ( CMerasmus::Zap( me, "effect_staff", flSpellRange, flMinDamage, flMaxDamage, nTargetCount ) )
+ {
+ me->EmitSound( "Halloween.Merasmus_Spell" );
+ }
+ }
+
+ if ( me->IsActivityFinished() )
+ {
+ return Done( "Zapped!" );
+ }
+
+ return Continue();
+}
+
+
+void CMerasmusZap::PlayCastSound( CMerasmus* me ) const
+{
+ CPVSFilter filter( me->WorldSpaceCenter() );
+ switch ( m_spellType )
+ {
+ case SPELL_FIRE:
+ {
+ me->PlayLowPrioritySound( filter, "Halloween.MerasmusCastFireSpell" );
+ }
+ break;
+ case SPELL_LAUNCH:
+ {
+ me->PlayLowPrioritySound( filter, "Halloween.MerasmusLaunchSpell" );
+ }
+ break;
+ }
+}
+