This commit is contained in:
parent
bd4323bd18
commit
a52ee00ff3
5 changed files with 182 additions and 42 deletions
|
@ -87,6 +87,10 @@
|
|||
#include "fma\fma.h"
|
||||
#endif
|
||||
|
||||
#ifndef __GAME_GAMESLOT_H__
|
||||
#include "game\gameslot.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include "gfx\actor.h"
|
||||
|
||||
|
@ -258,14 +262,41 @@ void CGameScene::think(int _frames)
|
|||
}
|
||||
else if(s_levelFinished)
|
||||
{
|
||||
// Do the gameslot stuff..
|
||||
CGameSlotManager::GameSlot *gameSlot;
|
||||
int level,chapter;
|
||||
int openNextLevel,levelToOpen,chapterToOpen;
|
||||
gameSlot=CGameSlotManager::getSlotData();
|
||||
level=getLevelNumber();
|
||||
chapter=getChapterNumber();
|
||||
|
||||
gameSlot->levelHasBeenCompleted(chapter-1,level-1);
|
||||
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
|
||||
{
|
||||
if(level!=4)
|
||||
{
|
||||
// Open next level in this chapter..
|
||||
levelToOpen=level+1;
|
||||
chapterToOpen=chapter;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Open first level in next chapter
|
||||
levelToOpen=1;
|
||||
chapterToOpen=chapter+1;
|
||||
}
|
||||
gameSlot->levelIsNowOpen(chapterToOpen-1,levelToOpen-1);
|
||||
}
|
||||
|
||||
// Level finished - go to map or fma
|
||||
if(getLevelNumber()==4)
|
||||
if(level==4)
|
||||
{
|
||||
GameState::setNextScene(&FmaScene);
|
||||
}
|
||||
else if(getLevelNumber()==5)
|
||||
else if(level==5)
|
||||
{
|
||||
if(getChapterNumber()==5)
|
||||
if(chapter==5)
|
||||
{
|
||||
ShopScene.setGotoPartyScreen();
|
||||
}
|
||||
|
|
|
@ -130,6 +130,7 @@ void CGameSlotManager::eraseGameSlot(unsigned int _slot)
|
|||
slot->m_continues=INITIAL_CONTINUES;
|
||||
slot->m_maxLevelCompleted=0;
|
||||
|
||||
// Clear spatula and kelp token flags
|
||||
for(i=0;i<NUM_CHAPTERS*NUM_LEVELS_WITH_SPATULAS;i++)
|
||||
{
|
||||
for(j=0;j<16;j++)
|
||||
|
@ -137,7 +138,6 @@ void CGameSlotManager::eraseGameSlot(unsigned int _slot)
|
|||
slot->m_spatulaCollectedFlags[i][j]=0;
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0;i<NUM_CHAPTERS;i++)
|
||||
{
|
||||
for(j=0;j<16;j++)
|
||||
|
@ -151,11 +151,20 @@ void CGameSlotManager::eraseGameSlot(unsigned int _slot)
|
|||
#else
|
||||
slot->m_kelpTokensHeld=0;
|
||||
#endif
|
||||
|
||||
// No party items held yet
|
||||
for(i=0;i<CShopScene::NUM_SHOP_ITEM_IDS;i++)
|
||||
{
|
||||
slot->m_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;i<NUM_CHAPTERS*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER);i++)
|
||||
{
|
||||
slot->m_levelCompletionState[i]=LEVELCOMPETESTATE_NOT_OPEN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -51,6 +51,15 @@ public:
|
|||
|
||||
NUM_CHAPTERS=5,
|
||||
NUM_LEVELS_WITH_SPATULAS=4,
|
||||
NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS=4,
|
||||
NUM_BONUS_LEVELS_PER_CHAPTER=1,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
LEVELCOMPETESTATE_NOT_OPEN, // Level is not available to play
|
||||
LEVELCOMPETESTATE_OPEN, // Level is available to play
|
||||
LEVELCOMPETESTATE_COMPLETED, // Level has been completed
|
||||
};
|
||||
|
||||
|
||||
|
@ -64,6 +73,7 @@ public:
|
|||
unsigned char m_kelpTokenCollectedFlags[NUM_CHAPTERS][16]; // Same again..
|
||||
unsigned char m_kelpTokensHeld;
|
||||
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)];
|
||||
|
||||
// Spat functions..
|
||||
int getSpatulaCollectedCount(unsigned int _chapter,unsigned int _level)
|
||||
|
@ -150,6 +160,45 @@ public:
|
|||
ASSERT(!m_partyItemsHeld[_itemNumber]);
|
||||
m_partyItemsHeld[_itemNumber]=true;
|
||||
}
|
||||
|
||||
// Levels
|
||||
int isLevelOpen(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
int index;
|
||||
index=(_chapter*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER))+_level;
|
||||
return m_levelCompletionState[index]!=(int)LEVELCOMPETESTATE_NOT_OPEN;
|
||||
}
|
||||
int hasQustItemBeenCollected(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
int index;
|
||||
index=(_chapter*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER))+_level;
|
||||
return m_levelCompletionState[index]==(int)LEVELCOMPETESTATE_COMPLETED;
|
||||
}
|
||||
void levelIsNowOpen(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
int index;
|
||||
index=(_chapter*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER))+_level;
|
||||
if(m_levelCompletionState[index]==LEVELCOMPETESTATE_NOT_OPEN)
|
||||
{
|
||||
m_levelCompletionState[index]=LEVELCOMPETESTATE_OPEN;
|
||||
}
|
||||
}
|
||||
void levelHasBeenCompleted(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
int index;
|
||||
index=(_chapter*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER))+_level;
|
||||
m_levelCompletionState[index]=LEVELCOMPETESTATE_COMPLETED;
|
||||
}
|
||||
|
||||
#ifdef __VERSION_DEBUG__
|
||||
void debugCheatOpenAllLevels()
|
||||
{
|
||||
for(int i=1;i<NUM_CHAPTERS*(NUM_LEVELS_PER_CHAPTER_WITH_QUEST_ITEMS+NUM_BONUS_LEVELS_PER_CHAPTER);i++)
|
||||
{
|
||||
m_levelCompletionState[i]=LEVELCOMPETESTATE_OPEN;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} GameSlot;
|
||||
|
||||
static void init();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue