diff --git a/source/backend/complete.cpp b/source/backend/complete.cpp index 76d4a3476..e3019c145 100644 --- a/source/backend/complete.cpp +++ b/source/backend/complete.cpp @@ -78,7 +78,7 @@ void CGameCompletedScene::init() m_font->setOt(5); m_readyToExit=false; - CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(); } @@ -127,7 +127,7 @@ void CGameCompletedScene::think(int _frames) if(PadGetDown(0)&(PAD_CROSS|PAD_START)) { m_readyToExit=true; - CFader::setFadingOut(CFader::BLACK_FADE); + CFader::setFadingOut(); GameState::setNextScene(&FrontEndScene); } } diff --git a/source/backend/gameover.cpp b/source/backend/gameover.cpp index 0798d9f60..740508624 100644 --- a/source/backend/gameover.cpp +++ b/source/backend/gameover.cpp @@ -103,7 +103,7 @@ void CGameOverScene::init() m_font->setOt(5); m_readyToExit=false; - CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(); initContinue(); initGameOver(); @@ -244,7 +244,7 @@ void CGameOverScene::thinkContinue(int _frames) else if(pad&PAD_START) { m_readyToExit=true; - CFader::setFadingOut(CFader::BLACK_FADE); + CFader::setFadingOut(); GameState::setNextScene(&GameScene); m_state=STATE__EXITING_TO_GAME; } @@ -336,7 +336,7 @@ void CGameOverScene::thinkGameOver(int _frames) PadGetDown(0)&(PAD_START|PAD_CROSS)) { m_readyToExit=true; - CFader::setFadingOut(CFader::BLACK_FADE); + CFader::setFadingOut(); GameState::setNextScene(&FrontEndScene); m_state=STATE__EXITING_TO_FRONT_END; } diff --git a/source/backend/party.cpp b/source/backend/party.cpp index a675ff862..0c8d58031 100644 --- a/source/backend/party.cpp +++ b/source/backend/party.cpp @@ -127,7 +127,7 @@ void CPartyScene::init() m_sprites->load(PARTY_PARTY_SPR); m_readyToExit=false; - CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(); CActorPool::Reset(); m_actorSpongebob=CActorPool::GetActor(ACTORS_SPONGEBOB_SBK); diff --git a/source/game/game.cpp b/source/game/game.cpp index 193b3cb05..c4300477d 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -277,12 +277,10 @@ void CGameScene::render() /*****************************************************************************/ void CGameScene::think(int _frames) { -//#ifdef __USER_paul__ -// if(!CConversation::isActive()&&PadGetDown(0)&PAD_START) -// { -// CConversation::trigger(SCRIPTS_SPEECHTEST_DAT); -// } -//#endif + if(s_readyToExit) + { + return; + } // Auto-timer stuff if(m_levelHasTimer) @@ -294,12 +292,7 @@ void CGameScene::think(int _frames) } } - if(s_readyToExit) - { - // Temporarily.. exiting game scene always goes back to the front end (pkg) - GameState::setNextScene(&FrontEndScene); - } - else if(s_levelFinished) + if(s_levelFinished) { // Do the gameslot stuff.. CGameSlotManager::GameSlot *gameSlot; @@ -354,6 +347,8 @@ void CGameScene::think(int _frames) GameState::setNextScene(&MapScene); } s_readyToExit=true; + s_levelFinished=false; + CFader::setFadingOut(); } #ifdef __VERSION_DEBUG__ else if(s_skipToNextLevel) @@ -375,6 +370,7 @@ void CGameScene::think(int _frames) { s_readyToExit=true; GameState::setNextScene(&FrontEndScene); + CFader::setFadingOut(); } s_restartLevel=false; } @@ -418,7 +414,7 @@ void CGameScene::think(int _frames) /*****************************************************************************/ int CGameScene::readyToShutdown() { - return s_readyToExit; + return s_readyToExit&&!CFader::isFading(); } /*****************************************************************************/ @@ -457,6 +453,14 @@ void CGameScene::sendEvent( GAME_EVENT evt, CThing *sourceThing ) } +/*****************************************************************************/ +void CGameScene::setReadyToExit() +{ + s_readyToExit=true; + GameState::setNextScene(&FrontEndScene); + CFader::setFadingOut(); +} + /*****************************************************************************/ void CGameScene::initLevel() diff --git a/source/game/game.h b/source/game/game.h index 8095e3c01..94c5a88f5 100644 --- a/source/game/game.h +++ b/source/game/game.h @@ -49,7 +49,7 @@ virtual int canPause(); void respawnLevel(); void sendEvent( GAME_EVENT evt, class CThing *sourceThing ); -static void setReadyToExit() {s_readyToExit=true;} +static void setReadyToExit(); static void levelFinished() {s_levelFinished=true;} static void restartlevel() {s_restartLevel=true;} CLevel &GetLevel() {return(Level);} diff --git a/source/gfx/fader.cpp b/source/gfx/fader.cpp index 6973de333..fed051e33 100644 --- a/source/gfx/fader.cpp +++ b/source/gfx/fader.cpp @@ -53,9 +53,11 @@ Vars ---- */ -int CFader::s_fadeValue=0; CFader::FADE_MODE CFader::s_fadeMode=FADED_IN; CFader::FADE_STYLE CFader::s_fadeStyle; +int CFader::s_fadeValue=0; +int CFader::s_waitFrames=0; + /*---------------------------------------------------------------------- Function: @@ -63,84 +65,19 @@ CFader::FADE_STYLE CFader::s_fadeStyle; Params: Returns: ---------------------------------------------------------------------- */ - -BubicleEmitterData s_fadeBubicleSpawner= -{ - 0,0,512,40, // m_x,m_y,m_w,m_h - 0,0, // m_birthRate,m_birthAmount - 0, // m_life - false, // m_applyMapOffsets - - // m_bubicleBase - { - 10, // m_life - 0,0,0, // m_vx,m_vdx,m_vxmax - -200,0,0, // m_vy,m_vdy,m_vymax - 27,18, // m_w,m_h - 0, // m_dvSizeChange - 0,0, // m_theta,m_vtheta - 0,0,0, // m_wobbleWidth,m_vwobbleWidth,m_vdwobbleWidth - 0, // m_ot - {0,0,0} // m_colour - }, - // m_bubicleRange; - { - 10, // m_life - 0,0,0, // m_vx,m_vdx,m_vxmax - 50,0,0, // m_vy,m_vdy,m_vymax - 4,4, // m_w,m_h - 0, // m_dvSizeChange - 0,100, // m_theta,m_vtheta - 10,0,0, // m_wobbleWidth,m_vwobbleWidth,m_vdwobbleWidth - 0, // m_ot - {30,30,30} // m_colour - } -}; - void CFader::render() { switch(s_fadeMode) { case FADED_IN: + case PAUSE_BEFORE_FADING_IN: + case PAUSE_BEFORE_FADING_OUT: return; case FADING_IN: { switch(s_fadeStyle) { - case BUBBLE_FADE: - { - if(s_fadeValue>0) - { - POLY_F4 *f4; - POLY_G4 *g4; - POLY_FT3 *ft3; - - f4=GetPrimF4(); - setXYWH(f4,0,-FADE_BORDER_SIZE,512,s_fadeValue-(FADE_SMOOTH_BORDER_SIZE/2)+FADE_BORDER_SIZE); - setRGB0(f4,255,255,255); - AddPrimToList(f4,0); - - g4=GetPrimG4(); - setXYWH(g4,0,s_fadeValue-(FADE_SMOOTH_BORDER_SIZE/2),512,FADE_SMOOTH_BORDER_SIZE); - setRGB0(g4,255,255,255); - setRGB1(g4,255,255,255); - setRGB2(g4,0,0,0); - setRGB3(g4,0,0,0); - setShadeTex(g4,0); - setSemiTrans(g4,1); - AddPrimToList(g4,0); - - ft3=GetPrimFT3(); - setShadeTex(ft3,1); - setSemiTrans(ft3,1); - ft3->tpage=(1<<5); - setXY3(ft3,512,512,512,512,512,512); - AddPrimToList(ft3,0); - } - break; - } - case BLACK_FADE: case WHITE_FADE: { @@ -156,8 +93,8 @@ void CFader::render() setPolyFT3(ft3); setShadeTex(ft3,1); setSemiTrans(ft3,1); - ft3->tpage=(s_fadeStyle==BLACK_FADE?2:1<<5); - setXY3(ft3,512,512,512,512,512,512); + ft3->tpage=(s_fadeStyle==BLACK_FADE?2:1)<<5; + setXY3(ft3,0,0,0,512,512,0); AddPrimToList(ft3,0); break; } @@ -166,39 +103,10 @@ void CFader::render() break; case FADING_OUT: + case PAUSE_AFTER_FADING_OUT: { switch(s_fadeStyle) { - case BUBBLE_FADE: - { - POLY_F4 *f4; - POLY_G4 *g4; - POLY_FT3 *ft3; - - f4=GetPrimF4(); - setXYWH(f4,0,s_fadeValue+(FADE_SMOOTH_BORDER_SIZE/2),512,256-s_fadeValue-(FADE_SMOOTH_BORDER_SIZE/2)); - setRGB0(f4,255,255,255); - AddPrimToList(f4,0); - - g4=GetPrimG4(); - setXYWH(g4,0,s_fadeValue-(FADE_SMOOTH_BORDER_SIZE/2),512,FADE_SMOOTH_BORDER_SIZE); - setRGB0(g4,0,0,0); - setRGB1(g4,0,0,0); - setRGB2(g4,255,255,255); - setRGB3(g4,255,255,255); - setShadeTex(g4,0); - setSemiTrans(g4,1); - AddPrimToList(g4,0); - - ft3=GetPrimFT3(); - setShadeTex(ft3,1); - setSemiTrans(ft3,1); - ft3->tpage=(1<<5); - setXY3(ft3,512,512,512,512,512,512); - AddPrimToList(ft3,0); - break; - } - case BLACK_FADE: case WHITE_FADE: { @@ -216,7 +124,7 @@ void CFader::render() setPolyFT3(ft3); setShadeTex(ft3,1); setSemiTrans(ft3,1); - ft3->tpage=(s_fadeStyle==BLACK_FADE?2:1<<5); + ft3->tpage=(s_fadeStyle==BLACK_FADE?2:1)<<5; setXY3(ft3,512,512,512,512,512,512); AddPrimToList(ft3,0); break; @@ -233,9 +141,6 @@ void CFader::render() setXYWH(f4,0,0,512,256); switch(s_fadeStyle) { - case BUBBLE_FADE: - setRGB0(f4,255,255,255); - break; case BLACK_FADE: setRGB0(f4,0,0,0); break; @@ -247,13 +152,6 @@ void CFader::render() return; } } - - if(s_fadeStyle==BUBBLE_FADE) - { - s_fadeBubicleSpawner.m_y=s_fadeValue-20; - for(int i=0;i=0&&s_fadeValue<=255) { CSoundMediator::setVolume(CSoundMediator::VOL_FADE,s_fadeMode==FADING_OUT?s_fadeValue:255-s_fadeValue); } + break; } - break; } + break; - case BLACK_FADE: - case WHITE_FADE: + case PAUSE_BEFORE_FADING_IN: + if(--s_waitFrames==0) { - if(s_fadeValue<0) - { - s_fadeValue=0; - if(s_fadeMode==FADING_OUT) - { - s_fadeMode=FADED_OUT; - CSoundMediator::setVolume(CSoundMediator::VOL_FADE,0); - } - else - { - s_fadeMode=FADED_IN; - CSoundMediator::setVolume(CSoundMediator::VOL_FADE,255); - } - } - else - { - CSoundMediator::setVolume(CSoundMediator::VOL_FADE,s_fadeMode==FADING_OUT?s_fadeValue:255-s_fadeValue); - } - break; + s_fadeMode==FADING_IN; } - } + break; + + case PAUSE_BEFORE_FADING_OUT: + if(--s_waitFrames==0) + { + s_fadeMode==FADING_OUT; + } + break; + + case PAUSE_AFTER_FADING_OUT: + if(--s_waitFrames==0) + { + s_fadeMode==FADED_OUT; + } + break; + + default: + break; } } @@ -333,9 +240,6 @@ void CFader::setFadingOut(FADE_STYLE _style) { switch(_style) { - case BUBBLE_FADE: - s_fadeValue=256+FADE_BORDER_SIZE; - break; case BLACK_FADE: case WHITE_FADE: s_fadeValue=255; @@ -344,6 +248,7 @@ void CFader::setFadingOut(FADE_STYLE _style) s_fadeMode=FADING_OUT; s_fadeStyle=_style; + s_waitFrames=FRAMES_TO_WAIT; } @@ -357,9 +262,6 @@ void CFader::setFadingIn(FADE_STYLE _style) { switch(_style) { - case BUBBLE_FADE: - s_fadeValue=256+FADE_BORDER_SIZE; - break; case BLACK_FADE: case WHITE_FADE: s_fadeValue=255; @@ -367,6 +269,7 @@ void CFader::setFadingIn(FADE_STYLE _style) } s_fadeMode=FADING_IN; s_fadeStyle=_style; + s_waitFrames=FRAMES_TO_WAIT; } diff --git a/source/gfx/fader.h b/source/gfx/fader.h index 9cb4fd6c0..b7600a590 100644 --- a/source/gfx/fader.h +++ b/source/gfx/fader.h @@ -34,7 +34,6 @@ class CFader public: typedef enum { - BUBBLE_FADE, BLACK_FADE, WHITE_FADE, } FADE_STYLE; @@ -42,8 +41,8 @@ public: static void render(); static void think(int _frames); - static void setFadingOut(FADE_STYLE _style=BUBBLE_FADE); - static void setFadingIn(FADE_STYLE _style=BUBBLE_FADE); + static void setFadingOut(FADE_STYLE _style=BLACK_FADE); + static void setFadingIn(FADE_STYLE _style=BLACK_FADE); static int isFading(); @@ -51,26 +50,25 @@ public: private: enum { - // Bubble style - FADE_BORDER_SIZE=80, - FADE_SMOOTH_BORDER_SIZE=60, - BUBBLES_PER_FRAME=15, - - // Both styles - FADE_SPEED=3, + FRAMES_TO_WAIT=5, // Waits before fading in/out and after fading out + FADE_SPEED=10, }; typedef enum { FADED_IN, + PAUSE_BEFORE_FADING_IN, FADING_IN, + PAUSE_BEFORE_FADING_OUT, FADING_OUT, + PAUSE_AFTER_FADING_OUT, FADED_OUT, } FADE_MODE; static FADE_MODE s_fadeMode; static FADE_STYLE s_fadeStyle; static int s_fadeValue; + static int s_waitFrames; }; diff --git a/source/map/map.cpp b/source/map/map.cpp index bee4eecac..6c04b69df 100644 --- a/source/map/map.cpp +++ b/source/map/map.cpp @@ -207,7 +207,7 @@ void CMapScene::init() SetScreenImage((u8*)m_screenImage); m_readyToExit=false; - CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(); } @@ -438,7 +438,7 @@ void CMapScene::think(int _frames) CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__OK); s_globalLevelSelectThing=s_mapLevelData[m_currentChapterSelection][m_currentLevelSelection].m_globalLevelNumber; m_readyToExit=true; -// CFader::setFadingOut(CFader::BLACK_FADE); + CFader::setFadingOut(); GameState::setNextScene(&GameScene); } } diff --git a/source/shop/shop.cpp b/source/shop/shop.cpp index 6e81ce04f..a06095203 100644 --- a/source/shop/shop.cpp +++ b/source/shop/shop.cpp @@ -199,7 +199,7 @@ void CShopScene::init() m_readyToExit=false; - CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(); m_currentlySelectedItem=0; m_flashSin=0;