This commit is contained in:
parent
ff6bb7adfe
commit
2922d6e9be
2 changed files with 49 additions and 1 deletions
|
@ -39,6 +39,18 @@
|
||||||
#include <ACTOR_SEASNAKE_ANIM.h>
|
#include <ACTOR_SEASNAKE_ANIM.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PROJECTL_PROJECTL_H__
|
||||||
|
#include "projectl\projectl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SPR_SPRITES_H__
|
||||||
|
#include <sprites.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "fx\fx.h"
|
||||||
|
#include "fx\fxnrgbar.h"
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcSeaSnakeSegment::init()
|
void CNpcSeaSnakeSegment::init()
|
||||||
|
@ -110,6 +122,14 @@ void CNpcSeaSnakeEnemy::postInit()
|
||||||
int initLength = NPC_SEA_SNAKE_LENGTH / 3;
|
int initLength = NPC_SEA_SNAKE_LENGTH / 3;
|
||||||
int remLength = NPC_SEA_SNAKE_LENGTH - initLength;
|
int remLength = NPC_SEA_SNAKE_LENGTH - initLength;
|
||||||
|
|
||||||
|
m_health = NPC_SEA_SNAKE_LENGTH;
|
||||||
|
|
||||||
|
if ( CLevel::getIsBossRespawn() )
|
||||||
|
{
|
||||||
|
m_health = CLevel::getBossHealth();
|
||||||
|
m_speed = m_data[m_type].speed + ( ( 3 * ( NPC_SEA_SNAKE_LENGTH - m_health ) ) / NPC_SEA_SNAKE_LENGTH );
|
||||||
|
}
|
||||||
|
|
||||||
for ( int segCount = 0 ; segCount < NPC_SEA_SNAKE_LENGTH ; segCount++ )
|
for ( int segCount = 0 ; segCount < NPC_SEA_SNAKE_LENGTH ; segCount++ )
|
||||||
{
|
{
|
||||||
m_segmentArray[segCount].init();
|
m_segmentArray[segCount].init();
|
||||||
|
@ -141,10 +161,11 @@ void CNpcSeaSnakeEnemy::postInit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_segmentCount = NPC_SEA_SNAKE_LENGTH;
|
m_segmentCount = m_health;
|
||||||
|
|
||||||
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
||||||
m_collTimer = 0;
|
m_collTimer = 0;
|
||||||
|
m_meterOn=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -158,6 +179,12 @@ void CNpcSeaSnakeSegment::shutdown()
|
||||||
|
|
||||||
void CNpcSeaSnakeEnemy::shutdown()
|
void CNpcSeaSnakeEnemy::shutdown()
|
||||||
{
|
{
|
||||||
|
if ( m_state != NPC_GENERIC_HIT_DEATH_END )
|
||||||
|
{
|
||||||
|
CLevel::setIsBossRespawn( true );
|
||||||
|
CLevel::setBossHealth( m_health );
|
||||||
|
}
|
||||||
|
|
||||||
// delete snake segments
|
// delete snake segments
|
||||||
|
|
||||||
for ( int segCount = 0 ; segCount < NPC_SEA_SNAKE_LENGTH ; segCount++ )
|
for ( int segCount = 0 ; segCount < NPC_SEA_SNAKE_LENGTH ; segCount++ )
|
||||||
|
@ -444,6 +471,16 @@ void CNpcSeaSnakeEnemy::processMovement( int _frames )
|
||||||
|
|
||||||
void CNpcSeaSnakeEnemy::processClose( int _frames )
|
void CNpcSeaSnakeEnemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
|
// fire at player
|
||||||
|
|
||||||
|
s16 heading = ratan2( playerYDist, playerXDist ) & 4095;
|
||||||
|
|
||||||
|
CProjectile *projectile;
|
||||||
|
projectile = CProjectile::Create();
|
||||||
|
DVECTOR newPos = Pos;
|
||||||
|
projectile->init( newPos, heading );
|
||||||
|
projectile->setGraphic( FRM__LIGHTNING1 );
|
||||||
|
|
||||||
//resetSeaSnakeHeadToTail();
|
//resetSeaSnakeHeadToTail();
|
||||||
|
|
||||||
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
||||||
|
@ -484,6 +521,13 @@ void CNpcSeaSnakeEnemy::render()
|
||||||
|
|
||||||
if (canRender())
|
if (canRender())
|
||||||
{
|
{
|
||||||
|
if (!m_meterOn)
|
||||||
|
{
|
||||||
|
CFXNRGBar *T=(CFXNRGBar*)CFX::Create(CFX::FX_TYPE_NRG_BAR,this);
|
||||||
|
T->SetMax( NPC_SEA_SNAKE_LENGTH );
|
||||||
|
m_meterOn=true;
|
||||||
|
}
|
||||||
|
|
||||||
DVECTOR &renderPos=getRenderPos();
|
DVECTOR &renderPos=getRenderPos();
|
||||||
|
|
||||||
SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),0);
|
SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),0);
|
||||||
|
@ -651,6 +695,7 @@ void CNpcSeaSnakeEnemy::processShot( int _frames )
|
||||||
{
|
{
|
||||||
setToShutdown();
|
setToShutdown();
|
||||||
CGameScene::setBossHasBeenKilled();
|
CGameScene::setBossHasBeenKilled();
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_END;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -660,6 +705,8 @@ void CNpcSeaSnakeEnemy::processShot( int _frames )
|
||||||
// knock segment off end of list
|
// knock segment off end of list
|
||||||
|
|
||||||
m_segmentCount--;
|
m_segmentCount--;
|
||||||
|
m_health--;
|
||||||
|
m_speed = m_data[m_type].speed + ( ( 3 * ( NPC_SEA_SNAKE_LENGTH - m_health ) ) / NPC_SEA_SNAKE_LENGTH );
|
||||||
|
|
||||||
m_collTimer = GameState::getOneSecondInFrames();
|
m_collTimer = GameState::getOneSecondInFrames();
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,7 @@ protected:
|
||||||
s32 m_collTimer;
|
s32 m_collTimer;
|
||||||
s32 m_snapTimer;
|
s32 m_snapTimer;
|
||||||
s32 m_openTimer;
|
s32 m_openTimer;
|
||||||
|
bool m_meterOn;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Add table
Reference in a new issue