diff --git a/makefile.gaz b/makefile.gaz index a4bf5b29d..ebceb1ca6 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -76,8 +76,7 @@ gui_src := gui \ gbutton \ gframe \ greadout \ - gtextbox \ - gtextent + gtextbox locale_src := textdbase diff --git a/source/frontend/frontend.cpp b/source/frontend/frontend.cpp index eeac80495..6ac7695ed 100644 --- a/source/frontend/frontend.cpp +++ b/source/frontend/frontend.cpp @@ -49,6 +49,19 @@ Vars ---- */ +static CFrontEndMainTitles s_frontEndModeMainTitles; + +CFrontEndMode *CFrontEndScene::s_modeCodes[]= +{ + &s_frontEndModeMainTitles, // MODE__MAIN_TITLES + &s_frontEndModeMainTitles,//NULL, // MODE__GAME_OPTIONS + &s_frontEndModeMainTitles,//NULL, // MODE__CHOOSE_SLOT + NULL, // MODE__DEMO + + NULL, // MODE__NONE +}; + + CFrontEndScene FrontEndScene; @@ -60,8 +73,8 @@ CFrontEndScene FrontEndScene; ---------------------------------------------------------------------- */ void CFrontEndScene::init() { - m_mainTitles=new ("FEMainTitles") CFrontEndMainTitles(); - m_mainTitles->init(); + m_mode=MODE__NONE; + setMode(MODE__MAIN_TITLES); } @@ -73,7 +86,6 @@ void CFrontEndScene::init() ---------------------------------------------------------------------- */ void CFrontEndScene::shutdown() { - m_mainTitles->shutdown(); delete m_mainTitles; } @@ -85,7 +97,7 @@ void CFrontEndScene::shutdown() ---------------------------------------------------------------------- */ void CFrontEndScene::render() { - m_mainTitles->render(); + s_modeCodes[m_mode]->render(); } @@ -97,7 +109,14 @@ void CFrontEndScene::render() ---------------------------------------------------------------------- */ void CFrontEndScene::think(int _frames) { - m_mainTitles->think(_frames); + CFrontEndMode *mode; + + mode=s_modeCodes[m_mode]; + mode->think(_frames); + if(mode->isReadyToExit()) + { + setMode(mode->getNextMode()); + } } @@ -113,5 +132,29 @@ int CFrontEndScene::readyToShutdown() } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndScene::setMode(FrontEndMode _newMode) +{ + PAUL_DBGMSG("CFrontEndScene::setMode(%d)",_newMode); + + // Close old mode + if(s_modeCodes[m_mode]) + { + s_modeCodes[m_mode]->shutdown(); + } + + // Open new mode + m_mode=_newMode; + s_modeCodes[m_mode]->init(); +// s_modeCodes[m_mode]->shutdown(); +// ASSERT(0); +} + + /*=========================================================================== end */ \ No newline at end of file diff --git a/source/frontend/frontend.h b/source/frontend/frontend.h index f10c961cf..436e416fb 100644 --- a/source/frontend/frontend.h +++ b/source/frontend/frontend.h @@ -12,6 +12,7 @@ ===========================================================================*/ #ifndef __FRONTEND_FRONTENTD_H__ +#define __FRONTEND_FRONTENTD_H__ /*---------------------------------------------------------------------- Includes @@ -28,6 +29,14 @@ /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ +typedef enum +{ + EXITCODE__NONE, + + EXITCODE__START_GAME, + EXITCODE__GOTO_OPTIONS, +} MainTitleExitCode; + /*---------------------------------------------------------------------- Structure defintions @@ -36,6 +45,16 @@ class CFrontEndScene : public CScene { public: + typedef enum + { + MODE__MAIN_TITLES, + MODE__GAME_OPTIONS, + MODE__CHOOSE_SLOT, + MODE__DEMO, + + MODE__NONE, + } FrontEndMode; + void init(); void shutdown(); void render(); @@ -45,7 +64,26 @@ public: private: - class CFrontEndMainTitles *m_mainTitles; + void setMode(FrontEndMode _newMode); + + FrontEndMode m_mode; + class CFrontEndMode *m_modeCode; + static class CFrontEndMode *s_modeCodes[]; + +}; + + +class CFrontEndMode +{ +public: + virtual void init()=0; + virtual void shutdown()=0; + virtual void render()=0; + virtual void think(int _frames)=0; + + virtual int isReadyToExit()=0; + virtual CFrontEndScene::FrontEndMode getNextMode()=0; + }; diff --git a/source/frontend/maintitl.cpp b/source/frontend/maintitl.cpp index 41280570f..c6cad09be 100644 --- a/source/frontend/maintitl.cpp +++ b/source/frontend/maintitl.cpp @@ -46,6 +46,22 @@ #include "gfx\fader.h" #endif +#ifndef __GUI_GUI_H__ +#include "gui\gui.h" +#endif + +#ifndef __GUI_GTEXTBOX_H__ +#include "gui\gtextbox.h" +#endif + +#ifndef __GUI_GFRAME_H__ +#include "gui\gframe.h" +#endif + +#ifndef __GUI_GBUTTON_H__ +#include "gui\gbutton.h" +#endif + /* Std Lib ------- */ @@ -95,22 +111,61 @@ int sval=0; Params: Returns: ---------------------------------------------------------------------- */ +int mem; void CFrontEndMainTitles::init() { +mem=MainRam.TotalRam-MainRam.RamUsed; +PAUL_DBGMSG("initial mem free=%d",mem); + CGUIGroupFrame *fr; + CGUITextBox *tb; + CGUIToggleButton *tg; + m_sprites=new ("MainTitle Sprites") SpriteBank(); m_sprites->load(FRONTEND_FRONTEND_SPR); m_smallFont=new ("MainTitle SmallFont") FontBank(); m_smallFont->initialise(&standardFont); m_smallFont->setJustification(FontBank::JUST_CENTRE); - - m_bigFont=new ("MainTitle BigFont") FontBank(); - m_bigFont->initialise(&standardFont); - m_bigFont->setJustification(FontBank::JUST_CENTRE); - m_bigFont->setColour(PRESS_START_TEXT_R,PRESS_START_TEXT_G,PRESS_START_TEXT_B); + m_smallFont->setColour(PRESS_START_TEXT_R,PRESS_START_TEXT_G,PRESS_START_TEXT_B); m_mode=MODE__PRESS_START; + // Create the main menu ( START GAME/OPTIONS ) + m_mainMenu=new ("Main Menu GUI") CGUIControlFrame(); + m_mainMenu->init(NULL); + m_mainMenu->setObjectXYWH(106,140,300,40); + m_mainMenu->clearFlags(CGUIObject::FLAG_DRAWBORDER); +PAUL_DBGMSG("change=%d",mem-(MainRam.TotalRam-MainRam.RamUsed)); + +/* + fr=new ("frame") CGUIGroupFrame(); + fr->init(m_mainMenu); + fr->setObjectXYWH(50,0,200,20); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(0,0,200,20); + tb->setText(STR__FRONTEND__START_GAME); + tg=new ("togglebutton") CGUIToggleButton(); + tg->init(fr); + tg->setButtonTarget(&m_startGameFlag); + + fr=new ("frame") CGUIGroupFrame(); + fr->init(m_mainMenu); + fr->setObjectXYWH(50,20,200,20); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(0,0,200,20); + tb->setText(STR__FRONTEND__OPTIONS); + tg=new ("togglebutton") CGUIToggleButton(); + tg->init(fr); + tg->setButtonTarget(&m_gotoOptionsFlag); + + m_mainMenu->select(); +*/ + + m_startGameFlag=false; + m_gotoOptionsFlag=false; + CFader::setFadingIn(); } @@ -123,9 +178,10 @@ void CFrontEndMainTitles::init() ---------------------------------------------------------------------- */ void CFrontEndMainTitles::shutdown() { - m_bigFont->dump(); delete m_bigFont; + m_mainMenu->shutdown(); delete m_mainMenu; m_smallFont->dump(); delete m_smallFont; m_sprites->dump(); delete m_sprites; +PAUL_DBGMSG("change=%d",mem-(MainRam.TotalRam-MainRam.RamUsed)); } @@ -153,7 +209,7 @@ void CFrontEndMainTitles::render() // Game logo/title fh=m_sprites->getFrameHeader(FRM__SBLOGO); - m_sprites->printFT4(fh,256-(fh->W/2),LOGO_CENTRE_Y-(fh->H/2),0,0,20); + m_sprites->printFT4(fh,256-(fh->W/2),LOGO_CENTRE_Y-(fh->H/2),0,0,220); m_smallFont->setColour(GAME_TITLE_TEXT_R,GAME_TITLE_TEXT_G,GAME_TITLE_TEXT_B); m_smallFont->print(256,GAME_TITLE_TEXT_CENTRE_Y,STR__FRONTEND__GAME_TITLE); m_smallFont->setColour(0,0,0); @@ -161,7 +217,7 @@ void CFrontEndMainTitles::render() // The island fh=m_sprites->getFrameHeader(FRM__ISLAND); - m_sprites->printFT4(fh,ISLAND_LEFT_X,ISLAND_BOTTOM_Y-(fh->H),0,0,11); + m_sprites->printFT4(fh,ISLAND_LEFT_X,ISLAND_BOTTOM_Y-(fh->H),0,0,221); // Sky fh=m_sprites->getFrameHeader(FRM_SKY); @@ -181,7 +237,12 @@ void CFrontEndMainTitles::render() case MODE__PRESS_START: renderPressStart(); break; + case MODE__SELECT_OPTION: + m_mainMenu->render(); + break; + + default: break; } } @@ -203,10 +264,24 @@ void CFrontEndMainTitles::think(int _frames) if(!CFader::isFading()&&PadGetDown(0)&PAD_START) { m_mode=MODE__SELECT_OPTION; -CFader::setFadingOut(); } break; + case MODE__SELECT_OPTION: + m_mainMenu->think(_frames); + if(m_startGameFlag) + { +// CFader::setFadingOut(); + m_mode=MODE__START_GAME; + } + else if(m_gotoOptionsFlag) + { + CFader::setFadingOut(); + m_mode=MODE__GOTO_OPTIONS; + } + break; + + default: break; } } @@ -218,7 +293,50 @@ CFader::setFadingOut(); Params: Returns: ---------------------------------------------------------------------- */ -POLY_FT4 *CFrontEndMainTitles::prepareSeaPortionFT4(sFrameHdr *_fh,int _x,int _y,int _w,int _h,int _rgb) +int CFrontEndMainTitles::isReadyToExit() +{ + return !CFader::isFading()&&(m_mode==MODE__START_GAME||m_mode==MODE__GOTO_OPTIONS); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +CFrontEndScene::FrontEndMode CFrontEndMainTitles::getNextMode() +{ + CFrontEndScene::FrontEndMode ret; + + ret=CFrontEndScene::MODE__NONE; + switch(m_mode) + { + case MODE__PRESS_START: + case MODE__SELECT_OPTION: + ASSERT(0); + break; + + case MODE__START_GAME: + ret=CFrontEndScene::MODE__CHOOSE_SLOT; + break; + + case MODE__GOTO_OPTIONS: + ret=CFrontEndScene::MODE__GAME_OPTIONS; + break; + } + + return ret; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +POLY_FT4 *CFrontEndMainTitles::prepareSeaPortionFT4(sFrameHdr *_fh,int _x,int _y,int _w,int _h,int _rgb) { int u,v,w,h; POLY_FT4 *ft4; @@ -336,7 +454,7 @@ void CFrontEndMainTitles::renderPressStart() { if(!CFader::isFading()) { - m_bigFont->print(256,PRESS_START_TEXT_Y,STR__FRONTEND__PRESS_START); + m_smallFont->print(256,PRESS_START_TEXT_Y,STR__FRONTEND__PRESS_START); } } diff --git a/source/frontend/maintitl.h b/source/frontend/maintitl.h index 01720da14..b884d6753 100644 --- a/source/frontend/maintitl.h +++ b/source/frontend/maintitl.h @@ -12,6 +12,7 @@ ===========================================================================*/ #ifndef __FRONTEND_MAINTITL_H__ +#define __FRONTEND_MAINTITL_H__ /*---------------------------------------------------------------------- Includes @@ -21,6 +22,10 @@ #include "gfx\prim.h" #endif +#ifndef __FRONTEND_FRONTENTD_H__ +#include "frontend\frontend.h" +#endif + /* Std Lib ------- */ @@ -33,7 +38,7 @@ Structure defintions -------------------- */ -class CFrontEndMainTitles +class CFrontEndMainTitles : public CFrontEndMode { public: void init(); @@ -41,6 +46,9 @@ public: void render(); void think(int _frames); + int isReadyToExit(); + CFrontEndScene::FrontEndMode getNextMode(); + private: enum @@ -67,6 +75,8 @@ private: { MODE__PRESS_START, MODE__SELECT_OPTION, + MODE__START_GAME, + MODE__GOTO_OPTIONS, }; POLY_FT4 *prepareSeaPortionFT4(struct sFrameHdr *_fh,int _x,int _y,int _w,int _h,int _rgb); @@ -76,9 +86,14 @@ private: class SpriteBank *m_sprites; class FontBank *m_smallFont; - class FontBank *m_bigFont; + + class CGUIControlFrame *m_mainMenu; int m_mode; + + int m_startGameFlag; + int m_gotoOptionsFlag; + }; diff --git a/source/mem/memory.cpp b/source/mem/memory.cpp index 459af6b12..a84057725 100644 --- a/source/mem/memory.cpp +++ b/source/mem/memory.cpp @@ -252,8 +252,14 @@ void dumpDebugMem() AddPrimToList( F4, 1 ); mem = &memDump[ s_currentMemPart ]; - if (mem->addr) len = *(((u32 *)mem->addr) - 1); - else len = 0; + if (mem->addr) +#ifdef USE_MEM_GUARDS + len = *(((u32 *)mem->addr) - 3); +#else + len = *(((u32 *)mem->addr) - 1); +#endif + else + len = 0; sprintf( Text, "%d\n", s_currentMemPart ); if (mem->addr) @@ -273,7 +279,7 @@ void dumpDebugMem() sprintf( Text, "%sAddr - NULL\nLen - 0\nName - Undefined\nFile - Undefined, Line - 0", Text ); } - s_debugFont.print( s_dumpTextX, s_dumpTextY, (u8*)Text ); + s_debugFont.print( s_dumpTextX, s_dumpTextY, Text ); } } @@ -296,7 +302,7 @@ void addDebugMem( void * addr, const char * name, const char * file, int line ) scene = GameState::getCurrentScene(); if (scene) { - sname = scene->GetSceneName(); + sname = scene->getSceneName(); id = -1; for (int i=0;iinit(); s_bg3->setSpeed(0,-2); s_bg3->setOt(1002); +*/ } @@ -264,10 +266,12 @@ PAUL_DBGMSG("change=%d",mem-(MainRam.TotalRam-MainRam.RamUsed)); ---------------------------------------------------------------------- */ void CPaulScene::shutdown() { +/* s_bg3->shutdown(); s_bg2->shutdown(); s_bg1->shutdown(); s_fontBank.dump(); +*/ } diff --git a/source/system/main.cpp b/source/system/main.cpp index 5952ef34b..ff9491636 100644 --- a/source/system/main.cpp +++ b/source/system/main.cpp @@ -107,6 +107,11 @@ void InitSystem() // reordered to reduce black screen (hope all is well CBubicleFactory::init(); +#if defined(__DEBUG_MEM__) + DebugMemFontInit(); +#endif + + #ifdef __USER_paul__ s_paulScene.init(); #endif @@ -116,7 +121,10 @@ s_paulScene.init(); /*****************************************************************************/ /*****************************************************************************/ static int s_time = 0; +#if defined(__DEBUG_MEM__) void dumpDebugMem(); +void DebugMemFontInit(); +#endif void MainLoop() {