diff options
author | Filippos Karapetis | 2007-08-27 13:04:35 +0000 |
---|---|---|
committer | Filippos Karapetis | 2007-08-27 13:04:35 +0000 |
commit | b39c4cbdbabac991cfafbcf7a007f7a7493221ba (patch) | |
tree | 58d4ff7404b12f4b6f1dee8869947971ab4f9419 | |
parent | b9be60c0cd2341e6ddba3ac7a3c4dcc7fab2600a (diff) | |
download | scummvm-rg350-b39c4cbdbabac991cfafbcf7a007f7a7493221ba.tar.gz scummvm-rg350-b39c4cbdbabac991cfafbcf7a007f7a7493221ba.tar.bz2 scummvm-rg350-b39c4cbdbabac991cfafbcf7a007f7a7493221ba.zip |
Added some skeleton code for the IHNM credits movie. Also, changed the location of the RF_DISABLE_ACTORS is set from loadScene to endScene
svn-id: r28757
-rw-r--r-- | engines/saga/ihnm_introproc.cpp | 119 | ||||
-rw-r--r-- | engines/saga/scene.cpp | 52 | ||||
-rw-r--r-- | engines/saga/scene.h | 4 | ||||
-rw-r--r-- | engines/saga/sfuncs.cpp | 9 |
4 files changed, 177 insertions, 7 deletions
diff --git a/engines/saga/ihnm_introproc.cpp b/engines/saga/ihnm_introproc.cpp index 5bf9d49391..f4841a34aa 100644 --- a/engines/saga/ihnm_introproc.cpp +++ b/engines/saga/ihnm_introproc.cpp @@ -83,6 +83,17 @@ SceneDescription IHNM_IntroMovie4Desc = { ARRAYSIZE(IHNM_IntroMovie4RL) }; +SceneResourceData IHNM_CreditsMovieRL[] = { + {37, 2, 0, 0, false}, + {38, 14, 0, 0, false} +}; + +SceneDescription IHNM_CredisMovieDesc = { + 0, 0, 0, 0, 0, 0, 0, 0, + IHNM_CreditsMovieRL, + ARRAYSIZE(IHNM_CreditsMovieRL) +}; + // Demo SceneResourceData IHNMDEMO_IntroMovie1RL[] = { {19, 2, 0, 0, false} // this scene doesn't have an animation @@ -111,6 +122,10 @@ LoadSceneParams IHNM_IntroList[] = { {0, kLoadByDescription, &IHNM_IntroMovie3Desc, Scene::SC_IHNMIntroMovieProc3, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, }; +LoadSceneParams IHNM_CreditsList[] = { + {0, kLoadByDescription, &IHNM_CredisMovieDesc, Scene::SC_IHNMCreditsMovieProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, +}; + LoadSceneParams IHNMDEMO_IntroList[] = { {0, kLoadByDescription, &IHNMDEMO_IntroMovie1Desc, Scene::SC_IHNMIntroMovieProc1, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, {0, kLoadByDescription, &IHNMDEMO_IntroMovie2Desc, Scene::SC_IHNMIntroMovieProc3, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, @@ -120,6 +135,21 @@ LoadSceneParams IHNMDEMO_IntroList[] = { #define RID_IHNM_INTRO_CUTAWAYS 39 #define RID_IHNMDEMO_INTRO_CUTAWAYS 25 +int Scene::IHNMCreditsProc() { + _vm->_anim->setCutAwayMode(kPanelVideo); + _vm->_interface->setMode(kPanelVideo); + + // Queue the credits scene + if (_vm->getGameId() != GID_IHNM_DEMO) { + _vm->_scene->queueScene(&IHNM_CreditsList[0]); + } else { + // TODO: demo credits + //_vm->_scene->queueScene(&IHNMDEMO_CreditsList[0]); + } + + return SUCCESS; +} + int Scene::IHNMStartProc() { size_t n_introscenes; size_t i; @@ -158,6 +188,10 @@ int Scene::IHNMStartProc() { // Load the cutaways for the title screens _vm->_anim->loadCutawayList(resourcePointer, resourceLength); + // Debug + //for (int k = 0; k < _vm->_anim->cutawayListLength(); k++) { + // printf("%i %i\n", _vm->_anim->cutawayBgResourceID(k), _vm->_anim->cutawayAnimResourceID(k)); + //} for (int k = 0; k < _vm->_anim->cutawayListLength(); k++) { // Scene resources @@ -481,4 +515,89 @@ int Scene::IHNMIntroMovieProc3(int param) { return 0; } +int Scene::SC_IHNMCreditsMovieProc(int param, void *refCon) { + return ((Scene *)refCon)->IHNMCreditsMovieProc(param); +} + +int Scene::IHNMCreditsMovieProc(int param) { + Event event; + Event *q_event; + PalEntry *pal; + static PalEntry current_pal[PAL_ENTRIES]; + + switch (param) { + case SCENE_BEGIN: + // Fade to black out of the end movie anim + _vm->_gfx->getCurrentPal(current_pal); + + event.type = kEvTContinuous; + event.code = kPalEvent; + event.op = kEventPalToBlack; + event.time = 0; + event.duration = IHNM_PALFADE_TIME; + event.data = current_pal; + + q_event = _vm->_events->queue(&event); + + event.type = kEvTOneshot; + event.code = kMusicEvent; + event.param = 0; + event.param2 = MUSIC_NORMAL; + event.op = kEventPlay; + event.time = 0; + + q_event = _vm->_events->chain(q_event, &event); + + // Background for credits scene is the first frame of the credits + // animation; display it but don't set palette + event.type = kEvTOneshot; + event.code = kBgEvent; + event.op = kEventDisplay; + event.param = kEvPNoSetPalette; + event.time = 0; + + q_event = _vm->_events->chain(q_event, &event); + + // Fade in from black to the scene background palette + _vm->_scene->getBGPal(pal); + + event.type = kEvTContinuous; + event.code = kPalEvent; + event.op = kEventBlackToPal; + event.time = 0; + event.duration = IHNM_PALFADE_TIME; + event.data = pal; + + q_event = _vm->_events->chain(q_event, &event); + + event.type = kEvTOneshot; + event.code = kAnimEvent; + event.op = kEventPlay; + event.param = 0; + event.time = 0; + + q_event = _vm->_events->chain(q_event, &event); + + // Queue end of scene after a while + event.type = kEvTOneshot; + event.code = kSceneEvent; + event.op = kEventEnd; + // TODO + if (_vm->getGameId() != GID_IHNM_DEMO) + event.time = 12000; + else + event.time = 12000; + + q_event = _vm->_events->chain(q_event, &event); + break; + case SCENE_END: + _vm->shutDown(); + break; + default: + break; + } + + return 0; +} + } // End of namespace Saga diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp index c9bcb7858b..f97fabd288 100644 --- a/engines/saga/scene.cpp +++ b/engines/saga/scene.cpp @@ -292,6 +292,51 @@ void Scene::startScene() { loadScene(sceneQueue); } +void Scene::creditsScene() { + // FIXME: Just shutdown for now + _vm->shutDown(); + return; + + /* + SceneQueueList::iterator queueIterator; + LoadSceneParams *sceneQueue; + Event event; + + // End the last game ending scene + _vm->_scene->endScene(); + // We're not in the game anymore + _inGame = false; + + // Hide cursor during credits + event.type = kEvTOneshot; + event.code = kCursorEvent; + event.op = kEventHide; + _vm->_events->queue(&event); + + switch (_vm->getGameType()) { + case GType_ITE: + // Not called by ITE + break; + case GType_IHNM: + IHNMCreditsProc(); + break; + default: + error("Scene::creditsScene(): Error: Can't start credits scene... gametype not supported"); + break; + } + + // Load the head in scene queue + queueIterator = _sceneQueue.begin(); + if (queueIterator == _sceneQueue.end()) { + return; + } + + sceneQueue = queueIterator.operator->(); + + loadScene(sceneQueue); + */ +} + void Scene::nextScene() { SceneQueueList::iterator queueIterator; LoadSceneParams *sceneQueue; @@ -710,9 +755,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) { } _sceneLoaded = true; - // Scene is loaded, but don't show actors till the scene's background is drawn - // via kEventDisplay later on - _vm->_render->setFlag(RF_DISABLE_ACTORS); q_event = NULL; @@ -1180,7 +1222,9 @@ void Scene::endScene() { _sceneProc(SCENE_END, this); } - // + // Stop showing actors till the next scene's background is drawn from loadScene + _vm->_render->setFlag(RF_DISABLE_ACTORS); + _vm->_script->abortAllThreads(); _vm->_script->_skipSpeeches = false; diff --git a/engines/saga/scene.h b/engines/saga/scene.h index 47abfcb959..e0508efab0 100644 --- a/engines/saga/scene.h +++ b/engines/saga/scene.h @@ -221,6 +221,7 @@ class Scene { void cmdSceneChange(int argc, const char **argv); void startScene(); + void creditsScene(); void nextScene(); void skipScene(); void endScene(); @@ -395,17 +396,20 @@ class Scene { private: int IHNMStartProc(); + int IHNMCreditsProc(); int ITEStartProc(); public: static int SC_IHNMIntroMovieProc1(int param, void *refCon); static int SC_IHNMIntroMovieProc2(int param, void *refCon); static int SC_IHNMIntroMovieProc3(int param, void *refCon); + static int SC_IHNMCreditsMovieProc(int param, void *refCon); private: int IHNMIntroMovieProc1(int param); int IHNMIntroMovieProc2(int param); int IHNMIntroMovieProc3(int param); + int IHNMCreditsMovieProc(int param); public: static int SC_ITEIntroAnimProc(int param, void *refCon); diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp index 01b54e7aaf..723af34d4f 100644 --- a/engines/saga/sfuncs.cpp +++ b/engines/saga/sfuncs.cpp @@ -571,13 +571,16 @@ void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) { _vm->_gfx->setCursor(kCursorBusy); } - if ((_vm->getGameType() == GType_ITE && sceneNumber < 0) || - (_vm->getGameType() == GType_IHNM && sceneNumber == 0)) { - // TODO: set creditsFlag to true for IHNM + if (_vm->getGameType() == GType_ITE && sceneNumber < 0) { _vm->shutDown(); return; } + if (_vm->getGameType() == GType_IHNM && sceneNumber == 0) { + _vm->_scene->creditsScene(); + return; + } + // It is possible to leave scene when converse panel is on, // particulalrly it may happen at Moneychanger tent. This // prevents this from happening. |