diff --git a/data/translations/text.dat b/data/translations/text.dat index 2e7303d87..1d76bd91b 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -58,6 +58,8 @@ eng=CONTROLS eng=SCREEN [STR__FRONTEND__SOUND] eng=SOUND +[STR__FRONTEND__LOAD] +eng=LOAD [STR__FRONTEND__EXIT] eng=EXIT [STR__FRONTEND__BACK] @@ -107,6 +109,52 @@ eng=SFX VOLUME [STR__FRONTEND__SPEECH] eng=SPEECH VOLUME +; Load menu ( also some strings in the memcard section ) +[STR__FRONTEND__CONFIRM_LOAD] +eng=SpongeBob game data found.\nAre you sure you want to load? + + + +; --------------------------------------------------------------- +; Memcard +; --------------------------------------------------------------- +[STR__MEMCARD__CHECKING_MEM_CARD] +eng=Checking...\nPlease do not remove the MEMORY CARD +[STR__MEMCARD__UNFORMATTEDCARD] +eng=MEMORY CARD in MEMORY CARD slot 1 is not formatted +[STR__MEMCARD__NOFILESONCARD] +eng=No SpongeBob game data present +[STR__MEMCARD__NOCARDINSLOT] +eng=There is no MEMORY CARD in MEMORY CARD slot 1 +[STR__MEMCARD__LOADINGPLEASEWIAT] +eng=Loading...\nDo not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__MEMCARD__LOADOK] +eng=Load complete! +[STR__MEMCARD__LOADERROR] +eng=Load Error! +[STR__MEMCARD__NOSPACEONCARD] +eng=Insufficient free blocks available in MEMORY CARD of MEMORY CARD SLOT 1 +[STR__MEMCARD__DUPLICATESAVENAME] +eng=Are you sure you want to overwrite this file? +[STR__MEMCARD__DOYOUWANTTOFORMATCARD] +eng=MEMORY CARD in MEMORY CARD slot 1 is not formatted. Do you wish to format? +[STR__MEMCARD__FORMATTINGPLEASEWIAT] +eng=Formatting... Do not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__MEMCARD__FORMATTINGOK] +eng=Format complete!\n\nPress X to continue +[STR__MEMCARD__FORMATTINGERROR] +eng=Format Error!\n\nPress X to continue +[STR__MEMCARD__FORMATTINGINTERRUPTED] +eng=Operation interrupted!\n\nPress X to continue +[STR__MEMCARD__SAVEINGPLEASEWIAT] +eng=Saving...\nDo not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__MEMCARD__SAVEOK] +eng=Save complete!\n\nPress X to continue +[STR__MEMCARD__SAVEERROR] +eng=Save error!\n\nPress X to continue + + + diff --git a/makefile.gfx b/makefile.gfx index 8337a32a1..a4c1e82f8 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -269,7 +269,7 @@ FRONTEND_GFX_DIR := $(GRAF_DIR)/frontend FRONTEND_GFX_NONTRANS := FRONTEND_GFX_NONTRANS_IN := $(foreach FILE,$(FRONTEND_GFX_NONTRANS),$(FRONTEND_GFX_DIR)/$(FILE)) -FRONTEND_GFX_TRANS := +bg1.bmp +bg2.bmp +bg3.bmp +bg4.bmp +caustic1.bmp +caustic2.bmp +FRONTEND_GFX_TRANS := +bg3.bmp +bg5.bmp +bg7.bmp +bg8.bmp +bg9.bmp +caustic1.bmp +caustic2.bmp FRONTEND_GFX_TRANS_IN := $(foreach FILE,$(FRONTEND_GFX_TRANS),$(FRONTEND_GFX_DIR)/$(FILE)) FRONTEND_GFX_TRANS_NO_ROT := +sblogo.bmp diff --git a/source/frontend/options.cpp b/source/frontend/options.cpp index 5f762a3a2..e5a215409 100644 --- a/source/frontend/options.cpp +++ b/source/frontend/options.cpp @@ -62,14 +62,18 @@ #include "system\vid.h" #endif -#ifndef __SOUND_SOUND_H__ -#include "sound\sound.h" -#endif - #ifndef __PAD_VIBE_H__ #include "pad\vibe.h" #endif +#ifndef __MEMCARD_MEMCARD_H__ +#include "memcard\memcard.h" +#endif + +#ifndef __MEMCARD_SAVELOAD_H__ +#include "memcard\saveload.h" +#endif + /* Std Lib ------- */ @@ -167,10 +171,26 @@ static const int OPTIONS_FRAME_H=160; // Backgrounds int CFrontEndOptions::s_modeBackground[MODE__COUNT]= { - FRM__BG1, - FRM__BG2, FRM__BG3, - FRM__BG4, + FRM__BG5, + FRM__BG7, + FRM__BG8, + FRM__BG9, +}; + + +CGUITextBox *m_loadTextBox; +int CFrontEndOptions::s_loadModeTextIds[LOADMODE__COUNT]= +{ + STR__MEMCARD__CHECKING_MEM_CARD, // LOADMODE__INIT + STR__MEMCARD__CHECKING_MEM_CARD, // LOADMODE__CHECKING + STR__MEMCARD__UNFORMATTEDCARD, // LOADMODE__UNFORMATTED + STR__MEMCARD__NOFILESONCARD, // LOADMODE__NODATA + STR__MEMCARD__NOCARDINSLOT, // LOADMODE__NOCARD + STR__FRONTEND__CONFIRM_LOAD, // LOADMODE__CONFIRMLOAD + STR__MEMCARD__LOADINGPLEASEWIAT, // LOADMODE__LOADING + STR__MEMCARD__LOADOK, // LOADMODE__LOADOK + STR__MEMCARD__LOADERROR, // LOADMODE__LOADERROR }; @@ -240,6 +260,7 @@ void CFrontEndOptions::init() m_background->setColour(80,80,80); m_background->setSpeed(1,-1); m_background->setSpeedScale(0); + m_background->setFrame(s_modeBackground[MODE__OPTIONS]); // Create the menu frames @@ -257,13 +278,17 @@ void CFrontEndOptions::init() STR__FRONTEND__CONTROLS, &m_nextMode,MODE__CONTROL); CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], - X_BORDER,Y_BORDER+30,OPTIONS_FRAME_W-(X_BORDER*2),20, + X_BORDER,Y_BORDER+20,OPTIONS_FRAME_W-(X_BORDER*2),20, STR__FRONTEND__SCREEN, &m_nextMode,MODE__SCREEN); CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], - X_BORDER,Y_BORDER+60,OPTIONS_FRAME_W-(X_BORDER*2),20, + X_BORDER,Y_BORDER+40,OPTIONS_FRAME_W-(X_BORDER*2),20, STR__FRONTEND__SOUND, &m_nextMode,MODE__SOUND); + CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], + X_BORDER,Y_BORDER+60,OPTIONS_FRAME_W-(X_BORDER*2),20, + STR__FRONTEND__LOAD, + &m_nextMode,MODE__LOAD); CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], X_BORDER,OPTIONS_FRAME_H-Y_BORDER-20,OPTIONS_FRAME_W-(X_BORDER*2),20, STR__FRONTEND__EXIT, @@ -379,13 +404,46 @@ void CFrontEndOptions::init() STR__FRONTEND__SPEECH, &m_speechVolume,CSoundMediator::MIN_VOLUME,CSoundMediator::MAX_VOLUME); + // Memcard menu + m_loadTextBox=new ("textbox") CGUITextBox(); + m_loadTextBox->init(m_modeMenus[MODE__LOAD]); + m_loadTextBox->setObjectXYWH(X_BORDER,Y_BORDER,OPTIONS_FRAME_W-(X_BORDER*2),80); + m_loadTextBox->setText(STR__MEMCARD__CHECKING_MEM_CARD); + + // Extra memcard frames.. + m_loadModeConfirmFrame=new ("loadmodeconfirmframe") CGUIControlFrame(); + m_loadModeConfirmFrame->init(NULL); + m_loadModeConfirmFrame->setObjectXYWH(((512-OPTIONS_FRAME_W)/2)+X_BORDER,((256-OPTIONS_FRAME_H)/2)+OPTIONS_FRAME_H-Y_BORDER-40,OPTIONS_FRAME_W-(X_BORDER*2),40); + m_loadModeConfirmFrame->clearFlags(CGUIObject::FLAG_DRAWBORDER); + CGUIFactory::createValueButtonFrame(m_loadModeConfirmFrame, + 0,0,OPTIONS_FRAME_W-(X_BORDER*2),20, + STR__YES, + &m_loadUserResponse,USERRESPONSE__YES); + CGUIFactory::createValueButtonFrame(m_loadModeConfirmFrame, + 0,20,OPTIONS_FRAME_W-(X_BORDER*2),20, + STR__NO, + &m_loadUserResponse,USERRESPONSE__NO); + + m_loadModeOKFrame=new ("loadmodeokframe") CGUIControlFrame(); + m_loadModeOKFrame->init(NULL); + m_loadModeOKFrame->setObjectXYWH(((512-OPTIONS_FRAME_W)/2)+X_BORDER,((256-OPTIONS_FRAME_H)/2)+OPTIONS_FRAME_H-Y_BORDER-40,OPTIONS_FRAME_W-(X_BORDER*2),40); + m_loadModeOKFrame->clearFlags(CGUIObject::FLAG_DRAWBORDER); + CGUIFactory::createValueButtonFrame(m_loadModeOKFrame, + 0,0,OPTIONS_FRAME_W-(X_BORDER*2),20, + STR__OK, + &m_loadUserResponse,USERRESPONSE__OK); + + // Add BACK to all of the sub menus for(i=1;irender(); + if(m_mode==MODE__LOAD) + { + switch(m_loadMode) + { + case LOADMODE__INIT: + case LOADMODE__CHECKING: + case LOADMODE__LOADING: + break; + + case LOADMODE__UNFORMATTED: + case LOADMODE__NODATA: + case LOADMODE__NOCARD: + case LOADMODE__LOADOK: + case LOADMODE__LOADERROR: + m_loadModeOKFrame->render(); + break; + + case LOADMODE__CONFIRMLOAD: + m_loadModeConfirmFrame->render(); + break; + } + } m_modeMenus[m_mode]->render(); } @@ -501,12 +583,25 @@ void CFrontEndOptions::think(int _frames) { if(m_nextMode!=m_mode) { - m_modeMenus[m_mode]->unselect(); + if(m_nextMode==MODE__LOAD) + { + // Entering LOAD option + setLoadMode(LOADMODE__INIT); + } + else if(m_mode==MODE__LOAD) + { + // Leaving LOAD option + MemCard::Stop(); + delete m_saveLoadDatabase; + m_saveLoadDatabase=NULL; + } + + if(m_mode!=MODE__LOAD)m_modeMenus[m_mode]->unselect(); m_mode=m_nextMode; - m_modeMenus[m_mode]->select(); + if(m_mode!=MODE__LOAD)m_modeMenus[m_mode]->select(); m_background->setFrame(s_modeBackground[m_mode]); } - m_modeMenus[m_mode]->think(_frames); + if(m_mode!=MODE__LOAD)m_modeMenus[m_mode]->think(_frames); if(m_mode==MODE__CONTROL) { @@ -520,6 +615,10 @@ void CFrontEndOptions::think(int _frames) } } } + else if(m_mode==MODE__SCREEN) + { + VidSetXYOfs(m_screenXOff,m_screenYOff); + } else if(m_mode==MODE__SOUND) { if(m_bgmVolume!=CSoundMediator::getVolume(CSoundMediator::VOL_SONG)) @@ -535,9 +634,124 @@ void CFrontEndOptions::think(int _frames) CSoundMediator::setVolume(CSoundMediator::VOL_SPEECH,m_speechVolume); } } - else if(m_mode==MODE__SCREEN) + else if(m_mode==MODE__LOAD) { - VidSetXYOfs(m_screenXOff,m_screenYOff); + if(m_loadModeConfirmFrame->isSelected())m_loadModeConfirmFrame->think(_frames); + if(m_loadModeOKFrame->isSelected())m_loadModeOKFrame->think(_frames); + + switch(m_loadMode) + { + case LOADMODE__INIT: + if(m_loadTimeInMode>10) + { + // If we init the memcard as the load page is selected then there's a small but noticable pause + // This hides it a bit.. + MemCard::Start(); + m_saveLoadDatabase=new ("saveloaddb") CSaveLoadDatabase(); + setLoadMode(LOADMODE__CHECKING); + } + break; + + case LOADMODE__CHECKING: + if(MemCard::GetCardStatus(0)==MemCard::CS_CardInserted) + { + // Scanning a new card.. + m_loadTimeInMode=0; + } + else if(m_loadTimeInMode>60) + { + // Wait for card status to settle for one second before trusting its status + if(MemCard::GetCardStatus(0)==MemCard::CS_NoCard) + { + setLoadMode(LOADMODE__NOCARD); + } + else if(MemCard::GetCardStatus(0)==MemCard::CS_UnformattedCard) + { + setLoadMode(LOADMODE__UNFORMATTED); + } + else if(MemCard::GetFileCountOnCard(0)) + { + setLoadMode(LOADMODE__CONFIRMLOAD); + } + else + { + setLoadMode(LOADMODE__NODATA); + } + } + break; + + case LOADMODE__UNFORMATTED: + case LOADMODE__NODATA: + if(MemCard::GetCardStatus(0)!=MemCard::CS_ValidCard) + { + setLoadMode(LOADMODE__CHECKING); + } + else if(m_loadUserResponse==USERRESPONSE__OK) + { + m_nextMode=MODE__OPTIONS; + } + break; + + case LOADMODE__NOCARD: + if(MemCard::GetCardStatus(0)!=MemCard::CS_NoCard) + { + setLoadMode(LOADMODE__CHECKING); + } + else if(m_loadUserResponse==USERRESPONSE__OK) + { + m_nextMode=MODE__OPTIONS; + } + break; + + case LOADMODE__CONFIRMLOAD: + if(MemCard::GetCardStatus(0)!=MemCard::CS_ValidCard) + { + setLoadMode(LOADMODE__CHECKING); + } + else if(m_loadUserResponse==USERRESPONSE__YES) + { + setLoadMode(LOADMODE__LOADING); + m_saveLoadDatabase->startLoad(0); + } + else if(m_loadUserResponse==USERRESPONSE__NO) + { + m_nextMode=MODE__OPTIONS; + } + break; + + case LOADMODE__LOADING: + { + int stat=m_saveLoadDatabase->getLoadStatus(); + if(stat==CSaveLoadDatabase::FINISHED_OK) + { + setLoadMode(LOADMODE__LOADOK); + } + else if(stat==CSaveLoadDatabase::FAILED) + { + setLoadMode(LOADMODE__LOADERROR); + } + } + break; + + case LOADMODE__LOADOK: + if(m_loadUserResponse==USERRESPONSE__OK) + { + m_nextMode=MODE__OPTIONS; + } + break; + + case LOADMODE__LOADERROR: + if(m_loadUserResponse==USERRESPONSE__OK) + { + setLoadMode(LOADMODE__CHECKING); + } + break; + } + if(m_saveLoadDatabase) + { + m_saveLoadDatabase->think(); + } + m_loadTimeInMode+=_frames; } } @@ -585,5 +799,43 @@ CFrontEndScene::FrontEndMode CFrontEndOptions::getNextMode() return CFrontEndScene::MODE__MAIN_TITLES; } + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndOptions::setLoadMode(int _newMode) +{ + if(m_loadModeConfirmFrame->isSelected())m_loadModeConfirmFrame->unselect(); + if(m_loadModeOKFrame->isSelected())m_loadModeOKFrame->unselect(); + + m_loadTextBox->setText(s_loadModeTextIds[_newMode]); + m_loadMode=_newMode; + m_loadTimeInMode=0; + m_loadUserResponse=USERRESPONSE__NONE; + + switch(m_loadMode) + { + case LOADMODE__INIT: + case LOADMODE__CHECKING: + case LOADMODE__LOADING: + break; + + case LOADMODE__UNFORMATTED: + case LOADMODE__NODATA: + case LOADMODE__NOCARD: + case LOADMODE__LOADOK: + case LOADMODE__LOADERROR: + m_loadModeOKFrame->select(); + break; + + case LOADMODE__CONFIRMLOAD: + m_loadModeConfirmFrame->select(); + break; + } +} + /*=========================================================================== end */ \ No newline at end of file diff --git a/source/frontend/options.h b/source/frontend/options.h index f82be6b2b..f0f6a8bbf 100644 --- a/source/frontend/options.h +++ b/source/frontend/options.h @@ -52,12 +52,16 @@ public: private: + void setLoadMode(int _newMode); + + enum { MODE__OPTIONS, MODE__CONTROL, MODE__SCREEN, MODE__SOUND, + MODE__LOAD, MODE__COUNT }; @@ -90,6 +94,29 @@ private: ICON_COUNT }; + enum + { + LOADMODE__INIT, + LOADMODE__CHECKING, + LOADMODE__UNFORMATTED, + LOADMODE__NODATA, + LOADMODE__NOCARD, + LOADMODE__CONFIRMLOAD, + LOADMODE__LOADING, + LOADMODE__LOADOK, + LOADMODE__LOADERROR, + + LOADMODE__COUNT, + }; + + enum + { + USERRESPONSE__NONE, + USERRESPONSE__OK, + USERRESPONSE__YES, + USERRESPONSE__NO, + }; + enum { X_BORDER=30, @@ -106,6 +133,14 @@ private: class CGUIControlFrame *m_modeMenus[MODE__COUNT]; int m_mode,m_nextMode; static int s_modeBackground[MODE__COUNT]; + + int m_loadMode; + int m_loadTimeInMode; + class CSaveLoadDatabase *m_saveLoadDatabase; + static int s_loadModeTextIds[LOADMODE__COUNT]; + class CGUIControlFrame *m_loadModeConfirmFrame; + class CGUIControlFrame *m_loadModeOKFrame; + int m_loadUserResponse; int m_exitFlag; int m_closingDown; diff --git a/source/frontend/scrollbg.cpp b/source/frontend/scrollbg.cpp index 8808864a0..d2c055b6d 100644 --- a/source/frontend/scrollbg.cpp +++ b/source/frontend/scrollbg.cpp @@ -65,7 +65,7 @@ void CScrollyBackground::init() setSpeed(DEFAULT_X_SPEED,DEFAULT_Y_SPEED); setSpeedScale(DEFAULT_SPEED_SCALE); setOt(DEFAULT_OT); - setFrame(FRM__BG1); + setFrame(FRM__BUTX); setTheDrawMode(DRAWMODE_NORMAL); setColour(128,128,128); setScale(NORMAL_SCALE);