This commit is contained in:
Charles 2001-04-20 16:25:35 +00:00
parent 6a94ade948
commit b0a6481b14
4 changed files with 163 additions and 147 deletions

View file

@ -260,137 +260,169 @@ CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::getTypeFromMapEdit( u16 newType )
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CNpcEnemy *CNpcEnemy::Create(sThingActor *ThisActor) CNpcEnemy *CNpcEnemy::Create(sThingActor *ThisActor)
{ {
CNpcEnemy *enemy; CNpcEnemy *enemy;
CNpcEnemy::NPC_UNIT_TYPE enemyType = CNpcEnemy::getTypeFromMapEdit( ThisActor->Type ); NPC_UNIT_TYPE enemyType = CNpcEnemy::getTypeFromMapEdit( ThisActor->Type );
switch( enemyType ) switch( enemyType )
{ {
case CNpcEnemy::NPC_SMALL_JELLYFISH_1: case CNpcEnemy::NPC_SMALL_JELLYFISH_1:
{ {
enemy = new ("small jellyfish") CNpcSmallJellyfishEnemy; enemy = new ("small jellyfish") CNpcSmallJellyfishEnemy;
break; break;
} }
case CNpcEnemy::NPC_HERMIT_CRAB: case CNpcEnemy::NPC_HERMIT_CRAB:
{ {
enemy = new ("hermit crab") CNpcHermitCrabEnemy; enemy = new ("hermit crab") CNpcHermitCrabEnemy;
break; break;
} }
case CNpcEnemy::NPC_SPIDER_CRAB: case CNpcEnemy::NPC_SPIDER_CRAB:
{ {
enemy = new ("spider crab") CNpcSpiderCrabEnemy; enemy = new ("spider crab") CNpcSpiderCrabEnemy;
break; break;
} }
case CNpcEnemy::NPC_SPIDER_CRAB_SPAWNER: case CNpcEnemy::NPC_SPIDER_CRAB_SPAWNER:
{ {
enemy = new ("spider crab spawner") CNpcEnemyGenerator; enemy = new ("spider crab spawner") CNpcEnemyGenerator;
break; break;
} }
case CNpcEnemy::NPC_ANEMONE_1: case CNpcEnemy::NPC_ANEMONE_1:
{ {
enemy = new ("anemone 1") CNpcAnemone1Enemy; enemy = new ("anemone 1") CNpcAnemone1Enemy;
break; break;
} }
case CNpcEnemy::NPC_ANEMONE_2: case CNpcEnemy::NPC_ANEMONE_2:
{ {
enemy = new ("anemone 2") CNpcAnemone2Enemy; enemy = new ("anemone 2") CNpcAnemone2Enemy;
break; break;
} }
case CNpcEnemy::NPC_ANEMONE_3: case CNpcEnemy::NPC_ANEMONE_3:
{ {
enemy = new ("anemone 3") CNpcAnemone3Enemy; enemy = new ("anemone 3") CNpcAnemone3Enemy;
break; break;
} }
case CNpcEnemy::NPC_CLAM_JUMP: case CNpcEnemy::NPC_CLAM_JUMP:
{ {
enemy = new ("jumping clam") CNpcJumpingClamEnemy; enemy = new ("jumping clam") CNpcJumpingClamEnemy;
break; break;
} }
case CNpcEnemy::NPC_CLAM_STATIC: case CNpcEnemy::NPC_CLAM_STATIC:
{ {
enemy = new ("static clam") CNpcStaticClamEnemy; enemy = new ("static clam") CNpcStaticClamEnemy;
break; break;
} }
case CNpcEnemy::NPC_BABY_OCTOPUS: case CNpcEnemy::NPC_BABY_OCTOPUS:
{ {
enemy = new ("baby octopus") CNpcBabyOctopusEnemy; enemy = new ("baby octopus") CNpcBabyOctopusEnemy;
break; break;
} }
case CNpcEnemy::NPC_FISH_FOLK: case CNpcEnemy::NPC_FISH_FOLK:
case CNpcEnemy::NPC_ZOMBIE_FISH_FOLK: case CNpcEnemy::NPC_ZOMBIE_FISH_FOLK:
{ {
enemy = new ("fish folk") CNpcFishFolk; enemy = new ("fish folk") CNpcFishFolk;
break; break;
} }
case CNpcEnemy::NPC_BALL_BLOB: case CNpcEnemy::NPC_BALL_BLOB:
{ {
enemy = new ("ball blob") CNpcBallBlobEnemy; enemy = new ("ball blob") CNpcBallBlobEnemy;
break; break;
} }
case CNpcEnemy::NPC_GHOST_PIRATE: case CNpcEnemy::NPC_GHOST_PIRATE:
{ {
enemy = new ("ghost pirate") CNpcGhostPirateEnemy; enemy = new ("ghost pirate") CNpcGhostPirateEnemy;
break; break;
} }
case CNpcEnemy::NPC_PUFFA_FISH: case CNpcEnemy::NPC_PUFFA_FISH:
{ {
enemy = new ("puffa fish") CNpcPuffaFishEnemy; enemy = new ("puffa fish") CNpcPuffaFishEnemy;
break; break;
} }
case CNpcEnemy::NPC_SHARK_MAN: case CNpcEnemy::NPC_SHARK_MAN:
{ {
enemy = new ("shark man") CNpcSharkManEnemy; enemy = new ("shark man") CNpcSharkManEnemy;
break; break;
} }
case CNpcEnemy::NPC_SKELETAL_FISH: case CNpcEnemy::NPC_SKELETAL_FISH:
{ {
enemy = new ("skeletal fish") CNpcSkeletalFishEnemy; enemy = new ("skeletal fish") CNpcSkeletalFishEnemy;
break; break;
} }
case CNpcEnemy::NPC_EYEBALL: case CNpcEnemy::NPC_EYEBALL:
{ {
enemy = new ("eyeball") CNpcEyeballEnemy; enemy = new ("eyeball") CNpcEyeballEnemy;
break; break;
} }
case CNpcEnemy::NPC_FLAMING_SKULL: case CNpcEnemy::NPC_FLAMING_SKULL:
{ {
enemy = new ("flaming skull") CNpcFlamingSkullEnemy; enemy = new ("flaming skull") CNpcFlamingSkullEnemy;
break; break;
} }
default: default:
{ {
enemy = new ("npc enemy") CNpcEnemy; enemy = new ("npc enemy") CNpcEnemy;
break; break;
} }
} }
ASSERT(enemy);
return(enemy); ASSERT(enemy);
enemy->setType( enemyType );
enemy->init();
return(enemy);
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcEnemy::setTypeFromMapEdit( u16 newType ) void CNpcEnemy::setupWaypoints( sThingActor *ThisActor )
{ {
m_type = mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET]; u16 *PntList=(u16*)MakePtr(ThisActor,sizeof(sThingActor));
u16 newXPos, newYPos;
newXPos = (u16) *PntList;
PntList++;
newYPos = (u16) *PntList;
PntList++;
setStartPos( newXPos, newYPos );
addWaypoint( newXPos, newYPos );
if ( ThisActor->PointCount > 1 )
{
for (int pointNum = 1 ; pointNum < ThisActor->PointCount ; pointNum++ )
{
newXPos = (u16) *PntList;
PntList++;
newYPos = (u16) *PntList;
PntList++;
addWaypoint( newXPos, newYPos );
if ( pointNum == 1 )
{
setHeading( newXPos, newYPos );
}
}
}
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -1600,10 +1632,7 @@ void CNpcEnemy::render()
{ {
if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() ) if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() )
{ {
if (m_actorGfx) SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed);
SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed);
else
SprFrame = m_spriteBank->printFT4(m_frame>>8,renderPos.vx,renderPos.vy,m_reversed,0,10);
} }
} }
} }

