This commit is contained in:
Paul 2001-05-11 00:36:17 +00:00
parent 92e2df722d
commit bb454ee0a7
5 changed files with 148 additions and 109 deletions

View file

@ -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);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View file

@ -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
{ {

View file

@ -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);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View file

@ -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;
}; };

View file

@ -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();