diff --git a/source/enemy/nshrkman.cpp b/source/enemy/nshrkman.cpp index e50cca92c..b12b0144c 100644 --- a/source/enemy/nshrkman.cpp +++ b/source/enemy/nshrkman.cpp @@ -45,6 +45,15 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void CNpcSharkManEnemy::postInit() +{ + CNpcEnemy::postInit(); + + m_fired = false; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + void CNpcSharkManEnemy::processMovement( int _frames ) { s32 moveX = 0, moveY = 0; @@ -149,9 +158,10 @@ void CNpcSharkManEnemy::processClose( int _frames ) m_animNo = ANIM_MANRAY_ATTACK; m_frame = 0; } - else if ( !m_animPlaying ) + else if ( ( ( m_frame >> 8 ) > ( ( 3 * getFrameCount() ) >> 2 ) ) && !m_fired ) { - // anim finished, fire + // fire + DVECTOR newPos = Pos; newPos.vy -= 50; @@ -170,6 +180,11 @@ void CNpcSharkManEnemy::processClose( int _frames ) projectile->init( newPos, heading ); projectile->setGraphic( FRM__LIGHTNING2 ); + m_fired = true; + } + else if ( !m_animPlaying ) + { + // anim finished m_controlFunc = NPC_CONTROL_MOVEMENT; m_timerFunc = NPC_TIMER_ATTACK_DONE; m_timerTimer = GameState::getOneSecondInFrames(); @@ -177,6 +192,7 @@ void CNpcSharkManEnemy::processClose( int _frames ) m_animNo = m_data[m_type].moveAnim; m_animPlaying = true; m_frame = 0; + m_fired = false; } } diff --git a/source/enemy/nshrkman.h b/source/enemy/nshrkman.h index fac01108a..88824bd9b 100644 --- a/source/enemy/nshrkman.h +++ b/source/enemy/nshrkman.h @@ -16,9 +16,13 @@ class CNpcSharkManEnemy : public CNpcEnemy { +public: + void postInit(); protected: void processClose( int _frames ); void processMovement( int _frames ); + + u8 m_fired; }; #endif \ No newline at end of file