This commit is contained in:
Charles 2001-03-05 21:11:51 +00:00
parent 4eef48176b
commit 93c3ae5e34
5 changed files with 60 additions and 31 deletions

View file

@ -453,8 +453,6 @@ void CNpcEnemy::think(int _frames)
playerXDistSqr = playerXDist * playerXDist; playerXDistSqr = playerXDist * playerXDist;
playerYDistSqr = playerYDist * playerYDist; playerYDistSqr = playerYDist * playerYDist;
detectCollisionWithPlayer();
if ( m_animPlaying ) if ( m_animPlaying )
{ {
int frameCount = m_skel.getFrameCount(); int frameCount = m_skel.getFrameCount();
@ -519,14 +517,24 @@ void CNpcEnemy::think(int _frames)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcEnemy::detectCollisionWithPlayer() void CNpcEnemy::collidedWith( CThing *_thisThing )
{ {
if ( m_data[m_type].detectCollision && playerXDistSqr + playerYDistSqr < 400 ) switch(_thisThing->getThingType())
{ {
// close enough for collision case TYPE_PLAYER:
{
if ( m_data[m_type].detectCollision )
{
m_oldControlFunc = m_controlFunc;
m_controlFunc = NPC_CONTROL_COLLISION;
}
m_oldControlFunc = m_controlFunc; break;
m_controlFunc = NPC_CONTROL_COLLISION; }
default:
ASSERT(0);
break;
} }
} }

View file

@ -350,7 +350,6 @@ protected:
void processClose( int _frames ); void processClose( int _frames );
void processCollision(); void processCollision();
void processTimer( int _frames ); void processTimer( int _frames );
void detectCollisionWithPlayer();
bool isCollisionWithGround(); bool isCollisionWithGround();
void processGenericGotoTarget( int _frames, s32 xDist, s32 yDist, s32 speed ); void processGenericGotoTarget( int _frames, s32 xDist, s32 yDist, s32 speed );
@ -485,6 +484,8 @@ protected:
int m_animNo; int m_animNo;
CSkel m_skel; CSkel m_skel;
TPAGE_DESC m_actorTPage; TPAGE_DESC m_actorTPage;
virtual void collidedWith(CThing *_thisThing);
}; };

View file

@ -74,7 +74,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
8, 8,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SQUASH_ENEMY,
}, },
{ // NPC_FISH_HOOK { // NPC_FISH_HOOK
@ -90,7 +90,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_DUST_DEVIL { // NPC_DUST_DEVIL
@ -106,7 +106,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_PENDULUM { // NPC_PENDULUM
@ -138,7 +138,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
40, 40,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__BURN_ENEMY,
}, },
{ // NPC_SAW_BLADE { // NPC_SAW_BLADE
@ -170,7 +170,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_CIRCULAR_PLATFORM { // NPC_CIRCULAR_PLATFORM
@ -186,7 +186,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_SMALL_JELLYFISH_1 { // NPC_SMALL_JELLYFISH_1
@ -202,7 +202,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SHOCK_ENEMY,
}, },
{ // NPC_SMALL_JELLYFISH_2 { // NPC_SMALL_JELLYFISH_2
@ -218,7 +218,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SHOCK_ENEMY,
}, },
{ // NPC_ANEMONE_1 { // NPC_ANEMONE_1
@ -234,7 +234,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0, 0,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_ANEMONE_2 { // NPC_ANEMONE_2
@ -250,7 +250,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0, 0,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_ANEMONE_3 { // NPC_ANEMONE_3
@ -266,7 +266,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0, 0,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_SKELETAL_FISH { // NPC_SKELETAL_FISH
@ -282,7 +282,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__BITE_ENEMY,
}, },
{ // NPC_CLAM_JUMP { // NPC_CLAM_JUMP
@ -346,7 +346,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
2, 2,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_PRICKLY_BUG { // NPC_PRICKLY_BUG
@ -362,7 +362,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
1, 1,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__POISON_ENEMY,
}, },
{ // NPC_SEA_SNAKE_1 { // NPC_SEA_SNAKE_1
@ -378,7 +378,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
256, 256,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SHOCK_ENEMY,
}, },
{ // NPC_SEA_SNAKE_2 { // NPC_SEA_SNAKE_2
@ -394,7 +394,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
256, 256,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SHOCK_ENEMY,
}, },
{ // NPC_PUFFA_FISH { // NPC_PUFFA_FISH
@ -426,7 +426,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
1, 1,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__NONE,
}, },
{ // NPC_HERMIT_CRAB { // NPC_HERMIT_CRAB
@ -474,7 +474,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0, 0,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__BITE_ENEMY,
}, },
{ // NPC_SPIDER_CRAB { // NPC_SPIDER_CRAB
@ -490,7 +490,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__PINCH_ENEMY,
}, },
{ // NPC_EYEBALL { // NPC_EYEBALL
@ -602,7 +602,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
128, 128,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__BURN_ENEMY,
}, },
{ // NPC_SHARK_MAN { // NPC_SHARK_MAN
@ -618,7 +618,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__BITE_ENEMY,
}, },
{ // NPC_OIL_BLOB { // NPC_OIL_BLOB
@ -650,7 +650,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
5, 5,
2048, 2048,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SQUASH_ENEMY,
}, },
{ // NPC_MOTHER_JELLYFISH { // NPC_MOTHER_JELLYFISH
@ -666,7 +666,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
3, 3,
256, 256,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__SHOCK_ENEMY,
}, },
{ // NPC_SUB_SHARK { // NPC_SUB_SHARK

View file

@ -1173,9 +1173,20 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage)
// Check if we are currently immune to this damage type // Check if we are currently immune to this damage type
switch(_damage) switch(_damage)
{ {
case DAMAGE__NONE:
break;
case DAMAGE__FALL: case DAMAGE__FALL:
case DAMAGE__LAVA: case DAMAGE__LAVA:
case DAMAGE__HIT_ENEMY: case DAMAGE__HIT_ENEMY:
case DAMAGE__SHOCK_ENEMY:
case DAMAGE__GAS_ENEMY:
case DAMAGE__POISON_ENEMY:
case DAMAGE__SWALLOW_ENEMY:
case DAMAGE__PINCH_ENEMY:
case DAMAGE__SQUASH_ENEMY:
case DAMAGE__BURN_ENEMY:
case DAMAGE__BITE_ENEMY:
break; break;
case DAMAGE__ELECTROCUTION: case DAMAGE__ELECTROCUTION:

View file

@ -106,10 +106,19 @@ typedef enum
typedef enum typedef enum
{ {
DAMAGE__NONE, // put in so that an item can push the user but not damage them
DAMAGE__FALL, DAMAGE__FALL,
DAMAGE__ELECTROCUTION, DAMAGE__ELECTROCUTION,
DAMAGE__LAVA, DAMAGE__LAVA,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
DAMAGE__SHOCK_ENEMY,
DAMAGE__GAS_ENEMY,
DAMAGE__POISON_ENEMY,
DAMAGE__SWALLOW_ENEMY,
DAMAGE__PINCH_ENEMY,
DAMAGE__SQUASH_ENEMY,
DAMAGE__BURN_ENEMY,
DAMAGE__BITE_ENEMY,
}DAMAGE_TYPE; }DAMAGE_TYPE;