This commit is contained in:
Paul 2001-08-02 23:44:21 +00:00
parent cfd949ade6
commit b25080353f
4 changed files with 292 additions and 116 deletions

View file

@ -498,12 +498,12 @@ eng=Are you sure that you want to erase this game?
; Map screen ; Map screen
; --------------------------------------------------------------- ; ---------------------------------------------------------------
[STR__MAP_SCREEN__LEFT_RIGHT_TO_SELECT_LEVEL]
eng=Select level
[STR__MAP_SCREEN__UP_DOWN_TO_SELECT_CHAPTER]
eng=Select chapter
[STR__MAP_SCREEN__X_TO_START] [STR__MAP_SCREEN__X_TO_START]
eng=Start eng=Start
[STR__MAP_SCREEN__X_FOR_NEXT_CHAPTER]
eng=Next chapter
[STR__MAP_SCREEN__X_FOR_PREVIOUS_CHAPTER]
eng=Previous chapter
[STR__MAP_SCREEN__TRIANGLE_TO_SAVE] [STR__MAP_SCREEN__TRIANGLE_TO_SAVE]
eng=Save eng=Save

View file

@ -253,7 +253,8 @@ UI_GFX_TRANS := +bambootopleft.bmp +bamboobotleft.bmp +bambootopright.bmp +ba
faces/sandy.bmp faces/spongebob.bmp faces/squidward.bmp \ faces/sandy.bmp faces/spongebob.bmp faces/squidward.bmp \
faces/mermaidman.bmp faces/barnacleboy.bmp faces/gary.bmp \ faces/mermaidman.bmp faces/barnacleboy.bmp faces/gary.bmp \
+helpbox1.bmp +helpbox2.bmp +helpbox3.bmp +helpbox4.bmp \ +helpbox1.bmp +helpbox2.bmp +helpbox3.bmp +helpbox4.bmp \
+small_balloon.bmp +small_blower.bmp +small_bubblewand.bmp +small_launcher.bmp +small_net.bmp +small_balloon.bmp +small_blower.bmp +small_bubblewand.bmp +small_launcher.bmp +small_net.bmp \
map\+map_arrow.bmp
UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_GFX_DIR)/$(FILE)) UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_GFX_DIR)/$(FILE))
#### ####

View file

