diff --git a/source/frontend/frontend.cpp b/source/frontend/frontend.cpp index 3db82b7ae..86d81c561 100644 --- a/source/frontend/frontend.cpp +++ b/source/frontend/frontend.cpp @@ -70,6 +70,10 @@ #include "map\map.h" #endif +#ifndef __GAME_GAMESLOT_H__ +#include "game\gameslot.h" +#endif + /* Std Lib ------- */ @@ -169,6 +173,11 @@ void CFrontEndScene::init() m_font=new ("frontendfont") FontBank(); m_font->initialise(&standardFont); m_font->setJustification(FontBank::JUST_CENTRE); + +#ifndef __E3__ + CGameSlotManager::eraseGameSlot(0); + CGameSlotManager::setActiveSlot(0); +#endif } diff --git a/source/game/game.cpp b/source/game/game.cpp index 7a779493b..04f7f8cb5 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -296,6 +296,21 @@ CPlayer * CGameScene::getPlayer() return( m_player ); } +/*****************************************************************************/ +int CGameScene::getChapterNumber() +{ + return Level.getCurrentChapter(); +} +int CGameScene::getLevelNumber() +{ + return Level.getCurrentChapterLevel(); +} + +int CGameScene::getTotalSpatCountForThisLevel() +{ + return Level.getTotalSpatCount(); +} + /*****************************************************************************/ void CGameScene::respawnLevel() { diff --git a/source/game/game.h b/source/game/game.h index fa4236aef..f1d28975a 100644 --- a/source/game/game.h +++ b/source/game/game.h @@ -39,6 +39,10 @@ virtual int canPause(); int readyToShutdown(); char *getSceneName() {return "Game";} + int getChapterNumber(); + int getLevelNumber(); + int getTotalSpatCountForThisLevel(); + CPlayer *getPlayer(); void respawnLevel(); void sendEvent( GAME_EVENT evt, class CThing *sourceThing ); @@ -46,7 +50,8 @@ virtual int canPause(); static void setReadyToExit() {s_readyToExit=true;} static void levelFinished() {s_levelFinished=true;} static void restartlevel() {s_restartLevel=true;} - + + // static MATRIX &GetCamMtx() {return(CamMtx);} static ACTOR_TYPE getActorType( int actorNum ) {return actorType[actorNum];} diff --git a/source/game/pause.cpp b/source/game/pause.cpp index 15d4b91f1..8a450e5fc 100644 --- a/source/game/pause.cpp +++ b/source/game/pause.cpp @@ -34,6 +34,14 @@ #include "player\player.h" #endif +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +#ifndef __GAME_GAMESLOT_H__ +#include "game\gameslot.h" +#endif + /* Std Lib ------- */ @@ -149,7 +157,7 @@ void CPauseMenu::init() &newmode,PLAYER_MODE_DEAD); xpos+=TEXT_SPACING; #else - xpos+=TEXT_SPACING*2; + xpos+=TEXT_SPACING*4; CGUIFactory::createValueButtonFrame(m_guiFrame, (FRAME_WIDTH-TEXT_BOX_WIDTH)/2,xpos,TEXT_BOX_WIDTH,TEXT_BOX_HEIGHT, STR__PAUSE_MENU__CONTINUE, @@ -169,6 +177,10 @@ void CPauseMenu::init() xpos+=TEXT_SPACING*2; #endif + m_guiSpatReadout=new ("SpatReadout") CGUISpatCountReadout(); + m_guiSpatReadout->init(m_guiFrame); + m_guiSpatReadout->setObjectXYWH(10,10,120,40); + m_active=false; } @@ -193,10 +205,16 @@ void CPauseMenu::shutdown() ---------------------------------------------------------------------- */ void CPauseMenu::select() { + int chapter,level; m_active=true; m_exitPauseMenuFlag=false; m_quitGameFlag=false; m_guiFrame->select(); + + chapter=GameScene.getChapterNumber(); + level=GameScene.getLevelNumber(); + m_guiSpatReadout->setSpatCounts(CGameSlotManager::getSlotData()->getSpatulaCollectedCount(chapter,level), + GameScene.getTotalSpatCountForThisLevel()); } diff --git a/source/game/pause.h b/source/game/pause.h index f71306ee9..12d79cbe4 100644 --- a/source/game/pause.h +++ b/source/game/pause.h @@ -48,7 +48,8 @@ private: int m_exitPauseMenuFlag; int m_quitGameFlag; - class CGUIControlFrame *m_guiFrame; + class CGUIControlFrame *m_guiFrame; + class CGUISpatCountReadout *m_guiSpatReadout; }; diff --git a/source/gui/greadout.cpp b/source/gui/greadout.cpp index 6d8eee1c0..f3e994f2e 100644 --- a/source/gui/greadout.cpp +++ b/source/gui/greadout.cpp @@ -45,6 +45,10 @@ #include #endif +#ifndef __SPR_SPRITES_H__ +#include +#endif + /*---------------------------------------------------------------------- Tyepdefs && Defines @@ -113,8 +117,6 @@ void CGUITextReadout::setReadoutData(TextReadoutData *_data) ---------------------------------------------------------------------- */ void CGUITextReadout::render() { - FontBank *fb; - if(!isHidden()) { getFontBank()->print((getW()-(BORDERWIDTH*2))/2,m_textY,m_textId); @@ -190,6 +192,84 @@ void CGUITextReadout::recalc() +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUISpatCountReadout::init(CGUIObject *_parent,GUIId _id) +{ + CGUIObjectWithFont::init(_parent,_id); + m_spatsCollected=m_spatsTotal=0; + m_spriteBank=new ("SpatCountReadoutSprites") SpriteBank(); + m_spriteBank->load(SPRITES_SPRITES_SPR); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUISpatCountReadout::shutdown() +{ + m_spriteBank->dump(); delete m_spriteBank; + CGUIObjectWithFont::shutdown(); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUISpatCountReadout::setSpatCounts(int _collected,int _total) +{ + m_spatsCollected=_collected; + m_spatsTotal=_total; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUISpatCountReadout::render() +{ + if(!isHidden()) + { + FontBank *fb; + sFrameHdr *fh; + char buf[100]; + int x,y; + + fb=getFontBank(); + fh=m_spriteBank->getFrameHeader(FRM__SPATULA); + + sprintf(buf,"%d/%d",m_spatsCollected,m_spatsTotal); + x=getW()-fb->getStringWidth(buf); + y=(getH()/2)-fb->getCharHeight(); + fb->print(x,y,buf); + + x=getX()+getParentX(); + y=getY()+getParentY()+((getH()-fh->H)/2); + m_spriteBank->printFT4(fh,x,y,0,0,0); + } + CGUIObjectWithFont::render(); +} + + + + + + + + + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/gui/greadout.h b/source/gui/greadout.h index a5b2e23ce..ff15ee08b 100644 --- a/source/gui/greadout.h +++ b/source/gui/greadout.h @@ -67,6 +67,24 @@ private: }; +class CGUISpatCountReadout : public CGUIObjectWithFont +{ +public: + virtual void init(CGUIObject *_parent,GUIId _id=noId); + virtual void shutdown(); + + virtual void setSpatCounts(int _collected,int _total); + + virtual void render(); + + +private: + int m_spatsCollected,m_spatsTotal; + class SpriteBank *m_spriteBank; + +}; + + class CGUISpriteReadout : public CGUIObjectWithSpriteBank { public: diff --git a/source/level/level.cpp b/source/level/level.cpp index 6c10bd30b..1791bf3a3 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -93,39 +93,39 @@ extern int s_globalLevelSelectThing; sLvlTab LvlTable[]= { // C1 - {1,1,LEVELS_CHAPTER01_LEVEL01_LVL,LEVELS_CHAPTER01_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL1}, - {1,2,LEVELS_CHAPTER01_LEVEL02_LVL,LEVELS_CHAPTER01_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL2}, - {1,3,LEVELS_CHAPTER01_LEVEL03_LVL,LEVELS_CHAPTER01_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL3}, - {1,4,LEVELS_CHAPTER01_LEVEL04_LVL,LEVELS_CHAPTER01_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL4}, + {1,1, 20, LEVELS_CHAPTER01_LEVEL01_LVL,LEVELS_CHAPTER01_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL1}, + {1,2, 20, LEVELS_CHAPTER01_LEVEL02_LVL,LEVELS_CHAPTER01_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL2}, + {1,3, 20, LEVELS_CHAPTER01_LEVEL03_LVL,LEVELS_CHAPTER01_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL3}, + {1,4, 20, LEVELS_CHAPTER01_LEVEL04_LVL,LEVELS_CHAPTER01_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL4}, // C2 - {2,1,LEVELS_CHAPTER02_LEVEL01_LVL,LEVELS_CHAPTER02_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL1}, - {2,2,LEVELS_CHAPTER02_LEVEL02_LVL,LEVELS_CHAPTER02_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL2}, - {2,3,LEVELS_CHAPTER02_LEVEL03_LVL,LEVELS_CHAPTER02_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL3}, - {2,4,LEVELS_CHAPTER02_LEVEL04_LVL,LEVELS_CHAPTER02_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL4}, + {2,1, 20, LEVELS_CHAPTER02_LEVEL01_LVL,LEVELS_CHAPTER02_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL1}, + {2,2, 20, LEVELS_CHAPTER02_LEVEL02_LVL,LEVELS_CHAPTER02_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL2}, + {2,3, 20, LEVELS_CHAPTER02_LEVEL03_LVL,LEVELS_CHAPTER02_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL3}, + {2,4, 20, LEVELS_CHAPTER02_LEVEL04_LVL,LEVELS_CHAPTER02_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER2_LEVEL4}, // C3 - {3,1,LEVELS_CHAPTER03_LEVEL01_LVL,LEVELS_CHAPTER03_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL1}, - {3,2,LEVELS_CHAPTER03_LEVEL02_LVL,LEVELS_CHAPTER03_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL2}, - {3,3,LEVELS_CHAPTER03_LEVEL03_LVL,LEVELS_CHAPTER03_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL3}, - {3,4,LEVELS_CHAPTER03_LEVEL04_LVL,LEVELS_CHAPTER03_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL4}, + {3,1, 20, LEVELS_CHAPTER03_LEVEL01_LVL,LEVELS_CHAPTER03_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL1}, + {3,2, 20, LEVELS_CHAPTER03_LEVEL02_LVL,LEVELS_CHAPTER03_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL2}, + {3,3, 20, LEVELS_CHAPTER03_LEVEL03_LVL,LEVELS_CHAPTER03_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL3}, + {3,4, 20, LEVELS_CHAPTER03_LEVEL04_LVL,LEVELS_CHAPTER03_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER3_LEVEL4}, // C4 - {4,1,LEVELS_CHAPTER04_LEVEL01_LVL,LEVELS_CHAPTER04_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL1}, - {4,2,LEVELS_CHAPTER04_LEVEL02_LVL,LEVELS_CHAPTER04_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL2}, - {4,3,LEVELS_CHAPTER04_LEVEL03_LVL,LEVELS_CHAPTER04_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL3}, - {4,4,LEVELS_CHAPTER04_LEVEL04_LVL,LEVELS_CHAPTER04_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL4}, + {4,1, 20, LEVELS_CHAPTER04_LEVEL01_LVL,LEVELS_CHAPTER04_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL1}, + {4,2, 20, LEVELS_CHAPTER04_LEVEL02_LVL,LEVELS_CHAPTER04_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL2}, + {4,3, 20, LEVELS_CHAPTER04_LEVEL03_LVL,LEVELS_CHAPTER04_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL3}, + {4,4, 20, LEVELS_CHAPTER04_LEVEL04_LVL,LEVELS_CHAPTER04_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER4_LEVEL4}, // C5 - {5,1,LEVELS_CHAPTER05_LEVEL01_LVL,LEVELS_CHAPTER05_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL1}, - {5,2,LEVELS_CHAPTER05_LEVEL02_LVL,LEVELS_CHAPTER05_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL2}, - {5,3,LEVELS_CHAPTER05_LEVEL03_LVL,LEVELS_CHAPTER05_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL3}, - {5,4,LEVELS_CHAPTER05_LEVEL04_LVL,LEVELS_CHAPTER05_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL4}, + {5,1, 20, LEVELS_CHAPTER05_LEVEL01_LVL,LEVELS_CHAPTER05_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL1}, + {5,2, 20, LEVELS_CHAPTER05_LEVEL02_LVL,LEVELS_CHAPTER05_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL2}, + {5,3, 20, LEVELS_CHAPTER05_LEVEL03_LVL,LEVELS_CHAPTER05_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL3}, + {5,4, 20, LEVELS_CHAPTER05_LEVEL04_LVL,LEVELS_CHAPTER05_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER5_LEVEL4}, // C6 - {6,1,LEVELS_CHAPTER06_LEVEL01_LVL,LEVELS_CHAPTER06_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER6_ROLLERCOASTER}, - {6,2,LEVELS_CHAPTER06_LEVEL02_LVL,LEVELS_CHAPTER06_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER6_SNAILRACE}, - {6,3,LEVELS_CHAPTER06_LEVEL03_LVL,LEVELS_CHAPTER06_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER6_BIGWHEEL}, - {6,4,LEVELS_CHAPTER06_LEVEL04_LVL,LEVELS_CHAPTER06_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER6_TUNNELOFLOVE}, - {6,5,LEVELS_CHAPTER06_LEVEL05_LVL,LEVELS_CHAPTER06_LEVEL05_TEX, CSoundMediator::SONG_CHAPTER6_TUNNELOFLOVE}, + {6,1, 20, LEVELS_CHAPTER06_LEVEL01_LVL,LEVELS_CHAPTER06_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER6_ROLLERCOASTER}, + {6,2, 20, LEVELS_CHAPTER06_LEVEL02_LVL,LEVELS_CHAPTER06_LEVEL02_TEX, CSoundMediator::SONG_CHAPTER6_SNAILRACE}, + {6,3, 20, LEVELS_CHAPTER06_LEVEL03_LVL,LEVELS_CHAPTER06_LEVEL03_TEX, CSoundMediator::SONG_CHAPTER6_BIGWHEEL}, + {6,4, 20, LEVELS_CHAPTER06_LEVEL04_LVL,LEVELS_CHAPTER06_LEVEL04_TEX, CSoundMediator::SONG_CHAPTER6_TUNNELOFLOVE}, + {6,5, 20, LEVELS_CHAPTER06_LEVEL05_LVL,LEVELS_CHAPTER06_LEVEL05_TEX, CSoundMediator::SONG_CHAPTER6_TUNNELOFLOVE}, // FMA - {6,99,LEVELS_FMA_SHADYSHOALS_LVL,LEVELS_FMA_SHADYSHOALS_TEX, CSoundMediator::SONG_TITLE}, + {6,99, 0, LEVELS_FMA_SHADYSHOALS_LVL,LEVELS_FMA_SHADYSHOALS_TEX, CSoundMediator::SONG_TITLE}, }; const static int LvlTableSize=sizeof(LvlTable)/sizeof(sLvlTab); @@ -440,7 +440,7 @@ void CLevel::initThings(int _respawningLevel) { int isSpat=(PICKUP_TYPE)ItemList->Type==PICKUP__SPATULA; CBasePickup *newPickup; - if(!isSpat||CGameSlotManager::getSlotData()->isSpatulaUncollected(0,0,spatNumber)) + if(!isSpat||CGameSlotManager::getSlotData()->isSpatulaUncollected(GameScene.getChapterNumber(),GameScene.getLevelNumber(),spatNumber)) { pos.vx=ItemList->Pos.X<<4; pos.vy=ItemList->Pos.Y<<4; @@ -649,4 +649,13 @@ int CLevel::getCurrentChapterLevel() return( LvlTable[s_globalLevelSelectThing].Level ); } +/*****************************************************************************/ +/*****************************************************************************/ +/*****************************************************************************/ +int CLevel::getTotalSpatCount() +{ + return( LvlTable[s_globalLevelSelectThing].totalSpatCount); +} + + /*****************************************************************************/ diff --git a/source/level/level.h b/source/level/level.h index 2c3a061df..240659ecf 100644 --- a/source/level/level.h +++ b/source/level/level.h @@ -15,6 +15,7 @@ struct sLvlTab { u16 Chapter,Level; + u8 totalSpatCount; FileEquate LevelFilename,TexFilename; int songId; }; @@ -37,6 +38,7 @@ static DVECTOR const &getPlayerSpawnPos() {return s_playerSpawnPos;} static int getCurrentChapter(); static int getCurrentChapterLevel(); +static int getTotalSpatCount(); int getActorCount() {return ActorCount;} sThingActor **getActorList() {return ActorList;} diff --git a/source/pickups/pspatula.cpp b/source/pickups/pspatula.cpp index 73013208a..55a8694fe 100644 --- a/source/pickups/pspatula.cpp +++ b/source/pickups/pspatula.cpp @@ -33,6 +33,10 @@ #include "game\gameslot.h" #endif +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + /* Std Lib ------- */ @@ -105,7 +109,7 @@ DVECTOR CSpatulaPickup::getSizeForPlacement() void CSpatulaPickup::collect(class CPlayer *_player) { CBasePickup::collect(_player); - CGameSlotManager::getSlotData()->collectSpatula(0,0,m_spatulaNumber); + CGameSlotManager::getSlotData()->collectSpatula(GameScene.getChapterNumber(),GameScene.getLevelNumber(),m_spatulaNumber); } /*----------------------------------------------------------------------