This commit is contained in:
parent
47d5bb7fc7
commit
58756ef755
11 changed files with 287 additions and 33 deletions
|
@ -82,7 +82,8 @@ enemy_src := npc \
|
||||||
npbug \
|
npbug \
|
||||||
nprojjf \
|
nprojjf \
|
||||||
nmjback \
|
nmjback \
|
||||||
nsjback
|
nsjback \
|
||||||
|
nsj2back
|
||||||
|
|
||||||
friend_src := friend \
|
friend_src := friend \
|
||||||
fdata \
|
fdata \
|
||||||
|
|
|
@ -252,8 +252,8 @@ void CNpcAnemone2Enemy::postInit()
|
||||||
|
|
||||||
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
||||||
|
|
||||||
xDiff = ( m_scaleY * 40 ) >> 12;
|
xDiff = ( m_scaleY * SPIKE_RADIUS ) >> 12;
|
||||||
yDiff = ( m_scaleX * 40 ) >> 12;
|
yDiff = ( m_scaleX * SPIKE_RADIUS ) >> 12;
|
||||||
|
|
||||||
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
||||||
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
||||||
|
@ -280,12 +280,123 @@ void CNpcAnemone2Enemy::postInit()
|
||||||
|
|
||||||
void CNpcAnemone2Enemy::shutdown()
|
void CNpcAnemone2Enemy::shutdown()
|
||||||
{
|
{
|
||||||
deleteAllChild();
|
|
||||||
CNpcEnemy::shutdown();
|
CNpcEnemy::shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcAnemone2Enemy::processShot( int _frames )
|
||||||
|
{
|
||||||
|
switch( m_data[m_type].shotFunc )
|
||||||
|
{
|
||||||
|
case NPC_SHOT_NONE:
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_SHOT_GENERIC:
|
||||||
|
{
|
||||||
|
switch ( m_state )
|
||||||
|
{
|
||||||
|
case NPC_GENERIC_HIT_CHECK_HEALTH:
|
||||||
|
{
|
||||||
|
if ( CLevel::getCurrentChapter() == 1 && CLevel::getCurrentChapterLevel() == 1 )
|
||||||
|
{
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_START;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_health -= 5;
|
||||||
|
|
||||||
|
if ( m_health < 0 )
|
||||||
|
{
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_START;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_state = NPC_GENERIC_HIT_RECOIL;
|
||||||
|
|
||||||
|
m_animPlaying = true;
|
||||||
|
m_animNo = m_data[m_type].recoilAnim;
|
||||||
|
m_frame = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_GENERIC_HIT_RECOIL:
|
||||||
|
{
|
||||||
|
if ( !m_animPlaying )
|
||||||
|
{
|
||||||
|
m_state = 0;
|
||||||
|
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_GENERIC_HIT_DEATH_START:
|
||||||
|
{
|
||||||
|
m_animPlaying = true;
|
||||||
|
m_animNo = m_data[m_type].dieAnim;
|
||||||
|
m_frame = 0;
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_END;
|
||||||
|
|
||||||
|
deleteAllChild();
|
||||||
|
m_isDying = true;
|
||||||
|
m_speed = -5;
|
||||||
|
|
||||||
|
if (m_data[m_type].skelType)
|
||||||
|
{
|
||||||
|
m_actorGfx->SetOtPos( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_GENERIC_HIT_DEATH_END:
|
||||||
|
{
|
||||||
|
m_drawRotation += 64 * _frames;
|
||||||
|
m_drawRotation &= 4095;
|
||||||
|
|
||||||
|
Pos.vy += m_speed * _frames;
|
||||||
|
|
||||||
|
if ( m_speed < 5 )
|
||||||
|
{
|
||||||
|
m_speed++;
|
||||||
|
}
|
||||||
|
|
||||||
|
DVECTOR offset = CLevel::getCameraPos();
|
||||||
|
|
||||||
|
if ( Pos.vy - offset.vy > VidGetScrH() )
|
||||||
|
{
|
||||||
|
if ( m_data[m_type].respawning )
|
||||||
|
{
|
||||||
|
m_isActive = false;
|
||||||
|
|
||||||
|
m_timerFunc = NPC_TIMER_RESPAWN;
|
||||||
|
m_timerTimer = 4 * GameState::getOneSecondInFrames();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setToShutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcAnemone2Enemy::processClose( int _frames )
|
void CNpcAnemone2Enemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
int fireLoop;
|
int fireLoop;
|
||||||
|
@ -354,8 +465,8 @@ void CNpcAnemone2Enemy::processClose( int _frames )
|
||||||
|
|
||||||
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
||||||
|
|
||||||
xDiff = ( m_scaleY * 40 ) >> 12;
|
xDiff = ( m_scaleY * SPIKE_RADIUS ) >> 12;
|
||||||
yDiff = ( m_scaleX * 40 ) >> 12;
|
yDiff = ( m_scaleX * SPIKE_RADIUS ) >> 12;
|
||||||
|
|
||||||
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
||||||
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
||||||
|
@ -426,8 +537,8 @@ void CNpcAnemone2Enemy::processMovementModifier( int _frames, s32 distX, s32 dis
|
||||||
|
|
||||||
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
// move appropriate to scaling (anemone origin is 90 degrees off, hence:)
|
||||||
|
|
||||||
xDiff = ( m_scaleY * 40 ) >> 12;
|
xDiff = ( m_scaleY * SPIKE_RADIUS ) >> 12;
|
||||||
yDiff = ( m_scaleX * 40 ) >> 12;
|
yDiff = ( m_scaleX * SPIKE_RADIUS ) >> 12;
|
||||||
|
|
||||||
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
offset.vx = ( xDiff * rcos( relativeHeading ) ) >> 12;
|
||||||
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
offset.vy = ( yDiff * rsin( relativeHeading ) ) >> 12;
|
||||||
|
|
|
@ -39,11 +39,17 @@ public:
|
||||||
virtual void postInit();
|
virtual void postInit();
|
||||||
virtual void shutdown();
|
virtual void shutdown();
|
||||||
virtual void render();
|
virtual void render();
|
||||||
|
virtual void processShot( int _frames );
|
||||||
protected:
|
protected:
|
||||||
virtual void processClose( int _frames );
|
virtual void processClose( int _frames );
|
||||||
virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange );
|
virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange );
|
||||||
|
|
||||||
u16 m_scaleX, m_scaleY;
|
u16 m_scaleX, m_scaleY;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SPIKE_RADIUS = 20,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class CNpcAnemone3Enemy : public CNpcAnemoneEnemy
|
class CNpcAnemone3Enemy : public CNpcAnemoneEnemy
|
||||||
|
|
|
@ -83,6 +83,7 @@ public:
|
||||||
NPC_PROJECTILE_JELLYFISH,
|
NPC_PROJECTILE_JELLYFISH,
|
||||||
NPC_MOTHER_JELLYFISH_BACKGROUND,
|
NPC_MOTHER_JELLYFISH_BACKGROUND,
|
||||||
NPC_SMALL_JELLYFISH_BACKGROUND,
|
NPC_SMALL_JELLYFISH_BACKGROUND,
|
||||||
|
NPC_SMALL_JELLYFISH_2_BACKGROUND,
|
||||||
NPC_UNIT_TYPE_MAX,
|
NPC_UNIT_TYPE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1056,6 +1056,29 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // NPC_SMALL_JELLYFISH_2_BACKGROUND
|
||||||
|
0,//ACTORS_JELLYFISH1_SBK,
|
||||||
|
FRM_JELLYFISH1_SWIM1,
|
||||||
|
NPC_SENSOR_USER_CLOSE,
|
||||||
|
NPC_MOVEMENT_FIXED_PATH,
|
||||||
|
NPC_CLOSE_NONE,
|
||||||
|
NPC_TIMER_NONE,
|
||||||
|
false,
|
||||||
|
2,
|
||||||
|
128,
|
||||||
|
DETECT_ALL_COLLISION,
|
||||||
|
DAMAGE__SHOCK_ENEMY,
|
||||||
|
16,
|
||||||
|
FRM_JELLYFISH1_SWIM1,
|
||||||
|
NPC_SHOT_GENERIC,
|
||||||
|
0,
|
||||||
|
FRM_JELLYFISH1_SWIM1,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::mapEditConvertTable[NPC_UNIT_TYPE_MAX] =
|
CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::mapEditConvertTable[NPC_UNIT_TYPE_MAX] =
|
||||||
|
|
|
@ -195,6 +195,16 @@ void CNpcSmallJellyfishBackgroundEnemy::processUserCollision( CThing *thisThing
|
||||||
|
|
||||||
if ( !otherDelta.vx && !otherDelta.vy )
|
if ( !otherDelta.vx && !otherDelta.vy )
|
||||||
{
|
{
|
||||||
|
if ( !xDist )
|
||||||
|
{
|
||||||
|
xDist = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !yDist )
|
||||||
|
{
|
||||||
|
yDist = 1;
|
||||||
|
}
|
||||||
|
|
||||||
otherDelta.vx = ( 1 * xDist ) / abs( xDist );
|
otherDelta.vx = ( 1 * xDist ) / abs( xDist );
|
||||||
otherDelta.vy = ( 1 * yDist ) / abs( yDist );
|
otherDelta.vy = ( 1 * yDist ) / abs( yDist );
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
#include "utils\utils.h"
|
#include "utils\utils.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __VID_HEADER_
|
||||||
|
#include "system\vid.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcFallingHazard::init()
|
void CNpcFallingHazard::init()
|
||||||
|
@ -32,6 +37,7 @@ void CNpcFallingHazard::init()
|
||||||
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
||||||
|
|
||||||
m_respawnRate = 4;
|
m_respawnRate = 4;
|
||||||
|
m_bounceFinish = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -41,6 +47,37 @@ void CNpcFallingHazard::processMovement( int _frames )
|
||||||
s8 groundHeight;
|
s8 groundHeight;
|
||||||
s8 yMovement;
|
s8 yMovement;
|
||||||
|
|
||||||
|
if ( m_bounceFinish )
|
||||||
|
{
|
||||||
|
if ( m_bounceDir )
|
||||||
|
{
|
||||||
|
Pos.vx += 2 * _frames;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Pos.vx -= 2 * _frames;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pos.vy += m_speed * _frames;
|
||||||
|
|
||||||
|
if ( m_speed < 5 )
|
||||||
|
{
|
||||||
|
m_speed++;
|
||||||
|
}
|
||||||
|
|
||||||
|
DVECTOR offset = CLevel::getCameraPos();
|
||||||
|
|
||||||
|
s32 yPos = Pos.vy - offset.vy;
|
||||||
|
|
||||||
|
if ( yPos > VidGetScrH() || yPos < 0 )
|
||||||
|
{
|
||||||
|
m_isActive = false;
|
||||||
|
m_timerActive = true;
|
||||||
|
m_timer = ( m_respawnRate - 1 ) * GameState::getOneSecondInFrames();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ( m_movementTimer > 0 )
|
if ( m_movementTimer > 0 )
|
||||||
{
|
{
|
||||||
m_movementTimer -= _frames;
|
m_movementTimer -= _frames;
|
||||||
|
@ -67,9 +104,9 @@ void CNpcFallingHazard::processMovement( int _frames )
|
||||||
|
|
||||||
Pos.vy += groundHeight;
|
Pos.vy += groundHeight;
|
||||||
|
|
||||||
m_isActive = false;
|
m_bounceFinish = true;
|
||||||
m_timerActive = true;
|
m_speed = -5;
|
||||||
m_timer = ( m_respawnRate - 1 ) * GameState::getOneSecondInFrames();
|
m_bounceDir = getRnd() % 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -79,6 +116,7 @@ void CNpcFallingHazard::processMovement( int _frames )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -92,5 +130,6 @@ void CNpcFallingHazard::processTimer( int _frames )
|
||||||
m_isActive = true;
|
m_isActive = true;
|
||||||
Pos = m_base;
|
Pos = m_base;
|
||||||
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
m_movementTimer = 2 * GameState::getOneSecondInFrames();
|
||||||
|
m_bounceFinish = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,9 @@ protected:
|
||||||
void processTimer( int _frames );
|
void processTimer( int _frames );
|
||||||
|
|
||||||
s32 m_movementTimer;
|
s32 m_movementTimer;
|
||||||
|
u8 m_bounceFinish;
|
||||||
|
s32 m_speed;
|
||||||
|
u8 m_bounceDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -23,6 +23,10 @@
|
||||||
#include "enemy\nsjback.h"
|
#include "enemy\nsjback.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSJ2BACK_H__
|
||||||
|
#include "enemy\nsj2back.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ENEMY_NPC_H__
|
#ifndef __ENEMY_NPC_H__
|
||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,6 +45,7 @@
|
||||||
u8 CJellyfishGenerator::m_jellyfishCount;
|
u8 CJellyfishGenerator::m_jellyfishCount;
|
||||||
s32 CJellyfishGenerator::m_timer;
|
s32 CJellyfishGenerator::m_timer;
|
||||||
u8 CJellyfishGenerator::m_on;
|
u8 CJellyfishGenerator::m_on;
|
||||||
|
u8 CJellyfishGenerator::m_level;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -50,6 +55,7 @@ void CJellyfishGenerator::init()
|
||||||
m_jellyfishCount = 0;
|
m_jellyfishCount = 0;
|
||||||
|
|
||||||
m_on = true;
|
m_on = true;
|
||||||
|
m_level = 1;
|
||||||
|
|
||||||
switch( CLevel::getCurrentChapter() )
|
switch( CLevel::getCurrentChapter() )
|
||||||
{
|
{
|
||||||
|
@ -60,6 +66,15 @@ void CJellyfishGenerator::init()
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
m_on = false;
|
m_on = false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
m_level = 2;
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,27 +100,63 @@ void CJellyfishGenerator::think( int _frames, CLevel *level )
|
||||||
m_jellyfishCount++;
|
m_jellyfishCount++;
|
||||||
|
|
||||||
CNpcEnemy *enemy;
|
CNpcEnemy *enemy;
|
||||||
|
|
||||||
|
if ( m_level == 1 )
|
||||||
|
{
|
||||||
enemy = new( "jellyfish" ) CNpcSmallJellyfishBackgroundEnemy;
|
enemy = new( "jellyfish" ) CNpcSmallJellyfishBackgroundEnemy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enemy = new( "jellyfish" ) CNpcSmallJellyfish2BackgroundEnemy;
|
||||||
|
}
|
||||||
|
|
||||||
ASSERT(enemy);
|
ASSERT(enemy);
|
||||||
|
|
||||||
|
if ( m_level == 1 )
|
||||||
|
{
|
||||||
enemy->setType( CNpcEnemy::NPC_SMALL_JELLYFISH_BACKGROUND );
|
enemy->setType( CNpcEnemy::NPC_SMALL_JELLYFISH_BACKGROUND );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enemy->setType( CNpcEnemy::NPC_SMALL_JELLYFISH_2_BACKGROUND );
|
||||||
|
}
|
||||||
|
|
||||||
enemy->init();
|
enemy->init();
|
||||||
enemy->setLayerCollision( level->getCollisionLayer() );
|
enemy->setLayerCollision( level->getCollisionLayer() );
|
||||||
|
|
||||||
DVECTOR offset = CLevel::getCameraPos();
|
DVECTOR offset = CLevel::getCameraPos();
|
||||||
|
|
||||||
DVECTOR startPos;
|
DVECTOR startPos;
|
||||||
if ( ( getRnd() % 10 ) > 4 )
|
if ( m_level == 1 )
|
||||||
{
|
{
|
||||||
CNpcSmallJellyfishBackgroundEnemy *jfish = ( CNpcSmallJellyfishBackgroundEnemy * ) enemy;
|
CNpcSmallJellyfishBackgroundEnemy *jfish = ( CNpcSmallJellyfishBackgroundEnemy * ) enemy;
|
||||||
|
|
||||||
|
if ( ( getRnd() % 10 ) > 4 )
|
||||||
|
{
|
||||||
jfish->setTargetHeading( 0 );
|
jfish->setTargetHeading( 0 );
|
||||||
startPos.vx = offset.vx - 20;
|
startPos.vx = offset.vx - 20;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CNpcSmallJellyfishBackgroundEnemy *jfish = ( CNpcSmallJellyfishBackgroundEnemy * ) enemy;
|
|
||||||
jfish->setTargetHeading( 2048 );
|
jfish->setTargetHeading( 2048 );
|
||||||
startPos.vx = offset.vx + VidGetScrW() + 20;
|
startPos.vx = offset.vx + VidGetScrW() + 20;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CNpcSmallJellyfish2BackgroundEnemy *jfish = ( CNpcSmallJellyfish2BackgroundEnemy * ) enemy;
|
||||||
|
|
||||||
|
if ( ( getRnd() % 10 ) > 4 )
|
||||||
|
{
|
||||||
|
jfish->setTargetHeading( 0 );
|
||||||
|
startPos.vx = offset.vx - 20;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jfish->setTargetHeading( 2048 );
|
||||||
|
startPos.vx = offset.vx + VidGetScrW() + 20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
startPos.vy = offset.vy + ( getRnd() % VidGetScrH() );
|
startPos.vy = offset.vy + ( getRnd() % VidGetScrH() );
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ protected:
|
||||||
static u8 m_jellyfishCount;
|
static u8 m_jellyfishCount;
|
||||||
static s32 m_timer;
|
static s32 m_timer;
|
||||||
static u8 m_on;
|
static u8 m_on;
|
||||||
|
static u8 m_level;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -329,6 +329,14 @@ SOURCE=..\..\..\source\enemy\nshrkman.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nsj2back.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nsj2back.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\enemy\nsjback.cpp
|
SOURCE=..\..\..\source\enemy\nsjback.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
Loading…
Add table
Reference in a new issue