This commit is contained in:
parent
92e2df722d
commit
bb454ee0a7
5 changed files with 148 additions and 109 deletions
|
@ -77,6 +77,7 @@ void CNetPickup::init()
|
|||
setCollisionSize(fh->W,fh->H);
|
||||
|
||||
GameScene.getPlayer()->registerAddon(PLAYER_ADDON_NET);
|
||||
GameScene.getPlayer()->registerAddon(PLAYER_ADDON_JELLYFISHINNET);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
|
|
@ -562,6 +562,7 @@ m_animFrame=0;
|
|||
// registerAddon(PLAYER_ADDON_JELLYLAUNCHER);
|
||||
// registerAddon(PLAYER_ADDON_GLASSES);
|
||||
// registerAddon(PLAYER_ADDON_BUBBLEWAND);
|
||||
// registerAddon(PLAYER_ADDON_JELLYFISHINNET);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
@ -637,7 +638,7 @@ else if(oldmode!=-1&&!(PadGetHeld(0)&PAD_L1))
|
|||
|
||||
if(PadGetHeld(0)&PAD_L1&&PadGetHeld(0)&PAD_L2)
|
||||
{
|
||||
respawn();
|
||||
CGameScene::restartlevel();
|
||||
}
|
||||
if(newmode!=-1)
|
||||
{
|
||||
|
@ -894,10 +895,6 @@ int mouth=-1,eyes=-1;
|
|||
#include "gui\gui.h"
|
||||
void CPlayer::render()
|
||||
{
|
||||
|
||||
//drawSpeechBubbleBorder(125,140,357,80,0,FRM_BARNACLEBOY);
|
||||
|
||||
|
||||
CPlayerThing::render();
|
||||
|
||||
|
||||
|
@ -1410,14 +1407,15 @@ void CPlayer::respawn()
|
|||
|
||||
clearPlatform();
|
||||
|
||||
GameScene.respawnLevel();
|
||||
updateCollisionArea();
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Purpose: Yes - This function is fat! It can be tidied up when all of the anims
|
||||
are finalised. Etracting the repeated code to a function will probly not
|
||||
improve things cos of the amount of data that would need to be passed about.
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
|
@ -1452,6 +1450,28 @@ void CPlayer::renderSb(DVECTOR *_pos,int _animNo,int _animFrame)
|
|||
}
|
||||
}
|
||||
|
||||
// Render JFish in a net?
|
||||
if(m_currentMode==PLAYER_MODE_NET&&m_currentPlayerModeClass->isJellyfishNetFull())
|
||||
{
|
||||
s8 addonAnimNo=s_animMapNet[PLAYER_ADDON_JELLYFISHINNET][_animNo];
|
||||
if(addonAnimNo!=-1)
|
||||
{
|
||||
CActorGfx *addonGfx=s_addonActorGfx[PLAYER_ADDON_JELLYFISHINNET];
|
||||
if(addonGfx)
|
||||
{
|
||||
if(_animFrame>=addonGfx->getFrameCount(addonAnimNo))
|
||||
{
|
||||
PAUL_DBGMSG("FRAME OVERRUN ON SPONGEBOB JELLYFISH ADDON! ( %d vs %d )",m_actorGfx->getFrameCount(_animNo),addonGfx->getFrameCount(addonAnimNo));
|
||||
}
|
||||
else
|
||||
{
|
||||
ft4=addonGfx->Render(*_pos,addonAnimNo,_animFrame,m_facing==FACING_RIGHT?0:1);
|
||||
setRGB0(ft4,255,128,255);
|
||||
setSemiTrans(ft4,trans);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Render glasses addon?
|
||||
if(isWearingGlasses())
|
||||
{
|
||||
|
@ -1485,7 +1505,7 @@ void CPlayer::renderSb(DVECTOR *_pos,int _animNo,int _animFrame)
|
|||
{
|
||||
if(_animFrame>=addonGfx->getFrameCount(addonAnimNo))
|
||||
{
|
||||
PAUL_DBGMSG("FRAME OVERRUN ON SPONGEBOB GLASSES ADDON! ( %d vs %d )",m_actorGfx->getFrameCount(_animNo),addonGfx->getFrameCount(addonAnimNo));
|
||||
PAUL_DBGMSG("FRAME OVERRUN ON SPONGEBOB GLOVE ADDON! ( %d vs %d )",m_actorGfx->getFrameCount(_animNo),addonGfx->getFrameCount(addonAnimNo));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -37,6 +37,10 @@
|
|||
#include "utils\utils.h"
|
||||
#endif
|
||||
|
||||
#ifndef __GFX_FONT_H__
|
||||
#include "gfx\font.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
@ -82,8 +86,8 @@ int npsize=40;
|
|||
---------------------------------------------------------------------- */
|
||||
void CPlayerModeNet::enter()
|
||||
{
|
||||
m_netting=false;
|
||||
m_netState=NET_STATE__EMPTY;
|
||||
m_netState=NET_STATE__INERT;
|
||||
m_jellyfishHeld=0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
@ -92,34 +96,44 @@ void CPlayerModeNet::enter()
|
|||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
DVECTOR netCatchPos={0,-80};
|
||||
DVECTOR netCatchSize={30,30};
|
||||
DVECTOR netLaunchPos={-10,-70};
|
||||
DVECTOR netCatchPos={-15,-90};
|
||||
DVECTOR netCatchSize={50,30};
|
||||
DVECTOR netLaunchPos={-15,-90};
|
||||
void CPlayerModeNet::think()
|
||||
{
|
||||
// If we're netting then restore the 'real' anim number/frame before
|
||||
// doing the think so that the rest of the code doesn't know what
|
||||
// is going on ;)
|
||||
if(m_netting)
|
||||
if(m_netState!=NET_STATE__INERT)
|
||||
{
|
||||
setAnimNo(m_savedAnimNo);
|
||||
setAnimFrame(m_savedAnimFrame);
|
||||
}
|
||||
CPlayerModeBase::think();
|
||||
|
||||
// Start to net?
|
||||
if(!m_netting&&getPadInputDown()&PI_FIRE&&canSwingNetFromThisState())
|
||||
{
|
||||
m_netFrame=0;
|
||||
m_netting=true;
|
||||
}
|
||||
|
||||
// Netting?
|
||||
if(m_netting)
|
||||
{
|
||||
switch(m_netState)
|
||||
{
|
||||
case NET_STATE__EMPTY:
|
||||
case NET_STATE__INERT:
|
||||
{
|
||||
int padDown;
|
||||
padDown=getPadInputDown();
|
||||
if(padDown&(PI_CATCH|PI_FIRE)&&canSwingNetFromThisState())
|
||||
{
|
||||
if(padDown&PI_CATCH&&m_jellyfishHeld<5)
|
||||
{
|
||||
m_netState=NET_STATE__CATCHING;
|
||||
}
|
||||
else if(padDown&PI_FIRE&&m_jellyfishHeld)
|
||||
{
|
||||
m_netState=NET_STATE__LAUNCHING;
|
||||
}
|
||||
m_netFrame=0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NET_STATE__CATCHING:
|
||||
{
|
||||
DVECTOR playerPos;
|
||||
int playerFacing;
|
||||
|
@ -157,8 +171,12 @@ void CPlayerModeNet::think()
|
|||
((CNpcEnemy*)thing)->caughtWithNet();
|
||||
m_netState=NET_STATE__JUST_CAUGHT_SOMETHING;
|
||||
thing=NULL;
|
||||
if(m_jellyfishHeld==0)
|
||||
{
|
||||
m_netSin=0;
|
||||
}
|
||||
m_jellyfishHeld++;
|
||||
}
|
||||
else
|
||||
{
|
||||
thing=CThingManager::checkCollisionAreaAgainstThings(&netRect,CThing::TYPE_ENEMY,true);
|
||||
|
@ -170,10 +188,10 @@ void CPlayerModeNet::think()
|
|||
case NET_STATE__JUST_CAUGHT_SOMETHING:
|
||||
break;
|
||||
|
||||
case NET_STATE__FULL:
|
||||
if(m_netFrame==0)
|
||||
{
|
||||
case NET_STATE__LAUNCHING:
|
||||
// Launch projectile at halfway through the swing..
|
||||
if(m_netFrame==4)
|
||||
{
|
||||
CPlayerProjectile *projectile;
|
||||
|
||||
int playerFacing;
|
||||
|
@ -197,9 +215,8 @@ void CPlayerModeNet::think()
|
|||
projectile->setLayerCollision( m_player->getLayerCollision() );
|
||||
projectile->updateCollisionArea();
|
||||
|
||||
|
||||
|
||||
m_netState=NET_STATE__JUST_LAUNCHED_SOMETHING;
|
||||
m_jellyfishHeld--;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -207,6 +224,8 @@ void CPlayerModeNet::think()
|
|||
break;
|
||||
}
|
||||
|
||||
if(m_netState!=NET_STATE__INERT)
|
||||
{
|
||||
m_player->setAnimNo(ANIM_SPONGEBOB_SWIPE);
|
||||
m_player->setAnimFrame(m_netFrame);
|
||||
m_netFrame++;
|
||||
|
@ -214,20 +233,12 @@ void CPlayerModeNet::think()
|
|||
{
|
||||
m_player->setAnimNo(m_savedAnimNo);
|
||||
m_player->setAnimFrame(m_savedAnimFrame);
|
||||
m_netting=false;
|
||||
|
||||
if(m_netState==NET_STATE__JUST_CAUGHT_SOMETHING)
|
||||
{
|
||||
m_netState=NET_STATE__FULL;
|
||||
}
|
||||
else if(m_netState==NET_STATE__JUST_LAUNCHED_SOMETHING)
|
||||
{
|
||||
m_netState=NET_STATE__EMPTY;
|
||||
}
|
||||
m_netState=NET_STATE__INERT;
|
||||
}
|
||||
}
|
||||
|
||||
if(m_netState==NET_STATE__FULL)
|
||||
if(m_jellyfishHeld)
|
||||
{
|
||||
m_netSin=(m_netSin+npspeed)&4095;
|
||||
}
|
||||
|
@ -243,10 +254,11 @@ void CPlayerModeNet::think()
|
|||
{
|
||||
SpriteBank *sb;
|
||||
sFrameHdr *fh;
|
||||
char buf[4];
|
||||
|
||||
sb=m_player->getSpriteBank();
|
||||
fh=sb->getFrameHeader(FRM__NET);
|
||||
if(m_netState==NET_STATE__FULL)
|
||||
if(m_jellyfishHeld)
|
||||
{
|
||||
POLY_FT4 *ft4;
|
||||
|
||||
|
@ -261,6 +273,9 @@ void CPlayerModeNet::think()
|
|||
{
|
||||
sb->printFT4(fh,CPlayer::POWERUPUI_ICONX,CPlayer::POWERUPUI_ICONY,0,0,CPlayer::POWERUPUI_OT);
|
||||
}
|
||||
|
||||
sprintf(buf,"x%d",m_jellyfishHeld);
|
||||
m_player->getFontBank()->print(CPlayer::POWERUPUI_TEXTX,CPlayer::POWERUPUI_TEXTY,buf);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
|
|
@ -40,6 +40,7 @@ public:
|
|||
virtual void enter();
|
||||
virtual void think();
|
||||
virtual void renderModeUi();
|
||||
virtual int isJellyfishNetFull() {return m_jellyfishHeld!=0;}
|
||||
|
||||
virtual void setAnimNo(int _animNo);
|
||||
virtual void setAnimFrame(int _animFrame);
|
||||
|
@ -47,9 +48,10 @@ public:
|
|||
private:
|
||||
typedef enum
|
||||
{
|
||||
NET_STATE__EMPTY,
|
||||
NET_STATE__INERT,
|
||||
NET_STATE__CATCHING,
|
||||
NET_STATE__JUST_CAUGHT_SOMETHING,
|
||||
NET_STATE__FULL,
|
||||
NET_STATE__LAUNCHING,
|
||||
NET_STATE__JUST_LAUNCHED_SOMETHING,
|
||||
} NetState;
|
||||
|
||||
|
@ -57,9 +59,9 @@ private:
|
|||
|
||||
int m_savedAnimNo,m_savedAnimFrame;
|
||||
int m_netFrame;
|
||||
int m_netting;
|
||||
NetState m_netState;
|
||||
int m_netSin;
|
||||
int m_jellyfishHeld;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -87,6 +87,7 @@ public:
|
|||
virtual int canDoLookAround() {return false;}
|
||||
virtual void springPlayerUp() {;}
|
||||
void inSoakUpState();
|
||||
virtual int isJellyfishNetFull() {ASSERT(0);return false;} // Fugly..
|
||||
|
||||
|
||||
int getPadInputHeld();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue