This commit is contained in:
Charles 2001-04-05 20:44:30 +00:00
parent ace470e1c4
commit ef78241c95
6 changed files with 184 additions and 71 deletions

View file

@ -136,6 +136,8 @@ void CNpcEnemy::processCloseAnemone1Attack( int _frames )
m_controlFunc = NPC_CONTROL_MOVEMENT; m_controlFunc = NPC_CONTROL_MOVEMENT;
m_timerTimer = GameState::getOneSecondInFrames(); m_timerTimer = GameState::getOneSecondInFrames();
m_timerFunc = NPC_TIMER_ATTACK_DONE;
m_sensorFunc = NPC_SENSOR_NONE;
m_animPlaying = true; m_animPlaying = true;
m_animNo = ANIM_ANENOMELVL1_BEND; m_animNo = ANIM_ANENOMELVL1_BEND;

View file

@ -42,19 +42,4 @@ void CNpcEnemy::processCloseEyeballAttack( int _frames )
projectile->setState( CProjectile::PROJECTILE_ATTACK ); projectile->setState( CProjectile::PROJECTILE_ATTACK );
} }
} }
/*if ( Next )
{
// already have child, ignore
}
else
{
// create child projectile which will be deleted when the projectile has returned
CProjectile *projectile;
projectile = new ( "test projectile" ) CProjectile;
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
addChild( projectile );
}*/
} }

View file

