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);
|
setCollisionSize(fh->W,fh->H);
|
||||||
|
|
||||||
GameScene.getPlayer()->registerAddon(PLAYER_ADDON_NET);
|
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_JELLYLAUNCHER);
|
||||||
// registerAddon(PLAYER_ADDON_GLASSES);
|
// registerAddon(PLAYER_ADDON_GLASSES);
|
||||||
// registerAddon(PLAYER_ADDON_BUBBLEWAND);
|
// 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)
|
if(PadGetHeld(0)&PAD_L1&&PadGetHeld(0)&PAD_L2)
|
||||||
{
|
{
|
||||||
respawn();
|
CGameScene::restartlevel();
|
||||||
}
|
}
|
||||||
if(newmode!=-1)
|
if(newmode!=-1)
|
||||||
{
|
{
|
||||||
|
@ -894,10 +895,6 @@ int mouth=-1,eyes=-1;
|
||||||
#include "gui\gui.h"
|
#include "gui\gui.h"
|
||||||
void CPlayer::render()
|
void CPlayer::render()
|
||||||
{
|
{
|
||||||
|
|
||||||
//drawSpeechBubbleBorder(125,140,357,80,0,FRM_BARNACLEBOY);
|
|
||||||
|
|
||||||
|
|
||||||
CPlayerThing::render();
|
CPlayerThing::render();
|
||||||
|
|
||||||
|
|
||||||
|
@ -1410,14 +1407,15 @@ void CPlayer::respawn()
|
||||||
|
|
||||||
clearPlatform();
|
clearPlatform();
|
||||||
|
|
||||||
GameScene.respawnLevel();
|
|
||||||
updateCollisionArea();
|
updateCollisionArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
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:
|
Params:
|
||||||
Returns:
|
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?
|
// Render glasses addon?
|
||||||
if(isWearingGlasses())
|
if(isWearingGlasses())
|
||||||
{
|
{
|
||||||
|
@ -1485,7 +1505,7 @@ void CPlayer::renderSb(DVECTOR *_pos,int _animNo,int _animFrame)
|
||||||
{
|
{
|
||||||
if(_animFrame>=addonGfx->getFrameCount(addonAnimNo))
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,10 @@
|
||||||
#include "utils\utils.h"
|
#include "utils\utils.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __GFX_FONT_H__
|
||||||
|
#include "gfx\font.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
|
@ -82,8 +86,8 @@ int npsize=40;
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CPlayerModeNet::enter()
|
void CPlayerModeNet::enter()
|
||||||
{
|
{
|
||||||
m_netting=false;
|
m_netState=NET_STATE__INERT;
|
||||||
m_netState=NET_STATE__EMPTY;
|
m_jellyfishHeld=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
@ -92,34 +96,44 @@ void CPlayerModeNet::enter()
|
||||||
Params:
|
Params:
|
||||||
Returns:
|
Returns:
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
DVECTOR netCatchPos={0,-80};
|
DVECTOR netCatchPos={-15,-90};
|
||||||
DVECTOR netCatchSize={30,30};
|
DVECTOR netCatchSize={50,30};
|
||||||
DVECTOR netLaunchPos={-10,-70};
|
DVECTOR netLaunchPos={-15,-90};
|
||||||
void CPlayerModeNet::think()
|
void CPlayerModeNet::think()
|
||||||
{
|
{
|
||||||
// If we're netting then restore the 'real' anim number/frame before
|
// 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
|
// doing the think so that the rest of the code doesn't know what
|
||||||
// is going on ;)
|
// is going on ;)
|
||||||
if(m_netting)
|
if(m_netState!=NET_STATE__INERT)
|
||||||
{
|
{
|
||||||
setAnimNo(m_savedAnimNo);
|
setAnimNo(m_savedAnimNo);
|
||||||
setAnimFrame(m_savedAnimFrame);
|
setAnimFrame(m_savedAnimFrame);
|
||||||
}
|
}
|
||||||
CPlayerModeBase::think();
|
CPlayerModeBase::think();
|
||||||
|
|
||||||
// Start to net?
|
|
||||||
if(!m_netting&&getPadInputDown()&PI_FIRE&&canSwingNetFromThisState())
|
|
||||||
{
|
|
||||||
m_netFrame=0;
|
|
||||||
m_netting=true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Netting?
|
// Netting?
|
||||||
if(m_netting)
|
|
||||||
{
|
|
||||||
switch(m_netState)
|
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;
|
DVECTOR playerPos;
|
||||||
int playerFacing;
|
int playerFacing;
|
||||||
|
@ -157,8 +171,12 @@ void CPlayerModeNet::think()
|
||||||
((CNpcEnemy*)thing)->caughtWithNet();
|
((CNpcEnemy*)thing)->caughtWithNet();
|
||||||
m_netState=NET_STATE__JUST_CAUGHT_SOMETHING;
|
m_netState=NET_STATE__JUST_CAUGHT_SOMETHING;
|
||||||
thing=NULL;
|
thing=NULL;
|
||||||
|
if(m_jellyfishHeld==0)
|
||||||
|
{
|
||||||
m_netSin=0;
|
m_netSin=0;
|
||||||
}
|
}
|
||||||
|
m_jellyfishHeld++;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thing=CThingManager::checkCollisionAreaAgainstThings(&netRect,CThing::TYPE_ENEMY,true);
|
thing=CThingManager::checkCollisionAreaAgainstThings(&netRect,CThing::TYPE_ENEMY,true);
|
||||||
|
@ -170,10 +188,10 @@ void CPlayerModeNet::think()
|
||||||
case NET_STATE__JUST_CAUGHT_SOMETHING:
|
case NET_STATE__JUST_CAUGHT_SOMETHING:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_STATE__FULL:
|
case NET_STATE__LAUNCHING:
|
||||||
if(m_netFrame==0)
|
|
||||||
{
|
|
||||||
// Launch projectile at halfway through the swing..
|
// Launch projectile at halfway through the swing..
|
||||||
|
if(m_netFrame==4)
|
||||||
|
{
|
||||||
CPlayerProjectile *projectile;
|
CPlayerProjectile *projectile;
|
||||||
|
|
||||||
int playerFacing;
|
int playerFacing;
|
||||||
|
@ -197,9 +215,8 @@ void CPlayerModeNet::think()
|
||||||
projectile->setLayerCollision( m_player->getLayerCollision() );
|
projectile->setLayerCollision( m_player->getLayerCollision() );
|
||||||
projectile->updateCollisionArea();
|
projectile->updateCollisionArea();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_netState=NET_STATE__JUST_LAUNCHED_SOMETHING;
|
m_netState=NET_STATE__JUST_LAUNCHED_SOMETHING;
|
||||||
|
m_jellyfishHeld--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -207,6 +224,8 @@ void CPlayerModeNet::think()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_netState!=NET_STATE__INERT)
|
||||||
|
{
|
||||||
m_player->setAnimNo(ANIM_SPONGEBOB_SWIPE);
|
m_player->setAnimNo(ANIM_SPONGEBOB_SWIPE);
|
||||||
m_player->setAnimFrame(m_netFrame);
|
m_player->setAnimFrame(m_netFrame);
|
||||||
m_netFrame++;
|
m_netFrame++;
|
||||||
|
@ -214,20 +233,12 @@ void CPlayerModeNet::think()
|
||||||
{
|
{
|
||||||
m_player->setAnimNo(m_savedAnimNo);
|
m_player->setAnimNo(m_savedAnimNo);
|
||||||
m_player->setAnimFrame(m_savedAnimFrame);
|
m_player->setAnimFrame(m_savedAnimFrame);
|
||||||
m_netting=false;
|
|
||||||
|
|
||||||
if(m_netState==NET_STATE__JUST_CAUGHT_SOMETHING)
|
m_netState=NET_STATE__INERT;
|
||||||
{
|
|
||||||
m_netState=NET_STATE__FULL;
|
|
||||||
}
|
|
||||||
else if(m_netState==NET_STATE__JUST_LAUNCHED_SOMETHING)
|
|
||||||
{
|
|
||||||
m_netState=NET_STATE__EMPTY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_netState==NET_STATE__FULL)
|
if(m_jellyfishHeld)
|
||||||
{
|
{
|
||||||
m_netSin=(m_netSin+npspeed)&4095;
|
m_netSin=(m_netSin+npspeed)&4095;
|
||||||
}
|
}
|
||||||
|
@ -243,10 +254,11 @@ void CPlayerModeNet::think()
|
||||||
{
|
{
|
||||||
SpriteBank *sb;
|
SpriteBank *sb;
|
||||||
sFrameHdr *fh;
|
sFrameHdr *fh;
|
||||||
|
char buf[4];
|
||||||
|
|
||||||
sb=m_player->getSpriteBank();
|
sb=m_player->getSpriteBank();
|
||||||
fh=sb->getFrameHeader(FRM__NET);
|
fh=sb->getFrameHeader(FRM__NET);
|
||||||
if(m_netState==NET_STATE__FULL)
|
if(m_jellyfishHeld)
|
||||||
{
|
{
|
||||||
POLY_FT4 *ft4;
|
POLY_FT4 *ft4;
|
||||||
|
|
||||||
|
@ -261,6 +273,9 @@ void CPlayerModeNet::think()
|
||||||
{
|
{
|
||||||
sb->printFT4(fh,CPlayer::POWERUPUI_ICONX,CPlayer::POWERUPUI_ICONY,0,0,CPlayer::POWERUPUI_OT);
|
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 enter();
|
||||||
virtual void think();
|
virtual void think();
|
||||||
virtual void renderModeUi();
|
virtual void renderModeUi();
|
||||||
|
virtual int isJellyfishNetFull() {return m_jellyfishHeld!=0;}
|
||||||
|
|
||||||
virtual void setAnimNo(int _animNo);
|
virtual void setAnimNo(int _animNo);
|
||||||
virtual void setAnimFrame(int _animFrame);
|
virtual void setAnimFrame(int _animFrame);
|
||||||
|
@ -47,9 +48,10 @@ public:
|
||||||
private:
|
private:
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
NET_STATE__EMPTY,
|
NET_STATE__INERT,
|
||||||
|
NET_STATE__CATCHING,
|
||||||
NET_STATE__JUST_CAUGHT_SOMETHING,
|
NET_STATE__JUST_CAUGHT_SOMETHING,
|
||||||
NET_STATE__FULL,
|
NET_STATE__LAUNCHING,
|
||||||
NET_STATE__JUST_LAUNCHED_SOMETHING,
|
NET_STATE__JUST_LAUNCHED_SOMETHING,
|
||||||
} NetState;
|
} NetState;
|
||||||
|
|
||||||
|
@ -57,9 +59,9 @@ private:
|
||||||
|
|
||||||
int m_savedAnimNo,m_savedAnimFrame;
|
int m_savedAnimNo,m_savedAnimFrame;
|
||||||
int m_netFrame;
|
int m_netFrame;
|
||||||
int m_netting;
|
|
||||||
NetState m_netState;
|
NetState m_netState;
|
||||||
int m_netSin;
|
int m_netSin;
|
||||||
|
int m_jellyfishHeld;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ public:
|
||||||
virtual int canDoLookAround() {return false;}
|
virtual int canDoLookAround() {return false;}
|
||||||
virtual void springPlayerUp() {;}
|
virtual void springPlayerUp() {;}
|
||||||
void inSoakUpState();
|
void inSoakUpState();
|
||||||
|
virtual int isJellyfishNetFull() {ASSERT(0);return false;} // Fugly..
|
||||||
|
|
||||||
|
|
||||||
int getPadInputHeld();
|
int getPadInputHeld();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue