This commit is contained in:
parent
a59bdb7bb3
commit
18e1f665af
18 changed files with 245 additions and 271 deletions
|
@ -248,7 +248,6 @@ pickups_src := pickup \
|
||||||
pballoon \
|
pballoon \
|
||||||
pblower \
|
pblower \
|
||||||
pbubmix \
|
pbubmix \
|
||||||
phealth \
|
|
||||||
phelmet \
|
phelmet \
|
||||||
pjlammo \
|
pjlammo \
|
||||||
pkelp \
|
pkelp \
|
||||||
|
|
|
@ -181,7 +181,7 @@ INGAMEFX_GFX_NONTRANS :=
|
||||||
INGAMEFX_GFX_NONTRANS_IN := $(foreach FILE,$(INGAMEFX_GFX_NONTRANS),$(INGAMEFX_NONTRANS_DIR)/$(FILE))
|
INGAMEFX_GFX_NONTRANS_IN := $(foreach FILE,$(INGAMEFX_GFX_NONTRANS),$(INGAMEFX_NONTRANS_DIR)/$(FILE))
|
||||||
|
|
||||||
PICKUP_GFX_DIR := $(GRAF_DIR)/pickups
|
PICKUP_GFX_DIR := $(GRAF_DIR)/pickups
|
||||||
PICKUP_GFX := +spatula +token +pants +health100 +health50 +health25 +glint1 +glint2 +glint3 +glint4 \
|
PICKUP_GFX := +spatula +token +pants +glint1 +glint2 +glint3 +glint4 \
|
||||||
+jellyammo +bubblemixture +bubblewand +shoe +balloon +balloonburst +helmet \
|
+jellyammo +bubblemixture +bubblewand +shoe +balloon +balloonburst +helmet \
|
||||||
+blower +launcher +net \
|
+blower +launcher +net \
|
||||||
+c1_l1_quest_item +c1_l2_quest_item +c1_l3_quest_item +c1_l4_quest_item \
|
+c1_l1_quest_item +c1_l2_quest_item +c1_l3_quest_item +c1_l4_quest_item \
|
||||||
|
@ -192,9 +192,7 @@ PICKUP_GFX := +spatula +token +pants +health100 +health50 +health25 +glint1 +
|
||||||
PICKUP_GFX_IN := $(foreach FILE,$(PICKUP_GFX),$(PICKUP_GFX_DIR)/$(FILE).bmp)
|
PICKUP_GFX_IN := $(foreach FILE,$(PICKUP_GFX),$(PICKUP_GFX_DIR)/$(FILE).bmp)
|
||||||
|
|
||||||
INGAMEFX_GFX_DIR := $(GRAF_DIR)/ingamefx
|
INGAMEFX_GFX_DIR := $(GRAF_DIR)/ingamefx
|
||||||
INGAMEFX_GFX_TRANS := +health_full_1 +health_full_2 +health_full_3 +health_full_4 +health_full_5 \
|
INGAMEFX_GFX_TRANS := +watermeter +waterhilight +netblob \
|
||||||
+health_empty_1 +health_empty_2 +health_empty_3 +health_empty_4 +health_empty_5 \
|
|
||||||
+watermeter +waterhilight +netblob \
|
|
||||||
+spike
|
+spike
|
||||||
INGAMEFX_GFX_TRANS_NONROT_NONCLIP := +bubble_1 +bubble_2 +bubble_3 \
|
INGAMEFX_GFX_TRANS_NONROT_NONCLIP := +bubble_1 +bubble_2 +bubble_3 \
|
||||||
+water +aim_arrow
|
+water +aim_arrow
|
||||||
|
|
|
@ -296,6 +296,7 @@ void CGameScene::think(int _frames)
|
||||||
level=getLevelNumber();
|
level=getLevelNumber();
|
||||||
chapter=getChapterNumber();
|
chapter=getChapterNumber();
|
||||||
|
|
||||||
|
// Open next level?
|
||||||
gameSlot->levelHasBeenCompleted(chapter-1,level-1);
|
gameSlot->levelHasBeenCompleted(chapter-1,level-1);
|
||||||
if(level!=5&& // Don't open any levels after finishing a bonus level
|
if(level!=5&& // Don't open any levels after finishing a bonus level
|
||||||
!(level==4&&chapter==5)) // Don't open any levels after finishing final level
|
!(level==4&&chapter==5)) // Don't open any levels after finishing final level
|
||||||
|
@ -316,6 +317,12 @@ void CGameScene::think(int _frames)
|
||||||
CMapScene::setLevelToStartOn(chapterToOpen-1,levelToOpen-1);
|
CMapScene::setLevelToStartOn(chapterToOpen-1,levelToOpen-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New hi-spatula-count?
|
||||||
|
if(m_player->getSpatulasHeld()>gameSlot->getSpatulaCollectedCount(chapter-1,level-1))
|
||||||
|
{
|
||||||
|
gameSlot->setSpatulaCollectedCount(chapter-1,level-1,m_player->getSpatulasHeld(),getTotalSpatCountForThisLevel());
|
||||||
|
}
|
||||||
|
|
||||||
// Level finished - go to map or fma
|
// Level finished - go to map or fma
|
||||||
if(level==4)
|
if(level==4)
|
||||||
{
|
{
|
||||||
|
|
|
@ -132,10 +132,7 @@ void CGameSlotManager::eraseGameSlot(unsigned int _slot)
|
||||||
// Clear spatula and kelp token flags
|
// Clear spatula and kelp token flags
|
||||||
for(i=0;i<NUM_CHAPTERS*NUM_LEVELS_WITH_SPATULAS;i++)
|
for(i=0;i<NUM_CHAPTERS*NUM_LEVELS_WITH_SPATULAS;i++)
|
||||||
{
|
{
|
||||||
for(j=0;j<16;j++)
|
slot->m_spatulaCollectedCounts[i]=0;
|
||||||
{
|
|
||||||
slot->m_spatulaCollectedFlags[i][j]=0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for(i=0;i<NUM_CHAPTERS;i++)
|
for(i=0;i<NUM_CHAPTERS;i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -68,8 +68,8 @@ public:
|
||||||
unsigned char m_isInUse;
|
unsigned char m_isInUse;
|
||||||
unsigned char m_lives;
|
unsigned char m_lives;
|
||||||
unsigned char m_continues;
|
unsigned char m_continues;
|
||||||
unsigned char m_spatulaCollectedFlags[NUM_CHAPTERS*NUM_LEVELS_WITH_SPATULAS][16]; // Enuf space for 128 spats per level
|
unsigned char m_spatulaCollectedCounts[NUM_CHAPTERS*NUM_LEVELS_WITH_SPATULAS];
|
||||||
unsigned char m_kelpTokenCollectedFlags[NUM_CHAPTERS][16]; // Same again..
|
unsigned char m_kelpTokenCollectedFlags[NUM_CHAPTERS][16]; // Enuf space for 128 tokens per level
|
||||||
unsigned char m_kelpTokensHeld;
|
unsigned char m_kelpTokensHeld;
|
||||||
unsigned char m_partyItemsHeld[CShopScene::NUM_SHOP_ITEM_IDS];
|
unsigned char m_partyItemsHeld[CShopScene::NUM_SHOP_ITEM_IDS];
|
||||||
unsigned char m_levelCompletionState[NUM_CHAPTERS*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER)];
|
unsigned char m_levelCompletionState[NUM_CHAPTERS*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER)];
|
||||||
|
@ -79,32 +79,22 @@ public:
|
||||||
{
|
{
|
||||||
ASSERT(_chapter<=NUM_CHAPTERS);
|
ASSERT(_chapter<=NUM_CHAPTERS);
|
||||||
ASSERT(_level<=NUM_LEVELS_WITH_SPATULAS);
|
ASSERT(_level<=NUM_LEVELS_WITH_SPATULAS);
|
||||||
int i,j,count;
|
return m_spatulaCollectedCounts[(_chapter*NUM_LEVELS_WITH_SPATULAS)+_level];
|
||||||
count=0;
|
}
|
||||||
for(i=0;i<8;i++)
|
void setSpatulaCollectedCount(unsigned int _chapter,unsigned int _level,unsigned char _count,unsigned char _totalCount)
|
||||||
|
{
|
||||||
|
ASSERT(_chapter<=NUM_CHAPTERS);
|
||||||
|
ASSERT(_level<=NUM_LEVELS_WITH_SPATULAS);
|
||||||
|
m_spatulaCollectedCounts[(_chapter*NUM_LEVELS_WITH_SPATULAS)+_level]=_count;
|
||||||
|
|
||||||
|
// Does this open up a bonus level?
|
||||||
|
int percentRequired,percentAchieved;
|
||||||
|
percentRequired=(_chapter*10)+60; // 60% on chapter 1 ... to ... 100% on chapter 5
|
||||||
|
percentAchieved=(_count*100)/_totalCount;
|
||||||
|
if(percentAchieved>=percentRequired)
|
||||||
{
|
{
|
||||||
unsigned char flags=m_spatulaCollectedFlags[(_chapter*NUM_LEVELS_WITH_SPATULAS)+_level][i];
|
levelIsNowOpen(_chapter,4);
|
||||||
for(j=0;j<8;j++)
|
|
||||||
{
|
|
||||||
if(flags&1)count++;
|
|
||||||
flags>>=1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return count;
|
|
||||||
}
|
|
||||||
void collectSpatula(unsigned int _chapter,unsigned int _level,unsigned int _spat)
|
|
||||||
{
|
|
||||||
ASSERT(_chapter<=NUM_CHAPTERS);
|
|
||||||
ASSERT(_level<=NUM_LEVELS_WITH_SPATULAS);
|
|
||||||
ASSERT(_spat<=128);
|
|
||||||
m_spatulaCollectedFlags[(_chapter*NUM_LEVELS_WITH_SPATULAS)+_level][_spat>>3]|=1<<(_spat&7);
|
|
||||||
}
|
|
||||||
int isSpatulaUncollected(unsigned int _chapter,unsigned int _level,unsigned int _spat)
|
|
||||||
{
|
|
||||||
ASSERT(_chapter<=NUM_CHAPTERS);
|
|
||||||
ASSERT(_level<=NUM_LEVELS_WITH_SPATULAS);
|
|
||||||
ASSERT(_spat<=128);
|
|
||||||
return (m_spatulaCollectedFlags[(_chapter*NUM_LEVELS_WITH_SPATULAS)+_level][_spat>>3]>>(_spat&7))&1?false:true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kelp Token functions..
|
// Kelp Token functions..
|
||||||
|
|
|
@ -38,10 +38,6 @@
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __GAME_GAMESLOT_H__
|
|
||||||
#include "game\gameslot.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
|
@ -213,7 +209,7 @@ void CPauseMenu::select()
|
||||||
|
|
||||||
chapter=GameScene.getChapterNumber()-1;
|
chapter=GameScene.getChapterNumber()-1;
|
||||||
level=GameScene.getLevelNumber()-1;
|
level=GameScene.getLevelNumber()-1;
|
||||||
m_guiSpatReadout->setSpatCounts(CGameSlotManager::getSlotData()->getSpatulaCollectedCount(chapter,level),
|
m_guiSpatReadout->setSpatCounts(GameScene.getPlayer()->getSpatulasHeld(),
|
||||||
GameScene.getTotalSpatCountForThisLevel());
|
GameScene.getTotalSpatCountForThisLevel());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -431,15 +431,7 @@ void CLevel::initThings(int _respawningLevel)
|
||||||
|
|
||||||
createThisPickup=true;
|
createThisPickup=true;
|
||||||
isNumberedItem=false;
|
isNumberedItem=false;
|
||||||
if((PICKUP_TYPE)ItemList->Type==PICKUP__SPATULA)
|
if((PICKUP_TYPE)ItemList->Type==PICKUP__KELP_TOKEN)
|
||||||
{
|
|
||||||
isNumberedItem=true;
|
|
||||||
if(CGameSlotManager::getSlotData()->isSpatulaUncollected(GameScene.getChapterNumber()-1,GameScene.getLevelNumber()-1,itemNumber)==false)
|
|
||||||
{
|
|
||||||
createThisPickup=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if((PICKUP_TYPE)ItemList->Type==PICKUP__KELP_TOKEN)
|
|
||||||
{
|
{
|
||||||
isNumberedItem=true;
|
isNumberedItem=true;
|
||||||
if(CGameSlotManager::getSlotData()->isKelpTokenUncollected(GameScene.getChapterNumber()-1,GameScene.getLevelNumber()-1,itemNumber)==false)
|
if(CGameSlotManager::getSlotData()->isKelpTokenUncollected(GameScene.getChapterNumber()-1,GameScene.getLevelNumber()-1,itemNumber)==false)
|
||||||
|
@ -461,11 +453,7 @@ void CLevel::initThings(int _respawningLevel)
|
||||||
newPickup=createPickup((PICKUP_TYPE)ItemList->Type,&pos);
|
newPickup=createPickup((PICKUP_TYPE)ItemList->Type,&pos);
|
||||||
if(isNumberedItem)
|
if(isNumberedItem)
|
||||||
{
|
{
|
||||||
if((PICKUP_TYPE)ItemList->Type==PICKUP__SPATULA)
|
if((PICKUP_TYPE)ItemList->Type==PICKUP__KELP_TOKEN)
|
||||||
{
|
|
||||||
((CSpatulaPickup*)newPickup)->setSpatulaNumber(itemNumber);
|
|
||||||
}
|
|
||||||
else if((PICKUP_TYPE)ItemList->Type==PICKUP__KELP_TOKEN)
|
|
||||||
{
|
{
|
||||||
((CKelpTokenPickup*)newPickup)->setTokenNumber(itemNumber);
|
((CKelpTokenPickup*)newPickup)->setTokenNumber(itemNumber);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
dsasdasda
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================================
|
/*=========================================================================
|
||||||
|
|
||||||
phealth.cpp
|
phealth.cpp
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
dssadsadsadsda
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================================
|
/*=========================================================================
|
||||||
|
|
||||||
phealth.h
|
phealth.h
|
||||||
|
|
|
@ -31,10 +31,6 @@
|
||||||
|
|
||||||
// For the factory..
|
// For the factory..
|
||||||
|
|
||||||
#ifndef __PICKUPS_PHEALTH_H__
|
|
||||||
#include "pickups\phealth.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __PICKUPS_PLIFE_H__
|
#ifndef __PICKUPS_PLIFE_H__
|
||||||
#include "pickups\plife.h"
|
#include "pickups\plife.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -414,6 +410,58 @@ void CBaseWeaponSimplePickup::renderPickup(DVECTOR *_pos)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void CBaseBouncingPickup::init()
|
||||||
|
{
|
||||||
|
CBasePickup::init();
|
||||||
|
m_timeTillVanish=TIME_TILL_VANISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void CBaseBouncingPickup::render()
|
||||||
|
{
|
||||||
|
if(m_timeTillVanish>FRAMES_TO_FLASH||m_timeTillVanish&3)
|
||||||
|
{
|
||||||
|
DVECTOR ofs,pos;
|
||||||
|
int visibilityRadius;
|
||||||
|
|
||||||
|
CPickupThing::render();
|
||||||
|
|
||||||
|
ofs=CLevel::getCameraPos();
|
||||||
|
pos.vx=Pos.vx-ofs.vx;
|
||||||
|
pos.vy=Pos.vy-ofs.vy;
|
||||||
|
visibilityRadius=getVisibilityRadius();
|
||||||
|
if(pos.vx>0-visibilityRadius&&pos.vx<512+visibilityRadius&&
|
||||||
|
pos.vy>0-visibilityRadius&&pos.vy<256+visibilityRadius)
|
||||||
|
{
|
||||||
|
renderPickup(&pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void CBaseBouncingPickup::collidedWith(CThing *_thisThing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose: This is basically a factory method for making pickups :)
|
Purpose: This is basically a factory method for making pickups :)
|
||||||
|
@ -430,13 +478,10 @@ CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos)
|
||||||
switch(_type)
|
switch(_type)
|
||||||
{
|
{
|
||||||
case PICKUP__BIG_HEALTH:
|
case PICKUP__BIG_HEALTH:
|
||||||
pickup=new ("LargeHealthPickup") CLargeHealthPickup();
|
|
||||||
break;
|
|
||||||
case PICKUP__MEDIUM_HEALTH:
|
case PICKUP__MEDIUM_HEALTH:
|
||||||
pickup=new ("MediumHealthPickup") CMediumHealthPickup();
|
|
||||||
break;
|
|
||||||
case PICKUP__SMALL_HEALTH:
|
case PICKUP__SMALL_HEALTH:
|
||||||
pickup=new ("SmallHealthPickup") CSmallHealthPickup();
|
ASSERT(!"HEALTH PICKUPS ARE NO LONGER IN THE GAME");
|
||||||
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PICKUP__LIFE:
|
case PICKUP__LIFE:
|
||||||
|
@ -488,7 +533,7 @@ CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PICKUP__BALLOON_AND_SPATULA:
|
case PICKUP__BALLOON_AND_SPATULA:
|
||||||
pickup=new ("BalloonAndSpatulaPickup") CBalloonAndSpatulaPickup();
|
ASSERT(!"BALLOON AND SPATULA PICKUPS ARE NO LONGER IN THE GAME");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PICKUP__JELLY_LAUNCHER:
|
case PICKUP__JELLY_LAUNCHER:
|
||||||
|
@ -499,6 +544,10 @@ CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos)
|
||||||
pickup=new ("KelpTokenPickup") CKelpTokenPickup();
|
pickup=new ("KelpTokenPickup") CKelpTokenPickup();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PICKUP__BOUNCING_SPATULA:
|
||||||
|
pickup=new ("BouncingSpatulaPickup") CBouncingSpatulaPickup();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ASSERT(!"UNKNOWN PICKUP TYPE");
|
ASSERT(!"UNKNOWN PICKUP TYPE");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -36,9 +36,9 @@
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
PICKUP__BIG_HEALTH,
|
PICKUP__BIG_HEALTH, // No longer in the game.. Yay(!)
|
||||||
PICKUP__MEDIUM_HEALTH,
|
PICKUP__MEDIUM_HEALTH, // No longer in the game.. Yay(!)
|
||||||
PICKUP__SMALL_HEALTH,
|
PICKUP__SMALL_HEALTH, // No longer in the game.. Yay(!)
|
||||||
PICKUP__LIFE,
|
PICKUP__LIFE,
|
||||||
PICKUP__SPATULA,
|
PICKUP__SPATULA,
|
||||||
PICKUP__JELLY_LAUNCHER_AMMO,
|
PICKUP__JELLY_LAUNCHER_AMMO,
|
||||||
|
@ -54,6 +54,9 @@ typedef enum
|
||||||
PICKUP__BALLOON_AND_SPATULA,
|
PICKUP__BALLOON_AND_SPATULA,
|
||||||
PICKUP__JELLY_LAUNCHER,
|
PICKUP__JELLY_LAUNCHER,
|
||||||
PICKUP__KELP_TOKEN,
|
PICKUP__KELP_TOKEN,
|
||||||
|
|
||||||
|
PICKUP__BOUNCING_SPATULA,
|
||||||
|
|
||||||
PICKUP__MAX
|
PICKUP__MAX
|
||||||
}
|
}
|
||||||
PICKUP_TYPE;
|
PICKUP_TYPE;
|
||||||
|
@ -149,6 +152,28 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CBaseBouncingPickup : public CBasePickup
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void init();
|
||||||
|
virtual void render();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TIME_TILL_VANISH=5*55,
|
||||||
|
FRAMES_TO_FLASH=2*55,
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void renderPickup(DVECTOR *_pos)=0;
|
||||||
|
|
||||||
|
virtual void collidedWith(CThing *_thisThing);
|
||||||
|
|
||||||
|
int m_timeTillVanish;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Globals
|
Globals
|
||||||
------- */
|
------- */
|
||||||
|
|
|
@ -37,7 +37,10 @@
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "game/game.h"
|
#ifndef __PLAYER_PLAYER_H__
|
||||||
|
#include "player\player.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
|
@ -109,8 +112,8 @@ DVECTOR CSpatulaPickup::getSizeForPlacement()
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CSpatulaPickup::collect(class CPlayer *_player)
|
void CSpatulaPickup::collect(class CPlayer *_player)
|
||||||
{
|
{
|
||||||
|
_player->addSpatula();
|
||||||
CBasePickup::collect(_player);
|
CBasePickup::collect(_player);
|
||||||
CGameSlotManager::getSlotData()->collectSpatula(GameScene.getChapterNumber()-1,GameScene.getLevelNumber()-1,m_spatulaNumber);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
@ -162,31 +165,21 @@ void CSpatulaPickup::renderPickup(DVECTOR *_pos)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern int balloon_height;
|
|
||||||
extern int balloon_r1;
|
|
||||||
extern int balloon_g1;
|
|
||||||
extern int balloon_b1;
|
|
||||||
extern int balloon_r2;
|
|
||||||
extern int balloon_g2;
|
|
||||||
extern int balloon_b2;
|
|
||||||
extern int balloon_speed;
|
|
||||||
extern int balloon_scale1;
|
|
||||||
extern int balloon_scale2;
|
|
||||||
extern int balloon_phase;
|
|
||||||
extern int balloon_vissize;
|
|
||||||
extern int balloon_stringx;
|
|
||||||
int bspat_stringendxoff=8;
|
|
||||||
int bspat_stringendyoff=-13;
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
Params:
|
Params:
|
||||||
Returns:
|
Returns:
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CBalloonAndSpatulaPickup::init()
|
DVECTOR CBouncingSpatulaPickup::getSizeForPlacement()
|
||||||
{
|
{
|
||||||
CSpatulaPickup::init();
|
DVECTOR size;
|
||||||
m_sin=0;
|
sFrameHdr *fh;
|
||||||
|
|
||||||
|
fh=CGameScene::getSpriteBank()->getFrameHeader(FRM__SPATULA);
|
||||||
|
size.vx=fh->W;
|
||||||
|
size.vy=fh->H;
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
@ -195,45 +188,32 @@ void CBalloonAndSpatulaPickup::init()
|
||||||
Params:
|
Params:
|
||||||
Returns:
|
Returns:
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CBalloonAndSpatulaPickup::thinkPickup(int _frames)
|
void CBouncingSpatulaPickup::renderPickup(DVECTOR *_pos)
|
||||||
{
|
|
||||||
CSpatulaPickup::thinkPickup(_frames);
|
|
||||||
m_sin=(m_sin+(_frames*balloon_speed))&4095;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
Function:
|
|
||||||
Purpose:
|
|
||||||
Params:
|
|
||||||
Returns:
|
|
||||||
---------------------------------------------------------------------- */
|
|
||||||
void CBalloonAndSpatulaPickup::renderPickup(DVECTOR *_pos)
|
|
||||||
{
|
{
|
||||||
SpriteBank *sprites;
|
SpriteBank *sprites;
|
||||||
sFrameHdr *fh,*fhspat;
|
sFrameHdr *fh;
|
||||||
int xo1,xo2;
|
|
||||||
int x,y;
|
int x,y;
|
||||||
|
|
||||||
sprites=CGameScene::getSpriteBank();
|
sprites=CGameScene::getSpriteBank();
|
||||||
fh=sprites->getFrameHeader(FRM__BALLOON);
|
fh=sprites->getFrameHeader(FRM__SPATULA);
|
||||||
fhspat=sprites->getFrameHeader(FRM__SPATULA);
|
x=_pos->vx-(fh->W/2);
|
||||||
|
y=_pos->vy-(fh->H/2);
|
||||||
|
sprites->printFT4(fh,x,y,0,0,OTPOS__PICKUP_POS);
|
||||||
|
|
||||||
xo1=((msin((m_sin+balloon_phase)&4095)*balloon_scale1)>>12);
|
/*
|
||||||
xo2=((msin(m_sin)*balloon_scale2)>>12);
|
if(m_glint<=spat_maxglint)
|
||||||
x=_pos->vx-(fh->W/2)+bspat_stringendxoff;
|
{
|
||||||
y=_pos->vy-(fh->H/2)-(fhspat->H/2)-balloon_height+bspat_stringendyoff;
|
fh=sprites->getFrameHeader(spat_glintFrames[(m_glint>>spat_glintgrowspeed)&0x07]);
|
||||||
sprites->printFT4(fh,x+xo1,y,0,0,OTPOS__PICKUP_POS);
|
x=x+spat_gxy.vx;
|
||||||
setCollisionCentreOffset(xo2,0);
|
y=y+spat_gxy.vy;
|
||||||
|
sprites->printRotatedScaledSprite(fh,x,y,4095,4095,m_glintRot,OTPOS__PICKUP_POS-1);
|
||||||
x=_pos->vx+balloon_stringx+bspat_stringendxoff;
|
}
|
||||||
y=_pos->vy+(fh->H/2)-(fhspat->H/2)-balloon_height+bspat_stringendyoff;
|
*/
|
||||||
DrawLine(x+xo1,y,x+xo2,y+balloon_height,balloon_r1,balloon_g1,balloon_b1,OTPOS__PICKUP_POS);
|
|
||||||
x++;
|
|
||||||
DrawLine(x+xo1,y,x+xo2,y+balloon_height,balloon_r2,balloon_g2,balloon_b2,OTPOS__PICKUP_POS);
|
|
||||||
|
|
||||||
_pos->vx+=xo2; // This is soooooooo naughty (pkg)
|
|
||||||
CSpatulaPickup::renderPickup(_pos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
end */
|
end */
|
||||||
|
|
|
@ -60,20 +60,19 @@ private:
|
||||||
int m_spatulaNumber;
|
int m_spatulaNumber;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CBalloonAndSpatulaPickup : public CSpatulaPickup
|
|
||||||
|
class CBouncingSpatulaPickup : public CBaseBouncingPickup
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init();
|
virtual DVECTOR getSizeForPlacement();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void thinkPickup(int _frames);
|
|
||||||
virtual void renderPickup(DVECTOR *_pos);
|
virtual void renderPickup(DVECTOR *_pos);
|
||||||
|
|
||||||
private:
|
|
||||||
int m_sin;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Globals
|
Globals
|
||||||
------- */
|
------- */
|
||||||
|
|
|
@ -89,6 +89,10 @@
|
||||||
#include "pickups\pickup.h"
|
#include "pickups\pickup.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __MATHTABLE_HEADER__
|
||||||
|
#include "utils\mathtab.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
|
@ -702,15 +706,6 @@ if(newmode!=-1)
|
||||||
|
|
||||||
m_allowConversation=false;
|
m_allowConversation=false;
|
||||||
|
|
||||||
if(m_healthReactFrames)
|
|
||||||
{
|
|
||||||
m_healthReactFrames-=_frames;
|
|
||||||
if(m_healthReactFrames<0)
|
|
||||||
{
|
|
||||||
m_healthReactFrames=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_tryingToManuallyPickupWeapon=false;
|
m_tryingToManuallyPickupWeapon=false;
|
||||||
m_tryingToAutomaticallyPickupWeapon=false;
|
m_tryingToAutomaticallyPickupWeapon=false;
|
||||||
|
|
||||||
|
@ -720,6 +715,30 @@ if(newmode!=-1)
|
||||||
#ifdef __USER_paul__
|
#ifdef __USER_paul__
|
||||||
if(PadGetDown(0)&PAD_TRIANGLE)
|
if(PadGetDown(0)&PAD_TRIANGLE)
|
||||||
{
|
{
|
||||||
|
DVECTOR spawnBasePos;
|
||||||
|
int angle,angleInc;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
spawnBasePos=Pos;
|
||||||
|
spawnBasePos.vy-=50;
|
||||||
|
angle=-1024;
|
||||||
|
angleInc=512;
|
||||||
|
|
||||||
|
for(i=0;i<5;i++)
|
||||||
|
{
|
||||||
|
DVECTOR offset,spawnPos;
|
||||||
|
CBaseBouncingPickup *pickup;
|
||||||
|
|
||||||
|
angle&=4095;
|
||||||
|
offset.vx=((msin(angle)*25)>>12);
|
||||||
|
offset.vy=-((mcos(angle)*25)>>12);
|
||||||
|
spawnPos.vx=spawnBasePos.vx+offset.vx;
|
||||||
|
spawnPos.vy=spawnBasePos.vy+offset.vy;
|
||||||
|
|
||||||
|
pickup=(CBaseBouncingPickup*)createPickup(PICKUP__BOUNCING_SPATULA,&spawnPos);
|
||||||
|
|
||||||
|
angle+=angleInc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
///
|
///
|
||||||
|
@ -1226,7 +1245,10 @@ if(drawlastpos)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Render
|
SpriteBank *sb=CGameScene::getSpriteBank();
|
||||||
|
|
||||||
|
|
||||||
|
// Render player
|
||||||
DVECTOR sbPos=
|
DVECTOR sbPos=
|
||||||
{
|
{
|
||||||
Pos.vx-m_cameraPos.vx,
|
Pos.vx-m_cameraPos.vx,
|
||||||
|
@ -1236,91 +1258,58 @@ if(drawlastpos)
|
||||||
m_currentPlayerModeClass->render(&sbPos);
|
m_currentPlayerModeClass->render(&sbPos);
|
||||||
|
|
||||||
|
|
||||||
// Health
|
// UI
|
||||||
if(!isWearingDivingHelmet())
|
char spatCount[20];
|
||||||
{
|
int x,y;
|
||||||
// In water - Use normal SB face for health
|
sFrameHdr *fh;
|
||||||
static int s_fullHealthFrames[]=
|
|
||||||
{
|
|
||||||
FRM__HEALTH_FULL_1,
|
|
||||||
FRM__HEALTH_FULL_2,
|
|
||||||
FRM__HEALTH_FULL_3,
|
|
||||||
FRM__HEALTH_FULL_4,
|
|
||||||
FRM__HEALTH_FULL_5,
|
|
||||||
};
|
|
||||||
static int s_emptyHealthFrames[]=
|
|
||||||
{
|
|
||||||
FRM__HEALTH_EMPTY_1,
|
|
||||||
FRM__HEALTH_EMPTY_2,
|
|
||||||
FRM__HEALTH_EMPTY_3,
|
|
||||||
FRM__HEALTH_EMPTY_4,
|
|
||||||
FRM__HEALTH_EMPTY_5,
|
|
||||||
};
|
|
||||||
int i,x,y;
|
|
||||||
POLY_FT4 *ft4;
|
|
||||||
int *frames;
|
|
||||||
|
|
||||||
x=HEALTH_ICONX;
|
// Spat count
|
||||||
y=HEALTH_ICONY;
|
sprintf(spatCount,"x%d",m_numSpatulasHeld);
|
||||||
if(m_health==0||m_healthReactFrames)
|
x=SB_UI_XBASE;
|
||||||
{
|
y=SB_UI_YBASE;
|
||||||
frames=s_emptyHealthFrames;
|
fh=sb->getFrameHeader(FRM__SPATULA);
|
||||||
}
|
sb->printFT4(fh,x,y,0,0,0);
|
||||||
else
|
x+=fh->W;
|
||||||
{
|
m_fontBank->print(x,y,spatCount);
|
||||||
frames=s_fullHealthFrames;
|
x+=SB_UI_GAP_FROM_SPAT_COUNT_TO_PICKUPS;
|
||||||
}
|
|
||||||
|
|
||||||
int ygap;
|
if(isWearingDivingHelmet())
|
||||||
ygap=CGameScene::getSpriteBank()->getFrameHeader(*frames)->H;
|
|
||||||
for(i=5;i>0;i--)
|
|
||||||
{
|
|
||||||
ft4=CGameScene::getSpriteBank()->printFT4(*frames++,x,y,0,0,0);
|
|
||||||
setSemiTrans(ft4,i>m_health);
|
|
||||||
y+=ygap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// Out of water - Use bowl of water
|
// Helmet
|
||||||
POLY_FT4 *ft4;
|
POLY_FT4 *ft4;
|
||||||
sFrameHdr *fh;
|
|
||||||
int V,W,H,partH;
|
int V,W,H,partH;
|
||||||
|
|
||||||
ft4=CGameScene::getSpriteBank()->printFT4(FRM__WATERHILIGHT,HEALTH_ICONX,HEALTH_ICONY,0,0,0);
|
ft4=sb->printFT4(FRM__WATERHILIGHT,x,y,0,0,0);
|
||||||
setSemiTrans(ft4,true);
|
setSemiTrans(ft4,true);
|
||||||
|
|
||||||
fh=CGameScene::getSpriteBank()->getFrameHeader(FRM__WATER);
|
fh=sb->getFrameHeader(FRM__WATER);
|
||||||
ft4=CGameScene::getSpriteBank()->printFT4(fh,0,0,0,0,0);
|
ft4=sb->printFT4(fh,0,0,0,0,0);
|
||||||
setSemiTrans(ft4,true);
|
setSemiTrans(ft4,true);
|
||||||
V=fh->V;
|
V=fh->V;
|
||||||
W=fh->W;
|
W=fh->W;
|
||||||
H=fh->H;
|
H=fh->H;
|
||||||
partH=(H*(255-(m_healthWaterLevel>>WATERLEVELSHIFT)))>>8;
|
partH=(H*(255-(m_healthWaterLevel>>WATERLEVELSHIFT)))>>8;
|
||||||
if(partH>H)partH=H;
|
if(partH>H)partH=H;
|
||||||
setXYWH(ft4,HEALTH_ICONX,HEALTH_ICONY+(partH),W,H-partH);
|
setXYWH(ft4,x,y+(partH),W,H-partH);
|
||||||
ft4->v0=V+(partH);
|
ft4->v0=V+(partH);
|
||||||
ft4->v1=V+(partH);
|
ft4->v1=V+(partH);
|
||||||
|
|
||||||
CGameScene::getSpriteBank()->printFT4(FRM__WATERMETER,HEALTH_ICONX,HEALTH_ICONY,0,0,0);
|
sb->printFT4(FRM__WATERMETER,x,y,0,0,0);
|
||||||
|
|
||||||
|
x+=fh->W+SB_UI_GAP_BETWEEN_ITEMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mode specific ui
|
|
||||||
int itemX=COLLECTEDITEM_BASEX;
|
|
||||||
|
|
||||||
// Pickups
|
|
||||||
m_currentPlayerModeClass->renderModeUi();
|
|
||||||
if(isWearingBoots())
|
if(isWearingBoots())
|
||||||
{
|
{
|
||||||
int x,y;
|
// Boots
|
||||||
sFrameHdr *fh=CGameScene::getSpriteBank()->getFrameHeader(FRM__SHOE);
|
int pickupX,pickupY;
|
||||||
x=itemX-(fh->W/2);
|
sFrameHdr *fh=sb->getFrameHeader(FRM__SHOE);
|
||||||
y=COLLECTEDITEM_BASEY-(fh->H/2);
|
sb->printFT4(fh,x,y,0,0,0);
|
||||||
CGameScene::getSpriteBank()->printFT4(fh,x+2,y+2,0,0,0);
|
sb->printFT4(fh,x+4,y+4,0,0,0);
|
||||||
CGameScene::getSpriteBank()->printFT4(fh,x-2,y-2,0,0,0);
|
x+=fh->W+SB_UI_GAP_BETWEEN_ITEMS+4;
|
||||||
itemX+=COLLECTEDITEM_GAP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mode specific ui
|
||||||
|
m_currentPlayerModeClass->renderModeUi();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1427,32 +1416,6 @@ int CPlayer::getHeightFromGroundNoPlatform(int _x,int _y,int _maxHeight=32)
|
||||||
return( CGameScene::getCollision()->getHeightFromGround(_x,_y,_maxHeight) );
|
return( CGameScene::getCollision()->getHeightFromGround(_x,_y,_maxHeight) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
Function:
|
|
||||||
Purpose:
|
|
||||||
Params:
|
|
||||||
Returns:
|
|
||||||
---------------------------------------------------------------------- */
|
|
||||||
void CPlayer::addHealth(int _health)
|
|
||||||
{
|
|
||||||
if(!isWearingDivingHelmet())
|
|
||||||
{
|
|
||||||
m_health+=_health;
|
|
||||||
if(m_health>MAX_HEALTH)
|
|
||||||
{
|
|
||||||
m_health=MAX_HEALTH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_healthWaterLevel+=WATERHEALTHPART*_health;
|
|
||||||
if(m_healthWaterLevel>WATERMAXHEALTH)
|
|
||||||
{
|
|
||||||
m_healthWaterLevel=WATERMAXHEALTH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
|
@ -1709,9 +1672,8 @@ void CPlayer::respawn()
|
||||||
|
|
||||||
m_allowConversation=false;
|
m_allowConversation=false;
|
||||||
|
|
||||||
m_health=MAX_HEALTH;
|
m_numSpatulasHeld=0;
|
||||||
m_healthWaterLevel=WATERMAXHEALTH;
|
m_healthWaterLevel=WATERMAXHEALTH;
|
||||||
m_healthReactFrames=0;
|
|
||||||
m_invincibleFrameCount=INVINCIBLE_FRAMES__START;
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__START;
|
||||||
m_helmetSoundTimer=0;
|
m_helmetSoundTimer=0;
|
||||||
Pos=m_respawnPos;
|
Pos=m_respawnPos;
|
||||||
|
@ -1949,34 +1911,21 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!isWearingDivingHelmet())
|
if(ouchThatHurtSoMuchThatImJustGoingToDieNow||(getSpatulasHeld()==0&&m_currentMode!=PLAYER_MODE_NET))
|
||||||
{
|
{
|
||||||
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
died=true;
|
||||||
{
|
|
||||||
m_health--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_health=-1;
|
|
||||||
}
|
|
||||||
if(m_health<0)
|
|
||||||
{
|
|
||||||
died=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
if(m_currentMode==PLAYER_MODE_NET)
|
||||||
{
|
{
|
||||||
m_healthWaterLevel-=WATERHEALTHPART;
|
// Launch net pickup
|
||||||
|
m_currentMode=PLAYER_MODE_FULLUNARMED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_health=-1;
|
// Launch all spatulas!
|
||||||
}
|
m_numSpatulasHeld=0;
|
||||||
if(m_healthWaterLevel<0)
|
|
||||||
{
|
|
||||||
died=true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2005,8 +1954,6 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh
|
||||||
if ( ( (CNpcPlatform *) platform )->isCart() )
|
if ( ( (CNpcPlatform *) platform )->isCart() )
|
||||||
{
|
{
|
||||||
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
||||||
m_healthReactFrames=25;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2043,7 +1990,6 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh
|
||||||
m_currentPlayerModeClass->setState(STATE_JUMPBACK);
|
m_currentPlayerModeClass->setState(STATE_JUMPBACK);
|
||||||
}
|
}
|
||||||
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
||||||
m_healthReactFrames=25;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,13 +182,11 @@ class CPlayer : public CPlayerThing
|
||||||
public:
|
public:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
MAX_HEALTH=5,
|
|
||||||
MAX_LIVES=99,
|
MAX_LIVES=99,
|
||||||
|
|
||||||
WATERLEVELSHIFT=5,
|
WATERLEVELSHIFT=5,
|
||||||
WATERMAXHEALTH=(255<<WATERLEVELSHIFT),
|
WATERMAXHEALTH=(255<<WATERLEVELSHIFT),
|
||||||
WATERHEALTHPART=WATERMAXHEALTH/(MAX_HEALTH+1),
|
WATERMINSOAKUPLEVEL=(245<<WATERLEVELSHIFT), // SB won't auto soak unless water is lower than this
|
||||||
WATERMINSOACKUPLEVEL=(245<<WATERLEVELSHIFT), // SB won't auto soak unless water is lower than this
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -228,8 +226,9 @@ public:
|
||||||
|
|
||||||
void setLedgeLookAhead(int _lookAhead) {m_ledgeLookAhead=_lookAhead;}
|
void setLedgeLookAhead(int _lookAhead) {m_ledgeLookAhead=_lookAhead;}
|
||||||
|
|
||||||
void addHealth(int _health);
|
|
||||||
void addLife();
|
void addLife();
|
||||||
|
void addSpatula() {m_numSpatulasHeld++;}
|
||||||
|
int getSpatulasHeld() {return m_numSpatulasHeld;}
|
||||||
ATTACK_STATE getAttackState();
|
ATTACK_STATE getAttackState();
|
||||||
int isRecoveringFromHit() {return m_invincibleFrameCount!=0||m_currentMode==PLAYER_MODE_DEAD;}
|
int isRecoveringFromHit() {return m_invincibleFrameCount!=0||m_currentMode==PLAYER_MODE_DEAD;}
|
||||||
|
|
||||||
|
@ -331,9 +330,8 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_lives;
|
int m_lives;
|
||||||
int m_health;
|
int m_numSpatulasHeld;
|
||||||
int m_healthWaterLevel;
|
int m_healthWaterLevel;
|
||||||
int m_healthReactFrames;
|
|
||||||
int m_helmetSoundTimer; // Timer for breathing sound when using the helmet
|
int m_helmetSoundTimer; // Timer for breathing sound when using the helmet
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,8 +391,8 @@ public:
|
||||||
|
|
||||||
void setIsInWater(int _in) {m_isInWater=_in;m_helmetSoundTimer=0;}
|
void setIsInWater(int _in) {m_isInWater=_in;m_helmetSoundTimer=0;}
|
||||||
int getIsInWater() {return m_isInWater;}
|
int getIsInWater() {return m_isInWater;}
|
||||||
int getIsHealthFullSoICanStopSoakingUp() {return m_healthWaterLevel==WATERMAXHEALTH;}
|
int getIsHelmetFullSoICanStopSoakingUp() {return m_healthWaterLevel==WATERMAXHEALTH;}
|
||||||
int getIsHealthSoFullThatIDontNeedToSoakUp(){return m_healthWaterLevel>=WATERMINSOACKUPLEVEL;}
|
int getIsHelmetSoFullThatIDontNeedToSoakUp(){return m_healthWaterLevel>=WATERMINSOAKUPLEVEL;}
|
||||||
|
|
||||||
int isHoldingNet() {return m_currentMode==PLAYER_MODE_NET;}
|
int isHoldingNet() {return m_currentMode==PLAYER_MODE_NET;}
|
||||||
|
|
||||||
|
@ -444,16 +442,10 @@ public:
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
HEALTH_ICONX=40,
|
SB_UI_XBASE=40,
|
||||||
HEALTH_ICONY=40,
|
SB_UI_YBASE=40,
|
||||||
POWERUPUI_ICONX=400,
|
SB_UI_GAP_FROM_SPAT_COUNT_TO_PICKUPS=50,
|
||||||
POWERUPUI_ICONY=40,
|
SB_UI_GAP_BETWEEN_ITEMS=5,
|
||||||
POWERUPUI_TEXTX=440,
|
|
||||||
POWERUPUI_TEXTY=37,
|
|
||||||
POWERUPUI_OT=0,
|
|
||||||
COLLECTEDITEM_BASEX=110,
|
|
||||||
COLLECTEDITEM_BASEY=60,
|
|
||||||
COLLECTEDITEM_GAP=40,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -307,7 +307,7 @@ void CPlayerModeBase::thinkVerticalMovement()
|
||||||
pos=m_player->getPlayerPos();
|
pos=m_player->getPlayerPos();
|
||||||
if(m_player->getHeightFromGround(pos.vx,pos.vy,5)==0&&
|
if(m_player->getHeightFromGround(pos.vx,pos.vy,5)==0&&
|
||||||
(CGameScene::getCollision()->getCollisionBlock(pos.vx,pos.vy)&COLLISION_TYPE_MASK)==COLLISION_TYPE_FLAG_SOAKUP&&
|
(CGameScene::getCollision()->getCollisionBlock(pos.vx,pos.vy)&COLLISION_TYPE_MASK)==COLLISION_TYPE_FLAG_SOAKUP&&
|
||||||
!m_player->getIsHealthSoFullThatIDontNeedToSoakUp())
|
!m_player->getIsHelmetSoFullThatIDontNeedToSoakUp())
|
||||||
{
|
{
|
||||||
// Hit water - Go into soakup mode
|
// Hit water - Go into soakup mode
|
||||||
setState(STATE_SOAKUP);
|
setState(STATE_SOAKUP);
|
||||||
|
|
|
@ -161,8 +161,8 @@ public:
|
||||||
CPlayer *getPlayer() { return( m_player ); }
|
CPlayer *getPlayer() { return( m_player ); }
|
||||||
|
|
||||||
int getIsInWater() {return m_player->getIsInWater();}
|
int getIsInWater() {return m_player->getIsInWater();}
|
||||||
int getIsHealthFullSoICanStopSoakingUp() {return m_player->getIsHealthFullSoICanStopSoakingUp();}
|
int getIsHelmetFullSoICanStopSoakingUp() {return m_player->getIsHelmetFullSoICanStopSoakingUp();}
|
||||||
int getIsHealthSoFullThatIDontNeedToSoakUp(){return m_player->getIsHealthSoFullThatIDontNeedToSoakUp();}
|
int getIsHelmetSoFullThatIDontNeedToSoakUp(){return m_player->getIsHelmetSoFullThatIDontNeedToSoakUp();}
|
||||||
|
|
||||||
void moveLeft();
|
void moveLeft();
|
||||||
void moveRight();
|
void moveRight();
|
||||||
|
|
|
@ -115,7 +115,7 @@ void CPlayerStateSoakUp::enter(CPlayerModeBase *_playerMode)
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CPlayerStateSoakUp::think(CPlayerModeBase *_playerMode)
|
void CPlayerStateSoakUp::think(CPlayerModeBase *_playerMode)
|
||||||
{
|
{
|
||||||
if(!_playerMode->getIsHealthFullSoICanStopSoakingUp())
|
if(!_playerMode->getIsHelmetFullSoICanStopSoakingUp())
|
||||||
{
|
{
|
||||||
if(m_breatheDelayFrames==0)
|
if(m_breatheDelayFrames==0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue