This commit is contained in:
parent
062efa6ffc
commit
0b7cfb2027
10 changed files with 446 additions and 138 deletions
|
@ -118,40 +118,40 @@ CMapScene MapScene;
|
|||
|
||||
CMapScene::sMapLevelData CMapScene::s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEVELS_PER_CHAPTER]=
|
||||
{
|
||||
// mapFile globalLevelNumber spatularOrTokenCounts questItemFrame kelpWorldLevel
|
||||
// mapFile globalLevelNumber spatulaOrTokenCounts questItemFrame kelpWorldLevel
|
||||
{
|
||||
{ MAP_C1_L1_GFX, 0, CHAPTER01_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C1_L1_QUEST_ITEM, false },
|
||||
{ MAP_C1_L2_GFX, 1, CHAPTER01_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C1_L2_QUEST_ITEM, false },
|
||||
{ MAP_C1_L3_GFX, 2, CHAPTER01_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C1_L3_QUEST_ITEM, false },
|
||||
{ MAP_C1_L4_GFX, 3, CHAPTER01_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C1_L4_QUEST_ITEM, false },
|
||||
{ MAP_C1_FAIR_GFX, 20, CHAPTER06_LEVEL01_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
{ MAP_C1_FAIR_GFX, 4, CHAPTER06_LEVEL01_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
},
|
||||
{
|
||||
{ MAP_C2_L1_GFX, 4, CHAPTER02_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L1_QUEST_ITEM, false },
|
||||
{ MAP_C2_L2_GFX, 5, CHAPTER02_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L2_QUEST_ITEM, false },
|
||||
{ MAP_C2_L3_GFX, 6, CHAPTER02_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L3_QUEST_ITEM, false },
|
||||
{ MAP_C2_L4_GFX, 7, CHAPTER02_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L4_QUEST_ITEM, false },
|
||||
{ MAP_C2_FAIR_GFX, 21, CHAPTER06_LEVEL02_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
{ MAP_C2_L1_GFX, 5, CHAPTER02_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L1_QUEST_ITEM, false },
|
||||
{ MAP_C2_L2_GFX, 6, CHAPTER02_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L2_QUEST_ITEM, false },
|
||||
{ MAP_C2_L3_GFX, 7, CHAPTER02_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L3_QUEST_ITEM, false },
|
||||
{ MAP_C2_L4_GFX, 8, CHAPTER02_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C2_L4_QUEST_ITEM, false },
|
||||
{ MAP_C2_FAIR_GFX, 9, CHAPTER06_LEVEL02_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
},
|
||||
{
|
||||
{ MAP_C3_L1_GFX, 8, CHAPTER03_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L1_QUEST_ITEM, false },
|
||||
{ MAP_C3_L2_GFX, 9, CHAPTER03_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L2_QUEST_ITEM, false },
|
||||
{ MAP_C3_L3_GFX, 10, CHAPTER03_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L3_QUEST_ITEM, false },
|
||||
{ MAP_C3_L4_GFX, 11, CHAPTER03_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L4_QUEST_ITEM, false },
|
||||
{ MAP_C3_FAIR_GFX, 22, CHAPTER06_LEVEL03_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
{ MAP_C3_L1_GFX, 10, CHAPTER03_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L1_QUEST_ITEM, false },
|
||||
{ MAP_C3_L2_GFX, 11, CHAPTER03_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L2_QUEST_ITEM, false },
|
||||
{ MAP_C3_L3_GFX, 12, CHAPTER03_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L3_QUEST_ITEM, false },
|
||||
{ MAP_C3_L4_GFX, 13, CHAPTER03_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C3_L4_QUEST_ITEM, false },
|
||||
{ MAP_C3_FAIR_GFX, 14, CHAPTER06_LEVEL03_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
},
|
||||
{
|
||||
{ MAP_C4_L1_GFX, 12, CHAPTER04_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L2_GFX, 13, CHAPTER04_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L3_GFX, 14, CHAPTER04_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L4_GFX, 15, CHAPTER04_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_2, false },
|
||||
{ MAP_C4_FAIR_GFX, 23, CHAPTER06_LEVEL04_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
{ MAP_C4_L1_GFX, 15, CHAPTER04_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L2_GFX, 16, CHAPTER04_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L3_GFX, 17, CHAPTER04_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_1, false },
|
||||
{ MAP_C4_L4_GFX, 18, CHAPTER04_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C4_QUEST_ITEM_2, false },
|
||||
{ MAP_C4_FAIR_GFX, 19, CHAPTER06_LEVEL04_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
},
|
||||
{
|
||||
{ MAP_C5_L1_GFX, 16, CHAPTER05_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L1_QUEST_ITEM, false },
|
||||
{ MAP_C5_L2_GFX, 17, CHAPTER05_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L2_QUEST_ITEM, false },
|
||||
{ MAP_C5_L3_GFX, 18, CHAPTER05_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L3_QUEST_ITEM, false },
|
||||
{ MAP_C5_L4_GFX, 19, CHAPTER05_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L4_QUEST_ITEM, false },
|
||||
{ MAP_C5_L1_GFX, 20, CHAPTER05_LEVEL01_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L1_QUEST_ITEM, false },
|
||||
{ MAP_C5_L2_GFX, 21, CHAPTER05_LEVEL02_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L2_QUEST_ITEM, false },
|
||||
{ MAP_C5_L3_GFX, 22, CHAPTER05_LEVEL03_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L3_QUEST_ITEM, false },
|
||||
{ MAP_C5_L4_GFX, 23, CHAPTER05_LEVEL04_INF_TOTAL_ITEM_GOLDEN_SPATULA, FRM__C5_L4_QUEST_ITEM, false },
|
||||
{ MAP_C5_FAIR_GFX, 24, CHAPTER06_LEVEL05_INF_TOTAL_ITEM_KELP_TOKEN, -1, true },
|
||||
},
|
||||
};
|
||||
|
@ -180,7 +180,6 @@ void CMapScene::init()
|
|||
{
|
||||
m_font=new ("map screen font") FontBank();
|
||||
m_font->initialise(&standardFont);
|
||||
m_font->setJustification(FontBank::JUST_CENTRE);
|
||||
m_font->setOt(10);
|
||||
m_font->setJustification(FontBank::JUST_LEFT);
|
||||
|
||||
|
@ -217,12 +216,15 @@ void CMapScene::shutdown()
|
|||
---------------------------------------------------------------------- */
|
||||
void CMapScene::render()
|
||||
{
|
||||
SpriteBank *sb;
|
||||
sMapLevelData *level;
|
||||
int i;
|
||||
sFrameHdr *fh;
|
||||
DVECTOR pos;
|
||||
POLY_FT4 *ft4;
|
||||
char buf[100];
|
||||
|
||||
sb=CGameScene::getSpriteBank();
|
||||
level=&s_mapLevelData[m_currentChapterSelection][0];
|
||||
|
||||
// Render spatula/kelp counts and quest items
|
||||
|
@ -233,11 +235,10 @@ void CMapScene::render()
|
|||
if(!level->m_kelpWorldLevel)
|
||||
{
|
||||
// Normal level
|
||||
POLY_FT4 *ft4;
|
||||
m_font->setColour(253,251,67);
|
||||
sprintf(buf,"00/%d",level->m_spatularOrTokenCounts);
|
||||
fh=CGameScene::getSpriteBank()->getFrameHeader(level->m_questItemFrame);
|
||||
ft4=CGameScene::getSpriteBank()->printFT4(fh,pos.vx+MAP_LEVEL_WIDTH-fh->W,pos.vy+MAP_LEVEL_HEIGHT-fh->H,0,0,10);
|
||||
sprintf(buf,"%d/%d",CGameSlotManager::getSlotData()->getSpatulaCollectedCount(m_currentChapterSelection,i),level->m_spatulaOrTokenCounts);
|
||||
fh=sb->getFrameHeader(level->m_questItemFrame);
|
||||
ft4=sb->printFT4(fh,pos.vx+MAP_LEVEL_WIDTH-fh->W,pos.vy+MAP_LEVEL_HEIGHT-fh->H,0,0,10);
|
||||
if(!hasQuestItemBeenCollected(m_currentChapterSelection,i))
|
||||
{
|
||||
setRGB0(ft4,50,50,50);
|
||||
|
@ -247,7 +248,7 @@ void CMapScene::render()
|
|||
{
|
||||
// Bonuse level
|
||||
m_font->setColour(67,251,67);
|
||||
sprintf(buf,"00/%d",level->m_spatularOrTokenCounts);
|
||||
sprintf(buf,"-");//"%d/%d",CGameSlotManager::getSlotData()->getKelpTokenCollectedCount(m_currentChapterSelection,i),level->m_spatulaOrTokenCounts);
|
||||
}
|
||||
|
||||
m_font->print(pos.vx,pos.vy,buf);
|
||||
|
@ -255,9 +256,9 @@ void CMapScene::render()
|
|||
level++;
|
||||
}
|
||||
|
||||
// Selection cursor
|
||||
fh=CGameScene::getSpriteBank()->getFrameHeader(FRM__MAPPOINTER);
|
||||
CGameScene::getSpriteBank()->printFT4(fh,m_pointerPos.vx-(fh->W/2),m_pointerPos.vy-(fh->H/2),0,0,9);
|
||||
renderPointer();
|
||||
renderInstructions();
|
||||
|
||||
|
||||
sprintf(buf,"Chapter %d, Level %d",m_currentChapterSelection+1,m_currentLevelSelection+1);
|
||||
m_font->setColour(0,255,0);
|
||||
|
@ -267,6 +268,77 @@ m_font->print(25,25,buf);
|
|||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CMapScene::renderPointer()
|
||||
{
|
||||
SpriteBank *sb;
|
||||
sFrameHdr *fh;
|
||||
POLY_FT4 *ft4;
|
||||
|
||||
sb=CGameScene::getSpriteBank();
|
||||
fh=sb->getFrameHeader(FRM__MAPPOINTER);
|
||||
ft4=sb->printFT4(fh,m_pointerPos.vx-(fh->W/2),m_pointerPos.vy-(fh->H/2),0,0,9);
|
||||
if(!m_pointerArrivedAtTarget)
|
||||
{
|
||||
setSemiTrans(ft4,true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CMapScene::renderInstructions()
|
||||
{
|
||||
// Instructions
|
||||
SpriteBank *sb;
|
||||
sFrameHdr *fh1,*fh2;
|
||||
int width;
|
||||
int x,y;
|
||||
|
||||
sb=CGameScene::getSpriteBank();
|
||||
m_font->setColour(MAP_INSTRUCTIONS_TEXT_R,MAP_INSTRUCTIONS_TEXT_G,MAP_INSTRUCTIONS_TEXT_B);
|
||||
|
||||
y=MAP_INSTRUCTIONS_YSTART;
|
||||
fh1=sb->getFrameHeader(FRM__BUTL);
|
||||
fh2=sb->getFrameHeader(FRM__BUTR);
|
||||
width=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS+fh2->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT+m_font->getStringWidth(STR__MAP_SCREEN__LEFT_RIGHT_TO_SELECT_LEVEL);
|
||||
x=256-(width/2);
|
||||
sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
|
||||
x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS;
|
||||
sb->printFT4(fh2,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
|
||||
x+=fh2->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT;
|
||||
m_font->print(x,y,STR__MAP_SCREEN__LEFT_RIGHT_TO_SELECT_LEVEL);
|
||||
|
||||
y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES;
|
||||
fh1=sb->getFrameHeader(FRM__BUTU);
|
||||
fh2=sb->getFrameHeader(FRM__BUTD);
|
||||
width=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS+fh2->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT+m_font->getStringWidth(STR__MAP_SCREEN__UP_DOWN_TO_SELECT_CHAPTER);
|
||||
x=256-(width/2);
|
||||
sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
|
||||
x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS;
|
||||
sb->printFT4(fh2,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
|
||||
x+=fh2->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT;
|
||||
m_font->print(x,y,STR__MAP_SCREEN__UP_DOWN_TO_SELECT_CHAPTER);
|
||||
|
||||
y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES;
|
||||
fh1=sb->getFrameHeader(FRM__BUTX);
|
||||
width=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT+m_font->getStringWidth(STR__MAP_SCREEN__X_TO_START);
|
||||
x=256-(width/2);
|
||||
sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
|
||||
x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT;
|
||||
m_font->print(x,y,STR__MAP_SCREEN__X_TO_START);
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
|
@ -290,6 +362,7 @@ void CMapScene::think(int _frames)
|
|||
}
|
||||
|
||||
// Move cursor
|
||||
int lastLevel=m_currentLevelSelection;
|
||||
if(PadGetDown(0)&PAD_LEFT)
|
||||
{
|
||||
do
|
||||
|
@ -306,9 +379,17 @@ void CMapScene::think(int _frames)
|
|||
}
|
||||
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
|
||||
}
|
||||
if(lastLevel!=m_currentLevelSelection)
|
||||
{
|
||||
m_pointerArrivedAtTarget=false;
|
||||
m_pointerSin=0;
|
||||
}
|
||||
|
||||
// Calc where the pointer should be
|
||||
m_pointerSin=(m_pointerSin+(_frames*70))&4095;
|
||||
if(m_pointerArrivedAtTarget)
|
||||
{
|
||||
m_pointerSin=(m_pointerSin+(_frames*70))&4095;
|
||||
}
|
||||
m_pointerTarget=getPointerTargetPosition();
|
||||
|
||||
// Move the pointer
|
||||
|
@ -319,31 +400,38 @@ void CMapScene::think(int _frames)
|
|||
delta=m_pointerTarget.vx-m_pointerPos.vx;
|
||||
if(delta<0)
|
||||
{
|
||||
delta/=2;
|
||||
delta/=3;
|
||||
if(!delta)delta=-1;
|
||||
}
|
||||
else if(delta>0)
|
||||
{
|
||||
delta/=2;
|
||||
delta/=3;
|
||||
if(!delta)delta=+1;
|
||||
}
|
||||
m_pointerPos.vx+=delta;
|
||||
|
||||
delta=m_pointerTarget.vy-m_pointerPos.vy;
|
||||
delta=(m_pointerTarget.vy+(msin(m_pointerSin)*4>>12))-m_pointerPos.vy;
|
||||
if(delta<0)
|
||||
{
|
||||
delta/=2;
|
||||
delta/=3;
|
||||
if(!delta)delta=-1;
|
||||
}
|
||||
else if(delta>0)
|
||||
{
|
||||
delta/=2;
|
||||
delta/=3;
|
||||
if(!delta)delta=+1;
|
||||
}
|
||||
m_pointerPos.vy+=delta;
|
||||
|
||||
if(!m_pointerArrivedAtTarget&&
|
||||
m_pointerTarget.vx==m_pointerPos.vx&&m_pointerTarget.vy==m_pointerPos.vy)
|
||||
{
|
||||
m_pointerArrivedAtTarget=true;
|
||||
}
|
||||
}
|
||||
|
||||
if(PadGetDown(0)&(PAD_CROSS|PAD_START))
|
||||
if(m_pointerArrivedAtTarget&&
|
||||
PadGetDown(0)&PAD_CROSS)
|
||||
{
|
||||
s_globalLevelSelectThing=s_mapLevelData[m_currentChapterSelection][m_currentLevelSelection].m_globalLevelNumber;
|
||||
m_readyToExit=true;
|
||||
|
@ -376,7 +464,6 @@ void CMapScene::generateMapScreenImage()
|
|||
{
|
||||
int i;
|
||||
|
||||
|
||||
m_currentLevelSelection=0;
|
||||
memset(m_screenImage,0,512*256*2);
|
||||
copyImageToScreen(MAP_MAP_BACKGROUND_GFX,MAP_PARCHMENT_START_X,MAP_PARCHMENT_START_Y,MAP_PARCHMENT_WIDTH,MAP_PARCHMENT_HEIGHT);
|
||||
|
@ -389,6 +476,7 @@ void CMapScene::generateMapScreenImage()
|
|||
}
|
||||
|
||||
m_pointerPos=getPointerTargetPosition();
|
||||
m_pointerArrivedAtTarget=true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -430,7 +518,7 @@ DVECTOR CMapScene::getPointerTargetPosition()
|
|||
|
||||
pos=s_mapLevelPositions[m_currentLevelSelection];
|
||||
pos.vx+=(MAP_LEVEL_WIDTH/2);
|
||||
pos.vy+=MAP_LEVEL_HEIGHT+(msin(m_pointerSin)*4>>12);
|
||||
pos.vy+=MAP_LEVEL_HEIGHT;//+(msin(m_pointerSin)*4>>12);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
@ -452,18 +540,6 @@ int CMapScene::getSpatulaCollectedCount(unsigned int _chapter,unsigned int _lev
|
|||
return CGameSlotManager::getSlotData()->getSpatulaCollectedCount(_chapter,_level);
|
||||
}
|
||||
|
||||
int CMapScene::getSpatulaAvailableCount(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
ASSERT(!s_mapLevelData[_chapter][_level].m_kelpWorldLevel);
|
||||
return s_mapLevelData[_chapter][_level].m_spatularOrTokenCounts;
|
||||
}
|
||||
|
||||
int CMapScene::getKelpTokenAvailableCount(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
ASSERT(s_mapLevelData[_chapter][_level].m_kelpWorldLevel);
|
||||
return s_mapLevelData[_chapter][_level].m_spatularOrTokenCounts;
|
||||
}
|
||||
|
||||
int CMapScene::hasQuestItemBeenCollected(unsigned int _chapter,unsigned int _level)
|
||||
{
|
||||
return _level&1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue