diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index c50c6475c..8adb4089f 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -75,6 +75,7 @@ void CNpcFriend::init() //m_animPlaying = true; m_animNo = 0; m_frame = 0; + m_reversed = false; DVECTOR ofs = getCollisionSize(); @@ -125,26 +126,16 @@ void CNpcFriend::render() DVECTOR renderPos; DVECTOR offset = CLevel::getCameraPos(); - renderPos.vx = ( Pos.vx + m_drawOffset.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; - renderPos.vy = ( Pos.vy + m_drawOffset.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; + renderPos.vx = Pos.vx - offset.vx; + renderPos.vy = Pos.vy - offset.vy; - m_actorGfx->Render(renderPos,m_frame,m_animNo,false); - - /*s32 x,y; - s32 scrnWidth = VidGetScrW(); - s32 scrnHeight = VidGetScrH(); - s32 spriteWidth = m_spriteBank->getFrameWidth(FRM_BARNACLEBOY); - s32 spriteHeight = m_spriteBank->getFrameHeight(FRM_BARNACLEBOY); - - x = Pos.vx - offset.vx - ( spriteWidth >> 1 ); - y = Pos.vy - offset.vy - ( spriteHeight >> 1 ); - - //if ( x < -spriteWidth || y < -spriteHeight || x > scrnWidth || y > scrnHeight ) - //{ - //return; - //} - - m_spriteBank->printFT4(FRM_BARNACLEBOY,x,y,0,0,0);*/ + if ( renderPos.vx >= 0 && renderPos.vx <= VidGetScrW() ) + { + if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() ) + { + m_actorGfx->Render(renderPos,m_animNo,m_frame,m_reversed); + } + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1403,13 +1394,16 @@ void CNpcEnemy::render() DVECTOR renderPos; DVECTOR offset = CLevel::getCameraPos(); - //renderPos.vx = ( Pos.vx + m_drawOffset.vx - offset.vx - ( VidGetScrW() >> 1 ) );// * 20; - //renderPos.vy = ( Pos.vy + m_drawOffset.vy - offset.vy - ( VidGetScrH() >> 1 ) );// * 20; - renderPos.vx = Pos.vx - offset.vx; renderPos.vy = Pos.vy - offset.vy; - m_actorGfx->Render(renderPos,m_animNo,m_frame,m_reversed); + if ( renderPos.vx >= 0 && renderPos.vx <= VidGetScrW() ) + { + if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() ) + { + m_actorGfx->Render(renderPos,m_animNo,m_frame,m_reversed); + } + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/enemy/npc.h b/source/enemy/npc.h index 4fb2b7876..2bc80d145 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -106,6 +106,7 @@ protected: int m_animNo; CActorGfx *m_actorGfx; DVECTOR m_drawOffset; + bool m_reversed; }; class CNpcEnemy : public CEnemyThing diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index 931ba02d9..575dc93dc 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -189,7 +189,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_CLAM_SBK, ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, - NPC_SENSOR_FALLING_ITEM_USER_CLOSE, + //NPC_SENSOR_FALLING_ITEM_USER_CLOSE, + NPC_SENSOR_NONE, NPC_MOVEMENT_STATIC, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_FALLING_ITEM_FALL, diff --git a/source/game/game.cpp b/source/game/game.cpp index a618a1555..40b56802a 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -287,43 +287,56 @@ void CGameScene::initLevel() sThingActor **actorList = Level.getActorList(); if (actorList) { - for ( actorNum = 0 ; actorNum < Level.getActorCount() ; actorNum++ ) - { - CNpcEnemy *enemy; - enemy = new ("npc enemy") CNpcEnemy; - ASSERT(enemy); - enemy->setTypeFromMapEdit( actorList[actorNum]->Type ); - enemy->init(); - enemy->setLayerCollision( Level.getCollisionLayer() ); - - int pointNum; - 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 ( actorNum = 0 ; actorNum < Level.getActorCount() ; actorNum++ ) { - for ( pointNum = 1 ; pointNum < actorList[actorNum]->PointCount ; pointNum++ ) - { - newXPos = (u16) *PntList; - PntList++; - newYPos = (u16) *PntList; - PntList++; + CActorPool::ACTOR_TYPE actorType = CActorPool::getActorType( actorList[actorNum]->Type ); - enemy->addWaypoint( newXPos, newYPos ); + switch ( actorType ) + { + case CActorPool::ACTOR_ENEMY_NPC: + { + CNpcEnemy *enemy; + enemy = new ("npc enemy") CNpcEnemy; + ASSERT(enemy); + enemy->setTypeFromMapEdit( actorList[actorNum]->Type ); + enemy->init(); + enemy->setLayerCollision( Level.getCollisionLayer() ); + + int pointNum; + 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 ); + } + } + + enemy->postInit(); + + break; + } + + default: + break; } } - - enemy->postInit(); - } } // Song is loaded/dumped by the level, and played from here. This just gives some // better timing over when it starts (pkg) diff --git a/source/gfx/actor.cpp b/source/gfx/actor.cpp index 507e801fc..63938525d 100644 --- a/source/gfx/actor.cpp +++ b/source/gfx/actor.cpp @@ -12,6 +12,50 @@ #include +/*****************************************************************************/ + +CActorPool::ACTOR_TYPE CActorPool::actorType[38] = +{ + 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 +}; + /*****************************************************************************/ CActorGfx *CActorPool::ActorList[CActorPool::MAX_ACTORS]; u8 CActorPool::UnpackBuffer[CActorPool::MAX_ACTOR_SIZE]; diff --git a/source/gfx/actor.h b/source/gfx/actor.h index 36f5e203a..269e6af3a 100644 --- a/source/gfx/actor.h +++ b/source/gfx/actor.h @@ -47,6 +47,14 @@ public: MAX_ACTOR_SIZE=128*128, }; + enum ACTOR_TYPE + { + ACTOR_PLAYER = 0, + ACTOR_FRIEND_NPC = 1, + ACTOR_ENEMY_NPC, + ACTOR_UNKNOWN, + }; + static void Init(); static void AddActor(FileEquate Filename) {GetActor(Filename);} @@ -55,12 +63,16 @@ static void DumpActors(); static u8 UnpackBuffer[MAX_ACTOR_SIZE]; +static ACTOR_TYPE getActorType( int actorNum ) {return actorType[actorNum];} + private: static int FindIdx(FileEquate Filename); static int FindFreeIdx(); static CActorGfx *ActorList[MAX_ACTORS]; +static ACTOR_TYPE actorType[38]; + }; /*****************************************************************************/