[Scummvm-cvs-logs] SF.net SVN: scummvm: [28757] scummvm/trunk/engines/saga
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Mon Aug 27 15:04:35 CEST 2007
Revision: 28757
http://scummvm.svn.sourceforge.net/scummvm/?rev=28757&view=rev
Author: thebluegr
Date: 2007-08-27 06:04:35 -0700 (Mon, 27 Aug 2007)
Log Message:
-----------
Added some skeleton code for the IHNM credits movie. Also, changed the location of the RF_DISABLE_ACTORS is set from loadScene to endScene
Modified Paths:
--------------
scummvm/trunk/engines/saga/ihnm_introproc.cpp
scummvm/trunk/engines/saga/scene.cpp
scummvm/trunk/engines/saga/scene.h
scummvm/trunk/engines/saga/sfuncs.cpp
Modified: scummvm/trunk/engines/saga/ihnm_introproc.cpp
===================================================================
--- scummvm/trunk/engines/saga/ihnm_introproc.cpp 2007-08-27 10:14:13 UTC (rev 28756)
+++ scummvm/trunk/engines/saga/ihnm_introproc.cpp 2007-08-27 13:04:35 UTC (rev 28757)
@@ -83,6 +83,17 @@
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 @@
{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 @@
#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 @@
// 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 @@
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
Modified: scummvm/trunk/engines/saga/scene.cpp
===================================================================
--- scummvm/trunk/engines/saga/scene.cpp 2007-08-27 10:14:13 UTC (rev 28756)
+++ scummvm/trunk/engines/saga/scene.cpp 2007-08-27 13:04:35 UTC (rev 28757)
@@ -292,6 +292,51 @@
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 @@
}
_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 @@
_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;
Modified: scummvm/trunk/engines/saga/scene.h
===================================================================
--- scummvm/trunk/engines/saga/scene.h 2007-08-27 10:14:13 UTC (rev 28756)
+++ scummvm/trunk/engines/saga/scene.h 2007-08-27 13:04:35 UTC (rev 28757)
@@ -221,6 +221,7 @@
void cmdSceneChange(int argc, const char **argv);
void startScene();
+ void creditsScene();
void nextScene();
void skipScene();
void endScene();
@@ -395,17 +396,20 @@
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);
Modified: scummvm/trunk/engines/saga/sfuncs.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs.cpp 2007-08-27 10:14:13 UTC (rev 28756)
+++ scummvm/trunk/engines/saga/sfuncs.cpp 2007-08-27 13:04:35 UTC (rev 28757)
@@ -571,13 +571,16 @@
_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.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list