diff --git a/Graphics/characters/HermitCrab/AnimList.Txt b/Graphics/characters/HermitCrab/AnimList.Txt index 873d336ad..4d602c748 100644 --- a/Graphics/characters/HermitCrab/AnimList.Txt +++ b/Graphics/characters/HermitCrab/AnimList.Txt @@ -1,4 +1,4 @@ -# die +die idle # jumpend # jumpstart diff --git a/source/enemy/nclam.cpp b/source/enemy/nclam.cpp index df8b6e4d2..c5790b7d0 100644 --- a/source/enemy/nclam.cpp +++ b/source/enemy/nclam.cpp @@ -305,7 +305,7 @@ s32 CNpcStaticClamEnemy::getFrameShift( int _frames ) void CNpcStaticClamEnemy::processAnimFrames( int _frames ) { - if ( m_animPlaying && !m_isDying ) + if ( m_animPlaying && ( ( m_isDying && m_data[m_type].playDeathAnim ) || !m_isDying ) ) { s32 frameCount; diff --git a/source/enemy/nhcrab.cpp b/source/enemy/nhcrab.cpp index 65037870a..427427094 100644 --- a/source/enemy/nhcrab.cpp +++ b/source/enemy/nhcrab.cpp @@ -274,101 +274,3 @@ void CNpcHermitCrabEnemy::processMovementModifier( int _frames, s32 distX, s32 d CSoundMediator::playSfx( CSoundMediator::SFX_HERMIT_CRAB_MOVE ); } - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -void CNpcHermitCrabEnemy::processShot( int _frames ) -{ - switch ( m_state ) - { - case NPC_GENERIC_HIT_CHECK_HEALTH: - { - m_health -= 5; - - if ( m_health < 0 ) - { - m_state = NPC_GENERIC_HIT_DEATH_START; - - m_animPlaying = true; - m_animNo = m_data[m_type].dieAnim; - m_frame = 0; - } - 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: - { - if ( !m_animPlaying ) - { - m_state = NPC_GENERIC_HIT_DEATH_END; - - if ( m_data[m_type].deathSfx < CSoundMediator::NUM_SFXIDS ) - { - CSoundMediator::playSfx( m_data[m_type].deathSfx ); - } - - 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; - } - } -} diff --git a/source/enemy/nhcrab.h b/source/enemy/nhcrab.h index ac73e74d7..771648cb9 100644 --- a/source/enemy/nhcrab.h +++ b/source/enemy/nhcrab.h @@ -25,7 +25,6 @@ public: protected: virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ); virtual bool processSensor(); - virtual void processShot( int _frames ); virtual void processClose( int _frames ); s32 m_jumpBase; diff --git a/source/enemy/npbug.cpp b/source/enemy/npbug.cpp index 837100aed..467660b59 100644 --- a/source/enemy/npbug.cpp +++ b/source/enemy/npbug.cpp @@ -55,101 +55,3 @@ void CNpcPricklyBugEnemy::processMovementModifier( int _frames, s32 distX, s32 d //CSoundMediator::playSfx( CSoundMediator::SFX_PRICKLY_BUG_MOVE ); } - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -void CNpcPricklyBugEnemy::processShot( int _frames ) -{ - switch ( m_state ) - { - case NPC_GENERIC_HIT_CHECK_HEALTH: - { - m_health -= 5; - - if ( m_health < 0 ) - { - m_state = NPC_GENERIC_HIT_DEATH_START; - - m_animPlaying = true; - m_animNo = m_data[m_type].dieAnim; - m_frame = 0; - } - 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: - { - if ( !m_animPlaying ) - { - m_state = NPC_GENERIC_HIT_DEATH_END; - - if ( m_data[m_type].deathSfx < CSoundMediator::NUM_SFXIDS ) - { - CSoundMediator::playSfx( m_data[m_type].deathSfx ); - } - - 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; - } - } -} diff --git a/source/enemy/npbug.h b/source/enemy/npbug.h index 20b15921f..fbf93d277 100644 --- a/source/enemy/npbug.h +++ b/source/enemy/npbug.h @@ -22,7 +22,6 @@ class CNpcPricklyBugEnemy : public CNpcEnemy { protected: virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ); - virtual void processShot( int _frames ); }; #endif diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index d62133560..d4b63819d 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -649,7 +649,7 @@ s32 CNpcEnemy::getFrameShift( int _frames ) void CNpcEnemy::processAnimFrames( int _frames ) { - if ( m_animPlaying && !m_isDying ) + if ( m_animPlaying && ( ( m_isDying && m_data[m_type].playDeathAnim ) || !m_isDying ) ) { s32 frameCount; @@ -1058,8 +1058,11 @@ void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 d u8 CNpcEnemy::hasBeenAttacked() { - m_controlFunc = NPC_CONTROL_SHOT; - m_state = NPC_GENERIC_HIT_CHECK_HEALTH; + if ( m_controlFunc != NPC_CONTROL_SHOT ) + { + m_controlFunc = NPC_CONTROL_SHOT; + m_state = NPC_GENERIC_HIT_CHECK_HEALTH; + } return( true ); } @@ -1088,6 +1091,7 @@ void CNpcEnemy::processShot( int _frames ) if ( m_health < 0 ) { m_state = NPC_GENERIC_HIT_DEATH_START; + m_isDying = true; } else { @@ -1118,13 +1122,13 @@ void CNpcEnemy::processShot( int _frames ) m_animNo = m_data[m_type].dieAnim; m_frame = 0; m_state = NPC_GENERIC_HIT_DEATH_END; + m_isDying = true; if ( m_data[m_type].deathSfx < CSoundMediator::NUM_SFXIDS ) { CSoundMediator::playSfx( m_data[m_type].deathSfx ); } - m_isDying = true; m_speed = -5; if (m_data[m_type].skelType) diff --git a/source/enemy/npc.h b/source/enemy/npc.h index 9ebd687e6..8576b5500 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -235,6 +235,7 @@ protected: u8 canCollideWithEnemy; CSoundMediator::SFXID deathSfx; CSoundMediator::SFXID moveSfx; + u8 playDeathAnim; } NPC_DATA; diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index 00602d165..f792566da 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -136,6 +136,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SMALL_JELLYFISH_1 @@ -161,6 +162,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SMALL_JELLYFISH_2 @@ -186,6 +188,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_ANEMONE_1 @@ -211,6 +214,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_ANEMONE_DEFEATED_LEVEL1, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_ANEMONE_2 @@ -236,6 +240,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_ANEMONE_DEFEATED_LEVEL2, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_ANEMONE_3 @@ -261,6 +266,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_ANEMONE_DEFEATED_LEVEL3, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SKELETAL_FISH @@ -286,6 +292,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_CLAM_JUMP @@ -311,6 +318,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_CLAM_DEFEATED, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_CLAM_STATIC @@ -336,6 +344,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SQUID_DART @@ -361,6 +370,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_SQUIDDART_DEFEATED, CSoundMediator::SFX_SQUIDDART_MOVE, + false, }, { // NPC_FISH_FOLK @@ -386,6 +396,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_PRICKLY_BUG @@ -412,6 +423,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = CSoundMediator::SFX_PRICKLY_BUG_DEFEATED, //CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_PRICKLY_BUG_MOVE, + true, }, { // NPC_SEA_SNAKE @@ -437,6 +449,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_SEASNAKE_MOVE, + false, }, { // NPC_PUFFA_FISH @@ -462,6 +475,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_PUFFAFISH_MOVE, + false, }, { // NPC_ANGLER_FISH @@ -487,6 +501,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_ANGLER_FISH_MOVE, + false, }, { // NPC_HERMIT_CRAB @@ -504,7 +519,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 1, ANIM_HERMITCRAB_SCUTTLE, NPC_SHOT_GENERIC, - 0, + ANIM_HERMITCRAB_DIE, 0, false, false, @@ -512,6 +527,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + true, }, { // NPC_MINE @@ -537,6 +553,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_HAZARD__MINE, + false, }, { // NPC_BOOGER_MONSTER @@ -562,6 +579,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SPIDER_CRAB @@ -587,6 +605,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_SPIDERCRAB_MOVE, + false, }, { // NPC_SPIDER_CRAB_SPAWNER @@ -612,6 +631,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_EYEBALL @@ -637,6 +657,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_BABY_OCTOPUS @@ -654,7 +675,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 1, ANIM_BABYOCTOPUS_SWIM, NPC_SHOT_GENERIC, - 0, + ANIM_BABYOCTOPUS_DIE, 0, false, false, @@ -662,6 +683,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + true, }, { // NPC_ZOMBIE_FISH_FOLK @@ -687,6 +709,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_NINJA_STARFISH @@ -712,6 +735,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_GHOST @@ -737,6 +761,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_GHOST, + false, }, { // NPC_GHOST_PIRATE @@ -762,6 +787,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_FLAMING_SKULL @@ -787,6 +813,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::SFX_FLAMING_SKULL_DEFEATED, CSoundMediator::SFX_FLAMING_SKULL_MOVE, + false, }, { // NPC_SHARK_MAN @@ -812,6 +839,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_OIL_BLOB @@ -837,6 +865,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SKULL_STOMPER @@ -862,6 +891,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_MOTHER_JELLYFISH @@ -887,6 +917,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::SFX_JELLYFISH_DEFEATED, CSoundMediator::SFX_JELLYFISH_MOVE, + false, }, { // NPC_SUB_SHARK @@ -912,6 +943,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_PARASITIC_WORM @@ -937,6 +969,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_FLYING_DUTCHMAN @@ -962,6 +995,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_IRON_DOGFISH @@ -987,6 +1021,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_PARASITIC_WORM_SEGMENT @@ -1012,6 +1047,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_BALL_BLOB @@ -1037,6 +1073,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, CSoundMediator::NUM_SFXIDS, CSoundMediator::SFX_BALL_BLOB_MOVE, + false, }, { // NPC_SHELL @@ -1062,6 +1099,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_PROJECTILE_JELLYFISH @@ -1087,6 +1125,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_MOTHER_JELLYFISH_BACKGROUND @@ -1112,6 +1151,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SMALL_JELLYFISH_BACKGROUND @@ -1137,6 +1177,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_SMALL_JELLYFISH_2_BACKGROUND @@ -1162,6 +1203,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, { // NPC_BUTTERFLY_BACKGROUND @@ -1187,6 +1229,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, CSoundMediator::NUM_SFXIDS, CSoundMediator::NUM_SFXIDS, + false, }, };