@ -207,15 +207,27 @@ CMapScene::sMapLevelData CMapScene::s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEV
}; };
DVECTOR CMapScene::s_mapLevelPositions[MAP_NUM_LEVELS_PER_CHAPTER]= // Positions of map gfx on the screen
DVECTOR CMapScene::s_mapLevelPositions[CMapScene::MAP_NUM_LEVELS_PER_CHAPTER]=
{ {
{ 42,49 }, { 42,49 }, // MAP_ICON_LEVEL_1
{ 186,49 }, { 186,49 }, // MAP_ICON_LEVEL_2
{ 330,49 }, { 330,49 }, // MAP_ICON_LEVEL_3
{ 42,113 }, { 42,113 }, // MAP_ICON_LEVEL_4
{ 330,113 }, { 330,113 }, // MAP_ICON_LEVEL_BONUS
}; };
// Cursor positions for all icons
DVECTOR CMapScene::s_mapPointerPositions[CMapScene::MAP_NUM_LEVELS_PER_CHAPTER]=
{
{ 42+(MAP_LEVEL_WIDTH/2),49+MAP_LEVEL_HEIGHT }, // MAP_ICON_LEVEL_1
{ 186+(MAP_LEVEL_WIDTH/2),49+MAP_LEVEL_HEIGHT }, // MAP_ICON_LEVEL_2
{ 330+(MAP_LEVEL_WIDTH/2),49+MAP_LEVEL_HEIGHT }, // MAP_ICON_LEVEL_3
{ 42+(MAP_LEVEL_WIDTH/2),113+MAP_LEVEL_HEIGHT }, // MAP_ICON_LEVEL_4
{ 330+(MAP_LEVEL_WIDTH/2),113+MAP_LEVEL_HEIGHT }, // MAP_ICON_LEVEL_BONUS
};
int CMapScene::s_chapterToStartOn=0; int CMapScene::s_chapterToStartOn=0;
int CMapScene::s_levelToStartOn=0; int CMapScene::s_levelToStartOn=0;
@ -251,7 +263,7 @@ void CMapScene::init()
} }
generateMapScreenImage(); generateMapScreenImage();
m_currentLevelSelection=s_levelToStartOn; m_currentIconSelection=s_levelToStartOn+1;
m_pointerIcon=new ("MapPointer") CPointerIcon(); m_pointerIcon=new ("MapPointer") CPointerIcon();
m_pointerIcon->snapToTarget(getPointerTargetPosition()); m_pointerIcon->snapToTarget(getPointerTargetPosition());
@ -303,7 +315,10 @@ void CMapScene::render()
int i; int i;
char buf[100]; char buf[100];
if(m_currentIconSelection!=MAP_ICON_PREVIOUS_CHAPTER&&m_currentIconSelection!=MAP_ICON_NEXT_CHAPTER)
{
m_pointerIcon->render(); m_pointerIcon->render();
}
sb=CGameScene::getSpriteBank(); sb=CGameScene::getSpriteBank();
level=&s_mapLevelData[m_currentChapterSelection][0]; level=&s_mapLevelData[m_currentChapterSelection][0];
@ -345,9 +360,10 @@ void CMapScene::render()
} }
renderInstructions(); renderInstructions();
renderChapterArrows();
sprintf(buf,"Chapter %d, Level %d",m_currentChapterSelection+1,m_currentLevelSelection+1); sprintf(buf,"Chapter %d",m_currentChapterSelection+1);
m_font->setColour(0,255,0); m_font->setColour(0,255,0);
m_font->print(24,24,buf); m_font->print(24,24,buf);
m_font->setColour(0,0,0); m_font->setColour(0,0,0);
@ -364,57 +380,42 @@ m_font->print(25,25,buf);
void CMapScene::renderInstructions() void CMapScene::renderInstructions()
{ {
// Instructions // Instructions
int renderChapterControls;
SpriteBank *sb; SpriteBank *sb;
sFrameHdr *fh1,*fh2; sFrameHdr *fh1,*fh2;
int width; int width;
int x,y; int x,y;
int xText=0;
// If only the first chapter is open then you can't select other ones...
renderChapterControls=isChapterOpen(1)?true:false;
sb=CGameScene::getSpriteBank(); sb=CGameScene::getSpriteBank();
m_font->setColour(MAP_INSTRUCTIONS_TEXT_R,MAP_INSTRUCTIONS_TEXT_G,MAP_INSTRUCTIONS_TEXT_B); m_font->setColour(MAP_INSTRUCTIONS_TEXT_R,MAP_INSTRUCTIONS_TEXT_G,MAP_INSTRUCTIONS_TEXT_B);
y=MAP_INSTRUCTIONS_YSTART; 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; switch(m_currentIconSelection)
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);
if(renderChapterControls)
{ {
sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0); case MAP_ICON_PREVIOUS_CHAPTER:
} xText=STR__MAP_SCREEN__X_FOR_PREVIOUS_CHAPTER;
x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS; break;
if(renderChapterControls) case MAP_ICON_LEVEL_1:
{ case MAP_ICON_LEVEL_2:
sb->printFT4(fh2,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0); case MAP_ICON_LEVEL_3:
} case MAP_ICON_LEVEL_4:
x+=fh2->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT; case MAP_ICON_LEVEL_BONUS:
if(renderChapterControls) xText=STR__MAP_SCREEN__X_TO_START;
{ break;
m_font->print(x,y,STR__MAP_SCREEN__UP_DOWN_TO_SELECT_CHAPTER); case MAP_ICON_NEXT_CHAPTER:
xText=STR__MAP_SCREEN__X_FOR_NEXT_CHAPTER;
break;
} }
y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES; y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES;
fh1=sb->getFrameHeader(FRM__BUTX); fh1=sb->getFrameHeader(FRM__BUTX);
width=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT+m_font->getStringWidth(STR__MAP_SCREEN__X_TO_START); width=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT+m_font->getStringWidth(xText);
x=256-(width/2); x=256-(width/2);
sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0); sb->printFT4(fh1,x,y+MAP_INSTRUCTIONS_BUTTON_Y_OFFSET,0,0,0);
x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT; x+=fh1->W+MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT;
m_font->print(x,y,STR__MAP_SCREEN__X_TO_START); m_font->print(x,y,xText);
y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES; y+=MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES;
fh1=sb->getFrameHeader(FRM__BUTT); fh1=sb->getFrameHeader(FRM__BUTT);
@ -426,6 +427,46 @@ void CMapScene::renderInstructions()
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CMapScene::renderChapterArrows()
{
SpriteBank *sb;
sFrameHdr *fh;
int x,y;
POLY_FT4 *ft4;
sb=CGameScene::getSpriteBank();
fh=sb->getFrameHeader(FRM__MAP_ARROW);
x=256;
if(m_currentChapterSelection>0&&isChapterOpen(m_currentChapterSelection-1))
{
int selected=false;
y=MAP_ARROW_PREVIOUS_Y-fh->H;
if(m_currentIconSelection==MAP_ICON_PREVIOUS_CHAPTER)
{
selected=true;
}
ft4=sb->printFT4Scaled(fh,x,y,0,0,0,selected?512:256);
}
if(m_currentChapterSelection<5&&isChapterOpen(m_currentChapterSelection+1))
{
int selected=false;
y=MAP_ARROW_NEXT_Y-fh->H;
if(m_currentIconSelection==MAP_ICON_NEXT_CHAPTER)
{
selected=true;
}
ft4=sb->printFT4Scaled(fh,x,y,0,1,0,selected?512:256);
}
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -436,6 +477,8 @@ void CMapScene::think(int _frames)
{ {
if(!CFader::isFading()&&!m_readyToExit) if(!CFader::isFading()&&!m_readyToExit)
{ {
CURSOR_MOVE_STATE cursor=CURSOR_DIDNT_MOVE;
if(m_musicStarted==false) if(m_musicStarted==false)
{ {
m_musicStarted=true; m_musicStarted=true;
@ -443,80 +486,180 @@ void CMapScene::think(int _frames)
} }
int pad=PadGetDown(0); int pad=PadGetDown(0);
// Change chapter
if(pad&PAD_UP)
{
int nextChapter=m_currentChapterSelection;
do
{
nextChapter++;
if(nextChapter==MAP_NUM_CHAPTERS)nextChapter=0;
}
while(!isChapterOpen(nextChapter));
if(nextChapter!=m_currentChapterSelection)
{
m_currentChapterSelection=nextChapter;
generateMapScreenImage();
}
}
else if(pad&PAD_DOWN)
{
int nextChapter=m_currentChapterSelection;
do
{
nextChapter--;
if(nextChapter<0)nextChapter=MAP_NUM_CHAPTERS-1;
}
while(!isChapterOpen(nextChapter));
if(nextChapter!=m_currentChapterSelection)
{
m_currentChapterSelection=nextChapter;
generateMapScreenImage();
}
}
#ifdef __VERSION_DEBUG__ #ifdef __VERSION_DEBUG__
else if(pad&PAD_L1) if(pad&PAD_L1)
{ {
CGameSlotManager::getSlotData()->debugCheatOpenAllLevels(); CGameSlotManager::getSlotData()->debugCheatOpenAllLevels();
generateMapScreenImage(); generateMapScreenImage();
} }
#endif #endif
// Move cursor // Move cursor in the gayest way possible..
int lastLevel=m_currentLevelSelection; // Hahahaha! It's like a spiders nest! (pkg and proud of it)
if(pad&PAD_LEFT) if(m_currentIconSelection!=MAP_ICON_PREVIOUS_CHAPTER&&m_currentIconSelection!=MAP_ICON_NEXT_CHAPTER)
{ {
do m_previousIconSelection=m_currentIconSelection;
{ }
if(--m_currentLevelSelection<0)m_currentLevelSelection=MAP_NUM_LEVELS_PER_CHAPTER-1; if(pad&PAD_UP)
{
cursor=CURSOR_MOVED;
switch(m_currentIconSelection)
{
case MAP_ICON_PREVIOUS_CHAPTER:
break;
case MAP_ICON_LEVEL_1:
case MAP_ICON_LEVEL_2:
case MAP_ICON_LEVEL_3:
if(m_currentChapterSelection>0&&isChapterOpen(m_currentChapterSelection-1))m_currentIconSelection=MAP_ICON_PREVIOUS_CHAPTER;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_4:
m_currentIconSelection=MAP_ICON_LEVEL_1;
break;
case MAP_ICON_LEVEL_BONUS:
if(isLevelOpen(m_currentChapterSelection,3-1))m_currentIconSelection=MAP_ICON_LEVEL_3;
else if(isLevelOpen(m_currentChapterSelection,2-1))m_currentIconSelection=MAP_ICON_LEVEL_2;
else m_currentIconSelection=MAP_ICON_LEVEL_1;
break;
case MAP_ICON_NEXT_CHAPTER:
m_currentIconSelection=m_previousIconSelection;
break;
}
}
else if(pad&PAD_DOWN)
{
int nextChapterAvailable=false;
if(m_currentChapterSelection<5&&isChapterOpen(m_currentChapterSelection+1))nextChapterAvailable=true;
cursor=CURSOR_MOVED;
switch(m_currentIconSelection)
{
case MAP_ICON_PREVIOUS_CHAPTER:
m_currentIconSelection=m_previousIconSelection;
break;
case MAP_ICON_LEVEL_1:
case MAP_ICON_LEVEL_2:
if(isLevelOpen(m_currentChapterSelection,4-1))m_currentIconSelection=MAP_ICON_LEVEL_4;
else if(isLevelOpen(m_currentChapterSelection,5-1))m_currentIconSelection=MAP_ICON_LEVEL_BONUS;
else if(nextChapterAvailable)m_currentIconSelection=MAP_ICON_NEXT_CHAPTER;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_3:
if(isLevelOpen(m_currentChapterSelection,5-1))m_currentIconSelection=MAP_ICON_LEVEL_BONUS;
else if(isLevelOpen(m_currentChapterSelection,4-1))m_currentIconSelection=MAP_ICON_LEVEL_4;
else if(nextChapterAvailable)m_currentIconSelection=MAP_ICON_NEXT_CHAPTER;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_4:
case MAP_ICON_LEVEL_BONUS:
if(nextChapterAvailable)m_currentIconSelection=MAP_ICON_NEXT_CHAPTER;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_NEXT_CHAPTER:
break;
}
}
else if(pad&PAD_LEFT)
{
cursor=CURSOR_MOVED;
switch(m_currentIconSelection)
{
case MAP_ICON_PREVIOUS_CHAPTER:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_1:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_2:
m_currentIconSelection=MAP_ICON_LEVEL_1;
break;
case MAP_ICON_LEVEL_3:
m_currentIconSelection=MAP_ICON_LEVEL_2;
break;
case MAP_ICON_LEVEL_4:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_BONUS:
if(isLevelOpen(m_currentChapterSelection,4-1))m_currentIconSelection=MAP_ICON_LEVEL_4;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_NEXT_CHAPTER:
cursor=CURSOR_COULDNT_MOVE;
break;
} }
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
m_pointerIcon->setTarget(getPointerTargetPosition());
} }
else if(pad&PAD_RIGHT) else if(pad&PAD_RIGHT)
{ {
do cursor=CURSOR_MOVED;
switch(m_currentIconSelection)
{ {
if(++m_currentLevelSelection>=MAP_NUM_LEVELS_PER_CHAPTER)m_currentLevelSelection=0; case MAP_ICON_PREVIOUS_CHAPTER:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_1:
if(isLevelOpen(m_currentChapterSelection,2-1))m_currentIconSelection=MAP_ICON_LEVEL_2;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_2:
if(isLevelOpen(m_currentChapterSelection,3-1))m_currentIconSelection=MAP_ICON_LEVEL_3;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_3:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_4:
if(isLevelOpen(m_currentChapterSelection,5-1))m_currentIconSelection=MAP_ICON_LEVEL_BONUS;
else cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_LEVEL_BONUS:
cursor=CURSOR_COULDNT_MOVE;
break;
case MAP_ICON_NEXT_CHAPTER:
cursor=CURSOR_COULDNT_MOVE;
break;
} }
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection)); }
// What did the cursor do?
switch(cursor)
{
case CURSOR_DIDNT_MOVE:
break;
case CURSOR_MOVED:
if(m_currentIconSelection!=MAP_ICON_PREVIOUS_CHAPTER&&m_currentIconSelection!=MAP_ICON_NEXT_CHAPTER)
{
m_pointerIcon->setTarget(getPointerTargetPosition()); m_pointerIcon->setTarget(getPointerTargetPosition());
} }
if(lastLevel!=m_currentLevelSelection)
{
CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR); CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR);
break;
case CURSOR_COULDNT_MOVE:
CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__ERROR,false,true);
break;
} }
m_pointerIcon->think(_frames); m_pointerIcon->think(_frames);
// SELECT or SAVE pressed?
if(m_pointerIcon->canPointerSelect()&& if(m_pointerIcon->canPointerSelect()&&
pad&PAD_CROSS) pad&PAD_CROSS)
{ {
CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__OK); CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__SELECT);
s_globalLevelSelectThing=s_mapLevelData[m_currentChapterSelection][m_currentLevelSelection].m_globalLevelNumber; switch(m_currentIconSelection)
{
case MAP_ICON_PREVIOUS_CHAPTER:
m_currentChapterSelection--;
generateMapScreenImage();
break;
case MAP_ICON_LEVEL_1:
case MAP_ICON_LEVEL_2:
case MAP_ICON_LEVEL_3:
case MAP_ICON_LEVEL_4:
case MAP_ICON_LEVEL_BONUS:
s_globalLevelSelectThing=s_mapLevelData[m_currentChapterSelection][m_currentIconSelection-1].m_globalLevelNumber;
m_readyToExit=true; m_readyToExit=true;
CFader::setFadingOut(); CFader::setFadingOut();
if(m_currentChapterSelection==3-1&&m_currentLevelSelection==1-1) if(m_currentChapterSelection==3-1&&m_currentIconSelection-1==1-1)
{ {
// Plankton FMA.. // Plankton FMA..
CFmaScene::selectFma(CFmaScene::FMA_SCRIPT__PLANKTON); CFmaScene::selectFma(CFmaScene::FMA_SCRIPT__PLANKTON);
@ -526,6 +669,13 @@ void CMapScene::think(int _frames)
{ {
GameState::setNextScene(&GameScene); GameState::setNextScene(&GameScene);
} }
break;
case MAP_ICON_NEXT_CHAPTER:
m_currentChapterSelection++;
generateMapScreenImage();
break;
}
} }
else if(pad&PAD_TRIANGLE) else if(pad&PAD_TRIANGLE)
{ {
@ -563,7 +713,7 @@ void CMapScene::generateMapScreenImage()
LZNP_Decode((u8*)m_packedBackgroundImage,(u8*)m_screenImage); LZNP_Decode((u8*)m_packedBackgroundImage,(u8*)m_screenImage);
m_currentLevelSelection=0; m_currentIconSelection=MAP_ICON_LEVEL_1;
for(i=0;i<MAP_NUM_LEVELS_PER_CHAPTER;i++) for(i=0;i<MAP_NUM_LEVELS_PER_CHAPTER;i++)
{ {
if(isLevelOpen(m_currentChapterSelection,i)) if(isLevelOpen(m_currentChapterSelection,i))
@ -616,9 +766,9 @@ DVECTOR CMapScene::getPointerTargetPosition()
{ {
DVECTOR pos; DVECTOR pos;
pos=s_mapLevelPositions[m_currentLevelSelection]; ASSERT(m_currentIconSelection!=MAP_ICON_PREVIOUS_CHAPTER&&m_currentIconSelection!=MAP_ICON_NEXT_CHAPTER);
pos.vx+=(MAP_LEVEL_WIDTH/2);
pos.vy+=MAP_LEVEL_HEIGHT; pos=s_mapPointerPositions[m_currentIconSelection-1];
return pos; return pos;
} }

View file

@ -53,15 +53,10 @@ public:
private: private:
enum enum
{ {
MAP_PARCHMENT_WIDTH=512,
MAP_PARCHMENT_HEIGHT=256,
MAP_PARCHMENT_START_X=0,
MAP_PARCHMENT_START_Y=0,
MAP_LEVEL_WIDTH=140, MAP_LEVEL_WIDTH=140,
MAP_LEVEL_HEIGHT=60, MAP_LEVEL_HEIGHT=60,
MAP_INSTRUCTIONS_YSTART=170, MAP_INSTRUCTIONS_YSTART=180,
MAP_INSTRUCTIONS_BUTTON_Y_OFFSET=3, MAP_INSTRUCTIONS_BUTTON_Y_OFFSET=3,
MAP_INSTRUCTIONS_TEXT_R=128, MAP_INSTRUCTIONS_TEXT_R=128,
MAP_INSTRUCTIONS_TEXT_G=64, MAP_INSTRUCTIONS_TEXT_G=64,
@ -70,6 +65,9 @@ private:
MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT=10, MAP_INSTRUCTIONS_GAP_BETWEEN_BUTTONS_AND_TEXT=10,
MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES=13, MAP_INSTRUCTIONS_Y_SPACE_BETWEEN_LINES=13,
MAP_ARROW_PREVIOUS_Y=50,
MAP_ARROW_NEXT_Y=190,
MAP_NUM_CHAPTERS=5, MAP_NUM_CHAPTERS=5,
MAP_NUM_LEVELS_PER_CHAPTER=5, MAP_NUM_LEVELS_PER_CHAPTER=5,
}; };
@ -123,9 +121,35 @@ private:
u8 *Gfx; u8 *Gfx;
}; };
enum
{
MAP_ICON_PREVIOUS_CHAPTER,
MAP_ICON_LEVEL_1,
MAP_ICON_LEVEL_2,
MAP_ICON_LEVEL_3,
MAP_ICON_LEVEL_4,
MAP_ICON_LEVEL_BONUS,
MAP_ICON_NEXT_CHAPTER,
NUM_MAP_ICONS,
};
typedef struct
{
u8 m_left,m_right,m_up,m_down;
} sMapIconMoves;
typedef enum
{
CURSOR_DIDNT_MOVE,
CURSOR_MOVED,
CURSOR_COULDNT_MOVE,
} CURSOR_MOVE_STATE;
void renderPointer(); void renderPointer();
void renderInstructions(); void renderInstructions();
void renderChapterArrows();
void generateMapScreenImage(); void generateMapScreenImage();
@ -145,12 +169,13 @@ private:
char *m_packedBackgroundImage; char *m_packedBackgroundImage;
int m_currentChapterSelection; int m_currentChapterSelection;
int m_currentLevelSelection; int m_currentIconSelection,m_previousIconSelection;
class CPointerIcon *m_pointerIcon; class CPointerIcon *m_pointerIcon;
static sMapLevelGfxTable s_GfxTable[MAP_GFX_MAX]; static sMapLevelGfxTable s_GfxTable[MAP_GFX_MAX];
static sMapLevelData s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEVELS_PER_CHAPTER]; static sMapLevelData s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEVELS_PER_CHAPTER];
static DVECTOR s_mapLevelPositions[MAP_NUM_LEVELS_PER_CHAPTER]; static DVECTOR s_mapLevelPositions[MAP_NUM_LEVELS_PER_CHAPTER];
static DVECTOR s_mapPointerPositions[MAP_NUM_LEVELS_PER_CHAPTER];
static int s_chapterToStartOn; static int s_chapterToStartOn;
static int s_levelToStartOn; static int s_levelToStartOn;