This commit is contained in:
Charles 2001-04-20 14:48:15 +00:00
parent 265bb99546
commit cb014a96f2
20 changed files with 513 additions and 379 deletions

View File

@ -67,7 +67,7 @@ bool CNpcAnemoneEnemy::processSensor()
}
}
void CNpcEnemy::processCloseAnemone1Attack( int _frames )
void CNpcAnemone1Enemy::processClose( int _frames )
{
s32 moveX, moveY;
s16 decDir, incDir, moveDist;
@ -194,7 +194,7 @@ void CNpcEnemy::processCloseAnemone1Attack( int _frames )
}
}
void CNpcEnemy::processCloseAnemone2Attack( int _frames )
void CNpcAnemone2Enemy::processClose( int _frames )
{
int fireLoop;
CProjectile *projectile;
@ -260,7 +260,7 @@ void CNpcEnemy::processCloseAnemone2Attack( int _frames )
}
}
void CNpcEnemy::processCloseAnemone3Attack( int _frames )
void CNpcAnemone3Enemy::processClose( int _frames )
{
if ( m_animNo != ANIM_ANENOMELVL3_FIRE )
{

View File

@ -26,14 +26,20 @@ protected:
class CNpcAnemone1Enemy : public CNpcAnemoneEnemy
{
protected:
virtual void processClose( int _frames );
};
class CNpcAnemone2Enemy : public CNpcAnemoneEnemy
{
protected:
virtual void processClose( int _frames );
};
class CNpcAnemone3Enemy : public CNpcAnemoneEnemy
{
protected:
virtual void processClose( int _frames );
};
#endif

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NBBLOB_H__
#include "enemy\nbblob.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -23,8 +27,11 @@
#include <ACTOR_BALLBLOB_ANIM.h>
#endif
void CNpcEnemy::processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY )
void CNpcBallBlobEnemy::processMovement( int _frames )
{
s32 moveX = 0, moveY = 0;
s32 moveVel = 0;
s32 moveDist = 0;
s32 waypointXDist;
s32 waypointYDist;
s32 waypointHeading;
@ -36,8 +43,10 @@ void CNpcEnemy::processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY )
}
else if ( m_animNo == ANIM_BALLBLOB_BOUNCE )
{
*moveX = 0;
*moveY = 0;
moveX = 0;
moveY = 0;
processMovementModifier( _frames, moveX, moveY, moveVel, moveDist );
return;
}
@ -97,21 +106,21 @@ void CNpcEnemy::processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY )
s32 preShiftX = _frames * m_data[m_type].speed * rcos( m_heading );
s32 preShiftY = _frames * m_data[m_type].speed * rsin( m_heading );
*moveX = preShiftX >> 12;
if ( !(*moveX) && preShiftX )
moveX = preShiftX >> 12;
if ( !moveX && preShiftX )
{
*moveX = preShiftX / abs( preShiftX );
moveX = preShiftX / abs( preShiftX );
}
*moveY = preShiftY >> 12;
if ( !(*moveY) && preShiftY )
moveY = preShiftY >> 12;
if ( !moveY && preShiftY )
{
*moveY = preShiftY / abs( preShiftY );
moveY = preShiftY / abs( preShiftY );
}
// deal with vertical
if ( Pos.vy < 0 || m_layerCollision->Get( ( Pos.vx + *moveX ) >> 4, ( Pos.vy + *moveY ) >> 4 ) )
if ( Pos.vy < 0 || m_layerCollision->Get( ( Pos.vx + moveX ) >> 4, ( Pos.vy + moveY ) >> 4 ) )
{
// reflect heading in vertical
@ -126,16 +135,18 @@ void CNpcEnemy::processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY )
preShiftX = _frames * m_data[m_type].speed * rcos( m_heading );
preShiftY = _frames * m_data[m_type].speed * rsin( m_heading );
*moveX = preShiftX >> 12;
if ( !(*moveX) && preShiftX )
moveX = preShiftX >> 12;
if ( !moveX && preShiftX )
{
*moveX = preShiftX / abs( preShiftX );
moveX = preShiftX / abs( preShiftX );
}
*moveY = preShiftY >> 12;
if ( !(*moveY) && preShiftY )
moveY = preShiftY >> 12;
if ( !moveY && preShiftY )
{
*moveY = preShiftY / abs( preShiftY );
moveY = preShiftY / abs( preShiftY );
}
}
processMovementModifier( _frames, moveX, moveY, moveVel, moveDist );
}

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NCLAM_H__
#include "enemy\nclam.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -23,12 +27,43 @@
#include "player\player.h"
#endif
#ifndef __UTILS_HEADER__
#include "utils\utils.h"
#endif
#ifndef __ANIM_CLAM_HEADER__
#include <ACTOR_CLAM_ANIM.h>
#endif
void CNpcEnemy::processCloseClamJumpAttack( int _frames )
bool CNpcClamEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
m_extendDir = EXTEND_UP;
m_extension = 0;
m_movementTimer = GameState::getOneSecondInFrames() >> 3;
m_velocity = ( getRnd() % 6 ) + 1;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcJumpingClamEnemy::processClose( int _frames )
{
s32 velocity;
@ -91,7 +126,7 @@ void CNpcEnemy::processCloseClamJumpAttack( int _frames )
}
}
void CNpcEnemy::processCloseClamSnapAttack( int _frames )
void CNpcStaticClamEnemy::processClose( int _frames )
{
if ( !m_animPlaying )
{

View File

@ -1,6 +1,6 @@
/*=========================================================================
nclam.cpp
nclam.h
Author: CRB
Created:

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NEYEBALL_H__
#include "enemy\neyeball.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -28,7 +32,40 @@
#endif
void CNpcEnemy::processCloseEyeballAttack( int _frames )
void CNpcEyeballEnemy::postInit()
{
CProjectile *projectile;
projectile = new ( "eyeball projectile" ) CProjectile;
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
projectile->setLayerCollision( m_layerCollision );
addChild( projectile );
}
bool CNpcEyeballEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 40000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcEyeballEnemy::processClose( int _frames )
{
if ( Next )
{
@ -42,4 +79,14 @@ void CNpcEnemy::processCloseEyeballAttack( int _frames )
projectile->setState( CProjectile::PROJECTILE_ATTACK );
}
}
else
{
CProjectile *projectile;
projectile = new ( "eyeball projectile" ) CProjectile;
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_USER_SEEK, CProjectile::PROJECTILE_INFINITE_LIFE );
projectile->setLayerCollision( m_layerCollision );
projectile->setState( CProjectile::PROJECTILE_ATTACK );
addChild( projectile );
}
}

25
source/enemy/neyeball.h Normal file
View File

@ -0,0 +1,25 @@
/*=========================================================================
neyeball.h
Author: CRB
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
#ifndef __ENEMY_NEYEBALL_H__
#define __ENEMY_NEYEBALL_H__
class CNpcEyeballEnemy : public CNpcEnemy
{
virtual void postInit();
protected:
virtual bool processSensor();
virtual void processClose( int _frames );
};
#endif

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NFFOLK_H__
#include "enemy\nffolk.h"
#endif
#ifndef __UTILS_HEADER__
#include "utils\utils.h"
#endif
@ -24,7 +28,7 @@
#endif
void CNpcEnemy::processFishFolkMovementModifier( int _frames, s32 distX, s32 distY )
void CNpcFishFolk::processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange )
{
Pos.vy += distY;

View File

@ -1,6 +1,6 @@
/*=========================================================================
nffolk.cpp
nfskull.cpp
Author: CRB
Created:
@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NFSKULL_H__
#include "enemy\nfskull.h"
#endif
#ifndef __PLAYER_PLAYER_H__
#include "player\player.h"
#endif
@ -24,7 +28,35 @@
#endif
void CNpcEnemy::processCloseFlamingSkullAttack( int _frames )
void CNpcFlamingSkullEnemy::postInit()
{
m_state = FLAMING_SKULL_ATTACK;
}
bool CNpcFlamingSkullEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 40000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcFlamingSkullEnemy::processClose( int _frames )
{
s32 distX, distY;
s32 distXSqr, distYSqr;

31
source/enemy/nfskull.h Normal file
View File

@ -0,0 +1,31 @@
/*=========================================================================
nfskull.h
Author: CRB
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
#ifndef __ENEMY_NFSKULL_H__
#define __ENEMY_NFSKULL_H__
class CNpcFlamingSkullEnemy : public CNpcEnemy
{
virtual void postInit();
protected:
virtual bool processSensor();
virtual void processClose( int _frames );
enum NPC_FLAMING_SKULL_STATE
{
FLAMING_SKULL_ATTACK = 0,
FLAMING_SKULL_RETURN = 1,
};
};
#endif

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NGPIRATE_H__
#include "enemy\ngpirate.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -28,7 +32,34 @@
#endif
void CNpcEnemy::processCloseGhostPirateAttack( int _frames )
bool CNpcGhostPirateEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
m_extendDir = EXTEND_UP;
m_extension = 0;
m_movementTimer = GameState::getOneSecondInFrames() >> 1;
m_velocity = 4;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcGhostPirateEnemy::processClose( int _frames )
{
s32 velocity;

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NOCTO_H__
#include "enemy\nocto.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -31,10 +35,34 @@
#include <ACTOR_BABYOCTOPUS_ANIM.h>
#endif
void CNpcEnemy::processBabyOctopusMovementModifier( int _frames, s32 dist, s16 headingChange )
bool CNpcBabyOctopusEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 400 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcBabyOctopusEnemy::processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange )
{
s32 newX, newY;
s32 preShiftX, preShiftY;
s16 headingVal;
//u16 octopusData[11] = { 96, 192, 256, 256, 256, 192, 192, 192, 128, 128, 96 };
u16 octopusData[11] = { 96, 256, 96, 256, 96, 256, 96, 256, 96, 256, 96 };
@ -77,9 +105,15 @@ void CNpcEnemy::processBabyOctopusMovementModifier( int _frames, s32 dist, s16 h
m_velocity += resistance;
headingVal = abs( headingChange );
if ( headingVal > 128 )
{
headingVal = 128;
}
reqVelocity = dist * octopusData[dataPoint];
reqVelocity >>= 8;
reqVelocity *= 128 + ( 128 - headingChange );
reqVelocity *= 128 + ( 128 - headingVal );
reqVelocity >>= 8;
s32 absReqVelocity = abs( reqVelocity );
@ -108,9 +142,9 @@ void CNpcEnemy::processBabyOctopusMovementModifier( int _frames, s32 dist, s16 h
Pos.vy += newY;
}
void CNpcEnemy::processCloseOctopusAttack( int _frames )
void CNpcBabyOctopusEnemy::processClose( int _frames )
{
if ( !m_animPlaying || m_animNo == m_data[m_type].initAnim || m_animNo == m_data[m_type].moveAnim )
if ( m_animNo == m_data[m_type].initAnim || m_animNo == m_data[m_type].moveAnim )
{
// not playing an attack anim, hence choose one
@ -142,7 +176,9 @@ void CNpcEnemy::processCloseOctopusAttack( int _frames )
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();

View File

@ -423,25 +423,6 @@ void CNpcEnemy::postInit()
break;
}
case NPC_INIT_FLAMING_SKULL:
{
m_state = FLAMING_SKULL_ATTACK;
break;
}
case NPC_INIT_EYEBALL:
{
CProjectile *projectile;
projectile = new ( "eyeball projectile" ) CProjectile;
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
projectile->setLayerCollision( m_layerCollision );
addChild( projectile );
break;
}
case NPC_INIT_ANEMONE_2:
{
CProjectile *projectile;
@ -821,24 +802,6 @@ bool CNpcEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_CLAM_USER_CLOSE:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
m_extendDir = EXTEND_UP;
m_extension = 0;
m_movementTimer = GameState::getOneSecondInFrames() >> 3;
m_velocity = ( getRnd() % 6 ) + 1;
return( true );
}
else
{
return( false );
}
}
case NPC_SENSOR_OIL_BLOB_USER_CLOSE:
case NPC_SENSOR_NINJA_STARFISH_USER_CLOSE:
{
@ -855,24 +818,6 @@ bool CNpcEnemy::processSensor()
}
}
case NPC_SENSOR_GHOST_PIRATE_USER_CLOSE:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
m_extendDir = EXTEND_UP;
m_extension = 0;
m_movementTimer = GameState::getOneSecondInFrames() >> 1;
m_velocity = 4;
return( true );
}
else
{
return( false );
}
}
case NPC_SENSOR_GENERIC_USER_VISIBLE:
{
s32 xDistWaypoint, yDistWaypoint;
@ -975,8 +920,6 @@ bool CNpcEnemy::processSensor()
}
}
case NPC_SENSOR_EYEBALL_USER_CLOSE:
case NPC_SENSOR_FLAMING_SKULL_USER_CLOSE:
case NPC_SENSOR_PARASITIC_WORM_USER_CLOSE:
{
if ( playerXDistSqr + playerYDistSqr < 40000 )
@ -1035,23 +978,7 @@ bool CNpcEnemy::processSensor()
}
}
case NPC_SENSOR_PUFFA_FISH_USER_CLOSE:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_state = PUFFA_FISH_NO_INFLATE;
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
case NPC_SENSOR_FISH_HOOK_USER_CLOSE:
case NPC_SENSOR_OCTOPUS_USER_CLOSE:
{
if ( playerXDistSqr + playerYDistSqr < 400 )
{
@ -1093,10 +1020,10 @@ bool CNpcEnemy::processSensor()
void CNpcEnemy::processMovement(int _frames)
{
if ( _frames > 2 )
{
_frames = 2;
}
//if ( _frames > 2 )
//{
//_frames = 2;
//}
s32 moveX = 0, moveY = 0;
s32 moveVel = 0;
@ -1212,20 +1139,6 @@ void CNpcEnemy::processMovement(int _frames)
break;
}
case NPC_MOVEMENT_SHARK_MAN:
{
processSharkManMovement( _frames, &moveX, &moveY );
break;
}
case NPC_MOVEMENT_BALL_BLOB:
{
processBallBlobMovement( _frames, &moveX, &moveY );
break;
}
default:
break;
@ -1238,35 +1151,8 @@ void CNpcEnemy::processMovement(int _frames)
void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange)
{
switch( m_data[m_type].movementModifierFunc )
{
case NPC_MOVEMENT_MODIFIER_NONE:
{
Pos.vx += distX;
Pos.vy += distY;
break;
}
case NPC_MOVEMENT_MODIFIER_BOB:
{
break;
}
case NPC_MOVEMENT_MODIFIER_FISH_FOLK:
{
processFishFolkMovementModifier( _frames, distX, distY );
break;
}
case NPC_MOVEMENT_MODIFIER_OCTOPUS:
{
processBabyOctopusMovementModifier( _frames, dist, headingChange );
break;
}
}
Pos.vx += distX;
Pos.vy += distY;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -1367,16 +1253,6 @@ void CNpcEnemy::processClose(int _frames)
{
switch( m_data[this->m_type].closeFunc )
{
case NPC_CLOSE_CLAM_JUMP_ATTACK:
processCloseClamJumpAttack( _frames );
break;
case NPC_CLOSE_CLAM_SNAP_ATTACK:
processCloseClamSnapAttack( _frames );
break;
case NPC_CLOSE_GENERIC_USER_SEEK:
{
processGenericGotoTarget( _frames, playerXDist, playerYDist, m_data[m_type].speed );
@ -1384,36 +1260,6 @@ void CNpcEnemy::processClose(int _frames)
break;
}
case NPC_CLOSE_GHOST_PIRATE_ATTACK:
processCloseGhostPirateAttack( _frames );
break;
case NPC_CLOSE_SHARK_MAN_ATTACK:
processCloseSharkManAttack( _frames );
break;
case NPC_CLOSE_ANEMONE_1_ATTACK:
processCloseAnemone1Attack( _frames );
break;
case NPC_CLOSE_ANEMONE_2_ATTACK:
processCloseAnemone2Attack( _frames );
break;
case NPC_CLOSE_ANEMONE_3_ATTACK:
processCloseAnemone3Attack( _frames );
break;
case NPC_CLOSE_EYEBALL_ATTACK:
processCloseEyeballAttack( _frames );
break;
case NPC_CLOSE_SKULL_STOMPER_ATTACK:
processCloseSkullStomperAttack( _frames );
@ -1454,26 +1300,6 @@ void CNpcEnemy::processClose(int _frames)
break;
case NPC_CLOSE_FLAMING_SKULL_ATTACK:
processCloseFlamingSkullAttack( _frames );
break;
case NPC_CLOSE_SKELETAL_FISH_ATTACK:
processCloseSkeletalFishAttack( _frames );
break;
case NPC_CLOSE_OCTOPUS_ATTACK:
processCloseOctopusAttack( _frames );
break;
case NPC_CLOSE_PUFFA_FISH_INFLATE:
processClosePuffaFishInflate( _frames );
break;
case NPC_CLOSE_PARASITIC_WORM_ATTACK:
processCloseParasiticWormAttack( _frames );

View File

@ -70,7 +70,6 @@ protected:
//NPC_FRIEND_INIT_FUNC initFunc;
//NPC_FRIEND_SENSOR_FUNC sensorFunc;
NPC_FRIEND_MOVEMENT_FUNC movementFunc;
//NPC_FRIEND_MOVEMENT_MODIFIER_FUNC movementModifierFunc;
//NPC_FRIEND_CLOSE_FUNC closeFunc;
//NPC_FRIEND_TIMER_FUNC timerFunc;
bool canTalk;
@ -160,7 +159,7 @@ public:
};
void init();
void postInit();
virtual void postInit();
void shutdown();
virtual void think(int _frames);
virtual void render();
@ -201,12 +200,10 @@ protected:
NPC_INIT_FIREBALL,
NPC_INIT_RETURNING_HAZARD,
NPC_INIT_FISH_FOLK,
NPC_INIT_FLAMING_SKULL,
NPC_INIT_CIRCULAR_PLATFORM,
NPC_INIT_PARASITIC_WORM,
NPC_INIT_PARASITIC_WORM_SEGMENT,
NPC_INIT_HERMIT_CRAB,
NPC_INIT_EYEBALL,
NPC_INIT_BALL_BLOB,
NPC_INIT_ANEMONE_2,
NPC_INIT_SPIDER_CRAB,
@ -225,35 +222,21 @@ protected:
{
NPC_SENSOR_NONE = 0,
NPC_SENSOR_USER_CLOSE = 1,
NPC_SENSOR_CLAM_USER_CLOSE,
NPC_SENSOR_NINJA_STARFISH_USER_CLOSE,
NPC_SENSOR_GHOST_PIRATE_USER_CLOSE,
NPC_SENSOR_GENERIC_USER_VISIBLE,
NPC_SENSOR_OIL_BLOB_USER_CLOSE,
NPC_SENSOR_EYEBALL_USER_CLOSE,
NPC_SENSOR_SKULL_STOMPER_USER_CLOSE,
NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE,
NPC_SENSOR_IRON_DOGFISH_USER_CLOSE,
NPC_SENSOR_FALLING_ITEM_USER_CLOSE,
NPC_SENSOR_FISH_HOOK_USER_CLOSE,
NPC_SENSOR_FLAMING_SKULL_USER_CLOSE,
NPC_SENSOR_OCTOPUS_USER_CLOSE,
NPC_SENSOR_PUFFA_FISH_USER_CLOSE,
NPC_SENSOR_PARASITIC_WORM_USER_CLOSE,
};
enum NPC_CLOSE_FUNC
{
NPC_CLOSE_NONE = 0,
NPC_CLOSE_CLAM_JUMP_ATTACK = 1,
NPC_CLOSE_CLAM_SNAP_ATTACK,
NPC_CLOSE_GHOST_PIRATE_ATTACK,
NPC_CLOSE_SHARK_MAN_ATTACK,
NPC_CLOSE_GENERIC_USER_SEEK,
NPC_CLOSE_ANEMONE_1_ATTACK,
NPC_CLOSE_ANEMONE_2_ATTACK,
NPC_CLOSE_ANEMONE_3_ATTACK,
NPC_CLOSE_EYEBALL_ATTACK,
NPC_CLOSE_GENERIC_USER_SEEK = 1,
NPC_CLOSE_SKULL_STOMPER_ATTACK,
NPC_CLOSE_BOOGER_MONSTER_ATTACK,
NPC_CLOSE_MOTHER_JELLYFISH_ATTACK,
@ -262,11 +245,7 @@ protected:
NPC_CLOSE_IRON_DOGFISH_ATTACK,
NPC_CLOSE_FALLING_ITEM_FALL,
NPC_CLOSE_FISH_HOOK_RISE,
NPC_CLOSE_FLAMING_SKULL_ATTACK,
NPC_CLOSE_SKELETAL_FISH_ATTACK,
NPC_CLOSE_HERMIT_CRAB_ATTACK,
NPC_CLOSE_OCTOPUS_ATTACK,
NPC_CLOSE_PUFFA_FISH_INFLATE,
NPC_CLOSE_PARASITIC_WORM_ATTACK,
};
@ -285,20 +264,10 @@ protected:
NPC_MOVEMENT_CLAM_RETRACT,
NPC_MOVEMENT_PARASITIC_WORM,
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
NPC_MOVEMENT_SHARK_MAN,
NPC_MOVEMENT_BALL_BLOB,
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
NPC_MOVEMENT_SPIDER_CRAB_INITJUMP,
};
enum NPC_MOVEMENT_MODIFIER_FUNC
{
NPC_MOVEMENT_MODIFIER_NONE = 0,
NPC_MOVEMENT_MODIFIER_BOB = 1,
NPC_MOVEMENT_MODIFIER_FISH_FOLK,
NPC_MOVEMENT_MODIFIER_OCTOPUS,
};
enum NPC_TIMER_FUNC
{
NPC_TIMER_NONE = 0,
@ -350,12 +319,6 @@ protected:
IRON_DOGFISH_LASER_EYE_2,
};
enum NPC_FLAMING_SKULL_STATE
{
FLAMING_SKULL_ATTACK = 0,
FLAMING_SKULL_RETURN = 1,
};
enum NPC_HERMIT_CRAB_STATE
{
HERMIT_CRAB_NO_ATTACK = 0,
@ -363,13 +326,6 @@ protected:
HERMIT_CRAB_ROLL_ATTACK,
};
enum NPC_PUFFA_FISH_STATE
{
PUFFA_FISH_NO_INFLATE = 0,
PUFFA_FISH_TURN = 1,
PUFFA_FISH_INFLATE,
};
enum NPC_GENERIC_HIT_STATE
{
NPC_GENERIC_HIT_CHECK_HEALTH = 100,
@ -411,7 +367,6 @@ protected:
NPC_INIT_FUNC initFunc;
NPC_SENSOR_FUNC sensorFunc;
NPC_MOVEMENT_FUNC movementFunc;
NPC_MOVEMENT_MODIFIER_FUNC movementModifierFunc;
NPC_CLOSE_FUNC closeFunc;
NPC_TIMER_FUNC timerFunc;
bool canTalk;
@ -450,56 +405,6 @@ protected:
void reinit();
// small jellyfish functions
void processSmallJellyfishSensor();
void processCloseSmallJellyfishEvade( int _frames );
// baby octopus functions
void processBabyOctopusMovementModifier( int _frames, s32 dist, s16 headingChange );
void processCloseOctopusAttack( int _frames );
// fish folk functions
void processFishFolkMovementModifier( int _frames, s32 distX, s32 distY );
// ball blob functions
void processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY );
// clam functions
void processCloseClamJumpAttack( int _frames );
void processCloseClamSnapAttack( int _frames );
// ghost pirate functions
void processCloseGhostPirateAttack( int _frames );
// puffa fish functions
void processClosePuffaFishInflate( int _frames );
// shark man functions
void processSharkManMovement( int _frames, s32 *moveX, s32 *moveY );
void processCloseSharkManAttack( int _frames );
// anemone functions
void processCloseAnemone1Attack( int _frames );
void processCloseAnemone2Attack( int _frames );
void processCloseAnemone3Attack( int _frames );
// skeletal fish functions
void processCloseSkeletalFishAttack( int _frames );
// eyeball functions
void processCloseEyeballAttack( int _frames );
// flaming skull functions
void processCloseFlamingSkullAttack( int _frames );

View File

@ -321,7 +321,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
//NPC_SENSOR_FALLING_ITEM_USER_CLOSE,
NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_FALLING_ITEM_FALL,
NPC_TIMER_NONE,
false,
@ -344,7 +343,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_FISH_HOOK,
NPC_SENSOR_FISH_HOOK_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_FISH_HOOK_RISE,
NPC_TIMER_NONE,
false,
@ -367,7 +365,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_RETURNING_HAZARD,
NPC_SENSOR_NONE,
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -390,7 +387,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_PENDULUM,
NPC_SENSOR_NONE,
NPC_MOVEMENT_PENDULUM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -413,7 +409,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_FIREBALL,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIREBALL,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -436,7 +431,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_RETURNING_HAZARD,
NPC_SENSOR_NONE,
NPC_MOVEMENT_RETURNING_HAZARD,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -459,7 +453,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -482,7 +475,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -505,8 +497,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_ANEMONE_1_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -528,8 +519,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_ANEMONE_2,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_ANEMONE_2_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -551,8 +541,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_ANEMONE_3_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -574,8 +563,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_GENERIC_USER_VISIBLE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_SKELETAL_FISH_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
3,
@ -595,10 +583,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ACTORS_CLAM_SBK,
ANIM_CLAM_SIDESNAP,
NPC_INIT_DEFAULT,
NPC_SENSOR_CLAM_USER_CLOSE,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_CLAM_JUMP_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -618,10 +605,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ACTORS_CLAM_SBK,
ANIM_CLAM_SIDESNAP,
NPC_INIT_DEFAULT,
NPC_SENSOR_CLAM_USER_CLOSE,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_CLAM_SNAP_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -643,7 +629,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -666,7 +651,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_FISH_FOLK,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK,
NPC_MOVEMENT_MODIFIER_FISH_FOLK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -689,7 +673,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -712,7 +695,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -733,10 +715,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ACTORS_PUFFAFISH_SBK,
ANIM_PUFFAFISH_PUFFUPIDLE,
NPC_INIT_DEFAULT,
NPC_SENSOR_PUFFA_FISH_USER_CLOSE,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_PUFFA_FISH_INFLATE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
2,
@ -758,7 +739,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -781,7 +761,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_HERMIT_CRAB,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH_WALK,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_HERMIT_CRAB_ATTACK,
NPC_TIMER_NONE,
false,
@ -804,7 +783,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -827,7 +805,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_BOOGER_MONSTER_ATTACK,
NPC_TIMER_NONE,
false,
@ -850,7 +827,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_SPIDER_CRAB,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH_WALK,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -873,7 +849,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -893,11 +868,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
{ // NPC_EYEBALL
ACTORS_EYEBALL_SBK,
ANIM_EYEBALL_STALK,
NPC_INIT_EYEBALL,
NPC_SENSOR_EYEBALL_USER_CLOSE,
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_EYEBALL_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -917,10 +891,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ACTORS_BABYOCTOPUS_SBK,
ANIM_BABYOCTOPUS_IDLE,
NPC_INIT_DEFAULT,
NPC_SENSOR_OCTOPUS_USER_CLOSE,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_OCTOPUS,
NPC_CLOSE_OCTOPUS_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
2,
@ -942,7 +915,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_FISH_FOLK,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH_WALK,
NPC_MOVEMENT_MODIFIER_FISH_FOLK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -965,7 +937,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NINJA_STARFISH_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_GENERIC_USER_SEEK,
NPC_TIMER_NONE,
false,
@ -988,7 +959,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FIXED_PATH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -1009,10 +979,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ACTORS_CLAM_SBK,
ANIM_CLAM_SIDESNAP,
NPC_INIT_GHOST_PIRATE,
NPC_SENSOR_GHOST_PIRATE_USER_CLOSE,
NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_GHOST_PIRATE_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
0,
@ -1031,11 +1000,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
{ // NPC_FLAMING_SKULL
ACTORS_FLAMINGSKULL_SBK,
ANIM_FLAMINGSKULL_MOVE,
NPC_INIT_FLAMING_SKULL,
NPC_SENSOR_FLAMING_SKULL_USER_CLOSE,
NPC_INIT_DEFAULT,
NPC_SENSOR_USER_CLOSE,
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_FLAMING_SKULL_ATTACK,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
3,
@ -1056,9 +1024,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_SHARKMAN_IDLE1_,
NPC_INIT_DEFAULT,
NPC_SENSOR_GENERIC_USER_VISIBLE,
NPC_MOVEMENT_SHARK_MAN,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_SHARK_MAN_ATTACK,
NPC_MOVEMENT_STATIC,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
3,
@ -1080,7 +1047,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_DEFAULT,
NPC_SENSOR_OIL_BLOB_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_GENERIC_USER_SEEK,
NPC_TIMER_NONE,
false,
@ -1103,7 +1069,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_SKULL_STOMPER,
NPC_SENSOR_SKULL_STOMPER_USER_CLOSE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_SKULL_STOMPER_ATTACK,
NPC_TIMER_NONE,
false,
@ -1126,7 +1091,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_MOTHER_JELLYFISH,
NPC_SENSOR_NONE,
NPC_MOVEMENT_MOTHER_JELLYFISH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_MOTHER_JELLYFISH_ATTACK,
NPC_TIMER_NONE,
false,
@ -1149,7 +1113,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_SUB_SHARK,
NPC_SENSOR_NONE,
NPC_MOVEMENT_SUB_SHARK,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_SUB_SHARK_ATTACK,
NPC_TIMER_NONE,
false,
@ -1172,7 +1135,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_PARASITIC_WORM,
NPC_SENSOR_PARASITIC_WORM_USER_CLOSE,
NPC_MOVEMENT_PARASITIC_WORM,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_PARASITIC_WORM_ATTACK,
NPC_TIMER_NONE,
false,
@ -1195,7 +1157,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_FLYING_DUTCHMAN,
NPC_SENSOR_NONE,
NPC_MOVEMENT_FLYING_DUTCHMAN,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_FLYING_DUTCHMAN_ATTACK,
NPC_TIMER_NONE,
false,
@ -1218,7 +1179,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_IRON_DOGFISH,
NPC_SENSOR_IRON_DOGFISH_USER_CLOSE,
NPC_MOVEMENT_IRON_DOGFISH,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_IRON_DOGFISH_ATTACK,
NPC_TIMER_NONE,
false,
@ -1241,7 +1201,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_INIT_PARASITIC_WORM_SEGMENT,
NPC_SENSOR_NONE,
NPC_MOVEMENT_STATIC,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
@ -1263,8 +1222,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_BALLBLOB_WOBBLE,
NPC_INIT_BALL_BLOB,
NPC_SENSOR_NONE,
NPC_MOVEMENT_BALL_BLOB,
NPC_MOVEMENT_MODIFIER_NONE,
NPC_MOVEMENT_STATIC,
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NPUFFA_H__
#include "enemy\npuffa.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -24,7 +28,31 @@
#endif
void CNpcEnemy::processClosePuffaFishInflate( int _frames )
bool CNpcPuffaFishEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 10000 )
{
m_state = PUFFA_FISH_NO_INFLATE;
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcPuffaFishEnemy::processClose( int _frames )
{
if ( playerXDistSqr + playerYDistSqr > 15000 )
{

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NSHRKMAN_H__
#include "enemy\nshrkman.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -32,15 +36,17 @@
#endif
void CNpcEnemy::processSharkManMovement( int _frames, s32 *moveX, s32 *moveY )
void CNpcSharkManEnemy::processMovement( int _frames )
{
s32 moveX = 0, moveY = 0;
if ( m_movementTimer > 0 )
{
m_movementTimer -= _frames;
if ( m_animNo == m_data[m_type].moveAnim )
{
processGenericFixedPathWalk( _frames, moveX, moveY );
processGenericFixedPathWalk( _frames, &moveX, &moveY );
}
if ( !m_animPlaying )
@ -111,9 +117,11 @@ void CNpcEnemy::processSharkManMovement( int _frames, s32 *moveX, s32 *moveY )
m_animPlaying = true;
m_frame = 0;
}
processMovementModifier( _frames, moveX, moveY, 0, 0 );
}
void CNpcEnemy::processCloseSharkManAttack( int _frames )
void CNpcSharkManEnemy::processClose( int _frames )
{
s32 moveX = 0, moveY = 0;
s32 groundHeight;

View File

@ -15,6 +15,10 @@
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NSKLFISH_H__
#include "enemy\nsklfish.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -28,7 +32,7 @@
#endif
void CNpcEnemy::processCloseSkeletalFishAttack( int _frames )
void CNpcSkeletalFishEnemy::processClose( int _frames )
{
s32 moveX, moveY;
s16 decDir, incDir, moveDist;

View File

@ -47,6 +47,46 @@
#include "enemy\nanemone.h"
#endif
#ifndef __ENEMY_NCLAM_H__
#include "enemy\nclam.h"
#endif
#ifndef __ENEMY_NOCTO_H__
#include "enemy\nocto.h"
#endif
#ifndef __ENEMY_NFFOLK_H__
#include "enemy\nffolk.h"
#endif
#ifndef __ENEMY_NBBLOB_H__
#include "enemy\nbblob.h"
#endif
#ifndef __ENEMY_NGPIRATE_H__
#include "enemy\ngpirate.h"
#endif
#ifndef __ENEMY_NPUFFA_H__
#include "enemy\npuffa.h"
#endif
#ifndef __ENEMY_NSHRKMAN_H__
#include "enemy\nshrkman.h"
#endif
#ifndef __ENEMY_NSKLFISH_H__
#include "enemy\nsklfish.h"
#endif
#ifndef __ENEMY_NEYEBALL_H__
#include "enemy\neyeball.h"
#endif
#ifndef __ENEMY_NFSKULL_H__
#include "enemy\nfskull.h"
#endif
#ifndef __ENEMY_NPLATFRM_H__
#include "enemy\nplatfrm.h"
#endif
@ -373,6 +413,73 @@ void CGameScene::initLevel()
break;
}
case CNpcEnemy::NPC_CLAM_JUMP:
{
enemy = new ("jumping clam") CNpcJumpingClamEnemy;
break;
}
case CNpcEnemy::NPC_CLAM_STATIC:
{
enemy = new ("static clam") CNpcStaticClamEnemy;
break;
}
case CNpcEnemy::NPC_BABY_OCTOPUS:
{
enemy = new ("baby octopus") CNpcBabyOctopusEnemy;
break;
}
case CNpcEnemy::NPC_FISH_FOLK:
case CNpcEnemy::NPC_ZOMBIE_FISH_FOLK:
{
enemy = new ("fish folk") CNpcFishFolk;
break;
}
case CNpcEnemy::NPC_BALL_BLOB:
{
enemy = new ("ball blob") CNpcBallBlobEnemy;
break;
}
case CNpcEnemy::NPC_GHOST_PIRATE:
{
enemy = new ("ghost pirate") CNpcGhostPirateEnemy;
break;
}
case CNpcEnemy::NPC_PUFFA_FISH:
{
enemy = new ("puffa fish") CNpcPuffaFishEnemy;
break;
}
case CNpcEnemy::NPC_SHARK_MAN:
{
enemy = new ("shark man") CNpcSharkManEnemy;
break;
}
case CNpcEnemy::NPC_SKELETAL_FISH:
{
enemy = new ("skeletal fish") CNpcSkeletalFishEnemy;
break;
}
case CNpcEnemy::NPC_EYEBALL:
{
enemy = new ("eyeball") CNpcEyeballEnemy;
break;
}
case CNpcEnemy::NPC_FLAMING_SKULL:
{
enemy = new ("flaming skull") CNpcFlamingSkullEnemy;
break;
}
default:
{
enemy = new ("npc enemy") CNpcEnemy;

View File

@ -121,6 +121,10 @@ SOURCE=..\..\..\source\enemy\nbblob.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nbblob.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nbooger.cpp
# End Source File
# Begin Source File
@ -129,6 +133,10 @@ SOURCE=..\..\..\source\enemy\nclam.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nclam.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\ndogfish.cpp
# End Source File
# Begin Source File
@ -137,6 +145,10 @@ SOURCE=..\..\..\source\enemy\neyeball.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\neyeball.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nfdutch.cpp
# End Source File
# Begin Source File
@ -145,10 +157,18 @@ SOURCE=..\..\..\source\enemy\nffolk.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nffolk.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nfskull.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nfskull.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\ngary.cpp
# End Source File
# Begin Source File
@ -169,6 +189,10 @@ SOURCE=..\..\..\source\enemy\ngpirate.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\ngpirate.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nhazard.cpp
# End Source File
# Begin Source File
@ -189,6 +213,10 @@ SOURCE=..\..\..\source\enemy\nocto.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nocto.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\npc.cpp
# End Source File
# Begin Source File
@ -221,6 +249,10 @@ SOURCE=..\..\..\source\enemy\npuffa.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\npuffa.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nscrab.cpp
# End Source File
# Begin Source File
@ -233,6 +265,10 @@ SOURCE=..\..\..\source\enemy\nshrkman.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nshrkman.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nsjfish.cpp
# End Source File
# Begin Source File
@ -245,6 +281,10 @@ SOURCE=..\..\..\source\enemy\nsklfish.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nsklfish.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\enemy\nsshark.cpp
# End Source File
# Begin Source File