This commit is contained in:
parent
c050e9fb83
commit
8538d72b10
9 changed files with 187 additions and 29 deletions
|
@ -186,6 +186,8 @@ void CNpcEnemy::processCloseAnemone2Attack( int _frames )
|
|||
nextThing = nextThing->getNext();
|
||||
}
|
||||
|
||||
removeAllChild();
|
||||
|
||||
// attach new spikes
|
||||
|
||||
for ( fireLoop = 0 ; fireLoop < 5 ; fireLoop++ )
|
||||
|
|
|
@ -248,6 +248,7 @@ void CNpcEnemy::init()
|
|||
m_heading = m_fireHeading = 0;
|
||||
m_movementTimer = 0;
|
||||
m_timerTimer = 0;
|
||||
m_attackTimer = 0;
|
||||
m_velocity = 0;
|
||||
m_extension = 0;
|
||||
m_rotation = 0;
|
||||
|
@ -577,6 +578,7 @@ void CNpcEnemy::reinit()
|
|||
m_heading = m_fireHeading = 0;
|
||||
m_movementTimer = 0;
|
||||
m_timerTimer = 0;
|
||||
m_attackTimer = 0;
|
||||
m_velocity = 0;
|
||||
m_extension = 0;
|
||||
m_rotation = 0;
|
||||
|
@ -622,6 +624,19 @@ void CNpcEnemy::shutdown()
|
|||
m_positionHistory = NULL;
|
||||
|
||||
delete m_actorGfx;
|
||||
|
||||
// remove child elements
|
||||
|
||||
CThing *List = this->getNext();
|
||||
|
||||
while ( List )
|
||||
{
|
||||
CThing *Next = List->getNext();
|
||||
List->shutdown();
|
||||
|
||||
List = Next;
|
||||
}
|
||||
|
||||
CEnemyThing::shutdown();
|
||||
|
||||
}
|
||||
|
@ -709,7 +724,7 @@ void CNpcEnemy::collidedWith( CThing *_thisThing )
|
|||
{
|
||||
case TYPE_PLAYER:
|
||||
{
|
||||
if ( m_controlFunc != NPC_CONTROL_COLLISION )
|
||||
if ( m_controlFunc != NPC_CONTROL_COLLISION && m_attackTimer == 0 )
|
||||
{
|
||||
// only detect collision if one isn't already happening
|
||||
|
||||
|
@ -1288,6 +1303,7 @@ void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 d
|
|||
void CNpcEnemy::hasBeenAttacked()
|
||||
{
|
||||
m_controlFunc = NPC_CONTROL_SHOT;
|
||||
m_state = NPC_GENERIC_HIT_CHECK_HEALTH;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1352,7 +1368,17 @@ void CNpcEnemy::processShot()
|
|||
{
|
||||
if ( !m_animPlaying )
|
||||
{
|
||||
this->shutdown();
|
||||
if ( m_data[m_type].respawning )
|
||||
{
|
||||
m_isActive = false;
|
||||
|
||||
m_timerFunc = NPC_TIMER_RESPAWN;
|
||||
m_timerTimer = 4 * GameState::getOneSecondInFrames();
|
||||
}
|
||||
else
|
||||
{
|
||||
shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -1512,10 +1538,12 @@ void CNpcEnemy::processCollision()
|
|||
{
|
||||
CPlayer *player = GameScene.getPlayer();
|
||||
|
||||
//player->takeDamage( m_data[m_type].damageToUserType );
|
||||
player->takeDamage( m_data[m_type].damageToUserType );
|
||||
|
||||
m_controlFunc = m_oldControlFunc;
|
||||
|
||||
m_attackTimer = GameState::getOneSecondInFrames();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1532,6 +1560,16 @@ void CNpcEnemy::processCollision()
|
|||
|
||||
void CNpcEnemy::processTimer(int _frames)
|
||||
{
|
||||
if ( m_attackTimer > 0 )
|
||||
{
|
||||
m_attackTimer -= _frames;
|
||||
|
||||
if ( m_attackTimer < 0 )
|
||||
{
|
||||
m_attackTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ( m_timerTimer > 0 )
|
||||
{
|
||||
m_timerTimer -= _frames;
|
||||
|
@ -1662,6 +1700,8 @@ bool CNpcEnemy::canBeCaughtByNet()
|
|||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CNpcEnemy::caughtWithNet()
|
||||
{
|
||||
if ( m_data[m_type].respawning )
|
||||
{
|
||||
if ( m_isActive )
|
||||
{
|
||||
|
@ -1671,3 +1711,8 @@ void CNpcEnemy::caughtWithNet()
|
|||
m_timerTimer = 4 * GameState::getOneSecondInFrames();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
shutdown();
|
||||
}
|
||||
}
|
|
@ -435,6 +435,7 @@ protected:
|
|||
u16 recoilAnim;
|
||||
NPC_COLLISION_FUNC collisionFunc;
|
||||
bool canBeNetted;
|
||||
bool respawning;
|
||||
}
|
||||
NPC_DATA;
|
||||
|
||||
|
@ -601,6 +602,7 @@ protected:
|
|||
bool m_reversed;
|
||||
s32 m_health;
|
||||
bool m_isActive;
|
||||
s32 m_attackTimer;
|
||||
|
||||
s32 m_frame;
|
||||
int m_animNo;
|
||||
|
|
|
@ -336,6 +336,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_FISH_HOOK
|
||||
|
@ -359,6 +360,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_DUST_DEVIL
|
||||
|
@ -382,6 +384,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_PENDULUM
|
||||
|
@ -405,6 +408,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_FIREBALL
|
||||
|
@ -428,6 +432,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SAW_BLADE
|
||||
|
@ -451,6 +456,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SMALL_JELLYFISH_1
|
||||
|
@ -465,7 +471,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__SHOCK_ENEMY,
|
||||
16,
|
||||
ANIM_JELLYFISH1_SWIM,
|
||||
|
@ -474,6 +480,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_JELLYFISH1_SWIM,
|
||||
NPC_COLLISION_GENERIC,
|
||||
true,
|
||||
true,
|
||||
},
|
||||
|
||||
{ // NPC_SMALL_JELLYFISH_2
|
||||
|
@ -488,7 +495,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__SHOCK_ENEMY,
|
||||
32,
|
||||
0,
|
||||
|
@ -497,6 +504,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
true,
|
||||
},
|
||||
|
||||
{ // NPC_ANEMONE_1
|
||||
|
@ -520,6 +528,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_ANEMONE_2
|
||||
|
@ -543,6 +552,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_ANEMONE_3
|
||||
|
@ -566,6 +576,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SKELETAL_FISH
|
||||
|
@ -580,7 +591,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
2048,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__BITE_ENEMY,
|
||||
0,
|
||||
ANIM_SKELETALFISH_SWIM,
|
||||
|
@ -589,6 +600,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_SKELETALFISH_GETHIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_CLAM_JUMP
|
||||
|
@ -603,7 +615,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
0,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
0,
|
||||
0,
|
||||
|
@ -612,6 +624,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_CLAM_STATIC
|
||||
|
@ -626,7 +639,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
0,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
0,
|
||||
0,
|
||||
|
@ -635,6 +648,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SQUID_DART
|
||||
|
@ -649,7 +663,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
5,
|
||||
256,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
16,
|
||||
ANIM_SQUIDDART_SWIM,
|
||||
|
@ -658,6 +672,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_FISH_FOLK
|
||||
|
@ -681,6 +696,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_PRICKLY_BUG
|
||||
|
@ -695,7 +711,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
1,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__POISON_ENEMY,
|
||||
48,
|
||||
ANIM_CATERPILLAR_CRAWL,
|
||||
|
@ -704,6 +720,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_CATERPILLAR_GETHIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SEA_SNAKE
|
||||
|
@ -718,7 +735,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
256,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__SHOCK_ENEMY,
|
||||
56,
|
||||
0,
|
||||
|
@ -727,6 +744,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_PUFFA_FISH
|
||||
|
@ -741,7 +759,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
2,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
64,
|
||||
ANIM_PUFFAFISH_SWIM,
|
||||
|
@ -750,6 +768,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_ANGLER_FISH
|
||||
|
@ -773,6 +792,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_HERMIT_CRAB
|
||||
|
@ -787,7 +807,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
2,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
32,
|
||||
ANIM_HERMITCRAB_SCUTTLE,
|
||||
|
@ -796,6 +816,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_HERMITCRAB_GETHIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_MINE
|
||||
|
@ -810,7 +831,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
0,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
0,
|
||||
0,
|
||||
|
@ -819,6 +840,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_BOOGER_MONSTER
|
||||
|
@ -833,7 +855,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
0,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__BITE_ENEMY,
|
||||
0,
|
||||
0,
|
||||
|
@ -842,6 +864,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SPIDER_CRAB
|
||||
|
@ -865,6 +888,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_SPIDERCRAB_HIT,
|
||||
NPC_COLLISION_SPIDER_CRAB_BITE,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_EYEBALL
|
||||
|
@ -888,6 +912,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_BABY_OCTOPUS
|
||||
|
@ -902,7 +927,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
2,
|
||||
512,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ATTACK_COLLISION_GENERIC,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
32,
|
||||
ANIM_BABYOCTOPUS_SWIM,
|
||||
|
@ -911,6 +936,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_BABYOCTOPUS_HIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_ZOMBIE_FISH_FOLK
|
||||
|
@ -925,7 +951,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
2,
|
||||
2048,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
16,
|
||||
0,
|
||||
|
@ -934,6 +960,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_NINJA_STARFISH
|
||||
|
@ -948,7 +975,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
64,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
16,
|
||||
0,
|
||||
|
@ -957,6 +984,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_GHOST
|
||||
|
@ -971,7 +999,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
2,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
0,
|
||||
ANIM_GHOST_MOVE,
|
||||
|
@ -980,6 +1008,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_GHOST_PIRATE
|
||||
|
@ -994,7 +1023,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
0,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
160,
|
||||
0,
|
||||
|
@ -1003,6 +1032,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_FLAMING_SKULL
|
||||
|
@ -1017,7 +1047,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__BURN_ENEMY,
|
||||
16,
|
||||
ANIM_FLAMINGSKULL_MOVE,
|
||||
|
@ -1026,6 +1056,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SHARK_MAN
|
||||
|
@ -1040,7 +1071,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
2048,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__BITE_ENEMY,
|
||||
16,
|
||||
ANIM_SHARKMAN_RUN,
|
||||
|
@ -1049,6 +1080,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_SHARKMAN_BLOCK,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_OIL_BLOB
|
||||
|
@ -1063,7 +1095,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
64,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
0,
|
||||
0,
|
||||
|
@ -1072,6 +1104,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SKULL_STOMPER
|
||||
|
@ -1086,7 +1119,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
5,
|
||||
2048,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__SQUASH_ENEMY,
|
||||
0,
|
||||
ANIM_STOMPER_CRUSH,
|
||||
|
@ -1095,6 +1128,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_MOTHER_JELLYFISH
|
||||
|
@ -1118,6 +1152,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SUB_SHARK
|
||||
|
@ -1141,6 +1176,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_PARASITIC_WORM
|
||||
|
@ -1164,6 +1200,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_FLYING_DUTCHMAN
|
||||
|
@ -1187,6 +1224,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_FLYINGDUTCHMAN_GETHIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_IRON_DOGFISH
|
||||
|
@ -1210,6 +1248,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
ANIM_IRONDOGFISH_GETHIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_PARASITIC_WORM_SEGMENT
|
||||
|
@ -1233,6 +1272,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_BALL_BLOB
|
||||
|
@ -1247,7 +1287,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
3,
|
||||
128,
|
||||
DETECT_NO_COLLISION,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__BURN_ENEMY,
|
||||
16,
|
||||
ANIM_BALLBLOB_WOBBLE,
|
||||
|
@ -1256,6 +1296,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
0,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -290,6 +290,7 @@ void CPlayerModeJellyLauncher::launchProjectile()
|
|||
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
|
||||
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
|
||||
5*60);
|
||||
projectile->setLayerCollision( m_player->getLayerCollision() );
|
||||
fireHeading+=512;
|
||||
m_player->useOneJelly();
|
||||
}
|
||||
|
@ -304,6 +305,7 @@ void CPlayerModeJellyLauncher::launchProjectile()
|
|||
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
|
||||
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
|
||||
5*60);
|
||||
projectile->setLayerCollision( m_player->getLayerCollision() );
|
||||
m_player->useOneJelly();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,6 +168,7 @@ void CPlayerModeNet::think()
|
|||
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
|
||||
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
|
||||
5*60);
|
||||
projectile->setLayerCollision( m_player->getLayerCollision() );
|
||||
|
||||
m_netState=NET_STATE__JUST_LAUNCHED_SOMETHING;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,10 @@
|
|||
#include "player\player.h"
|
||||
#endif
|
||||
|
||||
#ifndef __ENEMY_NPC_H__
|
||||
#include "enemy\npc.h"
|
||||
#endif
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
@ -356,6 +360,28 @@ void CProjectile::processEvent( GAME_EVENT evt, CThing *sourceThing )
|
|||
{
|
||||
}
|
||||
|
||||
void CProjectile::collidedWith(CThing *_thisThing)
|
||||
{
|
||||
switch(_thisThing->getThingType())
|
||||
{
|
||||
case TYPE_PLAYER:
|
||||
{
|
||||
CPlayer *player = (CPlayer *) _thisThing;
|
||||
|
||||
player->takeDamage( DAMAGE__HIT_ENEMY );
|
||||
|
||||
shutdown();
|
||||
delete this;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ASSERT(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
void CPlayerProjectile::init()
|
||||
|
@ -492,4 +518,23 @@ void CPlayerProjectile::processEvent( GAME_EVENT evt, CThing *sourceThing )
|
|||
{
|
||||
}
|
||||
|
||||
void CPlayerProjectile::collidedWith(CThing *_thisThing)
|
||||
{
|
||||
switch(_thisThing->getThingType())
|
||||
{
|
||||
case TYPE_ENEMY:
|
||||
{
|
||||
CNpcEnemy *enemy = (CNpcEnemy *) _thisThing;
|
||||
|
||||
enemy->hasBeenAttacked();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ASSERT(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -64,6 +64,7 @@ private:
|
|||
protected:
|
||||
DVECTOR getScreenOffset();
|
||||
bool processTargetSeek( int _frames, DVECTOR targetPos );
|
||||
void collidedWith( CThing *_thisThing );
|
||||
|
||||
class SpriteBank *m_spriteBank;
|
||||
DVECTOR m_initPos;
|
||||
|
@ -111,6 +112,7 @@ private:
|
|||
|
||||
protected:
|
||||
DVECTOR getScreenOffset();
|
||||
void collidedWith( CThing *_thisThing );
|
||||
|
||||
class SpriteBank *m_spriteBank;
|
||||
DVECTOR m_initPos;
|
||||
|
|
|
@ -198,6 +198,24 @@ void CThingManager::thinkAllThings(int _frames)
|
|||
thing1=thing1->m_nextThing;
|
||||
}
|
||||
|
||||
// Enemy -> Player projectile collision
|
||||
thing1=s_thingLists[CThing::TYPE_PLAYERPROJECTILE];
|
||||
thing2=s_thingLists[CThing::TYPE_ENEMY];
|
||||
while(thing1)
|
||||
{
|
||||
while(thing2)
|
||||
{
|
||||
if(thing1->canCollide()&&
|
||||
thing2->canCollide()&&
|
||||
thing1->checkCollisionAgainst(thing2, _frames))
|
||||
{
|
||||
thing1->collidedWith(thing2);
|
||||
}
|
||||
thing2=thing2->m_nextThing;
|
||||
}
|
||||
thing1=thing1->m_nextThing;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
|
Loading…
Add table
Reference in a new issue