diff --git a/makefile.gaz b/makefile.gaz index 71dd635ac..415adf06d 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -51,7 +51,8 @@ CD_FILESYS_LIB := CMXBoot fileio_src := fileio \ $($(FILE_SYSTEM)_FILESYS_SRC) -frontend_src := frontend \ +frontend_src := demomode \ + frontend \ scrollbg \ maintitl \ options diff --git a/source/frontend/demomode.cpp b/source/frontend/demomode.cpp new file mode 100644 index 000000000..6e5e8c515 --- /dev/null +++ b/source/frontend/demomode.cpp @@ -0,0 +1,193 @@ +/*========================================================================= + + demomode.cpp + + Author: PKG + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2000 Climax Development Ltd + +===========================================================================*/ + + +/*---------------------------------------------------------------------- + Includes + -------- */ + +#include "frontend\demomode.h" + +#ifndef __GFX_SPRBANK_H__ +#include "gfx\sprbank.h" +#endif + +#ifndef __GFX_FONT_H__ +#include "gfx\font.h" +#endif + +#ifndef __LOCALE_TEXTDBASE_H__ +#include "locale\textdbase.h" +#endif + +#ifndef __PAD_PADS_H__ +#include "pad\pads.h" +#endif + +#ifndef __GFX_FADER_H__ +#include "gfx\fader.h" +#endif + +#ifndef __UTILS_HEADER__ +#include "utils\utils.h" +#endif + + +/* Std Lib + ------- */ + +/* Data + ---- */ + +#ifndef __SPR_FRONTEND_H__ +#include +#endif + + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::init() +{ + m_sprites=new ("Demomode Sprites") SpriteBank(); + m_sprites->load(FRONTEND_FRONTEND_SPR); + + m_smallFont=new ("Demomode SmallFont") FontBank(); + m_smallFont->initialise(&standardFont); + m_smallFont->setJustification(FontBank::JUST_CENTRE); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::shutdown() +{ + m_smallFont->dump(); delete m_smallFont; + m_sprites->dump(); delete m_sprites; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::select() +{ + // LOAD UP DEMO AND DEMO LEVEL + m_shuttingDown=false; + CFader::setFadingIn(); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::unselect() +{ + // DUMP DEMO AND LEVEL +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::render() +{ + sFrameHdr *fh; + POLY_FT4 *ft4; + + // 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,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); + m_smallFont->print(256+1,GAME_TITLE_TEXT_CENTRE_Y+1,STR__FRONTEND__GAME_TITLE); + + if(!CFader::isFading()) + { + m_smallFont->setColour(PRESS_START_TEXT_R,PRESS_START_TEXT_G,PRESS_START_TEXT_B); + m_smallFont->print(256,PRESS_START_TEXT_Y,STR__FRONTEND__PRESS_START); + } + + + m_smallFont->setColour(getRndRange(255),getRndRange(255),getRndRange(255)); + m_smallFont->print(getRndRange(512),getRndRange(256),">DEMO MODE<"); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFrontEndDemoMode::think(int _frames) +{ + if(PadGetDown(0)&PAD_START) // OR DEMO ENDED + { + m_shuttingDown=true; + CFader::setFadingOut(); + } +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int CFrontEndDemoMode::isReadyToExit() +{ + return !CFader::isFading()&&m_shuttingDown; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +CFrontEndScene::FrontEndMode CFrontEndDemoMode::getNextMode() +{ + return CFrontEndScene::MODE__MAIN_TITLES; +} + +/*=========================================================================== + end */ \ No newline at end of file diff --git a/source/frontend/demomode.h b/source/frontend/demomode.h new file mode 100644 index 000000000..416f06de0 --- /dev/null +++ b/source/frontend/demomode.h @@ -0,0 +1,90 @@ +/*========================================================================= + + demomode.h + + Author: PKG + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2000 Climax Development Ltd + +===========================================================================*/ + +#ifndef __FRONTEND_DEMOMODE_H__ +#define __FRONTEND_DEMOMODE_H__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +#ifndef __PRIM_HEADER__ +#include "gfx\prim.h" +#endif + +#ifndef __FRONTEND_FRONTEND_H__ +#include "frontend\frontend.h" +#endif + + +/* Std Lib + ------- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +class CFrontEndDemoMode : public CFrontEndMode +{ +public: + void init(); + void shutdown(); + void select(); + void unselect(); + void render(); + void think(int _frames); + + int isReadyToExit(); + CFrontEndScene::FrontEndMode getNextMode(); + + +private: + enum + { + LOGO_CENTRE_Y=74, + GAME_TITLE_TEXT_CENTRE_Y=100, + GAME_TITLE_TEXT_R=128, + GAME_TITLE_TEXT_G=128, + GAME_TITLE_TEXT_B=128, + + PRESS_START_TEXT_Y=180, + PRESS_START_TEXT_R=150, + PRESS_START_TEXT_G=100, + PRESS_START_TEXT_B=100, + }; + + class FontBank *m_smallFont; + class SpriteBank *m_sprites; + + int m_shuttingDown; +}; + + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/*---------------------------------------------------------------------- + Functions + --------- */ + +/*---------------------------------------------------------------------- */ + +#endif /* __FRONTEND_DEMOMODE_H__ */ + +/*=========================================================================== + end */ diff --git a/source/frontend/frontend.cpp b/source/frontend/frontend.cpp index 748a17de2..08778ee1b 100644 --- a/source/frontend/frontend.cpp +++ b/source/frontend/frontend.cpp @@ -30,6 +30,10 @@ #include "frontend\options.h" #endif +#ifndef __FRONTEND_DEMOMODE_H__ +#include "frontend\demomode.h" +#endif + /* Std Lib ------- */ @@ -55,13 +59,14 @@ static CFrontEndMainTitles s_frontEndModeMainTitles; static CFrontEndOptions s_frontEndModeOptions; +static CFrontEndDemoMode s_frontEndDemoMode; CFrontEndMode *CFrontEndScene::s_modeCodes[]= { &s_frontEndModeMainTitles, // MODE__MAIN_TITLES &s_frontEndModeOptions, // MODE__GAME_OPTIONS NULL, // MODE__CHOOSE_SLOT - NULL, // MODE__DEMO + &s_frontEndDemoMode, // MODE__DEMO NULL, // MODE__NONE }; diff --git a/source/frontend/frontend.h b/source/frontend/frontend.h index bb6b905c5..31838cb53 100644 --- a/source/frontend/frontend.h +++ b/source/frontend/frontend.h @@ -11,8 +11,8 @@ ===========================================================================*/ -#ifndef __FRONTEND_FRONTENTD_H__ -#define __FRONTEND_FRONTENTD_H__ +#ifndef __FRONTEND_FRONTEND_H__ +#define __FRONTEND_FRONTEND_H__ /*---------------------------------------------------------------------- Includes @@ -29,14 +29,6 @@ /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ -typedef enum -{ - EXITCODE__NONE, - - EXITCODE__START_GAME, - EXITCODE__GOTO_OPTIONS, -} MainTitleExitCode; - /*---------------------------------------------------------------------- Structure defintions @@ -102,7 +94,7 @@ extern CFrontEndScene FrontEndScene; /*---------------------------------------------------------------------- */ -#endif /* __FRONTEND_FRONTENTD_H__ */ +#endif /* __FRONTEND_FRONTEND_H__ */ /*=========================================================================== end */ diff --git a/source/frontend/maintitl.cpp b/source/frontend/maintitl.cpp index 478fd0ae1..032958cdf 100644 --- a/source/frontend/maintitl.cpp +++ b/source/frontend/maintitl.cpp @@ -156,6 +156,8 @@ void CFrontEndMainTitles::select() m_startGameFlag=false; m_gotoOptionsFlag=false; + m_demoTimeout=0; + CFader::setFadingIn(); } @@ -279,6 +281,23 @@ rsr=(rsr+(_frames*rspeed))&4095; default: break; } + + if(m_mode==MODE__PRESS_START||m_mode==MODE__SELECT_OPTION) + { + if(!PadGetHeld(0)) + { + m_demoTimeout+=_frames; + if(m_demoTimeout>DEMO_TIMEOUT_IN_SECONDS*GameState::getOneSecondInFrames()) + { + CFader::setFadingOut(); + m_mode=MODE__GOTO_DEMO; + } + } + else + { + m_demoTimeout=0; + } + } } @@ -290,7 +309,7 @@ rsr=(rsr+(_frames*rspeed))&4095; ---------------------------------------------------------------------- */ int CFrontEndMainTitles::isReadyToExit() { - return !CFader::isFading()&&(m_mode==MODE__START_GAME||m_mode==MODE__GOTO_OPTIONS); + return !CFader::isFading()&&(m_mode==MODE__START_GAME||m_mode==MODE__GOTO_OPTIONS||m_mode==MODE__GOTO_DEMO); } @@ -319,6 +338,10 @@ CFrontEndScene::FrontEndMode CFrontEndMainTitles::getNextMode() case MODE__GOTO_OPTIONS: ret=CFrontEndScene::MODE__GAME_OPTIONS; break; + + case MODE__GOTO_DEMO: + ret=CFrontEndScene::MODE__DEMO; + break; } return ret; diff --git a/source/frontend/maintitl.h b/source/frontend/maintitl.h index 97d0c3cef..193c21ed7 100644 --- a/source/frontend/maintitl.h +++ b/source/frontend/maintitl.h @@ -22,7 +22,7 @@ #include "gfx\prim.h" #endif -#ifndef __FRONTEND_FRONTENTD_H__ +#ifndef __FRONTEND_FRONTEND_H__ #include "frontend\frontend.h" #endif @@ -78,9 +78,16 @@ private: MODE__PRESS_START, MODE__SELECT_OPTION, MODE__START_GAME, + MODE__GOTO_OPTIONS, + MODE__GOTO_DEMO, }; + enum + { + DEMO_TIMEOUT_IN_SECONDS=30, + }; + POLY_FT4 *prepareSeaPortionFT4(struct sFrameHdr *_fh,int _x,int _y,int _w,int _h,int _rgb); void renderSeaSection(struct sFrameHdr *fh,int _x,int _y,int _w,int _h); @@ -96,6 +103,8 @@ private: int m_startGameFlag; int m_gotoOptionsFlag; + int m_demoTimeout; + }; diff --git a/source/frontend/options.h b/source/frontend/options.h index 458bd4b66..05e200080 100644 --- a/source/frontend/options.h +++ b/source/frontend/options.h @@ -18,7 +18,7 @@ Includes -------- */ -#ifndef __FRONTEND_FRONTENTD_H__ +#ifndef __FRONTEND_FRONTEND_H__ #include "frontend\frontend.h" #endif