This commit is contained in:
parent
f338710074
commit
63598d2f73
17 changed files with 363 additions and 72 deletions
|
@ -78,7 +78,8 @@ enemy_src := npc \
|
|||
nworm \
|
||||
nhcrab \
|
||||
nbblob \
|
||||
npuffa
|
||||
npuffa \
|
||||
ngen
|
||||
|
||||
projectl_src := projectl
|
||||
|
||||
|
|
26
source/enemy/ngen.cpp
Normal file
26
source/enemy/ngen.cpp
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*=========================================================================
|
||||
|
||||
ngen.cpp
|
||||
|
||||
Author: CRB
|
||||
Created:
|
||||
Project: Spongebob
|
||||
Purpose:
|
||||
|
||||
Copyright (c) 2001 Climax Development Ltd
|
||||
|
||||
===========================================================================*/
|
||||
|
||||
#ifndef __ENEMY_NGEN_H__
|
||||
#include "enemy\ngen.h"
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CNpcEnemyGenerator::render()
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
28
source/enemy/ngen.h
Normal file
28
source/enemy/ngen.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*=========================================================================
|
||||
|
||||
ngen.h
|
||||
|
||||
Author: CRB
|
||||
Created:
|
||||
Project: Spongebob
|
||||
Purpose:
|
||||
|
||||
Copyright (c) 2001 Climax Development Ltd
|
||||
|
||||
===========================================================================*/
|
||||
|
||||
#ifndef __ENEMY_NGEN_H__
|
||||
#define __ENEMY_NGEN_H__
|
||||
|
||||
|
||||
#ifndef __ENEMY_NPC_H__
|
||||
#include "enemy\npc.h"
|
||||
#endif
|
||||
|
||||
class CNpcEnemyGenerator : public CNpcEnemy
|
||||
{
|
||||
public:
|
||||
void render();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -261,6 +261,7 @@ void CNpcEnemy::init()
|
|||
|
||||
m_timerFunc = m_data[this->m_type].timerFunc;
|
||||
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
||||
m_movementFunc = m_data[this->m_type].movementFunc;
|
||||
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
|
||||
|
@ -560,6 +561,23 @@ void CNpcEnemy::postInit()
|
|||
break;
|
||||
}
|
||||
|
||||
case NPC_INIT_SPIDER_CRAB:
|
||||
{
|
||||
m_npcPath.setPathType( CNpcPath::PONG_PATH );
|
||||
|
||||
if ( m_layerCollision->getHeightFromGround( Pos.vx, Pos.vy, 16 ) < 0 )
|
||||
//if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
|
||||
{
|
||||
// starting off below ground, jump initially
|
||||
|
||||
m_velocity = 5;
|
||||
|
||||
m_movementFunc = NPC_MOVEMENT_SPIDER_CRAB_INITJUMP;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
|
||||
break;
|
||||
|
@ -590,6 +608,7 @@ void CNpcEnemy::reinit()
|
|||
|
||||
m_timerFunc = m_data[this->m_type].timerFunc;
|
||||
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
||||
m_movementFunc = m_data[this->m_type].movementFunc;
|
||||
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
|
||||
|
@ -623,18 +642,6 @@ void CNpcEnemy::shutdown()
|
|||
|
||||
delete m_actorGfx;
|
||||
|
||||
// remove child elements
|
||||
|
||||
CThing *List = this->getNext();
|
||||
|
||||
while ( List )
|
||||
{
|
||||
CThing *Next = List->getNext();
|
||||
List->shutdown();
|
||||
|
||||
List = Next;
|
||||
}
|
||||
|
||||
CEnemyThing::shutdown();
|
||||
|
||||
}
|
||||
|
@ -1156,7 +1163,7 @@ void CNpcEnemy::processMovement(int _frames)
|
|||
s32 moveVel = 0;
|
||||
s32 moveDist = 0;
|
||||
|
||||
switch( m_data[this->m_type].movementFunc )
|
||||
switch( m_movementFunc )
|
||||
{
|
||||
case NPC_MOVEMENT_STATIC:
|
||||
{
|
||||
|
@ -1280,6 +1287,20 @@ void CNpcEnemy::processMovement(int _frames)
|
|||
break;
|
||||
}
|
||||
|
||||
case NPC_MOVEMENT_SPIDER_CRAB_SPAWNER:
|
||||
{
|
||||
processSpiderCrabSpawnerMovement( _frames );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case NPC_MOVEMENT_SPIDER_CRAB_INITJUMP:
|
||||
{
|
||||
processSpiderCrabInitJumpMovement( _frames );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
|
||||
break;
|
||||
|
@ -1735,4 +1756,4 @@ void CNpcEnemy::caughtWithNet()
|
|||
{
|
||||
shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,6 +138,7 @@ public:
|
|||
NPC_MINE,
|
||||
NPC_BOOGER_MONSTER,
|
||||
NPC_SPIDER_CRAB,
|
||||
NPC_SPIDER_CRAB_SPAWNER,
|
||||
NPC_EYEBALL,
|
||||
NPC_BABY_OCTOPUS,
|
||||
NPC_ZOMBIE_FISH_FOLK,
|
||||
|
@ -209,6 +210,7 @@ protected:
|
|||
NPC_INIT_EYEBALL,
|
||||
NPC_INIT_BALL_BLOB,
|
||||
NPC_INIT_ANEMONE_2,
|
||||
NPC_INIT_SPIDER_CRAB,
|
||||
};
|
||||
|
||||
enum NPC_CONTROL_FUNC
|
||||
|
@ -292,6 +294,8 @@ protected:
|
|||
NPC_MOVEMENT_SHARK_MAN,
|
||||
NPC_MOVEMENT_BALL_BLOB,
|
||||
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
|
||||
NPC_MOVEMENT_SPIDER_CRAB_SPAWNER,
|
||||
NPC_MOVEMENT_SPIDER_CRAB_INITJUMP,
|
||||
};
|
||||
|
||||
enum NPC_MOVEMENT_MODIFIER_FUNC
|
||||
|
@ -489,6 +493,8 @@ protected:
|
|||
|
||||
void processCloseSpiderCrabAttack( int _frames );
|
||||
void processSpiderCrabCollision();
|
||||
void processSpiderCrabSpawnerMovement( int _frames );
|
||||
void processSpiderCrabInitJumpMovement( int _frames );
|
||||
|
||||
// hermit crab functions
|
||||
|
||||
|
@ -586,6 +592,7 @@ protected:
|
|||
NPC_CONTROL_FUNC m_oldControlFunc;
|
||||
NPC_TIMER_FUNC m_timerFunc;
|
||||
NPC_SENSOR_FUNC m_sensorFunc;
|
||||
NPC_MOVEMENT_FUNC m_movementFunc;
|
||||
CNpcPath m_npcPath;
|
||||
s32 m_heading;
|
||||
s32 m_fireHeading;
|
||||
|
@ -625,6 +632,5 @@ protected:
|
|||
CNpcPositionHistory *m_positionHistory;
|
||||
};
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
#endif
|
||||
|
|
|
@ -870,7 +870,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
{ // NPC_SPIDER_CRAB
|
||||
ACTORS_SPIDERCRAB_SBK,
|
||||
ANIM_SPIDERCRAB_IDLE,
|
||||
NPC_INIT_DEFAULT,
|
||||
NPC_INIT_SPIDER_CRAB,
|
||||
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
|
||||
NPC_MOVEMENT_FIXED_PATH_WALK,
|
||||
NPC_MOVEMENT_MODIFIER_NONE,
|
||||
|
@ -891,6 +891,30 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
|||
false,
|
||||
},
|
||||
|
||||
{ // NPC_SPIDER_CRAB_SPAWNER
|
||||
ACTORS_SPIDERCRAB_SBK,
|
||||
ANIM_SPIDERCRAB_IDLE,
|
||||
NPC_INIT_DEFAULT,
|
||||
NPC_SENSOR_NONE,
|
||||
NPC_MOVEMENT_SPIDER_CRAB_SPAWNER,
|
||||
NPC_MOVEMENT_MODIFIER_NONE,
|
||||
NPC_CLOSE_NONE,
|
||||
NPC_TIMER_NONE,
|
||||
false,
|
||||
3,
|
||||
2048,
|
||||
DETECT_NO_COLLISION,
|
||||
DAMAGE__PINCH_ENEMY,
|
||||
0,
|
||||
ANIM_SPIDERCRAB_RUN,
|
||||
NPC_SHOT_NONE,
|
||||
ANIM_SPIDERCRAB_DIE,
|
||||
ANIM_SPIDERCRAB_HIT,
|
||||
NPC_COLLISION_GENERIC,
|
||||
false,
|
||||
false,
|
||||
},
|
||||
|
||||
{ // NPC_EYEBALL
|
||||
ACTORS_EYEBALL_SBK,
|
||||
ANIM_EYEBALL_STALK,
|
||||
|
@ -1330,6 +1354,7 @@ CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::mapEditConvertTable[NPC_UNIT_TYPE_MAX] =
|
|||
NPC_SQUID_DART,
|
||||
NPC_SKULL_STOMPER,
|
||||
NPC_DUST_DEVIL,
|
||||
NPC_SPIDER_CRAB_SPAWNER,
|
||||
NPC_FALLING_ITEM,
|
||||
NPC_FISH_HOOK,
|
||||
NPC_PENDULUM,
|
||||
|
|
|
@ -147,6 +147,11 @@ void CNpcPath::setPathType( u8 newPathType )
|
|||
pathType = (NPC_PATH_TYPE) newPathType;
|
||||
}
|
||||
|
||||
u8 CNpcPath::getPathType()
|
||||
{
|
||||
return( pathType );
|
||||
}
|
||||
|
||||
bool CNpcPath::incPath()
|
||||
{
|
||||
if ( !reversePath )
|
||||
|
@ -349,4 +354,9 @@ bool CNpcPath::thinkVertical( DVECTOR currentPos, bool *pathComplete, s32 *distX
|
|||
}
|
||||
|
||||
return( pointChange );
|
||||
}
|
||||
}
|
||||
|
||||
CNpcWaypoint *CNpcPath::getWaypointList()
|
||||
{
|
||||
return( waypoint );
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ public:
|
|||
void addWaypoint( DVECTOR newPos );
|
||||
void removeAllWaypoints();
|
||||
void setPathType( u8 newPathType );
|
||||
u8 getPathType();
|
||||
bool incPath();
|
||||
void resetPath();
|
||||
void reversePathDir();
|
||||
|
@ -49,6 +50,7 @@ public:
|
|||
bool getDistToNextWaypoint( DVECTOR currentPos, s32 *distX, s32 *distY );
|
||||
void getPathXExtents( s32 *minExtent, s32 *maxExtent );
|
||||
void getPathYExtents( s32 *minExtent, s32 *maxExtent );
|
||||
CNpcWaypoint *getWaypointList();
|
||||
|
||||
private:
|
||||
CNpcWaypoint *waypoint;
|
||||
|
|
|
@ -146,4 +146,87 @@ void CNpcEnemy::processSpiderCrabCollision()
|
|||
|
||||
m_controlFunc = m_oldControlFunc;
|
||||
}
|
||||
}
|
||||
|
||||
void CNpcEnemy::processSpiderCrabInitJumpMovement( int _frames )
|
||||
{
|
||||
s32 velocity;
|
||||
bool completed = false;
|
||||
bool collision = false;
|
||||
|
||||
if ( m_animNo != ANIM_SPIDERCRAB_JUMP )
|
||||
{
|
||||
m_animPlaying = true;
|
||||
m_animNo = ANIM_SPIDERCRAB_JUMP;
|
||||
m_frame = 0;
|
||||
}
|
||||
|
||||
velocity = m_velocity * _frames;
|
||||
|
||||
m_extension += velocity;
|
||||
|
||||
if ( m_extension > 128 )
|
||||
{
|
||||
m_extension = 128;
|
||||
completed = true;
|
||||
}
|
||||
|
||||
Pos.vy = m_base.vy - ( ( 50 * rsin( abs( m_extension ) << 4 ) ) >> 12 );
|
||||
|
||||
if ( m_extension > 64 )
|
||||
{
|
||||
// check for collision on the way back down
|
||||
|
||||
if ( m_layerCollision->getHeightFromGround( Pos.vx, Pos.vy ) < 0 )
|
||||
{
|
||||
collision = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( completed || collision )
|
||||
{
|
||||
m_movementFunc = m_data[m_type].movementFunc;
|
||||
}
|
||||
}
|
||||
|
||||
void CNpcEnemy::processSpiderCrabSpawnerMovement( int _frames )
|
||||
{
|
||||
if ( getNumChildren() < 3 )
|
||||
{
|
||||
m_movementTimer -= _frames;
|
||||
|
||||
if ( m_movementTimer < 0 )
|
||||
{
|
||||
m_movementTimer = 3 * GameState::getOneSecondInFrames();
|
||||
|
||||
CNpcEnemy *enemy;
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -27,6 +27,10 @@
|
|||
#include "enemy\npc.h"
|
||||
#endif
|
||||
|
||||
#ifndef __ENEMY_NGEN_H__
|
||||
#include "enemy\ngen.h"
|
||||
#endif
|
||||
|
||||
#ifndef __ENEMY_NPLATFRM_H__
|
||||
#include "enemy\nplatfrm.h"
|
||||
#endif
|
||||
|
@ -109,7 +113,7 @@ const s32 Scale = (512<<12)/(256);
|
|||
|
||||
/*****************************************************************************/
|
||||
void CGameScene::init()
|
||||
{
|
||||
{
|
||||
// Setup Constant Camera Matrix
|
||||
SetIdentNoTrans(&CamMtx);
|
||||
CamMtx.t[2]=ZPos;
|
||||
|
@ -159,7 +163,7 @@ void CGameScene::shutdown()
|
|||
{
|
||||
// CFileIO::EnableASync(false);
|
||||
shutdownLevel();
|
||||
CSoundMediator::dumpSong();
|
||||
CSoundMediator::dumpSong();
|
||||
|
||||
m_pauseMenu->shutdown(); delete m_pauseMenu;
|
||||
s_genericFont->dump(); delete s_genericFont;
|
||||
|
@ -179,7 +183,7 @@ void CGameScene::render()
|
|||
/*****************************************************************************/
|
||||
void CGameScene::think(int _frames)
|
||||
{
|
||||
//#ifdef __USER_paul__
|
||||
//#ifdef __USER_paul__
|
||||
// if(!CConversation::isActive()&&PadGetDown(0)&PAD_START)
|
||||
// {
|
||||
// CConversation::trigger(SCRIPTS_SPEECHTEST_DAT);
|
||||
|
@ -201,7 +205,7 @@ void CGameScene::think(int _frames)
|
|||
s_levelFinished=false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(!m_pauseMenu->isActive()&&PadGetDown(0)&PAD_START&&canPause())
|
||||
{
|
||||
m_pauseMenu->select();
|
||||
|
@ -217,7 +221,7 @@ void CGameScene::think(int _frames)
|
|||
//PKG
|
||||
// if(camPos.vx<0){camPos.vx=0;PAUL_DBGMSG("cx<0");}
|
||||
// if(camPos.vy<0){camPos.vy=0;PAUL_DBGMSG("cy<0");}
|
||||
//PKG
|
||||
//PKG
|
||||
/* if (!s_levelFinished) */CBubicleFactory::setMapOffset(&camPos);
|
||||
/* if (!s_levelFinished) */Level.setCameraCentre(camPos);
|
||||
/* if (!s_levelFinished) */Level.think(_frames);
|
||||
|
@ -268,15 +272,15 @@ void CGameScene::initLevel()
|
|||
pos.vx+=64; createPickup(PICKUP__LIFE,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__SPATULA,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__JELLY_LAUNCHER_AMMO,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_MIXTURE,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_WAND,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__NET,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__GLASSES,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__SQUEAKY_SHOES,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BALLOON,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__HELMET,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__CORAL_BLOWER,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__QUEST_ITEM__TEST,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_MIXTURE,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_WAND,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__NET,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__GLASSES,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__SQUEAKY_SHOES,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__BALLOON,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__HELMET,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__CORAL_BLOWER,&pos);
|
||||
pos.vx+=64; createPickup(PICKUP__QUEST_ITEM__TEST,&pos);
|
||||
|
||||
// CNpcPlatform *platform;
|
||||
// platform=new ("test platform") CNpcPlatform;
|
||||
|
@ -351,6 +355,50 @@ void CGameScene::initLevel()
|
|||
break;
|
||||
}
|
||||
|
||||
case CActorPool::ACTOR_ENEMY_GENERATOR_NPC:
|
||||
{
|
||||
CNpcEnemyGenerator *enemy;
|
||||
enemy = new ("npc enemy generator") CNpcEnemyGenerator;
|
||||
ASSERT(enemy);
|
||||
enemy->setTypeFromMapEdit( actorList[actorNum]->Type );
|
||||
enemy->init();
|
||||
enemy->setLayerCollision( Level.getCollisionLayer() );
|
||||
|
||||
u16 *PntList=(u16*)MakePtr(actorList[actorNum],sizeof(sThingActor));
|
||||
|
||||
u16 newXPos, newYPos;
|
||||
|
||||
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++ )
|
||||
{
|
||||
newXPos = (u16) *PntList;
|
||||
PntList++;
|
||||
newYPos = (u16) *PntList;
|
||||
PntList++;
|
||||
|
||||
enemy->addWaypoint( newXPos, newYPos );
|
||||
|
||||
if ( pointNum == 1 )
|
||||
{
|
||||
enemy->setHeading( newXPos, newYPos );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enemy->postInit();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -418,4 +466,4 @@ void CGameScene::shutdownLevel()
|
|||
Level.shutdown();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*****************************************************************************/
|
|
@ -18,46 +18,47 @@ int ShadowYOfs=32;
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
CActorPool::ACTOR_TYPE CActorPool::actorType[38] =
|
||||
CActorPool::ACTOR_TYPE CActorPool::actorType[39] =
|
||||
{
|
||||
ACTOR_PLAYER, //SpongeBob=0
|
||||
ACTOR_FRIEND_NPC, //BarnacleBoy=1
|
||||
ACTOR_FRIEND_NPC, //Gary=2
|
||||
ACTOR_FRIEND_NPC, //Krusty=3
|
||||
ACTOR_FRIEND_NPC, //MermaidMan=4
|
||||
ACTOR_FRIEND_NPC, //Patrick=5
|
||||
ACTOR_FRIEND_NPC, //Sandy=6
|
||||
ACTOR_FRIEND_NPC, //Squidward=7
|
||||
ACTOR_FRIEND_NPC, //Plankton=8
|
||||
ACTOR_PLAYER, //SpongeBob=0
|
||||
ACTOR_FRIEND_NPC, //BarnacleBoy=1
|
||||
ACTOR_FRIEND_NPC, //Gary=2
|
||||
ACTOR_FRIEND_NPC, //Krusty=3
|
||||
ACTOR_FRIEND_NPC, //MermaidMan=4
|
||||
ACTOR_FRIEND_NPC, //Patrick=5
|
||||
ACTOR_FRIEND_NPC, //Sandy=6
|
||||
ACTOR_FRIEND_NPC, //Squidward=7
|
||||
ACTOR_FRIEND_NPC, //Plankton=8
|
||||
ACTOR_UNKNOWN,
|
||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level1=10
|
||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level2=11
|
||||
ACTOR_ENEMY_NPC, //Motherjellyfish=12
|
||||
ACTOR_ENEMY_NPC, //Anenome-Level1=13
|
||||
ACTOR_ENEMY_NPC, //SpikeyAnenome=14
|
||||
ACTOR_ENEMY_NPC, //Anenome-Level3=15
|
||||
ACTOR_ENEMY_NPC, //BabyOctopus=16
|
||||
ACTOR_ENEMY_NPC, //Ballblob=17
|
||||
ACTOR_ENEMY_NPC, //Boogermonster=18
|
||||
ACTOR_ENEMY_NPC, //Caterpillar=19
|
||||
ACTOR_ENEMY_NPC, //Clam-Level1=20
|
||||
ACTOR_ENEMY_NPC, //Clam-Level2=21
|
||||
ACTOR_ENEMY_NPC, //Eyeball=22
|
||||
ACTOR_ENEMY_NPC, //Flamingskull=23
|
||||
ACTOR_ENEMY_NPC, //FlyingDutchman=24
|
||||
ACTOR_ENEMY_NPC, //Ghost=25
|
||||
ACTOR_ENEMY_NPC, //GiantWorm=26
|
||||
ACTOR_ENEMY_NPC, //HermitCrab=27
|
||||
ACTOR_ENEMY_NPC, //IronDogFish=28
|
||||
ACTOR_ENEMY_NPC, //PuffaFish=29
|
||||
ACTOR_ENEMY_NPC, //SeaSnake=30
|
||||
ACTOR_ENEMY_NPC, //Sharkman=31
|
||||
ACTOR_ENEMY_NPC, //SharkSub=32
|
||||
ACTOR_ENEMY_NPC, //Skeletalfish=33
|
||||
ACTOR_ENEMY_NPC, //SpiderCrab=34
|
||||
ACTOR_ENEMY_NPC, //Squiddart=35
|
||||
ACTOR_ENEMY_NPC, //Stomper=36
|
||||
ACTOR_ENEMY_NPC, //DustDevil=37
|
||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level1=10
|
||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level2=11
|
||||
ACTOR_ENEMY_NPC, //Motherjellyfish=12
|
||||
ACTOR_ENEMY_NPC, //Anenome-Level1=13
|
||||
ACTOR_ENEMY_NPC, //SpikeyAnenome=14
|
||||
ACTOR_ENEMY_NPC, //Anenome-Level3=15
|
||||
ACTOR_ENEMY_NPC, //BabyOctopus=16
|
||||
ACTOR_ENEMY_NPC, //Ballblob=17
|
||||
ACTOR_ENEMY_NPC, //Boogermonster=18
|
||||
ACTOR_ENEMY_NPC, //Caterpillar=19
|
||||
ACTOR_ENEMY_NPC, //Clam-Level1=20
|
||||
ACTOR_ENEMY_NPC, //Clam-Level2=21
|
||||
ACTOR_ENEMY_NPC, //Eyeball=22
|
||||
ACTOR_ENEMY_NPC, //Flamingskull=23
|
||||
ACTOR_ENEMY_NPC, //FlyingDutchman=24
|
||||
ACTOR_ENEMY_NPC, //Ghost=25
|
||||
ACTOR_ENEMY_NPC, //GiantWorm=26
|
||||
ACTOR_ENEMY_NPC, //HermitCrab=27
|
||||
ACTOR_ENEMY_NPC, //IronDogFish=28
|
||||
ACTOR_ENEMY_NPC, //PuffaFish=29
|
||||
ACTOR_ENEMY_NPC, //SeaSnake=30
|
||||
ACTOR_ENEMY_NPC, //Sharkman=31
|
||||
ACTOR_ENEMY_NPC, //SharkSub=32
|
||||
ACTOR_ENEMY_NPC, //Skeletalfish=33
|
||||
ACTOR_ENEMY_NPC, //SpiderCrab=34
|
||||
ACTOR_ENEMY_NPC, //Squiddart=35
|
||||
ACTOR_ENEMY_NPC, //Stomper=36
|
||||
ACTOR_ENEMY_NPC, //DustDevil=37
|
||||
ACTOR_ENEMY_GENERATOR_NPC, //SiderCrabSpawner=38
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -69,6 +69,7 @@ public:
|
|||
ACTOR_PLAYER = 0,
|
||||
ACTOR_FRIEND_NPC = 1,
|
||||
ACTOR_ENEMY_NPC,
|
||||
ACTOR_ENEMY_GENERATOR_NPC,
|
||||
ACTOR_UNKNOWN,
|
||||
};
|
||||
|
||||
|
|
|
@ -354,6 +354,7 @@ void CThing::init()
|
|||
{
|
||||
Parent=NULL;
|
||||
Next=NULL;
|
||||
m_numChildren = 0;
|
||||
|
||||
Pos.vx=Pos.vy=10;
|
||||
|
||||
|
@ -511,12 +512,14 @@ CThing *List=Next;
|
|||
}
|
||||
List->Next=Child;
|
||||
Child->Parent=this;
|
||||
m_numChildren++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// List does not exist, create
|
||||
Next = Child;
|
||||
Child->Parent=this;
|
||||
m_numChildren++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -552,6 +555,8 @@ CThing *Last=NULL;
|
|||
this->Next = List->Next;
|
||||
}
|
||||
|
||||
m_numChildren--;
|
||||
|
||||
Child->Parent=NULL;
|
||||
}
|
||||
|
||||
|
@ -573,6 +578,19 @@ CThing *List=Next;
|
|||
List=Next;
|
||||
}
|
||||
Next=NULL;
|
||||
|
||||
m_numChildren = 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int CThing::getNumChildren()
|
||||
{
|
||||
return( m_numChildren );
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
|
|
@ -106,6 +106,7 @@ public:
|
|||
void removeChild(CThing *Child);
|
||||
void removeAllChild();
|
||||
bool hasChild(CThing *Child);
|
||||
int getNumChildren();
|
||||
|
||||
|
||||
DVECTOR getPos() {return Pos;}
|
||||
|
@ -122,7 +123,8 @@ protected:
|
|||
|
||||
// Linkage
|
||||
CThing *Parent,*Next;
|
||||
|
||||
// Count
|
||||
int m_numChildren;
|
||||
// Pos
|
||||
DVECTOR Pos, PosLast, PosDelta;
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ SpiderCrab=34
|
|||
Squiddart=35
|
||||
Stomper=36
|
||||
DustDevil=37
|
||||
SpiderCrabSpawner=38
|
||||
|
||||
|
||||
################################################
|
||||
|
|
|
@ -352,3 +352,13 @@ TurnRate=0
|
|||
Collision=0
|
||||
Health=0
|
||||
AttackStrength=20
|
||||
|
||||
[SpiderCrabSpawner]
|
||||
Gfx=..\..\graphics\characters\spidercrab\render\psx\SpiderCrab_Idle0001.bmp
|
||||
WayPoints=16
|
||||
Speed=3
|
||||
TurnRate=0
|
||||
Collision=1
|
||||
Health=2
|
||||
# 1st shot stuns, if shot again is killed
|
||||
AttackStrength=20
|
||||
|
|
|
@ -149,6 +149,14 @@ SOURCE=..\..\..\source\enemy\ngary.cpp
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\enemy\ngen.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\enemy\ngen.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\enemy\ngeneric.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue