diff --git a/source/fma/fma.cpp b/source/fma/fma.cpp index 7815ce2e5..a3a64f6f6 100644 --- a/source/fma/fma.cpp +++ b/source/fma/fma.cpp @@ -46,6 +46,10 @@ FX #include "gfx\actor.h" #endif +#ifndef __GFX_FADER_H__ +#include "gfx\fader.h" +#endif + /* Std Lib ------- */ @@ -160,112 +164,11 @@ typedef struct CFmaScene FmaScene; -/*****************************************************************************/ -// Ch1 FMA -int s_testScript[]= -{ - SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_00_DAT, - SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_01_DAT, - SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_02_DAT, - SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_03_DAT, - -// Scene 1 - Shade Shoals - SC_SNAP_CAMERA_TO, 4*16,16*16, - SC_WAIT_ON_TIMER, 30, - -// Scene 2 - SB arrives outside Shady Shoals - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, - SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, - - SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,16*16,30*16,96, - SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_00_DAT, - -// Scene 3 - SB Fixing TV - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE, - SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,224*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_MM,1, - SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, - - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_IDLE, - SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,220*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_BB,1, - SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, - - SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,208*16,30*16, - - SC_SNAP_CAMERA_TO, 197*16,16*16, - - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_01_DAT, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_TIMER, 10, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - - -// Scene 4 - Goes to BB, and collects his prize - SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,216*16,30*16,16, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE, - SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_02_DAT, - SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,240*16,30*16,154, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, - -// Scene 5 - SB leaves Shady Shoals - SC_SNAP_CAMERA_TO, 4*16,16*16, - SC_WAIT_ON_TIMER, 30, - - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK, - SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,4*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, - - SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16,144, - SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, - -// Scene 6 - Back in shady - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE, - SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,207*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, - SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_IDLE, - SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,212*16,30*16, - SC_SET_ACTOR_FACING, FMA_ACTOR_BB,1, - SC_SNAP_CAMERA_TO, 197*16,16*16, - SC_WAIT_ON_TIMER, 60, - -// Scene 7 - TV goes pop - -// Scene 8 - Outside, MM & BB SCREEEEEEEEEEEEEEEAM - SC_SNAP_CAMERA_TO, 4*16,16*16, - SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_03_DAT, - - SC_STOP -}; - /*****************************************************************************/ /*** Intro FMA ***************************************************************/ /*****************************************************************************/ -int s_FMAIntroScript[]= +static const int s_FMAIntroScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_01_DAT, @@ -350,7 +253,7 @@ int s_FMAIntroScript[]= /*****************************************************************************/ /*** C1 End FMA **************************************************************/ /*****************************************************************************/ -int s_FMAC1EndScript[]= +static const int s_FMAC1EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_01_DAT, @@ -423,7 +326,7 @@ int s_FMAC1EndScript[]= /*****************************************************************************/ /*** C2 End FMA **************************************************************/ /*****************************************************************************/ -int s_FMAC2EndScript[]= +static const int s_FMAC2EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH3_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH3_01_DAT, @@ -484,7 +387,7 @@ int s_FMAC2EndScript[]= /*****************************************************************************/ /*** C3 End FMA **************************************************************/ /*****************************************************************************/ -int s_FMAC3EndScript[]= +static const int s_FMAC3EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH4_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH4_01_DAT, @@ -556,7 +459,7 @@ int s_FMAC3EndScript[]= /*****************************************************************************/ /*** C4 End FMA **************************************************************/ /*****************************************************************************/ -int s_FMAC4EndScript[]= +static const int s_FMAC4EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH5_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH5_01_DAT, @@ -632,7 +535,7 @@ int s_FMAC4EndScript[]= /*** C5 End FMA **************************************************************/ /*****************************************************************************/ -int s_FMAC5EndScript[]= +static const int s_FMAC5EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_01_DAT, @@ -731,37 +634,9 @@ int s_FMAC5EndScript[]= SC_STOP }; -/*****************************************************************************/ -// A test script.. -/* -int s_testScriptold[]= -{ - SC_REGISTER_CONVERSATION, SCRIPTS_CH1L1_01_DAT, - SC_SNAP_CAMERA_TO, 0,0, - SC_SET_ACTOR_VISIBILITY, ACTOR_SPONGEBOB,true, - SC_SET_ACTOR_POSITION, ACTOR_SPONGEBOB,100,100, - - SC_MOVE_CAMERA_TO, 100,100,150+(60*2), - SC_WALK_ACTOR_TO_POSITION, ACTOR_SPONGEBOB,200,100,10, - SC_WAIT_ON_CAMERA_STOP, - - SC_WAIT_ON_CONVERSATION, SCRIPTS_CH1L1_01_DAT, - - SC_WAIT_ON_TIMER, 60, - - SC_SET_ACTOR_ANIM_STATE, ACTOR_SPONGEBOB,ANIM_WALK, - SC_SET_ACTOR_FACING, ACTOR_SPONGEBOB,1, - SC_WALK_ACTOR_TO_POSITION, ACTOR_SPONGEBOB,250,200,5, - SC_WAIT_ON_ACTOR_STOP, ACTOR_SPONGEBOB, - - SC_WAIT_ON_TIMER, 60*5, - - SC_STOP -}; -*/ // Actor graphics data -const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= +static const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= { { ACTORS_SPONGEBOB_SBK, { ANIM_SPONGEBOB_IDLEBREATH, ANIM_SPONGEBOB_RUN } }, // ACTOR_SPONGEBOB { ACTORS_MERMAIDMAN_SBK, { ANIM_MERMAIDMAN_IDLEBREATHE, ANIM_MERMAIDMAN_IDLEBREATHE } }, // ACTOR_MM @@ -773,6 +648,20 @@ const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= ACTOR_DATA m_actorData[FMA_NUM_ACTORS]; +static const int *s_fmaScripts[CFmaScene::NUM_FMA_SCRIPTS]= +{ + s_FMAIntroScript, + s_FMAC1EndScript, + s_FMAC2EndScript, + s_FMAC3EndScript, + s_FMAC4EndScript, + s_FMAC5EndScript, +}; + +static CFmaScene::FMA_SCRIPT_NUMBER s_chosenScript=CFmaScene::FMA_SCRIPT__INTRO; + + + #include "pad\pads.h" #include "gfx\font.h" @@ -820,7 +709,9 @@ void CFmaScene::init() m_frameCount=0; m_scriptRunning=true; - m_pc=s_testScript; + m_pc=s_fmaScripts[s_chosenScript]; + + CFader::setFadingIn(); } @@ -916,7 +807,7 @@ void CFmaScene::think(int _frames) m_cameraPos.vx+=16; } #endif - if(m_scriptRunning==false&&PadGetDown(0)&(PAD_CROSS|PAD_START)) + if(m_scriptRunning==false&&!m_readyToShutdown) { startShutdown(); } @@ -1021,7 +912,19 @@ void CFmaScene::think(int _frames) ---------------------------------------------------------------------- */ int CFmaScene::readyToShutdown() { - return m_readyToShutdown; + return m_readyToShutdown&&!CFader::isFading(); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CFmaScene::selectFma(FMA_SCRIPT_NUMBER _fma) +{ + s_chosenScript=_fma; } @@ -1033,6 +936,7 @@ int CFmaScene::readyToShutdown() ---------------------------------------------------------------------- */ void CFmaScene::startShutdown() { + CFader::setFadingOut(); GameState::setNextScene(&MapScene); m_readyToShutdown=true; } diff --git a/source/fma/fma.h b/source/fma/fma.h index 49890a945..3ee0a30ca 100644 --- a/source/fma/fma.h +++ b/source/fma/fma.h @@ -38,9 +38,22 @@ Structure defintions -------------------- */ -class CFmaScene: public CScene +class CFmaScene : public CScene { public: + typedef enum + { + FMA_SCRIPT__INTRO, + FMA_SCRIPT__CH1FINISHED, + FMA_SCRIPT__CH2FINISHED, + FMA_SCRIPT__CH3FINISHED, + FMA_SCRIPT__CH4FINISHED, + FMA_SCRIPT__CH5FINISHED, + NUM_FMA_SCRIPTS, + FMA_SCRIPT__NONE, + }FMA_SCRIPT_NUMBER; + + void init(); void shutdown(); void render(); @@ -48,6 +61,8 @@ public: int readyToShutdown(); char *getSceneName() {return"FMA";} + static void selectFma(FMA_SCRIPT_NUMBER _fma); + private: void startShutdown(); @@ -66,7 +81,7 @@ private: int m_endCameraFrame; DVECTOR m_endCameraPos; - int *m_pc; + int const *m_pc; int m_scriptRunning; int m_stillProcessingCommand; int m_doOtherProcessing; diff --git a/source/frontend/frontend.cpp b/source/frontend/frontend.cpp index 0bbf87776..992a51451 100644 --- a/source/frontend/frontend.cpp +++ b/source/frontend/frontend.cpp @@ -70,6 +70,10 @@ #include "game\gameslot.h" #endif +#ifndef __FMA_FMA_H__ +#include "fma\fma.h" +#endif + /* Std Lib ------- */ @@ -278,10 +282,23 @@ void CFrontEndScene::setMode(FrontEndMode _newMode) } // Open new mode - if(_newMode==MODE__EXIT_TO_MAP) + if(_newMode==MODE__EXIT_TO_GAME) { + CGameSlotManager::GameSlot *gameSlot; + gameSlot=CGameSlotManager::getSlotData(); + + if(gameSlot->m_hasSeenOpeningFMA) + { + GameState::setNextScene(&MapScene); + } + else + { + CFmaScene::selectFma(CFmaScene::FMA_SCRIPT__INTRO); + GameState::setNextScene(&FmaScene); + gameSlot->m_hasSeenOpeningFMA=true; + } + m_exitToGame=true; - GameState::setNextScene(&MapScene); } else diff --git a/source/frontend/frontend.h b/source/frontend/frontend.h index d6d8165bf..83bd520b3 100644 --- a/source/frontend/frontend.h +++ b/source/frontend/frontend.h @@ -55,7 +55,7 @@ public: MODE__NONE, - MODE__EXIT_TO_MAP, + MODE__EXIT_TO_GAME, } FrontEndMode; enum diff --git a/source/frontend/start.cpp b/source/frontend/start.cpp index 4278d6a97..ec2f9301c 100644 --- a/source/frontend/start.cpp +++ b/source/frontend/start.cpp @@ -555,7 +555,7 @@ int CFrontEndStart::isReadyToExit() ---------------------------------------------------------------------- */ CFrontEndScene::FrontEndMode CFrontEndStart::getNextMode() { - return m_state==STATE_EXITING_TO_GAME?CFrontEndScene::MODE__EXIT_TO_MAP:CFrontEndScene::MODE__MAIN_TITLES; + return m_state==STATE_EXITING_TO_GAME?CFrontEndScene::MODE__EXIT_TO_GAME:CFrontEndScene::MODE__MAIN_TITLES; } /*=========================================================================== diff --git a/source/game/game.cpp b/source/game/game.cpp index 6882007af..14ccff7bf 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -429,8 +429,11 @@ void CGameScene::think_playing(int _frames) } // Level finished - go to map or fma - if(level==4) + CFmaScene::FMA_SCRIPT_NUMBER fma; + fma=Level.getFMAToFollow(); + if(fma!=CFmaScene::FMA_SCRIPT__NONE) { + FmaScene.selectFma(fma); GameState::setNextScene(&FmaScene); } else if(level==5) diff --git a/source/game/gameslot.cpp b/source/game/gameslot.cpp index c61d062cb..b626cb209 100644 --- a/source/game/gameslot.cpp +++ b/source/game/gameslot.cpp @@ -156,6 +156,8 @@ void CGameSlotManager::eraseGameSlot(unsigned int _slot) slot->m_isInUse=false; slot->m_lives=INITIAL_LIVES; slot->m_continues=INITIAL_CONTINUES; + slot->m_hasSeenOpeningFMA=false; + // Clear spatula and kelp token flags for(i=0;i