This commit is contained in:
parent
796aeddca7
commit
bc760c2dd3
@ -15,6 +15,10 @@
|
|||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NANEMONE_H__
|
||||||
|
#include "enemy\nanemone.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __PROJECTL_PROJECTL_H__
|
#ifndef __PROJECTL_PROJECTL_H__
|
||||||
#include "projectl\projectl.h"
|
#include "projectl\projectl.h"
|
||||||
#endif
|
#endif
|
||||||
@ -40,6 +44,29 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
bool CNpcAnemoneEnemy::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 CNpcEnemy::processCloseAnemone1Attack( int _frames )
|
void CNpcEnemy::processCloseAnemone1Attack( int _frames )
|
||||||
{
|
{
|
||||||
s32 moveX, moveY;
|
s32 moveX, moveY;
|
||||||
|
@ -11,10 +11,66 @@
|
|||||||
|
|
||||||
===========================================================================*/
|
===========================================================================*/
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NPC_H__
|
||||||
|
#include "enemy\npc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ENEMY_NGEN_H__
|
#ifndef __ENEMY_NGEN_H__
|
||||||
#include "enemy\ngen.h"
|
#include "enemy\ngen.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSCRAB_H__
|
||||||
|
#include "enemy\nscrab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __GAME_GAME_H__
|
||||||
|
#include "game\game.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEnemyGenerator::think(int _frames)
|
||||||
|
{
|
||||||
|
if ( getNumChildren() < 3 )
|
||||||
|
{
|
||||||
|
m_movementTimer -= _frames;
|
||||||
|
|
||||||
|
if ( m_movementTimer < 0 )
|
||||||
|
{
|
||||||
|
m_movementTimer = 3 * GameState::getOneSecondInFrames();
|
||||||
|
|
||||||
|
CNpcEnemy *enemy;
|
||||||
|
enemy = new( "spider crab" ) CNpcSpiderCrabEnemy;
|
||||||
|
ASSERT(enemy);
|
||||||
|
enemy->setType( CNpcEnemy::NPC_SPIDER_CRAB );
|
||||||
|
enemy->init();
|
||||||
|
enemy->setLayerCollision( m_layerCollision );
|
||||||
|
enemy->setStartPos( Pos.vx >> 4, Pos.vy >> 4 );
|
||||||
|
|
||||||
|
CNpcWaypoint *sourceWaypoint = m_npcPath.getWaypointList();
|
||||||
|
|
||||||
|
if ( sourceWaypoint )
|
||||||
|
{
|
||||||
|
// skip first waypoint
|
||||||
|
|
||||||
|
sourceWaypoint = sourceWaypoint->nextWaypoint;
|
||||||
|
|
||||||
|
while( sourceWaypoint )
|
||||||
|
{
|
||||||
|
enemy->addWaypoint( sourceWaypoint->pos.vx >> 4, sourceWaypoint->pos.vy >> 4 );
|
||||||
|
sourceWaypoint = sourceWaypoint->nextWaypoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enemy->setPathType( m_npcPath.getPathType() );
|
||||||
|
|
||||||
|
enemy->postInit();
|
||||||
|
|
||||||
|
addChild( enemy );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcEnemyGenerator::render()
|
void CNpcEnemyGenerator::render()
|
||||||
|
@ -14,8 +14,7 @@
|
|||||||
#ifndef __ENEMY_NGEN_H__
|
#ifndef __ENEMY_NGEN_H__
|
||||||
#define __ENEMY_NGEN_H__
|
#define __ENEMY_NGEN_H__
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NPC_H__
|
||||||
#ifndef __ENEMY_NPC_H__
|
|
||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -23,6 +22,7 @@ class CNpcEnemyGenerator : public CNpcEnemy
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void render();
|
void render();
|
||||||
|
void think(int _frames);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -15,6 +15,10 @@
|
|||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NHCRAB_H__
|
||||||
|
#include "enemy\nhcrab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __GAME_GAME_H__
|
#ifndef __GAME_GAME_H__
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
@ -27,7 +31,30 @@
|
|||||||
#include <ACTOR_HERMITCRAB_ANIM.h>
|
#include <ACTOR_HERMITCRAB_ANIM.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void CNpcEnemy::processCloseHermitCrabAttack( int _frames )
|
bool CNpcHermitCrabEnemy::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 CNpcHermitCrabEnemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
if ( m_state == HERMIT_CRAB_NO_ATTACK )
|
if ( m_state == HERMIT_CRAB_NO_ATTACK )
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*=========================================================================
|
/*=========================================================================
|
||||||
|
|
||||||
nhcrab.cpp
|
nhcrab.h
|
||||||
|
|
||||||
Author: CRB
|
Author: CRB
|
||||||
Created:
|
Created:
|
||||||
@ -12,6 +12,7 @@
|
|||||||
===========================================================================*/
|
===========================================================================*/
|
||||||
|
|
||||||
#ifndef __ENEMY_NHCRAB_H__
|
#ifndef __ENEMY_NHCRAB_H__
|
||||||
|
#define __ENEMY_NHCRAB_H__
|
||||||
|
|
||||||
#ifndef __ENEMY_NPC_H__
|
#ifndef __ENEMY_NPC_H__
|
||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
|
@ -188,6 +188,13 @@ s32 CNpcEnemy::playerYDistSqr;
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::getTypeFromMapEdit( u16 newType )
|
||||||
|
{
|
||||||
|
return( mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET] );
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcEnemy::setTypeFromMapEdit( u16 newType )
|
void CNpcEnemy::setTypeFromMapEdit( u16 newType )
|
||||||
{
|
{
|
||||||
m_type = mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET];
|
m_type = mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET];
|
||||||
@ -814,21 +821,6 @@ bool CNpcEnemy::processSensor()
|
|||||||
{
|
{
|
||||||
switch( m_sensorFunc )
|
switch( m_sensorFunc )
|
||||||
{
|
{
|
||||||
case NPC_SENSOR_JELLYFISH_USER_CLOSE:
|
|
||||||
{
|
|
||||||
if ( playerXDistSqr + playerYDistSqr < 5625 )
|
|
||||||
{
|
|
||||||
m_controlFunc = NPC_CONTROL_CLOSE;
|
|
||||||
m_evadeClockwise = getRnd() % 2;
|
|
||||||
|
|
||||||
return( true );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPC_SENSOR_CLAM_USER_CLOSE:
|
case NPC_SENSOR_CLAM_USER_CLOSE:
|
||||||
{
|
{
|
||||||
if ( playerXDistSqr + playerYDistSqr < 10000 )
|
if ( playerXDistSqr + playerYDistSqr < 10000 )
|
||||||
@ -847,47 +839,6 @@ bool CNpcEnemy::processSensor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPC_SENSOR_SPIDER_CRAB_USER_CLOSE:
|
|
||||||
{
|
|
||||||
if ( playerXDistSqr + playerYDistSqr < 10000 )
|
|
||||||
{
|
|
||||||
// only attack if within path extents
|
|
||||||
|
|
||||||
s32 minX, maxX;
|
|
||||||
m_npcPath.getPathXExtents( &minX, &maxX );
|
|
||||||
|
|
||||||
if ( playerXDist < 0 )
|
|
||||||
{
|
|
||||||
m_extendDir = EXTEND_LEFT;
|
|
||||||
|
|
||||||
if ( ( Pos.vx + playerXDist - 128 ) < minX )
|
|
||||||
{
|
|
||||||
return( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_extendDir = EXTEND_RIGHT;
|
|
||||||
|
|
||||||
if ( ( Pos.vx + playerXDist + 128 ) > maxX )
|
|
||||||
{
|
|
||||||
return( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_controlFunc = NPC_CONTROL_CLOSE;
|
|
||||||
m_extension = 0;
|
|
||||||
m_velocity = 5;
|
|
||||||
m_base = Pos;
|
|
||||||
|
|
||||||
return( true );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPC_SENSOR_OIL_BLOB_USER_CLOSE:
|
case NPC_SENSOR_OIL_BLOB_USER_CLOSE:
|
||||||
case NPC_SENSOR_NINJA_STARFISH_USER_CLOSE:
|
case NPC_SENSOR_NINJA_STARFISH_USER_CLOSE:
|
||||||
{
|
{
|
||||||
@ -1024,7 +975,6 @@ bool CNpcEnemy::processSensor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPC_SENSOR_ANEMONE_USER_CLOSE:
|
|
||||||
case NPC_SENSOR_EYEBALL_USER_CLOSE:
|
case NPC_SENSOR_EYEBALL_USER_CLOSE:
|
||||||
case NPC_SENSOR_FLAMING_SKULL_USER_CLOSE:
|
case NPC_SENSOR_FLAMING_SKULL_USER_CLOSE:
|
||||||
case NPC_SENSOR_PARASITIC_WORM_USER_CLOSE:
|
case NPC_SENSOR_PARASITIC_WORM_USER_CLOSE:
|
||||||
@ -1102,7 +1052,6 @@ bool CNpcEnemy::processSensor()
|
|||||||
|
|
||||||
case NPC_SENSOR_FISH_HOOK_USER_CLOSE:
|
case NPC_SENSOR_FISH_HOOK_USER_CLOSE:
|
||||||
case NPC_SENSOR_OCTOPUS_USER_CLOSE:
|
case NPC_SENSOR_OCTOPUS_USER_CLOSE:
|
||||||
case NPC_SENSOR_HERMIT_CRAB_USER_CLOSE:
|
|
||||||
{
|
{
|
||||||
if ( playerXDistSqr + playerYDistSqr < 400 )
|
if ( playerXDistSqr + playerYDistSqr < 400 )
|
||||||
{
|
{
|
||||||
@ -1277,20 +1226,6 @@ void CNpcEnemy::processMovement(int _frames)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPC_MOVEMENT_SPIDER_CRAB_SPAWNER:
|
|
||||||
{
|
|
||||||
processSpiderCrabSpawnerMovement( _frames );
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPC_MOVEMENT_SPIDER_CRAB_INITJUMP:
|
|
||||||
{
|
|
||||||
processSpiderCrabInitJumpMovement( _frames );
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -1318,13 +1253,6 @@ void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 d
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPC_MOVEMENT_MODIFIER_JELLYFISH:
|
|
||||||
{
|
|
||||||
processSmallJellyfishMovementModifier( _frames, distX, distY, dist, headingChange );
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPC_MOVEMENT_MODIFIER_FISH_FOLK:
|
case NPC_MOVEMENT_MODIFIER_FISH_FOLK:
|
||||||
{
|
{
|
||||||
processFishFolkMovementModifier( _frames, distX, distY );
|
processFishFolkMovementModifier( _frames, distX, distY );
|
||||||
@ -1439,11 +1367,6 @@ void CNpcEnemy::processClose(int _frames)
|
|||||||
{
|
{
|
||||||
switch( m_data[this->m_type].closeFunc )
|
switch( m_data[this->m_type].closeFunc )
|
||||||
{
|
{
|
||||||
case NPC_CLOSE_JELLYFISH_EVADE:
|
|
||||||
processCloseSmallJellyfishEvade( _frames );
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NPC_CLOSE_CLAM_JUMP_ATTACK:
|
case NPC_CLOSE_CLAM_JUMP_ATTACK:
|
||||||
processCloseClamJumpAttack( _frames );
|
processCloseClamJumpAttack( _frames );
|
||||||
|
|
||||||
@ -1454,11 +1377,6 @@ void CNpcEnemy::processClose(int _frames)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NPC_CLOSE_SPIDER_CRAB_ATTACK:
|
|
||||||
processCloseSpiderCrabAttack( _frames );
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NPC_CLOSE_GENERIC_USER_SEEK:
|
case NPC_CLOSE_GENERIC_USER_SEEK:
|
||||||
{
|
{
|
||||||
processGenericGotoTarget( _frames, playerXDist, playerYDist, m_data[m_type].speed );
|
processGenericGotoTarget( _frames, playerXDist, playerYDist, m_data[m_type].speed );
|
||||||
@ -1546,11 +1464,6 @@ void CNpcEnemy::processClose(int _frames)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NPC_CLOSE_HERMIT_CRAB_ATTACK:
|
|
||||||
processCloseHermitCrabAttack( _frames );
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NPC_CLOSE_OCTOPUS_ATTACK:
|
case NPC_CLOSE_OCTOPUS_ATTACK:
|
||||||
processCloseOctopusAttack( _frames );
|
processCloseOctopusAttack( _frames );
|
||||||
|
|
||||||
@ -1575,26 +1488,11 @@ void CNpcEnemy::processClose(int _frames)
|
|||||||
|
|
||||||
void CNpcEnemy::processCollision()
|
void CNpcEnemy::processCollision()
|
||||||
{
|
{
|
||||||
switch( m_data[m_type].collisionFunc )
|
CPlayer *player = GameScene.getPlayer();
|
||||||
{
|
|
||||||
case NPC_COLLISION_GENERIC:
|
|
||||||
{
|
|
||||||
CPlayer *player = GameScene.getPlayer();
|
|
||||||
|
|
||||||
player->takeDamage( m_data[m_type].damageToUserType );
|
player->takeDamage( m_data[m_type].damageToUserType );
|
||||||
|
|
||||||
m_controlFunc = m_oldControlFunc;
|
m_controlFunc = m_oldControlFunc;
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPC_COLLISION_SPIDER_CRAB_BITE:
|
|
||||||
{
|
|
||||||
processSpiderCrabCollision();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1644,6 +1542,8 @@ void CNpcEnemy::processTimer(int _frames)
|
|||||||
|
|
||||||
void CNpcEnemy::render()
|
void CNpcEnemy::render()
|
||||||
{
|
{
|
||||||
|
SprFrame = NULL;
|
||||||
|
|
||||||
if ( m_isActive )
|
if ( m_isActive )
|
||||||
{
|
{
|
||||||
CEnemyThing::render();
|
CEnemyThing::render();
|
||||||
@ -1659,7 +1559,7 @@ void CNpcEnemy::render()
|
|||||||
{
|
{
|
||||||
if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() )
|
if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() )
|
||||||
{
|
{
|
||||||
m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed);
|
SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,12 +162,13 @@ public:
|
|||||||
void init();
|
void init();
|
||||||
void postInit();
|
void postInit();
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void think(int _frames);
|
virtual void think(int _frames);
|
||||||
void render();
|
virtual void render();
|
||||||
void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
||||||
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
||||||
void setType( NPC_UNIT_TYPE newType ) {m_type = newType;}
|
void setType( NPC_UNIT_TYPE newType ) {m_type = newType;}
|
||||||
void setTypeFromMapEdit( u16 newType );
|
void setTypeFromMapEdit( u16 newType );
|
||||||
|
static NPC_UNIT_TYPE getTypeFromMapEdit( u16 newType );
|
||||||
void setHeading( s32 newHeading ) {m_heading = newHeading;}
|
void setHeading( s32 newHeading ) {m_heading = newHeading;}
|
||||||
void setHeading( s32 xPos, s32 yPos );
|
void setHeading( s32 xPos, s32 yPos );
|
||||||
void addWaypoint( s32 xPos, s32 yPos );
|
void addWaypoint( s32 xPos, s32 yPos );
|
||||||
@ -177,7 +178,7 @@ public:
|
|||||||
bool canBeCaughtByNet();
|
bool canBeCaughtByNet();
|
||||||
void caughtWithNet();
|
void caughtWithNet();
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
class CLayerCollision *m_layerCollision;
|
class CLayerCollision *m_layerCollision;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -223,14 +224,12 @@ protected:
|
|||||||
enum NPC_SENSOR_FUNC
|
enum NPC_SENSOR_FUNC
|
||||||
{
|
{
|
||||||
NPC_SENSOR_NONE = 0,
|
NPC_SENSOR_NONE = 0,
|
||||||
NPC_SENSOR_JELLYFISH_USER_CLOSE = 1,
|
NPC_SENSOR_USER_CLOSE = 1,
|
||||||
NPC_SENSOR_CLAM_USER_CLOSE,
|
NPC_SENSOR_CLAM_USER_CLOSE,
|
||||||
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
|
|
||||||
NPC_SENSOR_NINJA_STARFISH_USER_CLOSE,
|
NPC_SENSOR_NINJA_STARFISH_USER_CLOSE,
|
||||||
NPC_SENSOR_GHOST_PIRATE_USER_CLOSE,
|
NPC_SENSOR_GHOST_PIRATE_USER_CLOSE,
|
||||||
NPC_SENSOR_GENERIC_USER_VISIBLE,
|
NPC_SENSOR_GENERIC_USER_VISIBLE,
|
||||||
NPC_SENSOR_OIL_BLOB_USER_CLOSE,
|
NPC_SENSOR_OIL_BLOB_USER_CLOSE,
|
||||||
NPC_SENSOR_ANEMONE_USER_CLOSE,
|
|
||||||
NPC_SENSOR_EYEBALL_USER_CLOSE,
|
NPC_SENSOR_EYEBALL_USER_CLOSE,
|
||||||
NPC_SENSOR_SKULL_STOMPER_USER_CLOSE,
|
NPC_SENSOR_SKULL_STOMPER_USER_CLOSE,
|
||||||
NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE,
|
NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE,
|
||||||
@ -238,7 +237,6 @@ protected:
|
|||||||
NPC_SENSOR_FALLING_ITEM_USER_CLOSE,
|
NPC_SENSOR_FALLING_ITEM_USER_CLOSE,
|
||||||
NPC_SENSOR_FISH_HOOK_USER_CLOSE,
|
NPC_SENSOR_FISH_HOOK_USER_CLOSE,
|
||||||
NPC_SENSOR_FLAMING_SKULL_USER_CLOSE,
|
NPC_SENSOR_FLAMING_SKULL_USER_CLOSE,
|
||||||
NPC_SENSOR_HERMIT_CRAB_USER_CLOSE,
|
|
||||||
NPC_SENSOR_OCTOPUS_USER_CLOSE,
|
NPC_SENSOR_OCTOPUS_USER_CLOSE,
|
||||||
NPC_SENSOR_PUFFA_FISH_USER_CLOSE,
|
NPC_SENSOR_PUFFA_FISH_USER_CLOSE,
|
||||||
NPC_SENSOR_PARASITIC_WORM_USER_CLOSE,
|
NPC_SENSOR_PARASITIC_WORM_USER_CLOSE,
|
||||||
@ -247,10 +245,8 @@ protected:
|
|||||||
enum NPC_CLOSE_FUNC
|
enum NPC_CLOSE_FUNC
|
||||||
{
|
{
|
||||||
NPC_CLOSE_NONE = 0,
|
NPC_CLOSE_NONE = 0,
|
||||||
NPC_CLOSE_JELLYFISH_EVADE = 1,
|
NPC_CLOSE_CLAM_JUMP_ATTACK = 1,
|
||||||
NPC_CLOSE_CLAM_JUMP_ATTACK,
|
|
||||||
NPC_CLOSE_CLAM_SNAP_ATTACK,
|
NPC_CLOSE_CLAM_SNAP_ATTACK,
|
||||||
NPC_CLOSE_SPIDER_CRAB_ATTACK,
|
|
||||||
NPC_CLOSE_GHOST_PIRATE_ATTACK,
|
NPC_CLOSE_GHOST_PIRATE_ATTACK,
|
||||||
NPC_CLOSE_SHARK_MAN_ATTACK,
|
NPC_CLOSE_SHARK_MAN_ATTACK,
|
||||||
NPC_CLOSE_GENERIC_USER_SEEK,
|
NPC_CLOSE_GENERIC_USER_SEEK,
|
||||||
@ -292,7 +288,6 @@ protected:
|
|||||||
NPC_MOVEMENT_SHARK_MAN,
|
NPC_MOVEMENT_SHARK_MAN,
|
||||||
NPC_MOVEMENT_BALL_BLOB,
|
NPC_MOVEMENT_BALL_BLOB,
|
||||||
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
|
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
|
||||||
NPC_MOVEMENT_SPIDER_CRAB_SPAWNER,
|
|
||||||
NPC_MOVEMENT_SPIDER_CRAB_INITJUMP,
|
NPC_MOVEMENT_SPIDER_CRAB_INITJUMP,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -300,7 +295,6 @@ protected:
|
|||||||
{
|
{
|
||||||
NPC_MOVEMENT_MODIFIER_NONE = 0,
|
NPC_MOVEMENT_MODIFIER_NONE = 0,
|
||||||
NPC_MOVEMENT_MODIFIER_BOB = 1,
|
NPC_MOVEMENT_MODIFIER_BOB = 1,
|
||||||
NPC_MOVEMENT_MODIFIER_JELLYFISH,
|
|
||||||
NPC_MOVEMENT_MODIFIER_FISH_FOLK,
|
NPC_MOVEMENT_MODIFIER_FISH_FOLK,
|
||||||
NPC_MOVEMENT_MODIFIER_OCTOPUS,
|
NPC_MOVEMENT_MODIFIER_OCTOPUS,
|
||||||
};
|
};
|
||||||
@ -319,12 +313,6 @@ protected:
|
|||||||
NPC_SHOT_GENERIC = 1,
|
NPC_SHOT_GENERIC = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NPC_COLLISION_FUNC
|
|
||||||
{
|
|
||||||
NPC_COLLISION_GENERIC = 0,
|
|
||||||
NPC_COLLISION_SPIDER_CRAB_BITE = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum NPC_MOTHER_JELLYFISH_STATE
|
enum NPC_MOTHER_JELLYFISH_STATE
|
||||||
{
|
{
|
||||||
MOTHER_JELLYFISH_RETURN_TO_START_1 = 0,
|
MOTHER_JELLYFISH_RETURN_TO_START_1 = 0,
|
||||||
@ -436,7 +424,6 @@ protected:
|
|||||||
NPC_SHOT_FUNC shotFunc;
|
NPC_SHOT_FUNC shotFunc;
|
||||||
u16 dieAnim;
|
u16 dieAnim;
|
||||||
u16 recoilAnim;
|
u16 recoilAnim;
|
||||||
NPC_COLLISION_FUNC collisionFunc;
|
|
||||||
bool canBeNetted;
|
bool canBeNetted;
|
||||||
bool respawning;
|
bool respawning;
|
||||||
}
|
}
|
||||||
@ -446,12 +433,12 @@ protected:
|
|||||||
|
|
||||||
// functions
|
// functions
|
||||||
|
|
||||||
bool processSensor();
|
virtual bool processSensor();
|
||||||
void processMovement( int _frames );
|
virtual void processMovement( int _frames );
|
||||||
void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange );
|
virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange );
|
||||||
void processShot();
|
void processShot();
|
||||||
void processClose( int _frames );
|
virtual void processClose( int _frames );
|
||||||
void processCollision();
|
virtual void processCollision();
|
||||||
void processTimer( int _frames );
|
void processTimer( int _frames );
|
||||||
bool isCollisionWithGround();
|
bool isCollisionWithGround();
|
||||||
|
|
||||||
@ -466,7 +453,6 @@ protected:
|
|||||||
// small jellyfish functions
|
// small jellyfish functions
|
||||||
|
|
||||||
void processSmallJellyfishSensor();
|
void processSmallJellyfishSensor();
|
||||||
void processSmallJellyfishMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange );
|
|
||||||
void processCloseSmallJellyfishEvade( int _frames );
|
void processCloseSmallJellyfishEvade( int _frames );
|
||||||
|
|
||||||
// baby octopus functions
|
// baby octopus functions
|
||||||
@ -487,17 +473,6 @@ protected:
|
|||||||
void processCloseClamJumpAttack( int _frames );
|
void processCloseClamJumpAttack( int _frames );
|
||||||
void processCloseClamSnapAttack( int _frames );
|
void processCloseClamSnapAttack( int _frames );
|
||||||
|
|
||||||
// spider crab functions
|
|
||||||
|
|
||||||
void processCloseSpiderCrabAttack( int _frames );
|
|
||||||
void processSpiderCrabCollision();
|
|
||||||
void processSpiderCrabSpawnerMovement( int _frames );
|
|
||||||
void processSpiderCrabInitJumpMovement( int _frames );
|
|
||||||
|
|
||||||
// hermit crab functions
|
|
||||||
|
|
||||||
void processCloseHermitCrabAttack( int _frames );
|
|
||||||
|
|
||||||
// ghost pirate functions
|
// ghost pirate functions
|
||||||
|
|
||||||
void processCloseGhostPirateAttack( int _frames );
|
void processCloseGhostPirateAttack( int _frames );
|
||||||
@ -614,6 +589,7 @@ protected:
|
|||||||
int m_animNo;
|
int m_animNo;
|
||||||
CActorGfx *m_actorGfx;
|
CActorGfx *m_actorGfx;
|
||||||
DVECTOR m_drawOffset;
|
DVECTOR m_drawOffset;
|
||||||
|
POLY_FT4 *SprFrame;
|
||||||
|
|
||||||
virtual void collidedWith(CThing *_thisThing);
|
virtual void collidedWith(CThing *_thisThing);
|
||||||
|
|
||||||
|
@ -334,7 +334,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -358,7 +357,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -382,7 +380,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -406,7 +403,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -430,7 +426,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -454,7 +449,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -463,10 +457,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_JELLYFISH1_SBK,
|
ACTORS_JELLYFISH1_SBK,
|
||||||
ANIM_JELLYFISH1_IDLE,
|
ANIM_JELLYFISH1_IDLE,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_DEFAULT,
|
||||||
NPC_SENSOR_JELLYFISH_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_FIXED_PATH,
|
NPC_MOVEMENT_FIXED_PATH,
|
||||||
NPC_MOVEMENT_MODIFIER_JELLYFISH,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_JELLYFISH_EVADE,
|
NPC_CLOSE_NONE,
|
||||||
NPC_TIMER_NONE,
|
NPC_TIMER_NONE,
|
||||||
false,
|
false,
|
||||||
2,
|
2,
|
||||||
@ -478,7 +472,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
ANIM_JELLYFISH1_SWIM,
|
ANIM_JELLYFISH1_SWIM,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
@ -487,10 +480,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_CLAM_SBK,
|
ACTORS_CLAM_SBK,
|
||||||
ANIM_CLAM_SIDESNAP,
|
ANIM_CLAM_SIDESNAP,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_DEFAULT,
|
||||||
NPC_SENSOR_JELLYFISH_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_FIXED_PATH,
|
NPC_MOVEMENT_FIXED_PATH,
|
||||||
NPC_MOVEMENT_MODIFIER_JELLYFISH,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_JELLYFISH_EVADE,
|
NPC_CLOSE_NONE,
|
||||||
NPC_TIMER_NONE,
|
NPC_TIMER_NONE,
|
||||||
false,
|
false,
|
||||||
3,
|
3,
|
||||||
@ -502,7 +495,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
@ -511,7 +503,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_ANENOMELVL1_SBK,
|
ACTORS_ANENOMELVL1_SBK,
|
||||||
ANIM_ANENOMELVL1_BEND,
|
ANIM_ANENOMELVL1_BEND,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_DEFAULT,
|
||||||
NPC_SENSOR_ANEMONE_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_ANEMONE_1_ATTACK,
|
NPC_CLOSE_ANEMONE_1_ATTACK,
|
||||||
@ -526,7 +518,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -535,7 +526,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_SPIKEYANENOME_SBK,
|
ACTORS_SPIKEYANENOME_SBK,
|
||||||
ANIM_SPIKEYANENOME_BODY,
|
ANIM_SPIKEYANENOME_BODY,
|
||||||
NPC_INIT_ANEMONE_2,
|
NPC_INIT_ANEMONE_2,
|
||||||
NPC_SENSOR_ANEMONE_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_ANEMONE_2_ATTACK,
|
NPC_CLOSE_ANEMONE_2_ATTACK,
|
||||||
@ -550,7 +541,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -559,7 +549,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_ANENOMELVL3_SBK,
|
ACTORS_ANENOMELVL3_SBK,
|
||||||
ANIM_ANENOMELVL3_BEND,
|
ANIM_ANENOMELVL3_BEND,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_DEFAULT,
|
||||||
NPC_SENSOR_ANEMONE_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_ANEMONE_3_ATTACK,
|
NPC_CLOSE_ANEMONE_3_ATTACK,
|
||||||
@ -574,7 +564,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -598,7 +587,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_SKELETALFISH_DIE,
|
ANIM_SKELETALFISH_DIE,
|
||||||
ANIM_SKELETALFISH_GETHIT,
|
ANIM_SKELETALFISH_GETHIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -622,7 +610,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -646,7 +633,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -670,7 +656,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -694,7 +679,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -718,7 +702,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_CATERPILLAR_DIE,
|
ANIM_CATERPILLAR_DIE,
|
||||||
ANIM_CATERPILLAR_GETHIT,
|
ANIM_CATERPILLAR_GETHIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -742,7 +725,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -766,7 +748,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -790,7 +771,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -799,7 +779,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_HERMITCRAB_SBK,
|
ACTORS_HERMITCRAB_SBK,
|
||||||
ANIM_HERMITCRAB_IDLE,
|
ANIM_HERMITCRAB_IDLE,
|
||||||
NPC_INIT_HERMIT_CRAB,
|
NPC_INIT_HERMIT_CRAB,
|
||||||
NPC_SENSOR_HERMIT_CRAB_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_FIXED_PATH_WALK,
|
NPC_MOVEMENT_FIXED_PATH_WALK,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_HERMIT_CRAB_ATTACK,
|
NPC_CLOSE_HERMIT_CRAB_ATTACK,
|
||||||
@ -814,7 +794,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_HERMITCRAB_DIE,
|
ANIM_HERMITCRAB_DIE,
|
||||||
ANIM_HERMITCRAB_GETHIT,
|
ANIM_HERMITCRAB_GETHIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -838,7 +817,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -862,7 +840,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -871,10 +848,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ACTORS_SPIDERCRAB_SBK,
|
ACTORS_SPIDERCRAB_SBK,
|
||||||
ANIM_SPIDERCRAB_IDLE,
|
ANIM_SPIDERCRAB_IDLE,
|
||||||
NPC_INIT_SPIDER_CRAB,
|
NPC_INIT_SPIDER_CRAB,
|
||||||
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_FIXED_PATH_WALK,
|
NPC_MOVEMENT_FIXED_PATH_WALK,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_SPIDER_CRAB_ATTACK,
|
NPC_CLOSE_NONE,
|
||||||
NPC_TIMER_NONE,
|
NPC_TIMER_NONE,
|
||||||
false,
|
false,
|
||||||
3,
|
3,
|
||||||
@ -886,7 +863,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_SPIDERCRAB_DIE,
|
ANIM_SPIDERCRAB_DIE,
|
||||||
ANIM_SPIDERCRAB_HIT,
|
ANIM_SPIDERCRAB_HIT,
|
||||||
NPC_COLLISION_SPIDER_CRAB_BITE,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -896,7 +872,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
ANIM_SPIDERCRAB_IDLE,
|
ANIM_SPIDERCRAB_IDLE,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_DEFAULT,
|
||||||
NPC_SENSOR_NONE,
|
NPC_SENSOR_NONE,
|
||||||
NPC_MOVEMENT_SPIDER_CRAB_SPAWNER,
|
NPC_MOVEMENT_STATIC,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
NPC_CLOSE_NONE,
|
NPC_CLOSE_NONE,
|
||||||
NPC_TIMER_NONE,
|
NPC_TIMER_NONE,
|
||||||
@ -910,7 +886,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_NONE,
|
NPC_SHOT_NONE,
|
||||||
ANIM_SPIDERCRAB_DIE,
|
ANIM_SPIDERCRAB_DIE,
|
||||||
ANIM_SPIDERCRAB_HIT,
|
ANIM_SPIDERCRAB_HIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -934,7 +909,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -958,7 +932,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_BABYOCTOPUS_DIE,
|
ANIM_BABYOCTOPUS_DIE,
|
||||||
ANIM_BABYOCTOPUS_HIT,
|
ANIM_BABYOCTOPUS_HIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -982,7 +955,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1006,7 +978,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1030,7 +1001,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1054,7 +1024,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1078,7 +1047,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1102,7 +1070,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
ANIM_SHARKMAN_DIE,
|
ANIM_SHARKMAN_DIE,
|
||||||
ANIM_SHARKMAN_BLOCK,
|
ANIM_SHARKMAN_BLOCK,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1126,7 +1093,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1150,7 +1116,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1174,7 +1139,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1198,7 +1162,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1222,7 +1185,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1246,7 +1208,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
ANIM_FLYINGDUTCHMAN_GETHIT,
|
ANIM_FLYINGDUTCHMAN_GETHIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1270,7 +1231,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
ANIM_IRONDOGFISH_GETHIT,
|
ANIM_IRONDOGFISH_GETHIT,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1294,7 +1254,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -1318,7 +1277,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||||||
NPC_SHOT_GENERIC,
|
NPC_SHOT_GENERIC,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
NPC_COLLISION_GENERIC,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSCRAB_H__
|
||||||
|
#include "enemy\nscrab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __GAME_GAME_H__
|
#ifndef __GAME_GAME_H__
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
@ -28,7 +32,61 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void CNpcEnemy::processCloseSpiderCrabAttack( int _frames )
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool CNpcSpiderCrabEnemy::processSensor()
|
||||||
|
{
|
||||||
|
switch( m_sensorFunc )
|
||||||
|
{
|
||||||
|
case NPC_SENSOR_NONE:
|
||||||
|
return( false );
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if ( playerXDistSqr + playerYDistSqr < 10000 )
|
||||||
|
{
|
||||||
|
// only attack if within path extents
|
||||||
|
|
||||||
|
s32 minX, maxX;
|
||||||
|
m_npcPath.getPathXExtents( &minX, &maxX );
|
||||||
|
|
||||||
|
if ( playerXDist < 0 )
|
||||||
|
{
|
||||||
|
m_extendDir = EXTEND_LEFT;
|
||||||
|
|
||||||
|
if ( ( Pos.vx + playerXDist - 128 ) < minX )
|
||||||
|
{
|
||||||
|
return( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_extendDir = EXTEND_RIGHT;
|
||||||
|
|
||||||
|
if ( ( Pos.vx + playerXDist + 128 ) > maxX )
|
||||||
|
{
|
||||||
|
return( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_controlFunc = NPC_CONTROL_CLOSE;
|
||||||
|
m_extension = 0;
|
||||||
|
m_velocity = 5;
|
||||||
|
m_base = Pos;
|
||||||
|
|
||||||
|
return( true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcSpiderCrabEnemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
s32 velocity;
|
s32 velocity;
|
||||||
DVECTOR newPos = Pos;
|
DVECTOR newPos = Pos;
|
||||||
@ -112,7 +170,9 @@ void CNpcEnemy::processCloseSpiderCrabAttack( int _frames )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNpcEnemy::processSpiderCrabCollision()
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcSpiderCrabEnemy::processCollision()
|
||||||
{
|
{
|
||||||
if ( m_oldControlFunc == NPC_CONTROL_CLOSE )
|
if ( m_oldControlFunc == NPC_CONTROL_CLOSE )
|
||||||
{
|
{
|
||||||
@ -148,7 +208,9 @@ void CNpcEnemy::processSpiderCrabCollision()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNpcEnemy::processSpiderCrabInitJumpMovement( int _frames )
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcSpiderCrabEnemy::processSpiderCrabInitJumpMovement( int _frames )
|
||||||
{
|
{
|
||||||
s32 velocity;
|
s32 velocity;
|
||||||
bool completed = false;
|
bool completed = false;
|
||||||
@ -189,44 +251,34 @@ void CNpcEnemy::processSpiderCrabInitJumpMovement( int _frames )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNpcEnemy::processSpiderCrabSpawnerMovement( int _frames )
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcSpiderCrabEnemy::processMovement(int _frames)
|
||||||
{
|
{
|
||||||
if ( getNumChildren() < 3 )
|
if ( _frames > 2 )
|
||||||
{
|
{
|
||||||
m_movementTimer -= _frames;
|
_frames = 2;
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_movementTimer < 0 )
|
s32 moveX = 0, moveY = 0;
|
||||||
|
s32 moveVel = 0;
|
||||||
|
s32 moveDist = 0;
|
||||||
|
|
||||||
|
if ( m_movementFunc == NPC_MOVEMENT_SPIDER_CRAB_INITJUMP )
|
||||||
|
{
|
||||||
|
processSpiderCrabInitJumpMovement( _frames );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
processGenericFixedPathWalk( _frames, &moveX, &moveY );
|
||||||
|
|
||||||
|
if ( !m_animPlaying )
|
||||||
{
|
{
|
||||||
m_movementTimer = 3 * GameState::getOneSecondInFrames();
|
m_animPlaying = true;
|
||||||
|
m_animNo = m_data[m_type].moveAnim;
|
||||||
CNpcEnemy *enemy;
|
m_frame = 0;
|
||||||
enemy = new( "spider crab" ) CNpcEnemy;
|
|
||||||
ASSERT(enemy);
|
|
||||||
enemy->setType( CNpcEnemy::NPC_SPIDER_CRAB );
|
|
||||||
enemy->init();
|
|
||||||
enemy->setLayerCollision( m_layerCollision );
|
|
||||||
enemy->setStartPos( Pos.vx >> 4, Pos.vy >> 4 );
|
|
||||||
|
|
||||||
CNpcWaypoint *sourceWaypoint = m_npcPath.getWaypointList();
|
|
||||||
|
|
||||||
if ( sourceWaypoint )
|
|
||||||
{
|
|
||||||
// skip first waypoint
|
|
||||||
|
|
||||||
sourceWaypoint = sourceWaypoint->nextWaypoint;
|
|
||||||
|
|
||||||
while( sourceWaypoint )
|
|
||||||
{
|
|
||||||
enemy->addWaypoint( sourceWaypoint->pos.vx >> 4, sourceWaypoint->pos.vy >> 4 );
|
|
||||||
sourceWaypoint = sourceWaypoint->nextWaypoint;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enemy->setPathType( m_npcPath.getPathType() );
|
|
||||||
|
|
||||||
enemy->postInit();
|
|
||||||
|
|
||||||
addChild( enemy );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
processMovementModifier( _frames, moveX, moveY, moveVel, moveDist );
|
||||||
}
|
}
|
@ -15,6 +15,14 @@
|
|||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSJFISH_H__
|
||||||
|
#include "enemy\nsjfish.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __UTILS_HEADER__
|
||||||
|
#include "utils\utils.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __GAME_GAME_H__
|
#ifndef __GAME_GAME_H__
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
@ -23,94 +31,17 @@
|
|||||||
#include "player\player.h"
|
#include "player\player.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void CNpcSmallJellyfishEnemy::render()
|
||||||
void CNpcEnemy::processSmallJellyfishMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange )
|
|
||||||
{
|
{
|
||||||
s32 newX, newY;
|
CNpcEnemy::render();
|
||||||
s32 preShiftX, preShiftY;
|
|
||||||
s16 headingVal;
|
|
||||||
|
|
||||||
//u16 jellyfishData[5] = { 96, 192, 256, 192, 128, };
|
if ( SprFrame )
|
||||||
u16 jellyfishData[6] = { 256, 192, 96, 48, 96, 128, };
|
|
||||||
|
|
||||||
u32 dataPoint;
|
|
||||||
|
|
||||||
m_movementTimer += _frames;
|
|
||||||
|
|
||||||
if ( m_movementTimer > GameState::getOneSecondInFrames() )
|
|
||||||
{
|
{
|
||||||
m_movementTimer = 0;
|
setRGB0( SprFrame, 255, 128, 255 );
|
||||||
}
|
}
|
||||||
|
|
||||||
dataPoint = 5 * m_movementTimer;
|
|
||||||
|
|
||||||
if ( dataPoint != 0 )
|
|
||||||
{
|
|
||||||
dataPoint /= GameState::getOneSecondInFrames();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_frame = ( ( m_movementTimer * ( m_actorGfx->getFrameCount(m_animNo) - 1 ) << 8 ) ) / GameState::getOneSecondInFrames();
|
|
||||||
|
|
||||||
s32 resistance;
|
|
||||||
s32 absVelocity = abs( m_velocity );
|
|
||||||
s32 reqVelocity = dist;
|
|
||||||
|
|
||||||
resistance = _frames * NPC_JELLYFISH_RESISTANCE;
|
|
||||||
|
|
||||||
if ( absVelocity < resistance )
|
|
||||||
{
|
|
||||||
resistance = absVelocity;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( absVelocity != 0 )
|
|
||||||
{
|
|
||||||
resistance = -( resistance * m_velocity ) / absVelocity;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
resistance = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_velocity += resistance;
|
|
||||||
|
|
||||||
headingVal = abs( headingChange );
|
|
||||||
if ( headingVal > 128 )
|
|
||||||
{
|
|
||||||
headingVal = 128;
|
|
||||||
}
|
|
||||||
|
|
||||||
reqVelocity = dist * jellyfishData[dataPoint];
|
|
||||||
reqVelocity >>= 8;
|
|
||||||
reqVelocity *= 128 + ( 128 - headingVal );
|
|
||||||
reqVelocity >>= 8;
|
|
||||||
|
|
||||||
s32 absReqVelocity = abs( reqVelocity );
|
|
||||||
|
|
||||||
if ( absReqVelocity > absVelocity )
|
|
||||||
{
|
|
||||||
m_velocity += reqVelocity >> 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
preShiftX = ( m_velocity >> 8 ) * rcos( m_heading );
|
|
||||||
preShiftY = ( m_velocity >> 8 ) * rsin( m_heading );
|
|
||||||
|
|
||||||
newX = preShiftX >> 12;
|
|
||||||
if ( !newX && preShiftX )
|
|
||||||
{
|
|
||||||
newX = preShiftX / abs( preShiftX );
|
|
||||||
}
|
|
||||||
|
|
||||||
newY = preShiftY >> 12;
|
|
||||||
if ( !newY && preShiftY )
|
|
||||||
{
|
|
||||||
newY = preShiftY / abs( preShiftY );
|
|
||||||
}
|
|
||||||
|
|
||||||
Pos.vx += newX;
|
|
||||||
Pos.vy += newY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNpcEnemy::processCloseSmallJellyfishEvade( int _frames )
|
void CNpcSmallJellyfishEnemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
s32 moveX = 0, moveY = 0;
|
s32 moveX = 0, moveY = 0;
|
||||||
|
|
||||||
@ -241,3 +172,113 @@ void CNpcEnemy::processCloseSmallJellyfishEvade( int _frames )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CNpcSmallJellyfishEnemy::processSensor()
|
||||||
|
{
|
||||||
|
switch( m_sensorFunc )
|
||||||
|
{
|
||||||
|
case NPC_SENSOR_NONE:
|
||||||
|
return( false );
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if ( playerXDistSqr + playerYDistSqr < 5625 )
|
||||||
|
{
|
||||||
|
m_controlFunc = NPC_CONTROL_CLOSE;
|
||||||
|
m_evadeClockwise = getRnd() % 2;
|
||||||
|
|
||||||
|
return( true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNpcSmallJellyfishEnemy::processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange )
|
||||||
|
{
|
||||||
|
s32 newX, newY;
|
||||||
|
s32 preShiftX, preShiftY;
|
||||||
|
s16 headingVal;
|
||||||
|
|
||||||
|
//u16 jellyfishData[5] = { 96, 192, 256, 192, 128, };
|
||||||
|
u16 jellyfishData[6] = { 256, 192, 96, 48, 96, 128, };
|
||||||
|
|
||||||
|
u32 dataPoint;
|
||||||
|
|
||||||
|
m_movementTimer += _frames;
|
||||||
|
|
||||||
|
if ( m_movementTimer > GameState::getOneSecondInFrames() )
|
||||||
|
{
|
||||||
|
m_movementTimer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataPoint = 5 * m_movementTimer;
|
||||||
|
|
||||||
|
if ( dataPoint != 0 )
|
||||||
|
{
|
||||||
|
dataPoint /= GameState::getOneSecondInFrames();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_frame = ( ( m_movementTimer * ( m_actorGfx->getFrameCount(m_animNo) - 1 ) << 8 ) ) / GameState::getOneSecondInFrames();
|
||||||
|
|
||||||
|
s32 resistance;
|
||||||
|
s32 absVelocity = abs( m_velocity );
|
||||||
|
s32 reqVelocity = dist;
|
||||||
|
|
||||||
|
resistance = _frames * NPC_JELLYFISH_RESISTANCE;
|
||||||
|
|
||||||
|
if ( absVelocity < resistance )
|
||||||
|
{
|
||||||
|
resistance = absVelocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( absVelocity != 0 )
|
||||||
|
{
|
||||||
|
resistance = -( resistance * m_velocity ) / absVelocity;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resistance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_velocity += resistance;
|
||||||
|
|
||||||
|
headingVal = abs( headingChange );
|
||||||
|
if ( headingVal > 128 )
|
||||||
|
{
|
||||||
|
headingVal = 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
reqVelocity = dist * jellyfishData[dataPoint];
|
||||||
|
reqVelocity >>= 8;
|
||||||
|
reqVelocity *= 128 + ( 128 - headingVal );
|
||||||
|
reqVelocity >>= 8;
|
||||||
|
|
||||||
|
s32 absReqVelocity = abs( reqVelocity );
|
||||||
|
|
||||||
|
if ( absReqVelocity > absVelocity )
|
||||||
|
{
|
||||||
|
m_velocity += reqVelocity >> 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
preShiftX = ( m_velocity >> 8 ) * rcos( m_heading );
|
||||||
|
preShiftY = ( m_velocity >> 8 ) * rsin( m_heading );
|
||||||
|
|
||||||
|
newX = preShiftX >> 12;
|
||||||
|
if ( !newX && preShiftX )
|
||||||
|
{
|
||||||
|
newX = preShiftX / abs( preShiftX );
|
||||||
|
}
|
||||||
|
|
||||||
|
newY = preShiftY >> 12;
|
||||||
|
if ( !newY && preShiftY )
|
||||||
|
{
|
||||||
|
newY = preShiftY / abs( preShiftY );
|
||||||
|
}
|
||||||
|
|
||||||
|
Pos.vx += newX;
|
||||||
|
Pos.vy += newY;
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*=========================================================================
|
/*=========================================================================
|
||||||
|
|
||||||
nsjfish.cpp
|
nsjfish.h
|
||||||
|
|
||||||
Author: CRB
|
Author: CRB
|
||||||
Created:
|
Created:
|
||||||
@ -12,6 +12,7 @@
|
|||||||
===========================================================================*/
|
===========================================================================*/
|
||||||
|
|
||||||
#ifndef __ENEMY_NSJFISH_H__
|
#ifndef __ENEMY_NSJFISH_H__
|
||||||
|
#define __ENEMY_NSJFISH_H__
|
||||||
|
|
||||||
#ifndef __ENEMY_NPC_H__
|
#ifndef __ENEMY_NPC_H__
|
||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
@ -20,6 +21,7 @@
|
|||||||
class CNpcSmallJellyfishEnemy : public CNpcEnemy
|
class CNpcSmallJellyfishEnemy : public CNpcEnemy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
void render();
|
||||||
protected:
|
protected:
|
||||||
virtual bool processSensor();
|
virtual bool processSensor();
|
||||||
virtual void processClose( int _frames );
|
virtual void processClose( int _frames );
|
||||||
|
@ -27,10 +27,26 @@
|
|||||||
#include "enemy\npc.h"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSJFISH_H__
|
||||||
|
#include "enemy\nsjfish.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NHCRAB_H__
|
||||||
|
#include "enemy\nhcrab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NSCRAB_H__
|
||||||
|
#include "enemy\nscrab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ENEMY_NGEN_H__
|
#ifndef __ENEMY_NGEN_H__
|
||||||
#include "enemy\ngen.h"
|
#include "enemy\ngen.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NANEMONE_H__
|
||||||
|
#include "enemy\nanemone.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ENEMY_NPLATFRM_H__
|
#ifndef __ENEMY_NPLATFRM_H__
|
||||||
#include "enemy\nplatfrm.h"
|
#include "enemy\nplatfrm.h"
|
||||||
#endif
|
#endif
|
||||||
@ -309,51 +325,60 @@ void CGameScene::initLevel()
|
|||||||
case CActorPool::ACTOR_ENEMY_NPC:
|
case CActorPool::ACTOR_ENEMY_NPC:
|
||||||
{
|
{
|
||||||
CNpcEnemy *enemy;
|
CNpcEnemy *enemy;
|
||||||
enemy = new ("npc enemy") CNpcEnemy;
|
|
||||||
ASSERT(enemy);
|
|
||||||
enemy->setTypeFromMapEdit( actorList[actorNum]->Type );
|
|
||||||
enemy->init();
|
|
||||||
enemy->setLayerCollision( Level.getCollisionLayer() );
|
|
||||||
|
|
||||||
u16 *PntList=(u16*)MakePtr(actorList[actorNum],sizeof(sThingActor));
|
CNpcEnemy::NPC_UNIT_TYPE enemyType = CNpcEnemy::getTypeFromMapEdit( actorList[actorNum]->Type );
|
||||||
|
|
||||||
u16 newXPos, newYPos;
|
switch( enemyType )
|
||||||
|
|
||||||
newXPos = (u16) *PntList;
|
|
||||||
PntList++;
|
|
||||||
newYPos = (u16) *PntList;
|
|
||||||
PntList++;
|
|
||||||
|
|
||||||
enemy->setStartPos( newXPos, newYPos );
|
|
||||||
enemy->addWaypoint( newXPos, newYPos );
|
|
||||||
|
|
||||||
if ( actorList[actorNum]->PointCount > 1 )
|
|
||||||
{
|
{
|
||||||
for ( pointNum = 1 ; pointNum < actorList[actorNum]->PointCount ; pointNum++ )
|
case CNpcEnemy::NPC_SMALL_JELLYFISH_1:
|
||||||
{
|
{
|
||||||
newXPos = (u16) *PntList;
|
enemy = new ("small jellyfish") CNpcSmallJellyfishEnemy;
|
||||||
PntList++;
|
break;
|
||||||
newYPos = (u16) *PntList;
|
}
|
||||||
PntList++;
|
|
||||||
|
|
||||||
enemy->addWaypoint( newXPos, newYPos );
|
case CNpcEnemy::NPC_HERMIT_CRAB:
|
||||||
|
{
|
||||||
|
enemy = new ("hermit crab") CNpcHermitCrabEnemy;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ( pointNum == 1 )
|
case CNpcEnemy::NPC_SPIDER_CRAB:
|
||||||
{
|
{
|
||||||
enemy->setHeading( newXPos, newYPos );
|
enemy = new ("spider crab") CNpcSpiderCrabEnemy;
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CNpcEnemy::NPC_SPIDER_CRAB_SPAWNER:
|
||||||
|
{
|
||||||
|
enemy = new ("spider crab spawner") CNpcEnemyGenerator;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CNpcEnemy::NPC_ANEMONE_1:
|
||||||
|
{
|
||||||
|
enemy = new ("anemone 1") CNpcAnemone1Enemy;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CNpcEnemy::NPC_ANEMONE_2:
|
||||||
|
{
|
||||||
|
enemy = new ("anemone 2") CNpcAnemone2Enemy;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CNpcEnemy::NPC_ANEMONE_3:
|
||||||
|
{
|
||||||
|
enemy = new ("anemone 3") CNpcAnemone3Enemy;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
enemy = new ("npc enemy") CNpcEnemy;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enemy->postInit();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case CActorPool::ACTOR_ENEMY_GENERATOR_NPC:
|
|
||||||
{
|
|
||||||
CNpcEnemyGenerator *enemy;
|
|
||||||
enemy = new ("npc enemy generator") CNpcEnemyGenerator;
|
|
||||||
ASSERT(enemy);
|
ASSERT(enemy);
|
||||||
enemy->setTypeFromMapEdit( actorList[actorNum]->Type );
|
enemy->setTypeFromMapEdit( actorList[actorNum]->Type );
|
||||||
enemy->init();
|
enemy->init();
|
||||||
|
@ -58,7 +58,7 @@ CActorPool::ACTOR_TYPE CActorPool::actorType[39] =
|
|||||||
ACTOR_ENEMY_NPC, //Squiddart=35
|
ACTOR_ENEMY_NPC, //Squiddart=35
|
||||||
ACTOR_ENEMY_NPC, //Stomper=36
|
ACTOR_ENEMY_NPC, //Stomper=36
|
||||||
ACTOR_ENEMY_NPC, //DustDevil=37
|
ACTOR_ENEMY_NPC, //DustDevil=37
|
||||||
ACTOR_ENEMY_GENERATOR_NPC, //SiderCrabSpawner=38
|
ACTOR_ENEMY_NPC, //SiderCrabSpawner=38
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -69,7 +69,6 @@ public:
|
|||||||
ACTOR_PLAYER = 0,
|
ACTOR_PLAYER = 0,
|
||||||
ACTOR_FRIEND_NPC = 1,
|
ACTOR_FRIEND_NPC = 1,
|
||||||
ACTOR_ENEMY_NPC,
|
ACTOR_ENEMY_NPC,
|
||||||
ACTOR_ENEMY_GENERATOR_NPC,
|
|
||||||
ACTOR_UNKNOWN,
|
ACTOR_UNKNOWN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -113,6 +113,10 @@ SOURCE=..\..\..\source\enemy\nanemone.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nanemone.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\enemy\nbblob.cpp
|
SOURCE=..\..\..\source\enemy\nbblob.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@ -173,6 +177,10 @@ SOURCE=..\..\..\source\enemy\nhcrab.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nhcrab.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\enemy\nmjfish.cpp
|
SOURCE=..\..\..\source\enemy\nmjfish.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@ -217,6 +225,10 @@ SOURCE=..\..\..\source\enemy\nscrab.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nscrab.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\enemy\nshrkman.cpp
|
SOURCE=..\..\..\source\enemy\nshrkman.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@ -225,6 +237,10 @@ SOURCE=..\..\..\source\enemy\nsjfish.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\enemy\nsjfish.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\enemy\nsklfish.cpp
|
SOURCE=..\..\..\source\enemy\nsklfish.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
Loading…
Reference in New Issue
Block a user