/*========================================================================= gameslot.cpp Author: PKG Created: Project: Spongebob Purpose: Copyright (c) 2001 Climax Development Ltd ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ #include "game\gameslot.h" #ifndef __SYSTEM_DBG_H__ #include "system\dbg.h" #endif /* Std Lib ------- */ /* Data ---- */ // Level data include files: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ /*---------------------------------------------------------------------- Vars ---- */ CGameSlotManager::GameSlot CGameSlotManager::s_gameSlots[4]; CGameSlotManager::GameSlot *CGameSlotManager::s_currentGameSlot=0; /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGameSlotManager::init() { int i; for(i=0;im_isInUse=false; slot->m_lives=INITIAL_LIVES; slot->m_continues=INITIAL_CONTINUES; slot->m_hasSeenOpeningFMA=false; // Clear spatula and kelp token flags for(i=0;im_spatulaCollectedCounts[i]=0; } for(i=0;im_kelpTokenCollectedFlags[i][j]=0; } } #ifdef __USER_paul__ slot->m_kelpTokensHeld=125; #else slot->m_kelpTokensHeld=0; #endif // No party items held yet for(i=0;im_partyItemsHeld[i]=false; } // Mark all levels except first as NOT_OPEN // On a non-cd build, everything starts as open slot->m_levelCompletionState[0]=LEVELCOMPETESTATE_OPEN; for(i=1;im_levelCompletionState[i]=LEVELCOMPETESTATE_NOT_OPEN; } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGameSlotManager::copyGameSlot(unsigned int _src,unsigned int _dest) { ASSERT(_src<=NUM_GAME_SLOTS); ASSERT(_dest<=NUM_GAME_SLOTS); s_gameSlots[_dest]=s_gameSlots[_src]; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGameSlotManager::setSlotData(int _slot,GameSlot *_data) { ASSERT(_slot<=NUM_GAME_SLOTS); s_gameSlots[_slot]=*_data; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ CGameSlotManager::GameSlot CGameSlotManager::getSlotData(int _slot) { ASSERT(_slot<=NUM_GAME_SLOTS); return s_gameSlots[_slot]; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: 0..3 ---------------------------------------------------------------------- */ int CGameSlotManager::getNumberOfFrontendScreenToUse() { int bestSoFar; GameSlot *slot; int i; bestSoFar=0; slot=s_gameSlots; for(i=0;im_isInUse) { // All normal levels completed? ( screen 1 ) if(slot->hasQustItemBeenCollected(5-1,4-1)) { bestForThisSlot=1; // ..and bought all party items? ( screen 2 ) int j; for(j=CShopScene::NUM_SHOP_ITEM_IDS;j>0&&slot->isPartyItemHeld(j);j--); if(j==0) { bestForThisSlot=2; // ..and collected all spats? ( screen 3 ) int count,c,l; count=0; for(c=0;c<5;c++) { for(l=0;l<4;l++) { count+=slot->getSpatulaCollectedCount(c,l); } } if(count==CHAPTER01_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER01_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER01_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER01_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER02_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER02_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER02_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER02_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER03_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER03_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER03_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER03_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER04_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER04_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER04_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER04_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER05_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER05_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER05_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA+ CHAPTER05_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA) { bestForThisSlot=3; } } } // Is this slot better than the others? if(bestForThisSlot>bestSoFar) { bestSoFar=bestForThisSlot; } } slot++; } return bestSoFar; } /*=========================================================================== end */