[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