This commit is contained in:
Paul 2001-04-24 23:14:50 +00:00
parent 51d9acda6e
commit 9cf163dbea
3 changed files with 217 additions and 19 deletions

View file

@ -220,7 +220,8 @@ UI_GFX_NONTRANS_IN := $(foreach FILE,$(UI_GFX_NONTRANS),$(UI_GFX_DIR)/$(FILE))
UI_GFX_TRANS := +bambootopleft.bmp +bamboobotleft.bmp +bambootopright.bmp +bamboobotright.bmp \ UI_GFX_TRANS := +bambootopleft.bmp +bamboobotleft.bmp +bambootopright.bmp +bamboobotright.bmp \
+bamboohorizontal.bmp +bamboovertical.bmp \ +bamboohorizontal.bmp +bamboovertical.bmp \
+butU.bmp +butD.bmp +butL.bmp +butR.bmp \ +butU.bmp +butD.bmp +butL.bmp +butR.bmp \
+butC.bmp +butS.bmp +butX.bmp +butT.bmp +butC.bmp +butS.bmp +butX.bmp +butT.bmp \
+mappointer.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

@ -46,6 +46,18 @@
#include "fileio\fileio.h" #include "fileio\fileio.h"
#endif #endif
#ifndef __GUI_GFRAME_H__
#include "gui\gframe.h"
#endif
#ifndef __GUI_GFACTORY_H__
#include "gui\gfactory.h"
#endif
#ifndef __MATHTABLE_HEADER__
#include "utils\mathtab.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -57,6 +69,10 @@
#include <trans.h> #include <trans.h>
#endif #endif
#ifndef __SPR_SPRITES_H__
#include <sprites.h>
#endif
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Tyepdefs && Defines Tyepdefs && Defines
@ -92,31 +108,55 @@ enum
MAP_LEVEL_WIDTH=140, MAP_LEVEL_WIDTH=140,
MAP_LEVEL_HEIGHT=60, MAP_LEVEL_HEIGHT=60,
MAP_LEVEL_TOP_BORDER=20,
MAP_LEVEL_Y_SPACING=8,
MAP_LEVEL_X_SPACING=4,
MAP_INSTRUCTIONS_WIDTH=416,
MAP_INSTRUCTIONS_HEIGHT=32,
MAP_INSTRUCTIONS_BOTTOM_OFFSET=40,
}; };
int MAP_LEVEL_TOP_BORDER=20;
int MAP_LEVEL_Y_SPACING=10;
int MAP_LEVEL_X_SPACING=4;
int s_levelMaps[6]= static int s_levelMaps[5][6]=
{ {
MAP_C1_L1_GFX, { MAP_C1_L1_GFX, MAP_C1_L2_GFX, MAP_C1_L3_GFX, MAP_C1_L4_GFX, MAP_C1_BOSS_GFX, MAP_C1_FAIR_GFX },
MAP_C1_L2_GFX, { MAP_C1_L1_GFX, MAP_C1_L2_GFX, MAP_C1_L3_GFX, MAP_C1_L4_GFX, MAP_C1_BOSS_GFX, MAP_C1_FAIR_GFX },
MAP_C1_L3_GFX, { MAP_C1_L1_GFX, MAP_C1_L2_GFX, MAP_C1_L3_GFX, MAP_C1_L4_GFX, MAP_C1_BOSS_GFX, MAP_C1_FAIR_GFX },
MAP_C1_L4_GFX, { MAP_C1_L1_GFX, MAP_C1_L2_GFX, MAP_C1_L3_GFX, MAP_C1_L4_GFX, MAP_C1_BOSS_GFX, MAP_C1_FAIR_GFX },
MAP_C1_BOSS_GFX, { MAP_C1_L1_GFX, MAP_C1_L2_GFX, MAP_C1_L3_GFX, MAP_C1_L4_GFX, MAP_C1_BOSS_GFX, MAP_C1_FAIR_GFX },
MAP_C1_FAIR_GFX,
}; };
static int s_questItems[5][4]=
{
{ FRM__C1_L1_JELLY, FRM__C1_L2_SEAWEED, FRM__C1_L3_SEANUTBUTTER, FRM__C1_L4_BREADSLICE },
{ FRM__C2_L1_FALSETEETH, FRM__C2_L2_KELPKREAM, FRM__C2_L3_MUDPACK, FRM__C2_L4_SPONGE },
{ FRM__C3_L1_SLIPPERS, FRM__C3_L2_CLAMBRA, FRM__C3_L3_STARFISHMASK, FRM__C3_L4_SUPERPANTZ },
{ FRM__C4_COIN, FRM__C4_COIN, FRM__C4_COIN, FRM__C4_KELPBAR },
{ FRM__C5_L1_HAMMER, FRM__C5_L2_ARIEL, FRM__C5_L3_OILCAN, FRM__C5_L4_WRENCH },
};
static int s_levelNumbers[5][4]=
{
{ 0, 1, 2, 3, 4, 25 },
{ 5, 6, 7, 8, 9, 26 },
{ 10, 11, 12, 13, 14, 27 },
{ 15, 16, 17, 18, 19, 28 },
{ 20, 21, 22, 23, 24, 29 },
}
void CMapScene::init() void CMapScene::init()
{ {
m_font=new ("map screen font") FontBank(); m_font=new ("map screen font") FontBank();
m_font->initialise(&standardFont); m_font->initialise(&standardFont);
m_font->setJustification(FontBank::JUST_CENTRE); m_font->setJustification(FontBank::JUST_CENTRE);
m_font->setOt(5); m_font->setOt(10);
m_font->setColour(0,0,0);
m_font->setJustification(FontBank::JUST_LEFT);
m_spriteBank=new ("map screen sprite") SpriteBank();
m_spriteBank->load(SPRITES_SPRITES_SPR);
m_readyToExit=false;
// CFader::setFadingIn(CFader::BLACK_FADE);
// Generate the map background image // Generate the map background image
int i,x,y,xpos,ypos; int i,x,y,xpos,ypos;
@ -130,8 +170,10 @@ void CMapScene::init()
xpos=256-((MAP_LEVEL_WIDTH*3)/2)-MAP_LEVEL_X_SPACING; xpos=256-((MAP_LEVEL_WIDTH*3)/2)-MAP_LEVEL_X_SPACING;
for(x=0;x<3;x++) for(x=0;x<3;x++)
{ {
// if(isLevelOpen if(isLevelOpen(m_currentChapterSelection,i))
copyImageToScreen(s_levelMaps[i],xpos,ypos,MAP_LEVEL_WIDTH,MAP_LEVEL_HEIGHT); {
copyImageToScreen(s_levelMaps[m_currentChapterSelection][i],xpos,ypos,MAP_LEVEL_WIDTH,MAP_LEVEL_HEIGHT);
}
i++; i++;
xpos+=MAP_LEVEL_WIDTH+MAP_LEVEL_X_SPACING; xpos+=MAP_LEVEL_WIDTH+MAP_LEVEL_X_SPACING;
} }
@ -139,6 +181,23 @@ void CMapScene::init()
} }
SetScreenImage((u8*)m_screenImage); SetScreenImage((u8*)m_screenImage);
// Generate the ui box at the bottom of the screen
m_guiFrame=new ("Conversation GUI") CGUIControlFrame();
m_guiFrame->init(0);
m_guiFrame->setObjectXYWH((512-MAP_INSTRUCTIONS_WIDTH)/2,256-MAP_INSTRUCTIONS_BOTTOM_OFFSET-MAP_INSTRUCTIONS_HEIGHT,MAP_INSTRUCTIONS_WIDTH,MAP_INSTRUCTIONS_HEIGHT);
// m_guiFrame->setOt(OT_POS);
m_guiFrame->setFlags(CGUIObject::FLAG_DRAWBORDER);
m_readyToExit=false;
// CFader::setFadingIn(CFader::BLACK_FADE);
m_currentChapterSelection=0;
m_currentLevelSelection=0;
m_pointerPos.vx=256;
m_pointerPos.vy=-50;
} }
@ -150,8 +209,10 @@ void CMapScene::init()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CMapScene::shutdown() void CMapScene::shutdown()
{ {
m_guiFrame->shutdown();
ClearScreenImage(); ClearScreenImage();
MemFree(m_screenImage); MemFree(m_screenImage);
m_spriteBank->dump(); delete m_spriteBank;
m_font->dump(); delete m_font; m_font->dump(); delete m_font;
} }
@ -164,8 +225,40 @@ void CMapScene::shutdown()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CMapScene::render() void CMapScene::render()
{ {
m_font->setColour(255,255,255); int i,x,y,xpos,ypos;
m_font->print(256,100,"MAP SCREEN!!!"); int compilerGetsComfused;
char spatCount[10];
sFrameHdr *fh;
POLY_FT4 *ft4;
// Render spatula counts and quest items
i=0;
ypos=MAP_PARCHMENT_START_Y+MAP_LEVEL_TOP_BORDER;
for(y=0;y<2;y++)
{
xpos=256-((MAP_LEVEL_WIDTH*3)/2)-MAP_LEVEL_X_SPACING;
compilerGetsComfused=y==0?3:1; // 3 on top row, 1 on bottom - put this in the for loop and the complier breaks :o
for(x=0;x<compilerGetsComfused;x++)
{
sprintf(spatCount,"%d/%d",getSpatulaCollectedCount(m_currentChapterSelection,i),getSpatulaAvailableCount(m_currentChapterSelection,i));
m_font->print(xpos,ypos,spatCount);
fh=m_spriteBank->getFrameHeader(s_questItems[m_currentChapterSelection][i]);
ft4=m_spriteBank->printFT4Scaled(fh,xpos+MAP_LEVEL_WIDTH-fh->W,ypos+MAP_LEVEL_HEIGHT-fh->H,0,0,10,128);
if(!hasQuestItemBeenCollected(m_currentChapterSelection,i))
{
setRGB0(ft4,10,10,10);
}
i++;
xpos+=MAP_LEVEL_WIDTH+MAP_LEVEL_X_SPACING;
}
ypos+=MAP_LEVEL_HEIGHT+MAP_LEVEL_Y_SPACING;
}
// Selection cursor
fh=m_spriteBank->getFrameHeader(FRM__MAPPOINTER);
m_spriteBank->printFT4(fh,m_pointerPos.vx-(fh->W/2),m_pointerPos.vy-(fh->H/2),0,0,9);
m_guiFrame->render();
} }
@ -179,12 +272,73 @@ void CMapScene::think(int _frames)
{ {
if(!CFader::isFading()&&!m_readyToExit) if(!CFader::isFading()&&!m_readyToExit)
{ {
// Move cursor
if(PadGetDown(0)&PAD_LEFT)
{
do
{
if(--m_currentLevelSelection<0)m_currentLevelSelection=5;
}
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
}
else if(PadGetDown(0)&PAD_RIGHT)
{
do
{
if(++m_currentLevelSelection>5)m_currentLevelSelection=0;
}
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
}
// Calc where the pointer should be
m_pointerSin=(m_pointerSin+(_frames*70))&4095;
m_pointerTarget.vx=256-((MAP_LEVEL_WIDTH*3)/2)-MAP_LEVEL_X_SPACING+
((m_currentLevelSelection%3)*(MAP_LEVEL_WIDTH+MAP_LEVEL_X_SPACING))+
(MAP_LEVEL_WIDTH/2);
m_pointerTarget.vy=MAP_PARCHMENT_START_Y+MAP_LEVEL_TOP_BORDER+
((m_currentLevelSelection/3)*(MAP_LEVEL_HEIGHT+MAP_LEVEL_Y_SPACING))+
(MAP_LEVEL_HEIGHT)+
(msin(m_pointerSin)*4>>12);
// Move the pointer
for(int i=0;i<_frames;i++)
{
int delta;
delta=m_pointerTarget.vx-m_pointerPos.vx;
if(delta<0)
{
delta/=2;
if(!delta)delta=-1;
}
else if(delta>0)
{
delta/=2;
if(!delta)delta=+1;
}
m_pointerPos.vx+=delta;
delta=m_pointerTarget.vy-m_pointerPos.vy;
if(delta<0)
{
delta/=2;
if(!delta)delta=-1;
}
else if(delta>0)
{
delta/=2;
if(!delta)delta=+1;
}
m_pointerPos.vy+=delta;
}
if(PadGetDown(0)&(PAD_CROSS|PAD_START)) if(PadGetDown(0)&(PAD_CROSS|PAD_START))
{ {
m_readyToExit=true; m_readyToExit=true;
// CFader::setFadingOut(CFader::BLACK_FADE); // CFader::setFadingOut(CFader::BLACK_FADE);
GameState::setNextScene(&FrontEndScene); GameState::setNextScene(&FrontEndScene);
} }
m_guiFrame->think(_frames);
} }
} }
@ -200,7 +354,6 @@ int CMapScene::readyToShutdown()
return m_readyToExit&&!CFader::isFading(); return m_readyToExit&&!CFader::isFading();
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -227,5 +380,32 @@ void CMapScene::copyImageToScreen(int _file,int _x,int _y,int _w,int _h)
MemFree(image); MemFree(image);
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int CMapScene::isLevelOpen(int _chapter,int _level)
{
return true;//_level<4;
}
int CMapScene::getSpatulaCollectedCount(int _chapter,int _level)
{
return 10+_level;
}
int CMapScene::getSpatulaAvailableCount(int _chapter,int _level)
{
return 30;
}
int CMapScene::hasQuestItemBeenCollected(int _chapter,int _level)
{
return _level<2;
}
/*=========================================================================== /*===========================================================================
end */ end */

View file

@ -22,6 +22,10 @@
#include "system\gstate.h" #include "system\gstate.h"
#endif #endif
#ifndef _GLOBAL_HEADER_
#include "system\global.h" // Doh.. just for DVECTOR :/
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -47,6 +51,10 @@ public:
private: private:
void copyImageToScreen(int _file,int _x,int _y,int _w,int _h); void copyImageToScreen(int _file,int _x,int _y,int _w,int _h);
int isLevelOpen(int _chapter,int _level);
int getSpatulaCollectedCount(int _chapter,int _level);
int getSpatulaAvailableCount(int _chapter,int _level);
int hasQuestItemBeenCollected(int _chapter,int _level);
class FontBank *m_font; class FontBank *m_font;
@ -54,6 +62,15 @@ private:
char *m_screenImage; char *m_screenImage;
class CGUIControlFrame *m_guiFrame;
class SpriteBank *m_spriteBank;
int m_currentChapterSelection;
int m_currentLevelSelection;
DVECTOR m_pointerPos;
DVECTOR m_pointerTarget;
int m_pointerSin;
}; };