diff --git a/makefile.gfx b/makefile.gfx index 2545f526f..d38599c7c 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -144,7 +144,7 @@ ACTOR_SPONGEBOB_OPTS := -t:24,1,1 -s:256 ACTOR_NPC := ACTOR_NPC_OPTS := -t:25,1,1 -s:256 -ACTOR_ENEMY := CLAM SHARKSUB +ACTOR_ENEMY := SHARKSUB CLAM ACTOR_ENEMY_OPTS := -t:12,4,1 -s:256 ACTORS_LIST := ACTOR_SPONGEBOB ACTOR_NPC ACTOR_ENEMY diff --git a/source/enemy/nclam.cpp b/source/enemy/nclam.cpp index 1d36b7470..213d158e4 100644 --- a/source/enemy/nclam.cpp +++ b/source/enemy/nclam.cpp @@ -23,6 +23,10 @@ #include "player\player.h" #endif +#ifndef __ANIM_CLAM_HEADER__ +#include +#endif + void CNpcEnemy::processCloseClamAttack( int _frames ) { @@ -42,6 +46,13 @@ void CNpcEnemy::processCloseClamAttack( int _frames ) Pos.vx += ( velocity * rcos( m_heading ) ) >> 12; Pos.vy += ( velocity * rsin( m_heading ) ) >> 12; + + if ( !m_animPlaying ) + { + m_animPlaying = true; + m_animNo = ANIM_CLAM_CLAMSIDESNAP; + m_frame = 0; + } } else { @@ -69,41 +80,17 @@ void CNpcEnemy::processCloseClamAttack( int _frames ) } else { - m_controlFunc = NPC_CONTROL_MOVEMENT; - m_timerFunc = NPC_TIMER_ATTACK_DONE; - m_timerTimer = GameState::getOneSecondInFrames(); - m_sensorFunc = NPC_SENSOR_NONE; + if ( !m_animPlaying ) + { + m_animPlaying = true; + m_animNo = ANIM_CLAM_CLAMSHUT; + m_frame = 0; + + m_controlFunc = NPC_CONTROL_MOVEMENT; + m_timerFunc = NPC_TIMER_ATTACK_DONE; + m_timerTimer = GameState::getOneSecondInFrames(); + m_sensorFunc = NPC_SENSOR_NONE; + } } } } - -void CNpcEnemy::processClamRetract( int _frames ) -{ - s32 velocity; - - // retract - - if ( m_extension > 0 ) - { - velocity = -_frames; - - if ( m_extension < _frames ) - { - velocity = m_extension - _frames; - } - - m_extension += velocity; - - - Pos.vx += ( velocity * rcos( m_heading ) ) >> 12; - Pos.vy += ( velocity * rsin( m_heading ) ) >> 12; - } - else - { - // halt clam - - m_controlFunc = NPC_CONTROL_NONE; - m_timerFunc = NPC_TIMER_NONE; - m_sensorFunc = NPC_SENSOR_NONE; - } -} \ No newline at end of file diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index 1140e557e..e98767050 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -206,24 +206,25 @@ void CNpcEnemy::init() { CEnemyThing::init(); - sActorHdr *Hdr=m_skel.Load(ACTORS_CLAM_A3D); - m_skel.Init(Hdr); - TPLoadTex(ACTORS_ACTOR_ENEMY_TEX); - m_skel.setAnimDatabase(CAnimDB::Load(ACTORS_CLAM_ABK)); + m_type = NPC_SUB_SHARK; + + sActorHdr *Hdr = m_skel.Load( m_data[m_type].skelType ); + m_skel.Init( Hdr ); + TPLoadTex( ACTORS_ACTOR_ENEMY_TEX ); + m_skel.setAnimDatabase( CAnimDB::Load( m_data[m_type].animData ) ); m_skel.setAng(1024); - // temporary - m_animNo = 0; + m_animPlaying = true; + m_animNo = m_data[m_type].initAnim; m_frame = 0; - m_type = NPC_CLAM; - m_heading = m_fireHeading = 0; m_movementTimer = 0; m_timerTimer = 0; m_velocity = 0; m_extension = 0; m_rotation = 0; + m_reversed = false; m_extension = EXTEND_RIGHT; @@ -459,6 +460,32 @@ void CNpcEnemy::think(int _frames) detectCollisionWithPlayer(); + if ( m_animPlaying ) + { + int frameCount = m_skel.getFrameCount(); + + if ( frameCount - m_frame > _frames ) + { + m_frame += _frames; + } + else + { + m_frame = frameCount; + m_animPlaying = false; + } + } + + if ( m_heading > 1024 && m_heading < 3072 ) + { + m_skel.setAng( 3072 ); + m_reversed = true; + } + else + { + m_skel.setAng( 1024 ); + m_reversed = false; + } + switch ( this->m_controlFunc ) { case NPC_CONTROL_NONE: @@ -1130,7 +1157,15 @@ void CNpcEnemy::render() renderPos.vx = ( Pos.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; renderPos.vy = ( Pos.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; - m_skel.setZAng( m_heading ); + if ( m_reversed ) + { + m_skel.setZAng( ( m_heading + 2048 ) & 4095 ); + } + else + { + m_skel.setZAng( m_heading ); + } + m_skel.setPos( renderPos ); m_skel.setFrame(m_frame); m_skel.setAnimNo(m_animNo); diff --git a/source/enemy/npc.h b/source/enemy/npc.h index 10edbce8c..9a37f0d41 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -321,6 +321,9 @@ protected: typedef struct NPC_DATA_TYPE { + FileEquate skelType; + FileEquate animData; + u16 initAnim; NPC_INIT_FUNC initFunc; NPC_SENSOR_FUNC sensorFunc; NPC_MOVEMENT_FUNC movementFunc; @@ -371,7 +374,6 @@ protected: // clam functions void processCloseClamAttack( int _frames ); - void processClamRetract( int _frames ); // spider crab functions @@ -472,6 +474,8 @@ protected: DVECTOR m_base; u8 m_state; u8 m_salvoCount; + bool m_animPlaying; + bool m_reversed; int m_frame; int m_animNo; diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index eb7e07cc3..d5b1c85de 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -19,6 +19,14 @@ #include "player\player.h" #endif +#ifndef __ANIM_CLAM_HEADER__ +#include +#endif + +#ifndef __ANIM_SHARKSUB_HEADER__ +#include +#endif + CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] = { @@ -54,6 +62,9 @@ CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] = CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = { { // NPC_FALLING_ITEM + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_FALLING_ITEM_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -68,6 +79,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FISH_HOOK + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FISH_HOOK, NPC_SENSOR_FISH_HOOK_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -82,6 +96,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_DUST_DEVIL + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_RETURNING_HAZARD, NPC_SENSOR_NONE, NPC_MOVEMENT_RETURNING_HAZARD, @@ -96,6 +113,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PENDULUM + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_PENDULUM, NPC_SENSOR_NONE, NPC_MOVEMENT_PENDULUM, @@ -110,6 +130,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FIREBALL + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FIREBALL, NPC_SENSOR_NONE, NPC_MOVEMENT_FIREBALL, @@ -124,6 +147,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SAW_BLADE + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_RETURNING_HAZARD, NPC_SENSOR_NONE, NPC_MOVEMENT_RETURNING_HAZARD, @@ -138,6 +164,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_LINEAR_PLATFORM + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -152,6 +181,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_CIRCULAR_PLATFORM + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_CIRCULAR_PLATFORM, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_CIRCULAR, @@ -166,6 +198,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SMALL_JELLYFISH_1 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, @@ -180,6 +215,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SMALL_JELLYFISH_2 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, @@ -194,6 +232,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_1 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -208,6 +249,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_2 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -222,6 +266,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_3 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -236,6 +283,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SKELETAL_FISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_MOVEMENT_FIXED_PATH, @@ -250,6 +300,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_CLAM + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_CLAM_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -264,6 +317,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SQUID_DART + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -278,6 +334,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FISH_FOLK + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FISH_FOLK, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -292,6 +351,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PRICKLY_BUG + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -306,6 +368,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SEA_SNAKE_1 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -320,6 +385,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SEA_SNAKE_2 + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -334,6 +402,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PUFFA_FISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -348,6 +419,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANGLER_FISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -362,6 +436,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_HERMIT_CRAB + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -376,6 +453,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_MINE + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_STATIC, @@ -390,6 +470,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_BOOGER_MONSTER + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -404,6 +487,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SPIDER_CRAB + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_SPIDER_CRAB_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -418,6 +504,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_EYEBALL + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_EYEBALL_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -432,6 +521,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_BABY_OCTOPUS + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -446,6 +538,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ZOMBIE_FISH_FOLK + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FISH_FOLK, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -460,6 +555,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_NINJA_STARFISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NINJA_STARFISH_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -474,6 +572,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_GHOST + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -488,6 +589,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_GHOST_PIRATE + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_GHOST_PIRATE, NPC_SENSOR_GHOST_PIRATE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -502,6 +606,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FLAMING_SKULL + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FLAMING_SKULL, NPC_SENSOR_FLAMING_SKULL_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -516,6 +623,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SHARK_MAN + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -530,6 +640,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_OIL_BLOB + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_DEFAULT, NPC_SENSOR_OIL_BLOB_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -544,6 +657,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SKULL_STOMPER + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_SKULL_STOMPER, NPC_SENSOR_SKULL_STOMPER_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -558,6 +674,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_MOTHER_JELLYFISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_MOTHER_JELLYFISH, NPC_SENSOR_NONE, NPC_MOVEMENT_MOTHER_JELLYFISH, @@ -572,6 +691,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SUB_SHARK + ACTORS_SHARKSUB_A3D, + ACTORS_SHARKSUB_ABK, + ANIM_SHARKSUB_SHARKSUBSWIM, NPC_INIT_SUB_SHARK, NPC_SENSOR_NONE, NPC_MOVEMENT_SUB_SHARK, @@ -580,12 +702,15 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_TIMER_NONE, false, 3, - 256, + 64, false, DAMAGE__HIT_ENEMY, }, { // NPC_FLYING_DUTCHMAN + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_FLYING_DUTCHMAN, NPC_SENSOR_NONE, NPC_MOVEMENT_FLYING_DUTCHMAN, @@ -600,6 +725,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_IRON_DOGFISH + ACTORS_CLAM_A3D, + ACTORS_CLAM_ABK, + ANIM_CLAM_CLAMSHUT, NPC_INIT_IRON_DOGFISH, NPC_SENSOR_IRON_DOGFISH_USER_CLOSE, NPC_MOVEMENT_IRON_DOGFISH, diff --git a/source/enemy/nsshark.cpp b/source/enemy/nsshark.cpp index 5d2d11072..e4f7b527f 100644 --- a/source/enemy/nsshark.cpp +++ b/source/enemy/nsshark.cpp @@ -27,8 +27,20 @@ #include "projectl\projectl.h" #endif +#ifndef __ANIM_SHARKSUB_HEADER__ +#include +#endif + + void CNpcEnemy::processSubSharkMovement( int _frames ) { + if ( !m_animPlaying ) + { + m_animPlaying = true; + m_animNo = ANIM_SHARKSUB_SHARKSUBSWIM; + m_frame = 0; + } + if ( m_timerTimer <= 0 ) { if ( m_salvoCount > 0 ) @@ -86,6 +98,13 @@ void CNpcEnemy::processSubSharkMovement( int _frames ) void CNpcEnemy::processCloseSubSharkAttack( int _frames ) { + if ( !m_animPlaying ) + { + m_animPlaying = true; + m_animNo = ANIM_SHARKSUB_SHARKSUBCHOMP; + m_frame = 0; + } + if ( playerXDist > 0 ) { m_extendDir = EXTEND_RIGHT;