View file

@ -166,7 +166,6 @@ public:
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 );
static NPC_UNIT_TYPE getTypeFromMapEdit( 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 );
@ -179,6 +178,7 @@ public:
virtual int getFrameCount(); virtual int getFrameCount();
static CNpcEnemy *Create(sThingActor *ThisActor); static CNpcEnemy *Create(sThingActor *ThisActor);
void setupWaypoints( sThingActor *ThisActor );
protected: protected:

View file

@ -31,15 +31,34 @@
#include "player\player.h" #include "player\player.h"
#endif #endif
#ifndef __VID_HEADER_
#include "system\vid.h"
#endif
void CNpcSmallJellyfishEnemy::render() void CNpcSmallJellyfishEnemy::render()
{ {
CNpcEnemy::render(); SprFrame = NULL;
if ( SprFrame ) if ( m_isActive )
{ {
setRGB0( SprFrame, 255, 128, 255 ); CEnemyThing::render();
}
// Render
DVECTOR renderPos;
DVECTOR offset = CLevel::getCameraPos();
renderPos.vx = Pos.vx - offset.vx;
renderPos.vy = Pos.vy - offset.vy;
if ( renderPos.vx >= 0 && renderPos.vx <= VidGetScrW() )
{
if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() )
{
SprFrame = m_spriteBank->printFT4(m_frame>>8,renderPos.vx,renderPos.vy,m_reversed,0,10);
setRGB0( SprFrame, 255, 128, 255 );
}
}
}
} }
void CNpcSmallJellyfishEnemy::processClose( int _frames ) void CNpcSmallJellyfishEnemy::processClose( int _frames )

View file

@ -272,40 +272,8 @@ void CGameScene::initLevel()
{ {
CNpcEnemy *enemy; CNpcEnemy *enemy;
enemy=CNpcEnemy::Create(ThisActor); enemy=CNpcEnemy::Create(ThisActor);
enemy->setTypeFromMapEdit( ThisActor->Type );
enemy->init();
enemy->setLayerCollision( Level.getCollisionLayer() ); enemy->setLayerCollision( Level.getCollisionLayer() );
enemy->setupWaypoints( ThisActor );
u16 *PntList=(u16*)MakePtr(ThisActor,sizeof(sThingActor));
u16 newXPos, newYPos;
newXPos = (u16) *PntList;
PntList++;
newYPos = (u16) *PntList;
PntList++;
enemy->setStartPos( newXPos, newYPos );
enemy->addWaypoint( newXPos, newYPos );
if ( ThisActor->PointCount > 1 )
{
for (pointNum = 1 ; pointNum < ThisActor->PointCount ; pointNum++ )
{
newXPos = (u16) *PntList;
PntList++;
newYPos = (u16) *PntList;
PntList++;
enemy->addWaypoint( newXPos, newYPos );
if ( pointNum == 1 )
{
enemy->setHeading( newXPos, newYPos );
}
}
}
enemy->postInit(); enemy->postInit();
} }
break; break;