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 \
|
nworm \
|
||||||
nhcrab \
|
nhcrab \
|
||||||
nbblob \
|
nbblob \
|
||||||
npuffa
|
npuffa \
|
||||||
|
ngen
|
||||||
|
|
||||||
projectl_src := projectl
|
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_timerFunc = m_data[this->m_type].timerFunc;
|
||||||
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
||||||
|
m_movementFunc = m_data[this->m_type].movementFunc;
|
||||||
|
|
||||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||||
|
|
||||||
|
@ -560,6 +561,23 @@ void CNpcEnemy::postInit()
|
||||||
break;
|
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:
|
default:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -590,6 +608,7 @@ void CNpcEnemy::reinit()
|
||||||
|
|
||||||
m_timerFunc = m_data[this->m_type].timerFunc;
|
m_timerFunc = m_data[this->m_type].timerFunc;
|
||||||
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
m_sensorFunc = m_data[this->m_type].sensorFunc;
|
||||||
|
m_movementFunc = m_data[this->m_type].movementFunc;
|
||||||
|
|
||||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||||
|
|
||||||
|
@ -623,18 +642,6 @@ void CNpcEnemy::shutdown()
|
||||||
|
|
||||||
delete m_actorGfx;
|
delete m_actorGfx;
|
||||||
|
|
||||||
// remove child elements
|
|
||||||
|
|
||||||
CThing *List = this->getNext();
|
|
||||||
|
|
||||||
while ( List )
|
|
||||||
{
|
|
||||||
CThing *Next = List->getNext();
|
|
||||||
List->shutdown();
|
|
||||||
|
|
||||||
List = Next;
|
|
||||||
}
|
|
||||||
|
|
||||||
CEnemyThing::shutdown();
|
CEnemyThing::shutdown();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1156,7 +1163,7 @@ void CNpcEnemy::processMovement(int _frames)
|
||||||
s32 moveVel = 0;
|
s32 moveVel = 0;
|
||||||
s32 moveDist = 0;
|
s32 moveDist = 0;
|
||||||
|
|
||||||
switch( m_data[this->m_type].movementFunc )
|
switch( m_movementFunc )
|
||||||
{
|
{
|
||||||
case NPC_MOVEMENT_STATIC:
|
case NPC_MOVEMENT_STATIC:
|
||||||
{
|
{
|
||||||
|
@ -1280,6 +1287,20 @@ 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;
|
||||||
|
@ -1735,4 +1756,4 @@ void CNpcEnemy::caughtWithNet()
|
||||||
{
|
{
|
||||||
shutdown();
|
shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,7 @@ public:
|
||||||
NPC_MINE,
|
NPC_MINE,
|
||||||
NPC_BOOGER_MONSTER,
|
NPC_BOOGER_MONSTER,
|
||||||
NPC_SPIDER_CRAB,
|
NPC_SPIDER_CRAB,
|
||||||
|
NPC_SPIDER_CRAB_SPAWNER,
|
||||||
NPC_EYEBALL,
|
NPC_EYEBALL,
|
||||||
NPC_BABY_OCTOPUS,
|
NPC_BABY_OCTOPUS,
|
||||||
NPC_ZOMBIE_FISH_FOLK,
|
NPC_ZOMBIE_FISH_FOLK,
|
||||||
|
@ -209,6 +210,7 @@ protected:
|
||||||
NPC_INIT_EYEBALL,
|
NPC_INIT_EYEBALL,
|
||||||
NPC_INIT_BALL_BLOB,
|
NPC_INIT_BALL_BLOB,
|
||||||
NPC_INIT_ANEMONE_2,
|
NPC_INIT_ANEMONE_2,
|
||||||
|
NPC_INIT_SPIDER_CRAB,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NPC_CONTROL_FUNC
|
enum NPC_CONTROL_FUNC
|
||||||
|
@ -292,6 +294,8 @@ 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NPC_MOVEMENT_MODIFIER_FUNC
|
enum NPC_MOVEMENT_MODIFIER_FUNC
|
||||||
|
@ -489,6 +493,8 @@ protected:
|
||||||
|
|
||||||
void processCloseSpiderCrabAttack( int _frames );
|
void processCloseSpiderCrabAttack( int _frames );
|
||||||
void processSpiderCrabCollision();
|
void processSpiderCrabCollision();
|
||||||
|
void processSpiderCrabSpawnerMovement( int _frames );
|
||||||
|
void processSpiderCrabInitJumpMovement( int _frames );
|
||||||
|
|
||||||
// hermit crab functions
|
// hermit crab functions
|
||||||
|
|
||||||
|
@ -586,6 +592,7 @@ protected:
|
||||||
NPC_CONTROL_FUNC m_oldControlFunc;
|
NPC_CONTROL_FUNC m_oldControlFunc;
|
||||||
NPC_TIMER_FUNC m_timerFunc;
|
NPC_TIMER_FUNC m_timerFunc;
|
||||||
NPC_SENSOR_FUNC m_sensorFunc;
|
NPC_SENSOR_FUNC m_sensorFunc;
|
||||||
|
NPC_MOVEMENT_FUNC m_movementFunc;
|
||||||
CNpcPath m_npcPath;
|
CNpcPath m_npcPath;
|
||||||
s32 m_heading;
|
s32 m_heading;
|
||||||
s32 m_fireHeading;
|
s32 m_fireHeading;
|
||||||
|
@ -625,6 +632,5 @@ protected:
|
||||||
CNpcPositionHistory *m_positionHistory;
|
CNpcPositionHistory *m_positionHistory;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -870,7 +870,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||||
{ // NPC_SPIDER_CRAB
|
{ // NPC_SPIDER_CRAB
|
||||||
ACTORS_SPIDERCRAB_SBK,
|
ACTORS_SPIDERCRAB_SBK,
|
||||||
ANIM_SPIDERCRAB_IDLE,
|
ANIM_SPIDERCRAB_IDLE,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_SPIDER_CRAB,
|
||||||
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
|
NPC_SENSOR_SPIDER_CRAB_USER_CLOSE,
|
||||||
NPC_MOVEMENT_FIXED_PATH_WALK,
|
NPC_MOVEMENT_FIXED_PATH_WALK,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
|
@ -891,6 +891,30 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||||
false,
|
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
|
{ // NPC_EYEBALL
|
||||||
ACTORS_EYEBALL_SBK,
|
ACTORS_EYEBALL_SBK,
|
||||||
ANIM_EYEBALL_STALK,
|
ANIM_EYEBALL_STALK,
|
||||||
|
@ -1330,6 +1354,7 @@ CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::mapEditConvertTable[NPC_UNIT_TYPE_MAX] =
|
||||||
NPC_SQUID_DART,
|
NPC_SQUID_DART,
|
||||||
NPC_SKULL_STOMPER,
|
NPC_SKULL_STOMPER,
|
||||||
NPC_DUST_DEVIL,
|
NPC_DUST_DEVIL,
|
||||||
|
NPC_SPIDER_CRAB_SPAWNER,
|
||||||
NPC_FALLING_ITEM,
|
NPC_FALLING_ITEM,
|
||||||
NPC_FISH_HOOK,
|
NPC_FISH_HOOK,
|
||||||
NPC_PENDULUM,
|
NPC_PENDULUM,
|
||||||
|
|
|
@ -147,6 +147,11 @@ void CNpcPath::setPathType( u8 newPathType )
|
||||||
pathType = (NPC_PATH_TYPE) newPathType;
|
pathType = (NPC_PATH_TYPE) newPathType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 CNpcPath::getPathType()
|
||||||
|
{
|
||||||
|
return( pathType );
|
||||||
|
}
|
||||||
|
|
||||||
bool CNpcPath::incPath()
|
bool CNpcPath::incPath()
|
||||||
{
|
{
|
||||||
if ( !reversePath )
|
if ( !reversePath )
|
||||||
|
@ -349,4 +354,9 @@ bool CNpcPath::thinkVertical( DVECTOR currentPos, bool *pathComplete, s32 *distX
|
||||||
}
|
}
|
||||||
|
|
||||||
return( pointChange );
|
return( pointChange );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CNpcWaypoint *CNpcPath::getWaypointList()
|
||||||
|
{
|
||||||
|
return( waypoint );
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
void addWaypoint( DVECTOR newPos );
|
void addWaypoint( DVECTOR newPos );
|
||||||
void removeAllWaypoints();
|
void removeAllWaypoints();
|
||||||
void setPathType( u8 newPathType );
|
void setPathType( u8 newPathType );
|
||||||
|
u8 getPathType();
|
||||||
bool incPath();
|
bool incPath();
|
||||||
void resetPath();
|
void resetPath();
|
||||||
void reversePathDir();
|
void reversePathDir();
|
||||||
|
@ -49,6 +50,7 @@ public:
|
||||||
bool getDistToNextWaypoint( DVECTOR currentPos, s32 *distX, s32 *distY );
|
bool getDistToNextWaypoint( DVECTOR currentPos, s32 *distX, s32 *distY );
|
||||||
void getPathXExtents( s32 *minExtent, s32 *maxExtent );
|
void getPathXExtents( s32 *minExtent, s32 *maxExtent );
|
||||||
void getPathYExtents( s32 *minExtent, s32 *maxExtent );
|
void getPathYExtents( s32 *minExtent, s32 *maxExtent );
|
||||||
|
CNpcWaypoint *getWaypointList();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CNpcWaypoint *waypoint;
|
CNpcWaypoint *waypoint;
|
||||||
|
|
|
@ -146,4 +146,87 @@ void CNpcEnemy::processSpiderCrabCollision()
|
||||||
|
|
||||||
m_controlFunc = m_oldControlFunc;
|
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"
|
#include "enemy\npc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ENEMY_NGEN_H__
|
||||||
|
#include "enemy\ngen.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ENEMY_NPLATFRM_H__
|
#ifndef __ENEMY_NPLATFRM_H__
|
||||||
#include "enemy\nplatfrm.h"
|
#include "enemy\nplatfrm.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -109,7 +113,7 @@ const s32 Scale = (512<<12)/(256);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CGameScene::init()
|
void CGameScene::init()
|
||||||
{
|
{
|
||||||
// Setup Constant Camera Matrix
|
// Setup Constant Camera Matrix
|
||||||
SetIdentNoTrans(&CamMtx);
|
SetIdentNoTrans(&CamMtx);
|
||||||
CamMtx.t[2]=ZPos;
|
CamMtx.t[2]=ZPos;
|
||||||
|
@ -159,7 +163,7 @@ void CGameScene::shutdown()
|
||||||
{
|
{
|
||||||
// CFileIO::EnableASync(false);
|
// CFileIO::EnableASync(false);
|
||||||
shutdownLevel();
|
shutdownLevel();
|
||||||
CSoundMediator::dumpSong();
|
CSoundMediator::dumpSong();
|
||||||
|
|
||||||
m_pauseMenu->shutdown(); delete m_pauseMenu;
|
m_pauseMenu->shutdown(); delete m_pauseMenu;
|
||||||
s_genericFont->dump(); delete s_genericFont;
|
s_genericFont->dump(); delete s_genericFont;
|
||||||
|
@ -179,7 +183,7 @@ void CGameScene::render()
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CGameScene::think(int _frames)
|
void CGameScene::think(int _frames)
|
||||||
{
|
{
|
||||||
//#ifdef __USER_paul__
|
//#ifdef __USER_paul__
|
||||||
// if(!CConversation::isActive()&&PadGetDown(0)&PAD_START)
|
// if(!CConversation::isActive()&&PadGetDown(0)&PAD_START)
|
||||||
// {
|
// {
|
||||||
// CConversation::trigger(SCRIPTS_SPEECHTEST_DAT);
|
// CConversation::trigger(SCRIPTS_SPEECHTEST_DAT);
|
||||||
|
@ -201,7 +205,7 @@ void CGameScene::think(int _frames)
|
||||||
s_levelFinished=false;
|
s_levelFinished=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(!m_pauseMenu->isActive()&&PadGetDown(0)&PAD_START&&canPause())
|
if(!m_pauseMenu->isActive()&&PadGetDown(0)&PAD_START&&canPause())
|
||||||
{
|
{
|
||||||
m_pauseMenu->select();
|
m_pauseMenu->select();
|
||||||
|
@ -217,7 +221,7 @@ void CGameScene::think(int _frames)
|
||||||
//PKG
|
//PKG
|
||||||
// if(camPos.vx<0){camPos.vx=0;PAUL_DBGMSG("cx<0");}
|
// if(camPos.vx<0){camPos.vx=0;PAUL_DBGMSG("cx<0");}
|
||||||
// if(camPos.vy<0){camPos.vy=0;PAUL_DBGMSG("cy<0");}
|
// if(camPos.vy<0){camPos.vy=0;PAUL_DBGMSG("cy<0");}
|
||||||
//PKG
|
//PKG
|
||||||
/* if (!s_levelFinished) */CBubicleFactory::setMapOffset(&camPos);
|
/* if (!s_levelFinished) */CBubicleFactory::setMapOffset(&camPos);
|
||||||
/* if (!s_levelFinished) */Level.setCameraCentre(camPos);
|
/* if (!s_levelFinished) */Level.setCameraCentre(camPos);
|
||||||
/* if (!s_levelFinished) */Level.think(_frames);
|
/* 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__LIFE,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__SPATULA,&pos);
|
pos.vx+=64; createPickup(PICKUP__SPATULA,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__JELLY_LAUNCHER_AMMO,&pos);
|
pos.vx+=64; createPickup(PICKUP__JELLY_LAUNCHER_AMMO,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_MIXTURE,&pos);
|
pos.vx+=64; createPickup(PICKUP__BUBBLE_MIXTURE,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__BUBBLE_WAND,&pos);
|
pos.vx+=64; createPickup(PICKUP__BUBBLE_WAND,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__NET,&pos);
|
pos.vx+=64; createPickup(PICKUP__NET,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__GLASSES,&pos);
|
pos.vx+=64; createPickup(PICKUP__GLASSES,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__SQUEAKY_SHOES,&pos);
|
pos.vx+=64; createPickup(PICKUP__SQUEAKY_SHOES,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__BALLOON,&pos);
|
pos.vx+=64; createPickup(PICKUP__BALLOON,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__HELMET,&pos);
|
pos.vx+=64; createPickup(PICKUP__HELMET,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__CORAL_BLOWER,&pos);
|
pos.vx+=64; createPickup(PICKUP__CORAL_BLOWER,&pos);
|
||||||
pos.vx+=64; createPickup(PICKUP__QUEST_ITEM__TEST,&pos);
|
pos.vx+=64; createPickup(PICKUP__QUEST_ITEM__TEST,&pos);
|
||||||
|
|
||||||
// CNpcPlatform *platform;
|
// CNpcPlatform *platform;
|
||||||
// platform=new ("test platform") CNpcPlatform;
|
// platform=new ("test platform") CNpcPlatform;
|
||||||
|
@ -351,6 +355,50 @@ void CGameScene::initLevel()
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -418,4 +466,4 @@ void CGameScene::shutdownLevel()
|
||||||
Level.shutdown();
|
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_PLAYER, //SpongeBob=0
|
||||||
ACTOR_FRIEND_NPC, //BarnacleBoy=1
|
ACTOR_FRIEND_NPC, //BarnacleBoy=1
|
||||||
ACTOR_FRIEND_NPC, //Gary=2
|
ACTOR_FRIEND_NPC, //Gary=2
|
||||||
ACTOR_FRIEND_NPC, //Krusty=3
|
ACTOR_FRIEND_NPC, //Krusty=3
|
||||||
ACTOR_FRIEND_NPC, //MermaidMan=4
|
ACTOR_FRIEND_NPC, //MermaidMan=4
|
||||||
ACTOR_FRIEND_NPC, //Patrick=5
|
ACTOR_FRIEND_NPC, //Patrick=5
|
||||||
ACTOR_FRIEND_NPC, //Sandy=6
|
ACTOR_FRIEND_NPC, //Sandy=6
|
||||||
ACTOR_FRIEND_NPC, //Squidward=7
|
ACTOR_FRIEND_NPC, //Squidward=7
|
||||||
ACTOR_FRIEND_NPC, //Plankton=8
|
ACTOR_FRIEND_NPC, //Plankton=8
|
||||||
ACTOR_UNKNOWN,
|
ACTOR_UNKNOWN,
|
||||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level1=10
|
ACTOR_ENEMY_NPC, //SmallJellyfish-Level1=10
|
||||||
ACTOR_ENEMY_NPC, //SmallJellyfish-Level2=11
|
ACTOR_ENEMY_NPC, //SmallJellyfish-Level2=11
|
||||||
ACTOR_ENEMY_NPC, //Motherjellyfish=12
|
ACTOR_ENEMY_NPC, //Motherjellyfish=12
|
||||||
ACTOR_ENEMY_NPC, //Anenome-Level1=13
|
ACTOR_ENEMY_NPC, //Anenome-Level1=13
|
||||||
ACTOR_ENEMY_NPC, //SpikeyAnenome=14
|
ACTOR_ENEMY_NPC, //SpikeyAnenome=14
|
||||||
ACTOR_ENEMY_NPC, //Anenome-Level3=15
|
ACTOR_ENEMY_NPC, //Anenome-Level3=15
|
||||||
ACTOR_ENEMY_NPC, //BabyOctopus=16
|
ACTOR_ENEMY_NPC, //BabyOctopus=16
|
||||||
ACTOR_ENEMY_NPC, //Ballblob=17
|
ACTOR_ENEMY_NPC, //Ballblob=17
|
||||||
ACTOR_ENEMY_NPC, //Boogermonster=18
|
ACTOR_ENEMY_NPC, //Boogermonster=18
|
||||||
ACTOR_ENEMY_NPC, //Caterpillar=19
|
ACTOR_ENEMY_NPC, //Caterpillar=19
|
||||||
ACTOR_ENEMY_NPC, //Clam-Level1=20
|
ACTOR_ENEMY_NPC, //Clam-Level1=20
|
||||||
ACTOR_ENEMY_NPC, //Clam-Level2=21
|
ACTOR_ENEMY_NPC, //Clam-Level2=21
|
||||||
ACTOR_ENEMY_NPC, //Eyeball=22
|
ACTOR_ENEMY_NPC, //Eyeball=22
|
||||||
ACTOR_ENEMY_NPC, //Flamingskull=23
|
ACTOR_ENEMY_NPC, //Flamingskull=23
|
||||||
ACTOR_ENEMY_NPC, //FlyingDutchman=24
|
ACTOR_ENEMY_NPC, //FlyingDutchman=24
|
||||||
ACTOR_ENEMY_NPC, //Ghost=25
|
ACTOR_ENEMY_NPC, //Ghost=25
|
||||||
ACTOR_ENEMY_NPC, //GiantWorm=26
|
ACTOR_ENEMY_NPC, //GiantWorm=26
|
||||||
ACTOR_ENEMY_NPC, //HermitCrab=27
|
ACTOR_ENEMY_NPC, //HermitCrab=27
|
||||||
ACTOR_ENEMY_NPC, //IronDogFish=28
|
ACTOR_ENEMY_NPC, //IronDogFish=28
|
||||||
ACTOR_ENEMY_NPC, //PuffaFish=29
|
ACTOR_ENEMY_NPC, //PuffaFish=29
|
||||||
ACTOR_ENEMY_NPC, //SeaSnake=30
|
ACTOR_ENEMY_NPC, //SeaSnake=30
|
||||||
ACTOR_ENEMY_NPC, //Sharkman=31
|
ACTOR_ENEMY_NPC, //Sharkman=31
|
||||||
ACTOR_ENEMY_NPC, //SharkSub=32
|
ACTOR_ENEMY_NPC, //SharkSub=32
|
||||||
ACTOR_ENEMY_NPC, //Skeletalfish=33
|
ACTOR_ENEMY_NPC, //Skeletalfish=33
|
||||||
ACTOR_ENEMY_NPC, //SpiderCrab=34
|
ACTOR_ENEMY_NPC, //SpiderCrab=34
|
||||||
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
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -69,6 +69,7 @@ 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -354,6 +354,7 @@ void CThing::init()
|
||||||
{
|
{
|
||||||
Parent=NULL;
|
Parent=NULL;
|
||||||
Next=NULL;
|
Next=NULL;
|
||||||
|
m_numChildren = 0;
|
||||||
|
|
||||||
Pos.vx=Pos.vy=10;
|
Pos.vx=Pos.vy=10;
|
||||||
|
|
||||||
|
@ -511,12 +512,14 @@ CThing *List=Next;
|
||||||
}
|
}
|
||||||
List->Next=Child;
|
List->Next=Child;
|
||||||
Child->Parent=this;
|
Child->Parent=this;
|
||||||
|
m_numChildren++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// List does not exist, create
|
// List does not exist, create
|
||||||
Next = Child;
|
Next = Child;
|
||||||
Child->Parent=this;
|
Child->Parent=this;
|
||||||
|
m_numChildren++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,6 +555,8 @@ CThing *Last=NULL;
|
||||||
this->Next = List->Next;
|
this->Next = List->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_numChildren--;
|
||||||
|
|
||||||
Child->Parent=NULL;
|
Child->Parent=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,6 +578,19 @@ CThing *List=Next;
|
||||||
List=Next;
|
List=Next;
|
||||||
}
|
}
|
||||||
Next=NULL;
|
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 removeChild(CThing *Child);
|
||||||
void removeAllChild();
|
void removeAllChild();
|
||||||
bool hasChild(CThing *Child);
|
bool hasChild(CThing *Child);
|
||||||
|
int getNumChildren();
|
||||||
|
|
||||||
|
|
||||||
DVECTOR getPos() {return Pos;}
|
DVECTOR getPos() {return Pos;}
|
||||||
|
@ -122,7 +123,8 @@ protected:
|
||||||
|
|
||||||
// Linkage
|
// Linkage
|
||||||
CThing *Parent,*Next;
|
CThing *Parent,*Next;
|
||||||
|
// Count
|
||||||
|
int m_numChildren;
|
||||||
// Pos
|
// Pos
|
||||||
DVECTOR Pos, PosLast, PosDelta;
|
DVECTOR Pos, PosLast, PosDelta;
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ SpiderCrab=34
|
||||||
Squiddart=35
|
Squiddart=35
|
||||||
Stomper=36
|
Stomper=36
|
||||||
DustDevil=37
|
DustDevil=37
|
||||||
|
SpiderCrabSpawner=38
|
||||||
|
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
|
|
|
@ -352,3 +352,13 @@ TurnRate=0
|
||||||
Collision=0
|
Collision=0
|
||||||
Health=0
|
Health=0
|
||||||
AttackStrength=20
|
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
|
# End Source File
|
||||||
# Begin 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
|
SOURCE=..\..\..\source\enemy\ngeneric.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue