This commit is contained in:
Charles 2001-02-28 21:05:39 +00:00
parent d96d66810b
commit a427c0efd8
6 changed files with 220 additions and 47 deletions

View file

@ -144,7 +144,7 @@ ACTOR_SPONGEBOB_OPTS := -t:24,1,1 -s:256
ACTOR_NPC := ACTOR_NPC :=
ACTOR_NPC_OPTS := -t:25,1,1 -s:256 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 ACTOR_ENEMY_OPTS := -t:12,4,1 -s:256
ACTORS_LIST := ACTOR_SPONGEBOB ACTOR_NPC ACTOR_ENEMY ACTORS_LIST := ACTOR_SPONGEBOB ACTOR_NPC ACTOR_ENEMY

View file

@ -23,6 +23,10 @@
#include "player\player.h" #include "player\player.h"
#endif #endif
#ifndef __ANIM_CLAM_HEADER__
#include <ACTOR_CLAM_ANIM.h>
#endif
void CNpcEnemy::processCloseClamAttack( int _frames ) void CNpcEnemy::processCloseClamAttack( int _frames )
{ {
@ -42,6 +46,13 @@ void CNpcEnemy::processCloseClamAttack( int _frames )
Pos.vx += ( velocity * rcos( m_heading ) ) >> 12; Pos.vx += ( velocity * rcos( m_heading ) ) >> 12;
Pos.vy += ( velocity * rsin( 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 else
{ {
@ -69,41 +80,17 @@ void CNpcEnemy::processCloseClamAttack( int _frames )
} }
else else
{ {
m_controlFunc = NPC_CONTROL_MOVEMENT; if ( !m_animPlaying )
m_timerFunc = NPC_TIMER_ATTACK_DONE; {
m_timerTimer = GameState::getOneSecondInFrames(); m_animPlaying = true;
m_sensorFunc = NPC_SENSOR_NONE; 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;
}
}

View file

@ -206,24 +206,25 @@ void CNpcEnemy::init()
{ {
CEnemyThing::init(); CEnemyThing::init();
sActorHdr *Hdr=m_skel.Load(ACTORS_CLAM_A3D); m_type = NPC_SUB_SHARK;
m_skel.Init(Hdr);
TPLoadTex(ACTORS_ACTOR_ENEMY_TEX); sActorHdr *Hdr = m_skel.Load( m_data[m_type].skelType );
m_skel.setAnimDatabase(CAnimDB::Load(ACTORS_CLAM_ABK)); m_skel.Init( Hdr );
TPLoadTex( ACTORS_ACTOR_ENEMY_TEX );
m_skel.setAnimDatabase( CAnimDB::Load( m_data[m_type].animData ) );
m_skel.setAng(1024); m_skel.setAng(1024);
// temporary m_animPlaying = true;
m_animNo = 0; m_animNo = m_data[m_type].initAnim;
m_frame = 0; m_frame = 0;
m_type = NPC_CLAM;
m_heading = m_fireHeading = 0; m_heading = m_fireHeading = 0;
m_movementTimer = 0; m_movementTimer = 0;
m_timerTimer = 0; m_timerTimer = 0;
m_velocity = 0; m_velocity = 0;
m_extension = 0; m_extension = 0;
m_rotation = 0; m_rotation = 0;
m_reversed = false;
m_extension = EXTEND_RIGHT; m_extension = EXTEND_RIGHT;
@ -459,6 +460,32 @@ void CNpcEnemy::think(int _frames)
detectCollisionWithPlayer(); 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 ) switch ( this->m_controlFunc )
{ {
case NPC_CONTROL_NONE: case NPC_CONTROL_NONE:
@ -1130,7 +1157,15 @@ void CNpcEnemy::render()
renderPos.vx = ( Pos.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; renderPos.vx = ( Pos.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20;
renderPos.vy = ( Pos.vy - offset.vy - ( VidGetScrH() >> 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.setPos( renderPos );
m_skel.setFrame(m_frame); m_skel.setFrame(m_frame);
m_skel.setAnimNo(m_animNo); m_skel.setAnimNo(m_animNo);

View file

@ -321,6 +321,9 @@ protected:
typedef struct NPC_DATA_TYPE typedef struct NPC_DATA_TYPE
{ {
FileEquate skelType;
FileEquate animData;
u16 initAnim;
NPC_INIT_FUNC initFunc; NPC_INIT_FUNC initFunc;
NPC_SENSOR_FUNC sensorFunc; NPC_SENSOR_FUNC sensorFunc;
NPC_MOVEMENT_FUNC movementFunc; NPC_MOVEMENT_FUNC movementFunc;
@ -371,7 +374,6 @@ protected:
// clam functions // clam functions
void processCloseClamAttack( int _frames ); void processCloseClamAttack( int _frames );
void processClamRetract( int _frames );
// spider crab functions // spider crab functions
@ -472,6 +474,8 @@ protected:
DVECTOR m_base; DVECTOR m_base;
u8 m_state; u8 m_state;
u8 m_salvoCount; u8 m_salvoCount;
bool m_animPlaying;
bool m_reversed;
int m_frame; int m_frame;
int m_animNo; int m_animNo;

View file

@ -19,6 +19,14 @@
#include "player\player.h" #include "player\player.h"
#endif #endif
#ifndef __ANIM_CLAM_HEADER__
#include <ACTOR_CLAM_ANIM.h>
#endif
#ifndef __ANIM_SHARKSUB_HEADER__
#include <ACTOR_SHARKSUB_ANIM.h>
#endif
CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] = 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] = CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
{ {
{ // NPC_FALLING_ITEM { // NPC_FALLING_ITEM
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_FALLING_ITEM_USER_CLOSE, NPC_SENSOR_FALLING_ITEM_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -68,6 +79,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_FISH_HOOK { // NPC_FISH_HOOK
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FISH_HOOK, NPC_INIT_FISH_HOOK,
NPC_SENSOR_FISH_HOOK_USER_CLOSE, NPC_SENSOR_FISH_HOOK_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -82,6 +96,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_DUST_DEVIL { // NPC_DUST_DEVIL
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_RETURNING_HAZARD, NPC_INIT_RETURNING_HAZARD,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_RETURNING_HAZARD, NPC_MOVEMENT_RETURNING_HAZARD,
@ -96,6 +113,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_PENDULUM { // NPC_PENDULUM
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_PENDULUM, NPC_INIT_PENDULUM,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_PENDULUM, NPC_MOVEMENT_PENDULUM,
@ -110,6 +130,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_FIREBALL { // NPC_FIREBALL
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FIREBALL, NPC_INIT_FIREBALL,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIREBALL, NPC_MOVEMENT_FIREBALL,
@ -124,6 +147,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SAW_BLADE { // NPC_SAW_BLADE
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_RETURNING_HAZARD, NPC_INIT_RETURNING_HAZARD,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_RETURNING_HAZARD, NPC_MOVEMENT_RETURNING_HAZARD,
@ -138,6 +164,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_LINEAR_PLATFORM { // NPC_LINEAR_PLATFORM
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -152,6 +181,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_CIRCULAR_PLATFORM { // NPC_CIRCULAR_PLATFORM
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_CIRCULAR_PLATFORM, NPC_INIT_CIRCULAR_PLATFORM,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_CIRCULAR, NPC_MOVEMENT_FIXED_CIRCULAR,
@ -166,6 +198,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SMALL_JELLYFISH_1 { // NPC_SMALL_JELLYFISH_1
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_SENSOR_JELLYFISH_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -180,6 +215,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SMALL_JELLYFISH_2 { // NPC_SMALL_JELLYFISH_2
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_SENSOR_JELLYFISH_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -194,6 +232,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_ANEMONE_1 { // NPC_ANEMONE_1
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_SENSOR_ANEMONE_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -208,6 +249,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_ANEMONE_2 { // NPC_ANEMONE_2
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_SENSOR_ANEMONE_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -222,6 +266,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_ANEMONE_3 { // NPC_ANEMONE_3
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_SENSOR_ANEMONE_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -236,6 +283,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SKELETAL_FISH { // NPC_SKELETAL_FISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_SENSOR_GENERIC_USER_VISIBLE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -250,6 +300,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_CLAM { // NPC_CLAM
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_CLAM_USER_CLOSE, NPC_SENSOR_CLAM_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -264,6 +317,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SQUID_DART { // NPC_SQUID_DART
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -278,6 +334,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_FISH_FOLK { // NPC_FISH_FOLK
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FISH_FOLK, NPC_INIT_FISH_FOLK,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -292,6 +351,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_PRICKLY_BUG { // NPC_PRICKLY_BUG
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -306,6 +368,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SEA_SNAKE_1 { // NPC_SEA_SNAKE_1
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -320,6 +385,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SEA_SNAKE_2 { // NPC_SEA_SNAKE_2
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -334,6 +402,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_PUFFA_FISH { // NPC_PUFFA_FISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -348,6 +419,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_ANGLER_FISH { // NPC_ANGLER_FISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -362,6 +436,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_HERMIT_CRAB { // NPC_HERMIT_CRAB
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -376,6 +453,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_MINE { // NPC_MINE
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -390,6 +470,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_BOOGER_MONSTER { // NPC_BOOGER_MONSTER
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE, NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -404,6 +487,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SPIDER_CRAB { // NPC_SPIDER_CRAB
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE, NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -418,6 +504,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_EYEBALL { // NPC_EYEBALL
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_EYEBALL_USER_CLOSE, NPC_SENSOR_EYEBALL_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -432,6 +521,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_BABY_OCTOPUS { // NPC_BABY_OCTOPUS
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -446,6 +538,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_ZOMBIE_FISH_FOLK { // NPC_ZOMBIE_FISH_FOLK
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FISH_FOLK, NPC_INIT_FISH_FOLK,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -460,6 +555,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_NINJA_STARFISH { // NPC_NINJA_STARFISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NINJA_STARFISH_USER_CLOSE, NPC_SENSOR_NINJA_STARFISH_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -474,6 +572,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_GHOST { // NPC_GHOST
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH, NPC_MOVEMENT_FIXED_PATH,
@ -488,6 +589,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_GHOST_PIRATE { // NPC_GHOST_PIRATE
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_GHOST_PIRATE, NPC_INIT_GHOST_PIRATE,
NPC_SENSOR_GHOST_PIRATE_USER_CLOSE, NPC_SENSOR_GHOST_PIRATE_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -502,6 +606,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_FLAMING_SKULL { // NPC_FLAMING_SKULL
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FLAMING_SKULL, NPC_INIT_FLAMING_SKULL,
NPC_SENSOR_FLAMING_SKULL_USER_CLOSE, NPC_SENSOR_FLAMING_SKULL_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -516,6 +623,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SHARK_MAN { // NPC_SHARK_MAN
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_SENSOR_GENERIC_USER_VISIBLE,
NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_FIXED_PATH_WALK,
@ -530,6 +640,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_OIL_BLOB { // NPC_OIL_BLOB
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_DEFAULT, NPC_INIT_DEFAULT,
NPC_SENSOR_OIL_BLOB_USER_CLOSE, NPC_SENSOR_OIL_BLOB_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -544,6 +657,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SKULL_STOMPER { // NPC_SKULL_STOMPER
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_SKULL_STOMPER, NPC_INIT_SKULL_STOMPER,
NPC_SENSOR_SKULL_STOMPER_USER_CLOSE, NPC_SENSOR_SKULL_STOMPER_USER_CLOSE,
NPC_MOVEMENT_STATIC, NPC_MOVEMENT_STATIC,
@ -558,6 +674,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_MOTHER_JELLYFISH { // NPC_MOTHER_JELLYFISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_MOTHER_JELLYFISH, NPC_INIT_MOTHER_JELLYFISH,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_MOTHER_JELLYFISH, NPC_MOVEMENT_MOTHER_JELLYFISH,
@ -572,6 +691,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_SUB_SHARK { // NPC_SUB_SHARK
ACTORS_SHARKSUB_A3D,
ACTORS_SHARKSUB_ABK,
ANIM_SHARKSUB_SHARKSUBSWIM,
NPC_INIT_SUB_SHARK, NPC_INIT_SUB_SHARK,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_SUB_SHARK, NPC_MOVEMENT_SUB_SHARK,
@ -580,12 +702,15 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_TIMER_NONE, NPC_TIMER_NONE,
false, false,
3, 3,
256, 64,
false, false,
DAMAGE__HIT_ENEMY, DAMAGE__HIT_ENEMY,
}, },
{ // NPC_FLYING_DUTCHMAN { // NPC_FLYING_DUTCHMAN
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_FLYING_DUTCHMAN, NPC_INIT_FLYING_DUTCHMAN,
NPC_SENSOR_NONE, NPC_SENSOR_NONE,
NPC_MOVEMENT_FLYING_DUTCHMAN, NPC_MOVEMENT_FLYING_DUTCHMAN,
@ -600,6 +725,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
}, },
{ // NPC_IRON_DOGFISH { // NPC_IRON_DOGFISH
ACTORS_CLAM_A3D,
ACTORS_CLAM_ABK,
ANIM_CLAM_CLAMSHUT,
NPC_INIT_IRON_DOGFISH, NPC_INIT_IRON_DOGFISH,
NPC_SENSOR_IRON_DOGFISH_USER_CLOSE, NPC_SENSOR_IRON_DOGFISH_USER_CLOSE,
NPC_MOVEMENT_IRON_DOGFISH, NPC_MOVEMENT_IRON_DOGFISH,

View file

@ -27,8 +27,20 @@
#include "projectl\projectl.h" #include "projectl\projectl.h"
#endif #endif
#ifndef __ANIM_SHARKSUB_HEADER__
#include <ACTOR_SHARKSUB_ANIM.h>
#endif
void CNpcEnemy::processSubSharkMovement( int _frames ) 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_timerTimer <= 0 )
{ {
if ( m_salvoCount > 0 ) if ( m_salvoCount > 0 )
@ -86,6 +98,13 @@ void CNpcEnemy::processSubSharkMovement( int _frames )
void CNpcEnemy::processCloseSubSharkAttack( int _frames ) void CNpcEnemy::processCloseSubSharkAttack( int _frames )
{ {
if ( !m_animPlaying )
{
m_animPlaying = true;
m_animNo = ANIM_SHARKSUB_SHARKSUBCHOMP;
m_frame = 0;
}
if ( playerXDist > 0 ) if ( playerXDist > 0 )
{ {
m_extendDir = EXTEND_RIGHT; m_extendDir = EXTEND_RIGHT;