@ -651,20 +651,39 @@ void CNpcEnemy::collidedWith( CThing *_thisThing )
{ {
case TYPE_PLAYER: case TYPE_PLAYER:
{ {
if ( m_data[m_type].detectCollision ) if ( m_controlFunc != NPC_CONTROL_COLLISION )
{ {
if ( m_data[m_type].damageToUserType == DAMAGE__NONE ) // only detect collision if one isn't already happening
{
// if we can detect a collision, but the collision does no damage, this must be a platform
CPlayer *player = (CPlayer *) _thisThing; switch( m_data[m_type].detectCollision )
player->setPlatform( this );
}
else
{ {
m_oldControlFunc = m_controlFunc; case DETECT_NO_COLLISION:
m_controlFunc = NPC_CONTROL_COLLISION; {
// ignore
break;
}
case DETECT_ALL_COLLISION:
{
m_oldControlFunc = m_controlFunc;
m_controlFunc = NPC_CONTROL_COLLISION;
break;
}
case DETECT_ATTACK_COLLISION_GENERIC:
{
if ( m_controlFunc == NPC_CONTROL_CLOSE )
{
// only detect collision if in attack mode
m_oldControlFunc = m_controlFunc;
m_controlFunc = NPC_CONTROL_COLLISION;
}
break;
}
} }
} }
@ -1423,11 +1442,26 @@ void CNpcEnemy::processClose(int _frames)
void CNpcEnemy::processCollision() void CNpcEnemy::processCollision()
{ {
CPlayer *player = GameScene.getPlayer(); switch( m_data[m_type].collisionFunc )
{
case NPC_COLLISION_GENERIC:
{
CPlayer *player = GameScene.getPlayer();
//player->takeDamage( m_data[m_type].damageToUserType ); //player->takeDamage( m_data[m_type].damageToUserType );
m_controlFunc = m_oldControlFunc; m_controlFunc = m_oldControlFunc;
break;
}
case NPC_COLLISION_SPIDER_CRAB_BITE:
{
processSpiderCrabCollision();
break;
}
}
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View file

@ -310,6 +310,12 @@ protected:
NPC_SHOT_GENERIC = 1, NPC_SHOT_GENERIC = 1,
}; };
enum NPC_COLLISION_FUNC
{
NPC_COLLISION_GENERIC = 0,
NPC_COLLISION_SPIDER_CRAB_BITE = 1,
};
enum NPC_MOTHER_JELLYFISH_STATE enum NPC_MOTHER_JELLYFISH_STATE
{ {
MOTHER_JELLYFISH_RETURN_TO_START_1 = 0, MOTHER_JELLYFISH_RETURN_TO_START_1 = 0,
@ -391,6 +397,13 @@ protected:
NPC_ENEMY_MAPEDIT_OFFSET = 10, NPC_ENEMY_MAPEDIT_OFFSET = 10,
}; };
enum DETECT_TYPE
{
DETECT_NO_COLLISION = 0,
DETECT_ALL_COLLISION = 1,
DETECT_ATTACK_COLLISION_GENERIC,
};
typedef struct NPC_DATA_TYPE typedef struct NPC_DATA_TYPE
{ {
@ -406,13 +419,14 @@ protected:
bool canTalk; bool canTalk;
u8 speed; u8 speed;
u16 turnSpeed; u16 turnSpeed;
bool detectCollision; DETECT_TYPE detectCollision;
DAMAGE_TYPE damageToUserType; DAMAGE_TYPE damageToUserType;
u16 initHealth; u16 initHealth;
u16 moveAnim; u16 moveAnim;
NPC_SHOT_FUNC shotFunc; NPC_SHOT_FUNC shotFunc;
u16 dieAnim; u16 dieAnim;
u16 recoilAnim; u16 recoilAnim;
NPC_COLLISION_FUNC collisionFunc;
} }
NPC_DATA; NPC_DATA;
@ -462,6 +476,7 @@ protected:
// spider crab functions // spider crab functions
void processCloseSpiderCrabAttack( int _frames ); void processCloseSpiderCrabAttack( int _frames );
void processSpiderCrabCollision();
// hermit crab functions // hermit crab functions

View file

@ -198,13 +198,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
8, 8,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__SQUASH_ENEMY, DAMAGE__SQUASH_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_FISH_HOOK { // NPC_FISH_HOOK
@ -219,13 +220,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_DUST_DEVIL { // NPC_DUST_DEVIL
@ -240,13 +242,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
0, 0,
ANIM_DUSTDEVIL_TWIST, ANIM_DUSTDEVIL_TWIST,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_PENDULUM { // NPC_PENDULUM
@ -261,13 +264,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_FIREBALL { // NPC_FIREBALL
@ -282,13 +286,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
40, 40,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__BURN_ENEMY, DAMAGE__BURN_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SAW_BLADE { // NPC_SAW_BLADE
@ -303,13 +308,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SMALL_JELLYFISH_1 { // NPC_SMALL_JELLYFISH_1
@ -324,13 +330,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__SHOCK_ENEMY, DAMAGE__SHOCK_ENEMY,
16, 16,
ANIM_JELLYFISH1_SWIM, ANIM_JELLYFISH1_SWIM,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
ANIM_JELLYFISH1_SWIM, ANIM_JELLYFISH1_SWIM,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SMALL_JELLYFISH_2 { // NPC_SMALL_JELLYFISH_2
@ -345,13 +352,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__SHOCK_ENEMY, DAMAGE__SHOCK_ENEMY,
32, 32,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_ANEMONE_1 { // NPC_ANEMONE_1
@ -366,13 +374,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
16, 16,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_ANEMONE_2 { // NPC_ANEMONE_2
@ -387,13 +396,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
32, 32,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_ANEMONE_3 { // NPC_ANEMONE_3
@ -408,13 +418,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
48, 48,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SKELETAL_FISH { // NPC_SKELETAL_FISH
@ -429,13 +440,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__BITE_ENEMY, DAMAGE__BITE_ENEMY,
0, 0,
ANIM_SKELETALFISH_SWIM, ANIM_SKELETALFISH_SWIM,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_SKELETALFISH_DIE, ANIM_SKELETALFISH_DIE,
ANIM_SKELETALFISH_GETHIT, ANIM_SKELETALFISH_GETHIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_CLAM_JUMP { // NPC_CLAM_JUMP
@ -450,13 +462,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_CLAM_STATIC { // NPC_CLAM_STATIC
@ -471,13 +484,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SQUID_DART { // NPC_SQUID_DART
@ -492,13 +506,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
5, 5,
256, 256,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
16, 16,
ANIM_SQUIDDART_SWIM, ANIM_SQUIDDART_SWIM,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_FISH_FOLK { // NPC_FISH_FOLK
@ -513,13 +528,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_PRICKLY_BUG { // NPC_PRICKLY_BUG
@ -534,13 +550,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
1, 1,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__POISON_ENEMY, DAMAGE__POISON_ENEMY,
48, 48,
ANIM_CATERPILLAR_CRAWL, ANIM_CATERPILLAR_CRAWL,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_CATERPILLAR_DIE, ANIM_CATERPILLAR_DIE,
ANIM_CATERPILLAR_GETHIT, ANIM_CATERPILLAR_GETHIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SEA_SNAKE { // NPC_SEA_SNAKE
@ -555,13 +572,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
256, 256,
false, DETECT_NO_COLLISION,
DAMAGE__SHOCK_ENEMY, DAMAGE__SHOCK_ENEMY,
56, 56,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_PUFFA_FISH { // NPC_PUFFA_FISH
@ -576,13 +594,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
64, 64,
ANIM_PUFFAFISH_SWIM, ANIM_PUFFAFISH_SWIM,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_ANGLER_FISH { // NPC_ANGLER_FISH
@ -597,13 +616,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
1, 1,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__NONE, DAMAGE__NONE,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_HERMIT_CRAB { // NPC_HERMIT_CRAB
@ -618,13 +638,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
32, 32,
ANIM_HERMITCRAB_SCUTTLE, ANIM_HERMITCRAB_SCUTTLE,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_HERMITCRAB_DIE, ANIM_HERMITCRAB_DIE,
ANIM_HERMITCRAB_GETHIT, ANIM_HERMITCRAB_GETHIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_MINE { // NPC_MINE
@ -639,13 +660,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_BOOGER_MONSTER { // NPC_BOOGER_MONSTER
@ -660,13 +682,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__BITE_ENEMY, DAMAGE__BITE_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SPIDER_CRAB { // NPC_SPIDER_CRAB
@ -681,13 +704,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__PINCH_ENEMY, DAMAGE__PINCH_ENEMY,
0, 0,
ANIM_SPIDERCRAB_RUN, ANIM_SPIDERCRAB_RUN,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_SPIDERCRAB_DIE, ANIM_SPIDERCRAB_DIE,
ANIM_SPIDERCRAB_HIT, ANIM_SPIDERCRAB_HIT,
NPC_COLLISION_SPIDER_CRAB_BITE,
}, },
{ // NPC_EYEBALL { // NPC_EYEBALL
@ -702,13 +726,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
32, 32,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_BABY_OCTOPUS { // NPC_BABY_OCTOPUS
@ -723,13 +748,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
512, 512,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
32, 32,
ANIM_BABYOCTOPUS_SWIM, ANIM_BABYOCTOPUS_SWIM,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_BABYOCTOPUS_DIE, ANIM_BABYOCTOPUS_DIE,
ANIM_BABYOCTOPUS_HIT, ANIM_BABYOCTOPUS_HIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_ZOMBIE_FISH_FOLK { // NPC_ZOMBIE_FISH_FOLK
@ -744,13 +770,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
16, 16,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_NINJA_STARFISH { // NPC_NINJA_STARFISH
@ -765,13 +792,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
64, 64,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
16, 16,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_GHOST { // NPC_GHOST
@ -786,13 +814,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
2, 2,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
ANIM_GHOST_MOVE, ANIM_GHOST_MOVE,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_GHOST_PIRATE { // NPC_GHOST_PIRATE
@ -807,13 +836,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
0, 0,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
160, 160,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_FLAMING_SKULL { // NPC_FLAMING_SKULL
@ -828,13 +858,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__BURN_ENEMY, DAMAGE__BURN_ENEMY,
16, 16,
ANIM_FLAMINGSKULL_MOVE, ANIM_FLAMINGSKULL_MOVE,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SHARK_MAN { // NPC_SHARK_MAN
@ -849,13 +880,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__BITE_ENEMY, DAMAGE__BITE_ENEMY,
16, 16,
ANIM_SHARKMAN_RUN, ANIM_SHARKMAN_RUN,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
ANIM_SHARKMAN_DIE, ANIM_SHARKMAN_DIE,
ANIM_SHARKMAN_BLOCK, ANIM_SHARKMAN_BLOCK,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_OIL_BLOB { // NPC_OIL_BLOB
@ -870,13 +902,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
64, 64,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
0, 0,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SKULL_STOMPER { // NPC_SKULL_STOMPER
@ -891,13 +924,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
5, 5,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__SQUASH_ENEMY, DAMAGE__SQUASH_ENEMY,
0, 0,
ANIM_STOMPER_CRUSH, ANIM_STOMPER_CRUSH,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_MOTHER_JELLYFISH { // NPC_MOTHER_JELLYFISH
@ -912,13 +946,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
256, 256,
false, DETECT_NO_COLLISION,
DAMAGE__SHOCK_ENEMY, DAMAGE__SHOCK_ENEMY,
256, 256,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_SUB_SHARK { // NPC_SUB_SHARK
@ -933,13 +968,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
256, 256,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_PARASITIC_WORM { // NPC_PARASITIC_WORM
@ -954,13 +990,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
256, 256,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_FLYING_DUTCHMAN { // NPC_FLYING_DUTCHMAN
@ -975,13 +1012,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
256, 256,
ANIM_FLYINGDUTCHMAN_FLY, ANIM_FLYINGDUTCHMAN_FLY,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
ANIM_FLYINGDUTCHMAN_GETHIT, ANIM_FLYINGDUTCHMAN_GETHIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_IRON_DOGFISH { // NPC_IRON_DOGFISH
@ -996,13 +1034,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
256, 256,
ANIM_IRONDOGFISH_WALK, ANIM_IRONDOGFISH_WALK,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
ANIM_IRONDOGFISH_GETHIT, ANIM_IRONDOGFISH_GETHIT,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_PARASITIC_WORM_SEGMENT { // NPC_PARASITIC_WORM_SEGMENT
@ -1017,13 +1056,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
2048, 2048,
false, DETECT_NO_COLLISION,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
256, 256,
0, 0,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
{ // NPC_BALL_BLOB { // NPC_BALL_BLOB
@ -1038,13 +1078,14 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false, false,
3, 3,
128, 128,
false, DETECT_NO_COLLISION,
DAMAGE__BURN_ENEMY, DAMAGE__BURN_ENEMY,
16, 16,
ANIM_BALLBLOB_WOBBLE, ANIM_BALLBLOB_WOBBLE,
NPC_SHOT_GENERIC, NPC_SHOT_GENERIC,
0, 0,
0, 0,
NPC_COLLISION_GENERIC,
}, },
}; };

View file

@ -111,3 +111,39 @@ void CNpcEnemy::processCloseSpiderCrabAttack( int _frames )
m_extension = 0; m_extension = 0;
} }
} }
void CNpcEnemy::processSpiderCrabCollision()
{
if ( m_oldControlFunc == NPC_CONTROL_CLOSE )
{
// bite player
if ( m_animNo != ANIM_SPIDERCRAB_BITE )
{
CPlayer *player = GameScene.getPlayer();
//player->takeDamage( m_data[m_type].damageToUserType );
m_animNo = ANIM_SPIDERCRAB_BITE;
m_animPlaying = true;
m_frame = 0;
}
else if ( !m_animPlaying )
{
m_controlFunc = NPC_CONTROL_MOVEMENT;
m_timerFunc = NPC_TIMER_ATTACK_DONE;
m_timerTimer = GameState::getOneSecondInFrames();
m_sensorFunc = NPC_SENSOR_NONE;
m_extension = 0;
}
}
else
{
CPlayer *player = GameScene.getPlayer();
//player->takeDamage( m_data[m_type].damageToUserType );
m_controlFunc = m_oldControlFunc;
}
}