[Scummvm-cvs-logs] SF.net SVN: scummvm: [32283] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon May 26 13:14:30 CEST 2008


Revision: 32283
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32283&view=rev
Author:   thebluegr
Date:     2008-05-26 04:14:30 -0700 (Mon, 26 May 2008)

Log Message:
-----------
Renamed files for consistency

Modified Paths:
--------------
    scummvm/trunk/engines/saga/module.mk

Added Paths:
-----------
    scummvm/trunk/engines/saga/introproc_ihnm.cpp
    scummvm/trunk/engines/saga/introproc_ite.cpp

Removed Paths:
-------------
    scummvm/trunk/engines/saga/ihnm_introproc.cpp
    scummvm/trunk/engines/saga/ite_introproc.cpp

Deleted: scummvm/trunk/engines/saga/ihnm_introproc.cpp
===================================================================
--- scummvm/trunk/engines/saga/ihnm_introproc.cpp	2008-05-26 11:10:46 UTC (rev 32282)
+++ scummvm/trunk/engines/saga/ihnm_introproc.cpp	2008-05-26 11:14:30 UTC (rev 32283)
@@ -1,285 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-// "I Have No Mouth" Intro sequence scene procedures
-
-#include "saga/saga.h"
-#include "saga/gfx.h"
-
-#include "saga/animation.h"
-#include "saga/events.h"
-#include "saga/interface.h"
-#include "saga/render.h"
-#include "saga/rscfile.h"
-#include "saga/sndres.h"
-#include "saga/music.h"
-
-#include "saga/scene.h"
-
-#include "common/events.h"
-
-namespace Saga {
-
-// IHNM cutaway intro resource IDs
-#define RID_IHNM_INTRO_CUTAWAYS 39
-#define RID_IHNMDEMO_INTRO_CUTAWAYS 25
-
-int Scene::IHNMStartProc() {
-	LoadSceneParams firstScene;
-
-	IHNMLoadCutaways();
-
-	if (_vm->getGameId() != GID_IHNM_DEMO) {
-		int logoLength = -168;
-
-		if (_vm->getLanguage() == Common::DE_DEU || _vm->getLanguage() == Common::ES_ESP)
-			logoLength = -128;
-
-		// Play Cyberdreams logo for 168 frames
-		if (!playTitle(0, logoLength, true)) {
-			// Play Dreamers Guild logo for 10 seconds
-			if (!playLoopingTitle(1, 10)) {
-				// Play the title music
-				_vm->_music->play(1, MUSIC_NORMAL);
-				// Play title screen
-				playTitle(2, 17);
-			}
-		}
-	} else {
-		_vm->_music->play(1, MUSIC_NORMAL);
-		playTitle(0, 10);
-		playTitle(2, 12);
-	}
-
-	_vm->_music->setVolume(0, 1000);
-	_vm->_anim->freeCutawayList();
-
-	// Queue first scene
-	firstScene.loadFlag = kLoadBySceneNumber;
-	firstScene.sceneDescriptor = -1;
-	firstScene.sceneDescription = NULL;
-	firstScene.sceneSkipTarget = false;
-	firstScene.sceneProc = NULL;
-	firstScene.transitionType = kTransitionFade;
-	firstScene.actorsEntrance = 0;
-	firstScene.chapter = -1;
-
-	_vm->_scene->queueScene(&firstScene);
-
-	return SUCCESS;
-}
-
-int Scene::IHNMCreditsProc() {
-	IHNMLoadCutaways();
-
-	_vm->_music->play(0, MUSIC_NORMAL);
-
-	if (_vm->getGameId() != GID_IHNM_DEMO) {
-		// Display the credits for 400 frames
-		playTitle(4, -400, true);
-	} else {
-		// Display sales info for 60 seconds
-		playTitle(3, 60, true);
-	}
-
-	_vm->_music->setVolume(0, 1000);
-	_vm->_anim->freeCutawayList();
-
-	return SUCCESS;
-}
-
-void Scene::IHNMLoadCutaways() {
-	ResourceContext *resourceContext;
-	//ResourceContext *soundContext;
-	byte *resourcePointer;
-	size_t resourceLength;
-
-	resourceContext = _vm->_resource->getContext(GAME_RESOURCEFILE);
-	if (resourceContext == NULL) {
-		error("Scene::IHNMStartProc() resource context not found");
-	}
-
-	if (_vm->getGameId() != GID_IHNM_DEMO)
-		_vm->_resource->loadResource(resourceContext, RID_IHNM_INTRO_CUTAWAYS, resourcePointer, resourceLength);
-	else
-		_vm->_resource->loadResource(resourceContext, RID_IHNMDEMO_INTRO_CUTAWAYS, resourcePointer, resourceLength);
-
-	if (resourceLength == 0) {
-		error("Scene::IHNMStartProc() Can't load cutaway list");
-	}
-
-	// Load the cutaways for the title screens
-	_vm->_anim->loadCutawayList(resourcePointer, resourceLength);
-}
-
-bool Scene::checkKey() {
-	Common::Event event;
-	bool res = false;
-
-	while (_vm->_eventMan->pollEvent(event)) {
-		switch (event.type) {
-		case Common::EVENT_QUIT:
-			res = true;
-			_vm->shutDown();
-			break;
-		case Common::EVENT_KEYDOWN:
-			// Don't react to modifier keys alone. The original did
-			// non, and the user may want to change scaler without
-			// terminating the intro.
-			if (event.kbd.ascii)
-				res = true;
-			break;
-		default:
-			break;
-		}
-	}
-
-	return res;
-}
-
-bool Scene::playTitle(int title, int time, int mode) {
-	bool interrupted = false;
-	Surface *backBufferSurface;
-	int startTime = _vm->_system->getMillis();
-	int frameTime = 0;
-	int curTime;
-	int assignedId;
-	int phase = 0;
-	bool done = false;
-	bool playParameter = true;
-	static PalEntry cur_pal[PAL_ENTRIES];
-	static PalEntry pal_cut[PAL_ENTRIES];
-
-	backBufferSurface = _vm->_render->getBackGroundSurface();
-
-	// Load the cutaway
-
-	_vm->_anim->setCutAwayMode(mode);
-	_vm->_frameCount = 0;
-
-	_vm->_gfx->getCurrentPal(cur_pal);
-
-	assignedId = _vm->_anim->playCutaway(title, false);
-
-	_vm->_gfx->getCurrentPal(pal_cut);
-
-	while (!done) {
-		curTime = _vm->_system->getMillis();
-
-		switch (phase) {
-		case 0: // fadeout
-		case 1: // fadeout 100%
-		case 7: // fadeout
-		case 8: // fadeout 100%
-			_vm->_gfx->palToBlack(cur_pal, (double)(curTime - startTime) / kNormalFadeDuration);
-			// fall through
-
-		case 3: // fadein
-		case 4: // fadein 100%
-			if (phase == 3 || phase == 4)
-				_vm->_gfx->blackToPal(pal_cut, (double)(curTime - startTime) / kNormalFadeDuration);
-
-			if (curTime - startTime > kNormalFadeDuration) {
-				phase++;
-				if (phase == 2 || phase == 5 || phase == 9)
-					startTime = curTime;
-				break;
-			}
-			break;
-
-		case 2: // display background
-			_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
-							  backBufferSurface->w, backBufferSurface->h);
-			phase++;
-			startTime = curTime;
-			break;
-
-		case 5: // playback
-			if (time < 0) {
-				if (_vm->_frameCount >= -time) {
-					phase++;
-					break;
-				}
-			} else {
-				if (curTime - startTime >= time * 1000) {
-					phase++;
-					break;
-				}
-			}
-
-			if (checkKey()) {
-				_vm->_scene->cutawaySkip();
-				interrupted = true;
-				phase = 6;	// end playback and fade out
-				break;
-			}
-
-			if (_vm->_anim->getCycles(assignedId)) { // IHNM demo has 0 frames logo
-				if (curTime - frameTime > _vm->_anim->getFrameTime(assignedId)) {
-					_vm->_anim->play(assignedId, 0, playParameter);
-
-					if (playParameter == true) // Do not loop animations
-						playParameter = false;
-
-					frameTime = curTime;
-
-					_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
-							  backBufferSurface->w, backBufferSurface->h);
-				}
-
-			}
-			break;
-
-		case 6: // playback end
-			startTime = curTime;
-			_vm->_gfx->getCurrentPal(cur_pal);
-			phase++;
-			break;
-
-		case 9: // end
-			done = true;
-			break;
-		}
-
-		_vm->_system->updateScreen();
-		_vm->_system->delayMillis(10);
-	}
-
-	// Clean up
-
-	_vm->_anim->endVideo();
-
-	memset((byte *)backBufferSurface->pixels, 0,  backBufferSurface->w *  backBufferSurface->h);
-	_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
-							  backBufferSurface->w, backBufferSurface->h);
-
-	return interrupted;
-}
-
-bool Scene::playLoopingTitle(int title, int seconds) {
-	return playTitle(title, seconds, kPanelCutaway);
-}
-
-} // End of namespace Saga

Copied: scummvm/trunk/engines/saga/introproc_ihnm.cpp (from rev 32220, scummvm/trunk/engines/saga/ihnm_introproc.cpp)
===================================================================
--- scummvm/trunk/engines/saga/introproc_ihnm.cpp	                        (rev 0)
+++ scummvm/trunk/engines/saga/introproc_ihnm.cpp	2008-05-26 11:14:30 UTC (rev 32283)
@@ -0,0 +1,285 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+// "I Have No Mouth" Intro sequence scene procedures
+
+#include "saga/saga.h"
+#include "saga/gfx.h"
+
+#include "saga/animation.h"
+#include "saga/events.h"
+#include "saga/interface.h"
+#include "saga/render.h"
+#include "saga/rscfile.h"
+#include "saga/sndres.h"
+#include "saga/music.h"
+
+#include "saga/scene.h"
+
+#include "common/events.h"
+
+namespace Saga {
+
+// IHNM cutaway intro resource IDs
+#define RID_IHNM_INTRO_CUTAWAYS 39
+#define RID_IHNMDEMO_INTRO_CUTAWAYS 25
+
+int Scene::IHNMStartProc() {
+	LoadSceneParams firstScene;
+
+	IHNMLoadCutaways();
+
+	if (_vm->getGameId() != GID_IHNM_DEMO) {
+		int logoLength = -168;
+
+		if (_vm->getLanguage() == Common::DE_DEU || _vm->getLanguage() == Common::ES_ESP)
+			logoLength = -128;
+
+		// Play Cyberdreams logo for 168 frames
+		if (!playTitle(0, logoLength, true)) {
+			// Play Dreamers Guild logo for 10 seconds
+			if (!playLoopingTitle(1, 10)) {
+				// Play the title music
+				_vm->_music->play(1, MUSIC_NORMAL);
+				// Play title screen
+				playTitle(2, 17);
+			}
+		}
+	} else {
+		_vm->_music->play(1, MUSIC_NORMAL);
+		playTitle(0, 10);
+		playTitle(2, 12);
+	}
+
+	_vm->_music->setVolume(0, 1000);
+	_vm->_anim->freeCutawayList();
+
+	// Queue first scene
+	firstScene.loadFlag = kLoadBySceneNumber;
+	firstScene.sceneDescriptor = -1;
+	firstScene.sceneDescription = NULL;
+	firstScene.sceneSkipTarget = false;
+	firstScene.sceneProc = NULL;
+	firstScene.transitionType = kTransitionFade;
+	firstScene.actorsEntrance = 0;
+	firstScene.chapter = -1;
+
+	_vm->_scene->queueScene(&firstScene);
+
+	return SUCCESS;
+}
+
+int Scene::IHNMCreditsProc() {
+	IHNMLoadCutaways();
+
+	_vm->_music->play(0, MUSIC_NORMAL);
+
+	if (_vm->getGameId() != GID_IHNM_DEMO) {
+		// Display the credits for 400 frames
+		playTitle(4, -400, true);
+	} else {
+		// Display sales info for 60 seconds
+		playTitle(3, 60, true);
+	}
+
+	_vm->_music->setVolume(0, 1000);
+	_vm->_anim->freeCutawayList();
+
+	return SUCCESS;
+}
+
+void Scene::IHNMLoadCutaways() {
+	ResourceContext *resourceContext;
+	//ResourceContext *soundContext;
+	byte *resourcePointer;
+	size_t resourceLength;
+
+	resourceContext = _vm->_resource->getContext(GAME_RESOURCEFILE);
+	if (resourceContext == NULL) {
+		error("Scene::IHNMStartProc() resource context not found");
+	}
+
+	if (_vm->getGameId() != GID_IHNM_DEMO)
+		_vm->_resource->loadResource(resourceContext, RID_IHNM_INTRO_CUTAWAYS, resourcePointer, resourceLength);
+	else
+		_vm->_resource->loadResource(resourceContext, RID_IHNMDEMO_INTRO_CUTAWAYS, resourcePointer, resourceLength);
+
+	if (resourceLength == 0) {
+		error("Scene::IHNMStartProc() Can't load cutaway list");
+	}
+
+	// Load the cutaways for the title screens
+	_vm->_anim->loadCutawayList(resourcePointer, resourceLength);
+}
+
+bool Scene::checkKey() {
+	Common::Event event;
+	bool res = false;
+
+	while (_vm->_eventMan->pollEvent(event)) {
+		switch (event.type) {
+		case Common::EVENT_QUIT:
+			res = true;
+			_vm->shutDown();
+			break;
+		case Common::EVENT_KEYDOWN:
+			// Don't react to modifier keys alone. The original did
+			// non, and the user may want to change scaler without
+			// terminating the intro.
+			if (event.kbd.ascii)
+				res = true;
+			break;
+		default:
+			break;
+		}
+	}
+
+	return res;
+}
+
+bool Scene::playTitle(int title, int time, int mode) {
+	bool interrupted = false;
+	Surface *backBufferSurface;
+	int startTime = _vm->_system->getMillis();
+	int frameTime = 0;
+	int curTime;
+	int assignedId;
+	int phase = 0;
+	bool done = false;
+	bool playParameter = true;
+	static PalEntry cur_pal[PAL_ENTRIES];
+	static PalEntry pal_cut[PAL_ENTRIES];
+
+	backBufferSurface = _vm->_render->getBackGroundSurface();
+
+	// Load the cutaway
+
+	_vm->_anim->setCutAwayMode(mode);
+	_vm->_frameCount = 0;
+
+	_vm->_gfx->getCurrentPal(cur_pal);
+
+	assignedId = _vm->_anim->playCutaway(title, false);
+
+	_vm->_gfx->getCurrentPal(pal_cut);
+
+	while (!done) {
+		curTime = _vm->_system->getMillis();
+
+		switch (phase) {
+		case 0: // fadeout
+		case 1: // fadeout 100%
+		case 7: // fadeout
+		case 8: // fadeout 100%
+			_vm->_gfx->palToBlack(cur_pal, (double)(curTime - startTime) / kNormalFadeDuration);
+			// fall through
+
+		case 3: // fadein
+		case 4: // fadein 100%
+			if (phase == 3 || phase == 4)
+				_vm->_gfx->blackToPal(pal_cut, (double)(curTime - startTime) / kNormalFadeDuration);
+
+			if (curTime - startTime > kNormalFadeDuration) {
+				phase++;
+				if (phase == 2 || phase == 5 || phase == 9)
+					startTime = curTime;
+				break;
+			}
+			break;
+
+		case 2: // display background
+			_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
+							  backBufferSurface->w, backBufferSurface->h);
+			phase++;
+			startTime = curTime;
+			break;
+
+		case 5: // playback
+			if (time < 0) {
+				if (_vm->_frameCount >= -time) {
+					phase++;
+					break;
+				}
+			} else {
+				if (curTime - startTime >= time * 1000) {
+					phase++;
+					break;
+				}
+			}
+
+			if (checkKey()) {
+				_vm->_scene->cutawaySkip();
+				interrupted = true;
+				phase = 6;	// end playback and fade out
+				break;
+			}
+
+			if (_vm->_anim->getCycles(assignedId)) { // IHNM demo has 0 frames logo
+				if (curTime - frameTime > _vm->_anim->getFrameTime(assignedId)) {
+					_vm->_anim->play(assignedId, 0, playParameter);
+
+					if (playParameter == true) // Do not loop animations
+						playParameter = false;
+
+					frameTime = curTime;
+
+					_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
+							  backBufferSurface->w, backBufferSurface->h);
+				}
+
+			}
+			break;
+
+		case 6: // playback end
+			startTime = curTime;
+			_vm->_gfx->getCurrentPal(cur_pal);
+			phase++;
+			break;
+
+		case 9: // end
+			done = true;
+			break;
+		}
+
+		_vm->_system->updateScreen();
+		_vm->_system->delayMillis(10);
+	}
+
+	// Clean up
+
+	_vm->_anim->endVideo();
+
+	memset((byte *)backBufferSurface->pixels, 0,  backBufferSurface->w *  backBufferSurface->h);
+	_vm->_system->copyRectToScreen((byte *)backBufferSurface->pixels, backBufferSurface->w, 0, 0,
+							  backBufferSurface->w, backBufferSurface->h);
+
+	return interrupted;
+}
+
+bool Scene::playLoopingTitle(int title, int seconds) {
+	return playTitle(title, seconds, kPanelCutaway);
+}
+
+} // End of namespace Saga

Copied: scummvm/trunk/engines/saga/introproc_ite.cpp (from rev 32282, scummvm/trunk/engines/saga/ite_introproc.cpp)
===================================================================
--- scummvm/trunk/engines/saga/introproc_ite.cpp	                        (rev 0)
+++ scummvm/trunk/engines/saga/introproc_ite.cpp	2008-05-26 11:14:30 UTC (rev 32283)
@@ -0,0 +1,1139 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+// Intro sequence scene procedures
+
+#include "saga/saga.h"
+#include "saga/gfx.h"
+
+#include "saga/animation.h"
+#include "saga/events.h"
+#include "saga/font.h"
+#include "saga/sndres.h"
+#include "saga/palanim.h"
+#include "saga/music.h"
+
+#include "saga/scene.h"
+#include "saga/rscfile.h"
+
+namespace Saga {
+
+using Common::UNK_LANG;
+using Common::EN_ANY;
+using Common::DE_DEU;
+using Common::IT_ITA;
+
+// Intro scenes
+#define RID_ITE_INTRO_ANIM_SCENE 1538
+#define RID_ITE_CAVE_SCENE_1 1542
+#define RID_ITE_CAVE_SCENE_2 1545
+#define RID_ITE_CAVE_SCENE_3 1548
+#define RID_ITE_CAVE_SCENE_4 1551
+#define RID_ITE_VALLEY_SCENE 1556
+#define RID_ITE_TREEHOUSE_SCENE 1560
+#define RID_ITE_FAIREPATH_SCENE 1564
+#define RID_ITE_FAIRETENT_SCENE 1567
+
+// ITE intro music
+#define MUSIC_1 9
+#define MUSIC_2 10
+
+LoadSceneParams ITE_IntroList[] = {
+	{RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_CAVE_SCENE_1, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave1Proc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_CAVE_SCENE_2, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave2Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_CAVE_SCENE_3, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave3Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_CAVE_SCENE_4, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave4Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_VALLEY_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_TREEHOUSE_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroTreeHouseProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_FAIREPATH_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFairePathProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
+	{RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}
+};
+
+int Scene::ITEStartProc() {
+	size_t scenesCount;
+	size_t i;
+
+	LoadSceneParams firstScene;
+	LoadSceneParams tempScene;
+
+	scenesCount = ARRAYSIZE(ITE_IntroList);
+
+	for (i = 0; i < scenesCount; i++) {
+		tempScene = ITE_IntroList[i];
+		tempScene.sceneDescriptor = _vm->_resource->convertResourceId(tempScene.sceneDescriptor);
+		_vm->_scene->queueScene(&tempScene);
+	}
+
+
+	firstScene.loadFlag = kLoadBySceneNumber;
+	firstScene.sceneDescriptor = _vm->getStartSceneNumber();
+	firstScene.sceneDescription = NULL;
+	firstScene.sceneSkipTarget = true;
+	firstScene.sceneProc = NULL;
+	firstScene.transitionType = kTransitionFade;
+	firstScene.actorsEntrance = 0;
+	firstScene.chapter = -1;
+
+	_vm->_scene->queueScene(&firstScene);
+
+	return SUCCESS;
+}
+
+Event *Scene::ITEQueueDialogue(Event *q_event, int n_dialogues, const IntroDialogue dialogue[]) {
+	TextListEntry textEntry;
+	TextListEntry *entry;
+	Event event;
+	int voice_len;
+	int i;
+
+	// Queue narrator dialogue list
+	textEntry.knownColor = kKnownColorSubtitleTextColor;
+	textEntry.effectKnownColor = kKnownColorTransparent;
+	textEntry.useRect = true;
+	textEntry.rect.left = 0;
+	textEntry.rect.right = _vm->getDisplayWidth();
+	if (_vm->getLanguage() == Common::DE_DEU) {
+		textEntry.rect.top = INTRO_DE_CAPTION_Y;
+	} else if (_vm->getLanguage() == Common::IT_ITA) {
+		textEntry.rect.top = INTRO_IT_CAPTION_Y;
+	} else {
+		textEntry.rect.top = INTRO_CAPTION_Y;
+	}
+	textEntry.rect.bottom = _vm->getDisplayHeight();
+	textEntry.font = kKnownFontMedium;
+	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
+
+	for (i = 0; i < n_dialogues; i++) {
+		textEntry.text = dialogue[i].i_str;
+		entry = _vm->_scene->_textList.addEntry(textEntry);
+
+		// Display text
+		event.type = kEvTOneshot;
+		event.code = kTextEvent;
+		event.op = kEventDisplay;
+		event.data = entry;
+		event.time = (i == 0) ? 0 : VOICE_PAD;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Play voice
+		event.type = kEvTOneshot;
+		event.code = kVoiceEvent;
+		event.op = kEventPlay;
+		event.param = dialogue[i].i_voice_rn;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		voice_len = _vm->_sndRes->getVoiceLength(dialogue[i].i_voice_rn);
+		if (voice_len < 0) {
+			voice_len = strlen(dialogue[i].i_str) * VOICE_LETTERLEN;
+		}
+
+		// Remove text
+		event.type = kEvTOneshot;
+		event.code = kTextEvent;
+		event.op = kEventRemove;
+		event.data = entry;
+		event.time = voice_len;
+		q_event = _vm->_events->chain(q_event, &event);
+	}
+
+	return q_event;
+}
+
+enum {
+	kCHeader,
+	kCText
+};
+
+enum {
+	kITEPC           = (1 << 0),
+	kITEPCCD         = (1 << 1),
+	kITEMac          = (1 << 2),
+	kITEWyrmKeep     = (1 << 3),
+	kITEAny          = 0xffff,
+	kITENotWyrmKeep  = kITEAny & ~kITEWyrmKeep
+};
+
+// Queue a page of credits text. The original interpreter did word-wrapping
+// automatically. We currently don't.
+
+Event *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const IntroCredit credits[]) {
+	int game;
+	Common::Language lang;
+
+	// The assumption here is that all WyrmKeep versions have the same
+	// credits, regardless of which operating system they're for.
+
+	lang = _vm->getLanguage();
+
+	if (_vm->getFeatures() & GF_WYRMKEEP) {
+		game = kITEWyrmKeep;
+	} else if (_vm->getPlatform() == Common::kPlatformMacintosh) {
+		game = kITEMac;
+	} else if (_vm->getGameId() == GID_ITE_CD_G) {
+		game = kITEPCCD;
+	} else {
+		game = kITEPC;
+	}
+
+	int line_spacing = 0;
+	int paragraph_spacing;
+	KnownFont font = kKnownFontSmall;
+	int i;
+
+	int n_paragraphs = 0;
+	int credits_height = 0;
+
+	for (i = 0; i < n_credits; i++) {
+		if (credits[i].lang != lang && credits[i].lang != UNK_LANG) {
+			continue;
+		}
+
+		if (!(credits[i].game & game)) {
+			continue;
+		}
+
+		switch (credits[i].type) {
+		case kCHeader:
+			font = kKnownFontSmall;
+			line_spacing = 4;
+			n_paragraphs++;
+			break;
+		case kCText:
+			font = kKnownFontMedium;
+			line_spacing = 2;
+			break;
+		default:
+			error("Unknown credit type");
+		}
+
+		credits_height += (_vm->_font->getHeight(font) + line_spacing);
+	}
+
+	paragraph_spacing = (200 - credits_height) / (n_paragraphs + 3);
+	credits_height += (n_paragraphs * paragraph_spacing);
+
+	int y = paragraph_spacing;
+
+	TextListEntry textEntry;
+	TextListEntry *entry;
+	Event event;
+	Event *q_event = NULL;
+
+	textEntry.knownColor = kKnownColorSubtitleTextColor;
+	textEntry.effectKnownColor = kKnownColorTransparent;
+	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
+	textEntry.point.x = 160;
+
+	for (i = 0; i < n_credits; i++) {
+		if (credits[i].lang != lang && credits[i].lang != UNK_LANG) {
+			continue;
+		}
+
+		if (!(credits[i].game & game)) {
+			continue;
+		}
+
+		switch (credits[i].type) {
+		case kCHeader:
+			font = kKnownFontSmall;
+			line_spacing = 4;
+			y += paragraph_spacing;
+			break;
+		case kCText:
+			font = kKnownFontMedium;
+			line_spacing = 2;
+			break;
+		default:
+			break;
+		}
+
+		textEntry.text = credits[i].string;
+		textEntry.font = font;
+		textEntry.point.y = y;
+
+		entry = _vm->_scene->_textList.addEntry(textEntry);
+
+		// Display text
+		event.type = kEvTOneshot;
+		event.code = kTextEvent;
+		event.op = kEventDisplay;
+		event.data = entry;
+		event.time = delta_time;
+		q_event = _vm->_events->queue(&event);
+
+		// Remove text
+		event.type = kEvTOneshot;
+		event.code = kTextEvent;
+		event.op = kEventRemove;
+		event.data = entry;
+		event.time = duration;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		y += (_vm->_font->getHeight(font) + line_spacing);
+	}
+
+	return q_event;
+}
+
+int Scene::SC_ITEIntroAnimProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroAnimProc(param);
+}
+
+// Handles the introductory Dreamer's Guild / NWC logo animation scene.
+int Scene::ITEIntroAnimProc(int param) {
+	Event event;
+	Event *q_event;
+
+	switch (param) {
+	case SCENE_BEGIN:{
+		// Background for intro scene is the first frame of the
+		// intro animation; display it and set the palette
+		event.type = kEvTOneshot;
+		event.code = kBgEvent;
+		event.op = kEventDisplay;
+		event.param = kEvPSetPalette;
+		event.time = 0;
+		q_event = _vm->_events->queue(&event);
+
+		debug(3, "Intro animation procedure started.");
+		debug(3, "Linking animation resources...");
+
+		_vm->_anim->setFrameTime(0, ITE_INTRO_FRAMETIME);
+
+		// Link this scene's animation resources for continuous
+		// playback
+		int lastAnim;
+
+		if (_vm->getFeatures() & GF_WYRMKEEP) {
+			if (_vm->getPlatform() == Common::kPlatformMacintosh) {
+				lastAnim = 3;
+			} else {
+				lastAnim = 2;
+			}
+		} else {
+			if (_vm->getPlatform() == Common::kPlatformMacintosh) {
+				lastAnim = 4;
+			} else {
+				lastAnim = 5;
+			}
+		}
+
+		for (int i = 0; i < lastAnim; i++)
+			_vm->_anim->link(i, i+1);
+
+		_vm->_anim->setFlag(lastAnim, ANIM_FLAG_ENDSCENE);
+
+		debug(3, "Beginning animation playback.");
+
+		// Begin the animation
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventPlay;
+		event.param = 0;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue intro music playback
+		event.type = kEvTOneshot;
+		event.code = kMusicEvent;
+		event.param = MUSIC_1;
+		event.param2 = MUSIC_LOOP;
+		event.op = kEventPlay;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+		}
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure parameter");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave1Proc(param);
+}
+
+// Handles first introductory cave painting scene
+int Scene::ITEIntroCave1Proc(int param) {
+	Event event;
+	Event *q_event;
+	int lang = 0;
+
+	if (_vm->getLanguage() == Common::DE_DEU)
+		lang = 1;
+	else if (_vm->getLanguage() == Common::IT_ITA)
+		lang = 2;
+
+	static const IntroDialogue dialogue[][4] = {
+		{ { // English
+			0,		// cave voice 0
+			"We see the sky, we see the land, we see the water, "
+			"and we wonder: Are we the only ones?"
+		},
+		{
+			1,		// cave voice 1
+			"Long before we came to exist, the humans ruled the "
+			"Earth."
+		},
+		{
+			2,		// cave voice 2
+			"They made marvelous things, and moved whole "
+			"mountains."
+		},
+		{
+			3,		// cave voice 3
+			"They knew the Secret of Flight, the Secret of "
+			"Happiness, and other secrets beyond our imagining."
+		} },
+		// -----------------------------------------------------
+		{ { // German
+			0,		// cave voice 0
+			"Um uns sind der Himmel, das Land und die Seen; und "
+			"wir fragen uns - sind wir die einzigen?"
+		},
+		{
+			1,		// cave voice 1
+			"Lange vor unserer Zeit herrschten die Menschen "
+			"\201ber die Erde."
+		},
+		{
+			2,		// cave voice 2
+			"Sie taten wundersame Dinge und versetzten ganze "
+			"Berge."
+		},
+		{
+			3,		// cave voice 3
+			"Sie kannten das Geheimnis des Fluges, das Geheimnis "
+			"der Fr\224hlichkeit und andere Geheimnisse, die "
+			"unsere Vorstellungskraft \201bersteigen."
+		} },
+		// -----------------------------------------------------
+		{ { // Italian fan translation
+			0,		// cave voice 0
+			"Guardiamo il cielo, guardiamo la terra, guardiamo "
+			"l'acqua, e ci chiediamo: Siamo forse soli?"
+		},
+		{
+			1,		// cave voice 1
+			"Molto tempo prima che noi esistessimo, gli Umani "
+			"dominavano la terra."
+		},
+		{
+			2,		// cave voice 2
+			"Fecero cose meravigliose, e mossero intere "
+			"montagne."
+		},
+		{
+			3,		// cave voice 3
+			"Conoscevano il Segreto del Volo, il Segreto della "
+			"Felicit\224, ed altri segreti oltre ogni nostra "
+			"immaginazione."
+		} }
+	};
+
+	int n_dialogues = ARRAYSIZE(dialogue[lang]);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Begin palette cycling animation for candles
+		event.type = kEvTOneshot;
+		event.code = kPalAnimEvent;
+		event.op = kEventCycleStart;
+		event.time = 0;
+		q_event = _vm->_events->queue(&event);
+
+		// Queue narrator dialogue list
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
+
+		// End scene after last dialogue over
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = VOICE_PAD;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+
+	default:
+		warning("Illegal scene procedure paramater");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroCave2Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave2Proc(param);
+}
+
+// Handles second introductory cave painting scene
+int Scene::ITEIntroCave2Proc(int param) {
+	Event event;
+	Event *q_event;
+	int lang = 0;
+
+	if (_vm->getLanguage() == Common::DE_DEU)
+		lang = 1;
+	else if (_vm->getLanguage() == Common::IT_ITA)
+		lang = 2;
+
+	static const IntroDialogue dialogue[][3] = {
+		{ { // English
+			4,		// cave voice 4
+			"The humans also knew the Secret of Life, and they "
+			"used it to give us the Four Great Gifts:"
+		},
+		{
+			5,		// cave voice 5
+			"Thinking minds, feeling hearts, speaking mouths, and "
+			"reaching hands."
+		},
+		{
+			6,		// cave voice 6
+			"We are their children."
+		} },
+		// -----------------------------------------------------
+		{ { // German
+			4,		// cave voice 4
+			"Au$erdem kannten die Menschen das Geheimnis des "
+			"Lebens. Und sie nutzten es, um uns die vier gro$en "
+			"Geschenke zu geben -"
+		},
+		{
+			5,		// cave voice 5
+			"den denkenden Geist, das f\201hlende Herz, den "
+			"sprechenden Mund und die greifende Hand."
+		},
+		{
+			6,		// cave voice 6
+			"Wir sind ihre Kinder."
+		} },
+		// -----------------------------------------------------
+		{ { // Italian fan translation
+			4,		// cave voice 4
+			"Gli Umani conoscevano anche il Segreto della Vita, "
+			"e lo usarono per darci i Quattro Grandi Doni:"
+
+		},
+		{
+			5,		// cave voice 5
+			"Il pensiero, le emozioni, la parola e la manualit\224."
+
+		},
+		{
+			6,		// cave voice 6
+			"Siamo i loro figli."
+		} }
+	};
+
+	int n_dialogues = ARRAYSIZE(dialogue[lang]);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event = _vm->_events->queue(&event);
+
+		// Begin palette cycling animation for candles
+		event.type = kEvTOneshot;
+		event.code = kPalAnimEvent;
+		event.op = kEventCycleStart;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue narrator dialogue list
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
+
+		// End scene after last dialogue over
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = VOICE_PAD;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure paramater");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroCave3Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave3Proc(param);
+}
+
+// Handles third introductory cave painting scene
+int Scene::ITEIntroCave3Proc(int param) {
+	Event event;
+	Event *q_event;
+	int lang = 0;
+
+	if (_vm->getLanguage() == Common::DE_DEU)
+		lang = 1;
+	else if (_vm->getLanguage() == Common::IT_ITA)
+		lang = 2;
+
+	static const IntroDialogue dialogue[][3] = {
+		{ { // English
+			7,		// cave voice 7
+			"They taught us how to use our hands, and how to "
+			"speak."
+		},
+		{
+			8,		// cave voice 8
+			"They showed us the joy of using our minds."
+		},
+		{
+			9,		// cave voice 9
+			"They loved us, and when we were ready, they surely "
+			"would have given us the Secret of Happiness."
+		} },
+		// -----------------------------------------------------
+		{ { // German
+			7,		// cave voice 7
+			"Sie lehrten uns zu sprechen und unsere H\204nde zu "
+			"benutzen."
+		},
+		{
+			8,		// cave voice 8
+			"Sie zeigten uns die Freude am Denken."
+		},
+		{
+			9,		// cave voice 9
+			"Sie liebten uns, und w\204ren wir bereit gewesen, "
+			"h\204tten sie uns sicherlich das Geheimnis der "
+			"Fr\224hlichkeit offenbart."
+		} },
+		// -----------------------------------------------------
+		{ { // Italian fan translation
+			7,		// cave voice 7
+			"Ci insegnarono come usare le mani e come parlare. "
+
+		},
+		{
+			8,		// cave voice 8
+			"Ci mostrarono le gioie che l'uso della mente "
+			"pu\242 dare. "
+		},
+		{
+			9,		// cave voice 9
+			"Ci amarono, ed una volta pronti, ci avrebbero "
+			"sicuramente svelato il Segreto della Felicit\224."
+
+		} }
+	};
+
+	int n_dialogues = ARRAYSIZE(dialogue[lang]);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event = _vm->_events->queue(&event);
+
+		// Begin palette cycling animation for candles
+		event.type = kEvTOneshot;
+		event.code = kPalAnimEvent;
+		event.op = kEventCycleStart;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue narrator dialogue list
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
+
+		// End scene after last dialogue over
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = VOICE_PAD;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure paramater");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroCave4Proc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroCave4Proc(param);
+}
+
+// Handles fourth introductory cave painting scene
+int Scene::ITEIntroCave4Proc(int param) {
+	Event event;
+	Event *q_event;
+	int lang = 0;
+
+	if (_vm->getLanguage() == Common::DE_DEU)
+		lang = 1;
+	else if (_vm->getLanguage() == Common::IT_ITA)
+		lang = 2;
+
+	static const IntroDialogue dialogue[][4] = {
+		{ { // English
+			10,		// cave voice 10
+			"And now we see the sky, the land, and the water that "
+			"we are heirs to, and we wonder: why did they leave?"
+		},
+		{
+			11,		// cave voice 11
+			"Do they live still, in the stars? In the oceans "
+			"depths? In the wind?"
+		},
+		{
+			12,		// cave voice 12
+			"We wonder, was their fate good or evil?"
+		},
+		{
+			13,		// cave voice 13
+			"And will we also share the same fate one day?"
+		} },
+		// -----------------------------------------------------
+		{ { // German
+			10,		// cave voice 10
+			"Und nun sehen wir den Himmel, das Land und die "
+			"Seen - unser Erbe. Und wir fragen uns - warum "
+			"verschwanden sie?"
+		},
+		{
+			11,		// cave voice 11
+			"Leben sie noch in den Sternen? In den Tiefen des "
+			"Ozeans? Im Wind?"
+		},
+		{
+			12,		// cave voice 12
+			"Wir fragen uns - war ihr Schicksal gut oder b\224se?"
+		},
+		{
+			13,		// cave voice 13
+			"Und wird uns eines Tages das gleiche Schicksal "
+			"ereilen?"
+		} },
+		// -----------------------------------------------------
+		{ { // Italian fan translation
+			10,		// cave voice 10
+			"Ed ora che guardiamo il cielo, la terra e l'acqua "
+			"che abbiamo ereditato, pensiamo: Perch\233 partirono?"
+
+		},
+		{
+			11,		// cave voice 11
+			"Vivono ancora, nelle stelle? Nelle profondit\224 "
+			"dell'oceano? Nel vento?"
+		},
+		{
+			12,		// cave voice 12
+			"Ci domandiamo, il loro destino fu felice o nefasto?"
+		},
+		{
+			13,		// cave voice 13
+			"E un giorno, condivideremo anche noi lo stesso "
+			"destino?"
+		} }
+	};
+
+	int n_dialogues = ARRAYSIZE(dialogue[lang]);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event = _vm->_events->queue(&event);
+
+		// Begin palette cycling animation for candles
+		event.type = kEvTOneshot;
+		event.code = kPalAnimEvent;
+		event.op = kEventCycleStart;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue narrator dialogue list
+		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
+
+		// End scene after last dialogue over
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = VOICE_PAD;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure paramater");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroValleyProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroValleyProc(param);
+}
+
+// Handles intro title scene (valley overlook)
+int Scene::ITEIntroValleyProc(int param) {
+	Event event;
+	Event *q_event;
+
+	static const IntroCredit credits[] = {
+		{EN_ANY, kITEAny, kCHeader, "Producer"},
+		{DE_DEU, kITEAny, kCHeader, "Produzent"},
+		{IT_ITA, kITEAny, kCHeader, "Produttore"},
+		{UNK_LANG, kITEAny, kCText, "Walter Hochbrueckner"},
+		{EN_ANY, kITEAny, kCHeader, "Executive Producer"},
+		{DE_DEU, kITEAny, kCHeader, "Ausf\201hrender Produzent"},
+		{IT_ITA, kITEAny, kCHeader, "Produttore Esecutivo"},
+		{UNK_LANG, kITEAny, kCText, "Robert McNally"},
+		{UNK_LANG, kITEWyrmKeep, kCHeader, "2nd Executive Producer"},
+		{EN_ANY, kITENotWyrmKeep, kCHeader, "Publisher"},
+		{DE_DEU, kITENotWyrmKeep, kCHeader, "Herausgeber"},
+		{IT_ITA, kITENotWyrmKeep, kCHeader, "Editore"},
+		{UNK_LANG, kITEAny, kCText, "Jon Van Caneghem"}
+	};
+
+	int n_credits = ARRAYSIZE(credits);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Begin title screen background animation
+		_vm->_anim->setCycles(0, -1);
+
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventPlay;
+		event.param = 0;
+		event.time = 0;
+		q_event = _vm->_events->queue(&event);
+
+		// Begin ITE title theme music
+		_vm->_music->stop();
+
+		event.type = kEvTOneshot;
+		event.code = kMusicEvent;
+		event.param = MUSIC_2;
+		event.param2 = MUSIC_NORMAL;
+		event.op = kEventPlay;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Pause animation before logo
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventStop;
+		event.param = 0;
+		event.time = 3000;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Display logo
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolveBGMask;
+		event.time = 0;
+		event.duration = LOGO_DISSOLVE_DURATION;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Remove logo
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 3000;
+		event.duration = LOGO_DISSOLVE_DURATION;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Unpause animation before logo
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventPlay;
+		event.time = 0;
+		event.param = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue game credits list
+		q_event = ITEQueueCredits(9000, CREDIT_DURATION1, n_credits, credits);
+
+		// End scene after credit display
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = 1000;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure parameter");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroTreeHouseProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroTreeHouseProc(param);
+}
+
+// Handles second intro credit screen (treehouse view)
+int Scene::ITEIntroTreeHouseProc(int param) {
+	Event event;
+	Event *q_event;
+
+	static const IntroCredit credits1[] = {
+		{EN_ANY, kITEAny, kCHeader, "Game Design"},
+		{DE_DEU, kITEAny, kCHeader, "Spielentwurf"},
+		{IT_ITA, kITEAny, kCHeader, "Progetto"},
+		{UNK_LANG, kITEAny, kCText, "Talin, Joe Pearce, Robert McNally"},
+		{EN_ANY, kITEAny, kCText, "and Carolly Hauksdottir"},
+		{DE_DEU, kITEAny, kCText, "und Carolly Hauksdottir"},
+		{IT_ITA, kITEAny, kCText, "e Carolly Hauksdottir"},
+		{EN_ANY, kITEAny, kCHeader, "Screenplay and Dialog"},
+		{EN_ANY, kITEAny, kCText, "Robert Leh, Len Wein, and Bill Rotsler"},
+		{DE_DEU, kITEAny, kCHeader, "Geschichte und Dialoge"},
+		{DE_DEU, kITEAny, kCText, "Robert Leh, Len Wein und Bill Rotsler"},
+		{IT_ITA, kITEAny, kCHeader, "Sceneggiatura e Dialoghi"},
+		{IT_ITA, kITEAny, kCText, "Robert Leh, Len Wein e Bill Rotsler"}
+	};
+
+	int n_credits1 = ARRAYSIZE(credits1);
+
+	static const IntroCredit credits2[] = {
+		{UNK_LANG, kITEWyrmKeep, kCHeader, "Art Direction"},
+		{UNK_LANG, kITEWyrmKeep, kCText, "Allison Hershey"},
+		{EN_ANY, kITEAny, kCHeader, "Art"},
+		{DE_DEU, kITEAny, kCHeader, "Grafiken"},
+		{IT_ITA, kITEAny, kCHeader, "Grafica"},
+		{UNK_LANG, kITEWyrmKeep, kCText, "Ed Lacabanne, Glenn Price, April Lee,"},
+		{UNK_LANG, kITENotWyrmKeep, kCText, "Edward Lacabanne, Glenn Price, April Lee,"},
+		{UNK_LANG, kITEWyrmKeep, kCText, "Lisa Sample, Brian Dowrick, Reed Waller,"},
+		{EN_ANY, kITEWyrmKeep, kCText, "Allison Hershey and Talin"},
+		{DE_DEU, kITEWyrmKeep, kCText, "Allison Hershey und Talin"},
+		{IT_ITA, kITEWyrmKeep, kCText, "Allison Hershey e Talin"},
+		{EN_ANY, kITENotWyrmKeep, kCText, "Lisa Iennaco, Brian Dowrick, Reed"},
+		{EN_ANY, kITENotWyrmKeep, kCText, "Waller, Allison Hershey and Talin"},
+		{DE_DEU, kITEAny, kCText, "Waller, Allison Hershey und Talin"},
+		{IT_ITA, kITEAny, kCText, "Waller, Allison Hershey e Talin"},
+		{EN_ANY, kITENotWyrmKeep, kCHeader, "Art Direction"},
+		{DE_DEU, kITENotWyrmKeep, kCHeader, "Grafische Leitung"},
+		{IT_ITA, kITENotWyrmKeep, kCHeader, "Direzione Grafica"},
+		{UNK_LANG, kITENotWyrmKeep, kCText, "Allison Hershey"}
+	};
+
+	int n_credits2 = ARRAYSIZE(credits2);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event = _vm->_events->queue(&event);
+
+		if (_vm->_anim->hasAnimation(0)) {
+			// Begin title screen background animation
+			_vm->_anim->setFrameTime(0, 100);
+
+			event.type = kEvTOneshot;
+			event.code = kAnimEvent;
+			event.op = kEventPlay;
+			event.param = 0;
+			event.time = 0;
+			q_event = _vm->_events->chain(q_event, &event);
+		}
+
+		// Queue game credits list
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
+
+		// End scene after credit display
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = 1000;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure parameter");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroFairePathProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroFairePathProc(param);
+}
+
+// Handles third intro credit screen (path to puzzle tent)
+int Scene::ITEIntroFairePathProc(int param) {
+	Event event;
+	Event *q_event;
+
+	static const IntroCredit credits1[] = {
+		{EN_ANY, kITEAny, kCHeader, "Programming"},
+		{DE_DEU, kITEAny, kCHeader, "Programmiert von"},
+		{IT_ITA, kITEAny, kCHeader, "Programmazione"},
+		{UNK_LANG, kITEAny, kCText, "Talin, Walter Hochbrueckner,"},
+		{EN_ANY, kITEAny, kCText, "Joe Burks and Robert Wiggins"},
+		{DE_DEU, kITEAny, kCText, "Joe Burks und Robert Wiggins"},
+		{IT_ITA, kITEAny, kCText, "Joe Burks e Robert Wiggins"},
+		{EN_ANY, kITEPCCD | kITEWyrmKeep, kCHeader, "Additional Programming"},
+		{EN_ANY, kITEPCCD | kITEWyrmKeep, kCText, "John Bolton"},
+		{UNK_LANG, kITEMac, kCHeader, "Macintosh Version"},
+		{UNK_LANG, kITEMac, kCText, "Michael McNally and Robert McNally"},
+		{EN_ANY, kITEAny, kCHeader, "Music and Sound"},
+		{DE_DEU, kITEAny, kCHeader, "Musik und Sound"},
+		{IT_ITA, kITEAny, kCHeader, "Musica e Sonoro"},
+		{UNK_LANG, kITEAny, kCText, "Matt Nathan"}
+	};
+
+	int n_credits1 = ARRAYSIZE(credits1);
+
+	static const IntroCredit credits2[] = {
+		{EN_ANY, kITEAny, kCHeader, "Directed by"},
+		{DE_DEU, kITEAny, kCHeader, "Regie"},
+		{IT_ITA, kITEAny, kCHeader, "Regia"},
+		{UNK_LANG, kITEAny, kCText, "Talin"}
+	};
+
+	int n_credits2 = ARRAYSIZE(credits2);
+
+	switch (param) {
+	case SCENE_BEGIN:
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event = _vm->_events->queue(&event);
+
+		// Begin title screen background animation
+		_vm->_anim->setCycles(0, -1);
+
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventPlay;
+		event.param = 0;
+		event.time = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		// Queue game credits list
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
+		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
+
+		// End scene after credit display
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = 1000;
+		q_event = _vm->_events->chain(q_event, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure parameter");
+		break;
+	}
+
+	return 0;
+}
+
+int Scene::SC_ITEIntroFaireTentProc(int param, void *refCon) {
+	return ((Scene *)refCon)->ITEIntroFaireTentProc(param);
+}
+
+// Handles fourth intro credit screen (treehouse view)
+int Scene::ITEIntroFaireTentProc(int param) {
+	Event event;
+	Event *q_event;
+	Event *q_event_start;
+
+	switch (param) {
+	case SCENE_BEGIN:
+
+		// Start 'dissolve' transition to new scene background
+		event.type = kEvTContinuous;
+		event.code = kTransitionEvent;
+		event.op = kEventDissolve;
+		event.time = 0;
+		event.duration = DISSOLVE_DURATION;
+		q_event_start = _vm->_events->queue(&event);
+
+		// End scene after momentary pause
+		event.type = kEvTOneshot;
+		event.code = kSceneEvent;
+		event.op = kEventEnd;
+		event.time = 5000;
+		q_event = _vm->_events->chain(q_event_start, &event);
+
+		break;
+	case SCENE_END:
+		break;
+	default:
+		warning("Illegal scene procedure parameter");
+		break;
+	}
+
+	return 0;
+}
+
+} // End of namespace Saga

Deleted: scummvm/trunk/engines/saga/ite_introproc.cpp
===================================================================
--- scummvm/trunk/engines/saga/ite_introproc.cpp	2008-05-26 11:10:46 UTC (rev 32282)
+++ scummvm/trunk/engines/saga/ite_introproc.cpp	2008-05-26 11:14:30 UTC (rev 32283)
@@ -1,1139 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-// Intro sequence scene procedures
-
-#include "saga/saga.h"
-#include "saga/gfx.h"
-
-#include "saga/animation.h"
-#include "saga/events.h"
-#include "saga/font.h"
-#include "saga/sndres.h"
-#include "saga/palanim.h"
-#include "saga/music.h"
-
-#include "saga/scene.h"
-#include "saga/rscfile.h"
-
-namespace Saga {
-
-using Common::UNK_LANG;
-using Common::EN_ANY;
-using Common::DE_DEU;
-using Common::IT_ITA;
-
-// Intro scenes
-#define RID_ITE_INTRO_ANIM_SCENE 1538
-#define RID_ITE_CAVE_SCENE_1 1542
-#define RID_ITE_CAVE_SCENE_2 1545
-#define RID_ITE_CAVE_SCENE_3 1548
-#define RID_ITE_CAVE_SCENE_4 1551
-#define RID_ITE_VALLEY_SCENE 1556
-#define RID_ITE_TREEHOUSE_SCENE 1560
-#define RID_ITE_FAIREPATH_SCENE 1564
-#define RID_ITE_FAIRETENT_SCENE 1567
-
-// ITE intro music
-#define MUSIC_1 9
-#define MUSIC_2 10
-
-LoadSceneParams ITE_IntroList[] = {
-	{RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_CAVE_SCENE_1, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave1Proc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_CAVE_SCENE_2, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave2Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_CAVE_SCENE_3, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave3Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_CAVE_SCENE_4, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave4Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_VALLEY_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_TREEHOUSE_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroTreeHouseProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_FAIREPATH_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFairePathProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
-	{RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}
-};
-
-int Scene::ITEStartProc() {
-	size_t scenesCount;
-	size_t i;
-
-	LoadSceneParams firstScene;
-	LoadSceneParams tempScene;
-
-	scenesCount = ARRAYSIZE(ITE_IntroList);
-
-	for (i = 0; i < scenesCount; i++) {
-		tempScene = ITE_IntroList[i];
-		tempScene.sceneDescriptor = _vm->_resource->convertResourceId(tempScene.sceneDescriptor);
-		_vm->_scene->queueScene(&tempScene);
-	}
-
-
-	firstScene.loadFlag = kLoadBySceneNumber;
-	firstScene.sceneDescriptor = _vm->getStartSceneNumber();
-	firstScene.sceneDescription = NULL;
-	firstScene.sceneSkipTarget = true;
-	firstScene.sceneProc = NULL;
-	firstScene.transitionType = kTransitionFade;
-	firstScene.actorsEntrance = 0;
-	firstScene.chapter = -1;
-
-	_vm->_scene->queueScene(&firstScene);
-
-	return SUCCESS;
-}
-
-Event *Scene::ITEQueueDialogue(Event *q_event, int n_dialogues, const IntroDialogue dialogue[]) {
-	TextListEntry textEntry;
-	TextListEntry *entry;
-	Event event;
-	int voice_len;
-	int i;
-
-	// Queue narrator dialogue list
-	textEntry.knownColor = kKnownColorSubtitleTextColor;
-	textEntry.effectKnownColor = kKnownColorTransparent;
-	textEntry.useRect = true;
-	textEntry.rect.left = 0;
-	textEntry.rect.right = _vm->getDisplayWidth();
-	if (_vm->getLanguage() == Common::DE_DEU) {
-		textEntry.rect.top = INTRO_DE_CAPTION_Y;
-	} else if (_vm->getLanguage() == Common::IT_ITA) {
-		textEntry.rect.top = INTRO_IT_CAPTION_Y;
-	} else {
-		textEntry.rect.top = INTRO_CAPTION_Y;
-	}
-	textEntry.rect.bottom = _vm->getDisplayHeight();
-	textEntry.font = kKnownFontMedium;
-	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
-
-	for (i = 0; i < n_dialogues; i++) {
-		textEntry.text = dialogue[i].i_str;
-		entry = _vm->_scene->_textList.addEntry(textEntry);
-
-		// Display text
-		event.type = kEvTOneshot;
-		event.code = kTextEvent;
-		event.op = kEventDisplay;
-		event.data = entry;
-		event.time = (i == 0) ? 0 : VOICE_PAD;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Play voice
-		event.type = kEvTOneshot;
-		event.code = kVoiceEvent;
-		event.op = kEventPlay;
-		event.param = dialogue[i].i_voice_rn;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		voice_len = _vm->_sndRes->getVoiceLength(dialogue[i].i_voice_rn);
-		if (voice_len < 0) {
-			voice_len = strlen(dialogue[i].i_str) * VOICE_LETTERLEN;
-		}
-
-		// Remove text
-		event.type = kEvTOneshot;
-		event.code = kTextEvent;
-		event.op = kEventRemove;
-		event.data = entry;
-		event.time = voice_len;
-		q_event = _vm->_events->chain(q_event, &event);
-	}
-
-	return q_event;
-}
-
-enum {
-	kCHeader,
-	kCText
-};
-
-enum {
-	kITEPC           = (1 << 0),
-	kITEPCCD         = (1 << 1),
-	kITEMac          = (1 << 2),
-	kITEWyrmKeep     = (1 << 3),
-	kITEAny          = 0xffff,
-	kITENotWyrmKeep  = kITEAny & ~kITEWyrmKeep
-};
-
-// Queue a page of credits text. The original interpreter did word-wrapping
-// automatically. We currently don't.
-
-Event *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const IntroCredit credits[]) {
-	int game;
-	Common::Language lang;
-
-	// The assumption here is that all WyrmKeep versions have the same
-	// credits, regardless of which operating system they're for.
-
-	lang = _vm->getLanguage();
-
-	if (_vm->getFeatures() & GF_WYRMKEEP) {
-		game = kITEWyrmKeep;
-	} else if (_vm->getPlatform() == Common::kPlatformMacintosh) {
-		game = kITEMac;
-	} else if (_vm->getGameId() == GID_ITE_CD_G) {
-		game = kITEPCCD;
-	} else {
-		game = kITEPC;
-	}
-
-	int line_spacing = 0;
-	int paragraph_spacing;
-	KnownFont font = kKnownFontSmall;
-	int i;
-
-	int n_paragraphs = 0;
-	int credits_height = 0;
-
-	for (i = 0; i < n_credits; i++) {
-		if (credits[i].lang != lang && credits[i].lang != UNK_LANG) {
-			continue;
-		}
-
-		if (!(credits[i].game & game)) {
-			continue;
-		}
-
-		switch (credits[i].type) {
-		case kCHeader:
-			font = kKnownFontSmall;
-			line_spacing = 4;
-			n_paragraphs++;
-			break;
-		case kCText:
-			font = kKnownFontMedium;
-			line_spacing = 2;
-			break;
-		default:
-			error("Unknown credit type");
-		}
-
-		credits_height += (_vm->_font->getHeight(font) + line_spacing);
-	}
-
-	paragraph_spacing = (200 - credits_height) / (n_paragraphs + 3);
-	credits_height += (n_paragraphs * paragraph_spacing);
-
-	int y = paragraph_spacing;
-
-	TextListEntry textEntry;
-	TextListEntry *entry;
-	Event event;
-	Event *q_event = NULL;
-
-	textEntry.knownColor = kKnownColorSubtitleTextColor;
-	textEntry.effectKnownColor = kKnownColorTransparent;
-	textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
-	textEntry.point.x = 160;
-
-	for (i = 0; i < n_credits; i++) {
-		if (credits[i].lang != lang && credits[i].lang != UNK_LANG) {
-			continue;
-		}
-
-		if (!(credits[i].game & game)) {
-			continue;
-		}
-
-		switch (credits[i].type) {
-		case kCHeader:
-			font = kKnownFontSmall;
-			line_spacing = 4;
-			y += paragraph_spacing;
-			break;
-		case kCText:
-			font = kKnownFontMedium;
-			line_spacing = 2;
-			break;
-		default:
-			break;
-		}
-
-		textEntry.text = credits[i].string;
-		textEntry.font = font;
-		textEntry.point.y = y;
-
-		entry = _vm->_scene->_textList.addEntry(textEntry);
-
-		// Display text
-		event.type = kEvTOneshot;
-		event.code = kTextEvent;
-		event.op = kEventDisplay;
-		event.data = entry;
-		event.time = delta_time;
-		q_event = _vm->_events->queue(&event);
-
-		// Remove text
-		event.type = kEvTOneshot;
-		event.code = kTextEvent;
-		event.op = kEventRemove;
-		event.data = entry;
-		event.time = duration;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		y += (_vm->_font->getHeight(font) + line_spacing);
-	}
-
-	return q_event;
-}
-
-int Scene::SC_ITEIntroAnimProc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroAnimProc(param);
-}
-
-// Handles the introductory Dreamer's Guild / NWC logo animation scene.
-int Scene::ITEIntroAnimProc(int param) {
-	Event event;
-	Event *q_event;
-
-	switch (param) {
-	case SCENE_BEGIN:{
-		// Background for intro scene is the first frame of the
-		// intro animation; display it and set the palette
-		event.type = kEvTOneshot;
-		event.code = kBgEvent;
-		event.op = kEventDisplay;
-		event.param = kEvPSetPalette;
-		event.time = 0;
-		q_event = _vm->_events->queue(&event);
-
-		debug(3, "Intro animation procedure started.");
-		debug(3, "Linking animation resources...");
-
-		_vm->_anim->setFrameTime(0, ITE_INTRO_FRAMETIME);
-
-		// Link this scene's animation resources for continuous
-		// playback
-		int lastAnim;
-
-		if (_vm->getFeatures() & GF_WYRMKEEP) {
-			if (_vm->getPlatform() == Common::kPlatformMacintosh) {
-				lastAnim = 3;
-			} else {
-				lastAnim = 2;
-			}
-		} else {
-			if (_vm->getPlatform() == Common::kPlatformMacintosh) {
-				lastAnim = 4;
-			} else {
-				lastAnim = 5;
-			}
-		}
-
-		for (int i = 0; i < lastAnim; i++)
-			_vm->_anim->link(i, i+1);
-
-		_vm->_anim->setFlag(lastAnim, ANIM_FLAG_ENDSCENE);
-
-		debug(3, "Beginning animation playback.");
-
-		// Begin the animation
-		event.type = kEvTOneshot;
-		event.code = kAnimEvent;
-		event.op = kEventPlay;
-		event.param = 0;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue intro music playback
-		event.type = kEvTOneshot;
-		event.code = kMusicEvent;
-		event.param = MUSIC_1;
-		event.param2 = MUSIC_LOOP;
-		event.op = kEventPlay;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-		}
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure parameter");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave1Proc(param);
-}
-
-// Handles first introductory cave painting scene
-int Scene::ITEIntroCave1Proc(int param) {
-	Event event;
-	Event *q_event;
-	int lang = 0;
-
-	if (_vm->getLanguage() == Common::DE_DEU)
-		lang = 1;
-	else if (_vm->getLanguage() == Common::IT_ITA)
-		lang = 2;
-
-	static const IntroDialogue dialogue[][4] = {
-		{ { // English
-			0,		// cave voice 0
-			"We see the sky, we see the land, we see the water, "
-			"and we wonder: Are we the only ones?"
-		},
-		{
-			1,		// cave voice 1
-			"Long before we came to exist, the humans ruled the "
-			"Earth."
-		},
-		{
-			2,		// cave voice 2
-			"They made marvelous things, and moved whole "
-			"mountains."
-		},
-		{
-			3,		// cave voice 3
-			"They knew the Secret of Flight, the Secret of "
-			"Happiness, and other secrets beyond our imagining."
-		} },
-		// -----------------------------------------------------
-		{ { // German
-			0,		// cave voice 0
-			"Um uns sind der Himmel, das Land und die Seen; und "
-			"wir fragen uns - sind wir die einzigen?"
-		},
-		{
-			1,		// cave voice 1
-			"Lange vor unserer Zeit herrschten die Menschen "
-			"\201ber die Erde."
-		},
-		{
-			2,		// cave voice 2
-			"Sie taten wundersame Dinge und versetzten ganze "
-			"Berge."
-		},
-		{
-			3,		// cave voice 3
-			"Sie kannten das Geheimnis des Fluges, das Geheimnis "
-			"der Fr\224hlichkeit und andere Geheimnisse, die "
-			"unsere Vorstellungskraft \201bersteigen."
-		} },
-		// -----------------------------------------------------
-		{ { // Italian fan translation
-			0,		// cave voice 0
-			"Guardiamo il cielo, guardiamo la terra, guardiamo "
-			"l'acqua, e ci chiediamo: Siamo forse soli?"
-		},
-		{
-			1,		// cave voice 1
-			"Molto tempo prima che noi esistessimo, gli Umani "
-			"dominavano la terra."
-		},
-		{
-			2,		// cave voice 2
-			"Fecero cose meravigliose, e mossero intere "
-			"montagne."
-		},
-		{
-			3,		// cave voice 3
-			"Conoscevano il Segreto del Volo, il Segreto della "
-			"Felicit\224, ed altri segreti oltre ogni nostra "
-			"immaginazione."
-		} }
-	};
-
-	int n_dialogues = ARRAYSIZE(dialogue[lang]);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Begin palette cycling animation for candles
-		event.type = kEvTOneshot;
-		event.code = kPalAnimEvent;
-		event.op = kEventCycleStart;
-		event.time = 0;
-		q_event = _vm->_events->queue(&event);
-
-		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
-
-		// End scene after last dialogue over
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = VOICE_PAD;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-
-	default:
-		warning("Illegal scene procedure paramater");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroCave2Proc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave2Proc(param);
-}
-
-// Handles second introductory cave painting scene
-int Scene::ITEIntroCave2Proc(int param) {
-	Event event;
-	Event *q_event;
-	int lang = 0;
-
-	if (_vm->getLanguage() == Common::DE_DEU)
-		lang = 1;
-	else if (_vm->getLanguage() == Common::IT_ITA)
-		lang = 2;
-
-	static const IntroDialogue dialogue[][3] = {
-		{ { // English
-			4,		// cave voice 4
-			"The humans also knew the Secret of Life, and they "
-			"used it to give us the Four Great Gifts:"
-		},
-		{
-			5,		// cave voice 5
-			"Thinking minds, feeling hearts, speaking mouths, and "
-			"reaching hands."
-		},
-		{
-			6,		// cave voice 6
-			"We are their children."
-		} },
-		// -----------------------------------------------------
-		{ { // German
-			4,		// cave voice 4
-			"Au$erdem kannten die Menschen das Geheimnis des "
-			"Lebens. Und sie nutzten es, um uns die vier gro$en "
-			"Geschenke zu geben -"
-		},
-		{
-			5,		// cave voice 5
-			"den denkenden Geist, das f\201hlende Herz, den "
-			"sprechenden Mund und die greifende Hand."
-		},
-		{
-			6,		// cave voice 6
-			"Wir sind ihre Kinder."
-		} },
-		// -----------------------------------------------------
-		{ { // Italian fan translation
-			4,		// cave voice 4
-			"Gli Umani conoscevano anche il Segreto della Vita, "
-			"e lo usarono per darci i Quattro Grandi Doni:"
-
-		},
-		{
-			5,		// cave voice 5
-			"Il pensiero, le emozioni, la parola e la manualit\224."
-
-		},
-		{
-			6,		// cave voice 6
-			"Siamo i loro figli."
-		} }
-	};
-
-	int n_dialogues = ARRAYSIZE(dialogue[lang]);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event = _vm->_events->queue(&event);
-
-		// Begin palette cycling animation for candles
-		event.type = kEvTOneshot;
-		event.code = kPalAnimEvent;
-		event.op = kEventCycleStart;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
-
-		// End scene after last dialogue over
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = VOICE_PAD;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure paramater");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroCave3Proc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave3Proc(param);
-}
-
-// Handles third introductory cave painting scene
-int Scene::ITEIntroCave3Proc(int param) {
-	Event event;
-	Event *q_event;
-	int lang = 0;
-
-	if (_vm->getLanguage() == Common::DE_DEU)
-		lang = 1;
-	else if (_vm->getLanguage() == Common::IT_ITA)
-		lang = 2;
-
-	static const IntroDialogue dialogue[][3] = {
-		{ { // English
-			7,		// cave voice 7
-			"They taught us how to use our hands, and how to "
-			"speak."
-		},
-		{
-			8,		// cave voice 8
-			"They showed us the joy of using our minds."
-		},
-		{
-			9,		// cave voice 9
-			"They loved us, and when we were ready, they surely "
-			"would have given us the Secret of Happiness."
-		} },
-		// -----------------------------------------------------
-		{ { // German
-			7,		// cave voice 7
-			"Sie lehrten uns zu sprechen und unsere H\204nde zu "
-			"benutzen."
-		},
-		{
-			8,		// cave voice 8
-			"Sie zeigten uns die Freude am Denken."
-		},
-		{
-			9,		// cave voice 9
-			"Sie liebten uns, und w\204ren wir bereit gewesen, "
-			"h\204tten sie uns sicherlich das Geheimnis der "
-			"Fr\224hlichkeit offenbart."
-		} },
-		// -----------------------------------------------------
-		{ { // Italian fan translation
-			7,		// cave voice 7
-			"Ci insegnarono come usare le mani e come parlare. "
-
-		},
-		{
-			8,		// cave voice 8
-			"Ci mostrarono le gioie che l'uso della mente "
-			"pu\242 dare. "
-		},
-		{
-			9,		// cave voice 9
-			"Ci amarono, ed una volta pronti, ci avrebbero "
-			"sicuramente svelato il Segreto della Felicit\224."
-
-		} }
-	};
-
-	int n_dialogues = ARRAYSIZE(dialogue[lang]);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event = _vm->_events->queue(&event);
-
-		// Begin palette cycling animation for candles
-		event.type = kEvTOneshot;
-		event.code = kPalAnimEvent;
-		event.op = kEventCycleStart;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
-
-		// End scene after last dialogue over
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = VOICE_PAD;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure paramater");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroCave4Proc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroCave4Proc(param);
-}
-
-// Handles fourth introductory cave painting scene
-int Scene::ITEIntroCave4Proc(int param) {
-	Event event;
-	Event *q_event;
-	int lang = 0;
-
-	if (_vm->getLanguage() == Common::DE_DEU)
-		lang = 1;
-	else if (_vm->getLanguage() == Common::IT_ITA)
-		lang = 2;
-
-	static const IntroDialogue dialogue[][4] = {
-		{ { // English
-			10,		// cave voice 10
-			"And now we see the sky, the land, and the water that "
-			"we are heirs to, and we wonder: why did they leave?"
-		},
-		{
-			11,		// cave voice 11
-			"Do they live still, in the stars? In the oceans "
-			"depths? In the wind?"
-		},
-		{
-			12,		// cave voice 12
-			"We wonder, was their fate good or evil?"
-		},
-		{
-			13,		// cave voice 13
-			"And will we also share the same fate one day?"
-		} },
-		// -----------------------------------------------------
-		{ { // German
-			10,		// cave voice 10
-			"Und nun sehen wir den Himmel, das Land und die "
-			"Seen - unser Erbe. Und wir fragen uns - warum "
-			"verschwanden sie?"
-		},
-		{
-			11,		// cave voice 11
-			"Leben sie noch in den Sternen? In den Tiefen des "
-			"Ozeans? Im Wind?"
-		},
-		{
-			12,		// cave voice 12
-			"Wir fragen uns - war ihr Schicksal gut oder b\224se?"
-		},
-		{
-			13,		// cave voice 13
-			"Und wird uns eines Tages das gleiche Schicksal "
-			"ereilen?"
-		} },
-		// -----------------------------------------------------
-		{ { // Italian fan translation
-			10,		// cave voice 10
-			"Ed ora che guardiamo il cielo, la terra e l'acqua "
-			"che abbiamo ereditato, pensiamo: Perch\233 partirono?"
-
-		},
-		{
-			11,		// cave voice 11
-			"Vivono ancora, nelle stelle? Nelle profondit\224 "
-			"dell'oceano? Nel vento?"
-		},
-		{
-			12,		// cave voice 12
-			"Ci domandiamo, il loro destino fu felice o nefasto?"
-		},
-		{
-			13,		// cave voice 13
-			"E un giorno, condivideremo anche noi lo stesso "
-			"destino?"
-		} }
-	};
-
-	int n_dialogues = ARRAYSIZE(dialogue[lang]);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event = _vm->_events->queue(&event);
-
-		// Begin palette cycling animation for candles
-		event.type = kEvTOneshot;
-		event.code = kPalAnimEvent;
-		event.op = kEventCycleStart;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue narrator dialogue list
-		q_event = ITEQueueDialogue(q_event, n_dialogues, dialogue[lang]);
-
-		// End scene after last dialogue over
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = VOICE_PAD;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure paramater");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroValleyProc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroValleyProc(param);
-}
-
-// Handles intro title scene (valley overlook)
-int Scene::ITEIntroValleyProc(int param) {
-	Event event;
-	Event *q_event;
-
-	static const IntroCredit credits[] = {
-		{EN_ANY, kITEAny, kCHeader, "Producer"},
-		{DE_DEU, kITEAny, kCHeader, "Produzent"},
-		{IT_ITA, kITEAny, kCHeader, "Produttore"},
-		{UNK_LANG, kITEAny, kCText, "Walter Hochbrueckner"},
-		{EN_ANY, kITEAny, kCHeader, "Executive Producer"},
-		{DE_DEU, kITEAny, kCHeader, "Ausf\201hrender Produzent"},
-		{IT_ITA, kITEAny, kCHeader, "Produttore Esecutivo"},
-		{UNK_LANG, kITEAny, kCText, "Robert McNally"},
-		{UNK_LANG, kITEWyrmKeep, kCHeader, "2nd Executive Producer"},
-		{EN_ANY, kITENotWyrmKeep, kCHeader, "Publisher"},
-		{DE_DEU, kITENotWyrmKeep, kCHeader, "Herausgeber"},
-		{IT_ITA, kITENotWyrmKeep, kCHeader, "Editore"},
-		{UNK_LANG, kITEAny, kCText, "Jon Van Caneghem"}
-	};
-
-	int n_credits = ARRAYSIZE(credits);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Begin title screen background animation
-		_vm->_anim->setCycles(0, -1);
-
-		event.type = kEvTOneshot;
-		event.code = kAnimEvent;
-		event.op = kEventPlay;
-		event.param = 0;
-		event.time = 0;
-		q_event = _vm->_events->queue(&event);
-
-		// Begin ITE title theme music
-		_vm->_music->stop();
-
-		event.type = kEvTOneshot;
-		event.code = kMusicEvent;
-		event.param = MUSIC_2;
-		event.param2 = MUSIC_NORMAL;
-		event.op = kEventPlay;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Pause animation before logo
-		event.type = kEvTOneshot;
-		event.code = kAnimEvent;
-		event.op = kEventStop;
-		event.param = 0;
-		event.time = 3000;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Display logo
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolveBGMask;
-		event.time = 0;
-		event.duration = LOGO_DISSOLVE_DURATION;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Remove logo
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 3000;
-		event.duration = LOGO_DISSOLVE_DURATION;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Unpause animation before logo
-		event.type = kEvTOneshot;
-		event.code = kAnimEvent;
-		event.op = kEventPlay;
-		event.time = 0;
-		event.param = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue game credits list
-		q_event = ITEQueueCredits(9000, CREDIT_DURATION1, n_credits, credits);
-
-		// End scene after credit display
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = 1000;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure parameter");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroTreeHouseProc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroTreeHouseProc(param);
-}
-
-// Handles second intro credit screen (treehouse view)
-int Scene::ITEIntroTreeHouseProc(int param) {
-	Event event;
-	Event *q_event;
-
-	static const IntroCredit credits1[] = {
-		{EN_ANY, kITEAny, kCHeader, "Game Design"},
-		{DE_DEU, kITEAny, kCHeader, "Spielentwurf"},
-		{IT_ITA, kITEAny, kCHeader, "Progetto"},
-		{UNK_LANG, kITEAny, kCText, "Talin, Joe Pearce, Robert McNally"},
-		{EN_ANY, kITEAny, kCText, "and Carolly Hauksdottir"},
-		{DE_DEU, kITEAny, kCText, "und Carolly Hauksdottir"},
-		{IT_ITA, kITEAny, kCText, "e Carolly Hauksdottir"},
-		{EN_ANY, kITEAny, kCHeader, "Screenplay and Dialog"},
-		{EN_ANY, kITEAny, kCText, "Robert Leh, Len Wein, and Bill Rotsler"},
-		{DE_DEU, kITEAny, kCHeader, "Geschichte und Dialoge"},
-		{DE_DEU, kITEAny, kCText, "Robert Leh, Len Wein und Bill Rotsler"},
-		{IT_ITA, kITEAny, kCHeader, "Sceneggiatura e Dialoghi"},
-		{IT_ITA, kITEAny, kCText, "Robert Leh, Len Wein e Bill Rotsler"}
-	};
-
-	int n_credits1 = ARRAYSIZE(credits1);
-
-	static const IntroCredit credits2[] = {
-		{UNK_LANG, kITEWyrmKeep, kCHeader, "Art Direction"},
-		{UNK_LANG, kITEWyrmKeep, kCText, "Allison Hershey"},
-		{EN_ANY, kITEAny, kCHeader, "Art"},
-		{DE_DEU, kITEAny, kCHeader, "Grafiken"},
-		{IT_ITA, kITEAny, kCHeader, "Grafica"},
-		{UNK_LANG, kITEWyrmKeep, kCText, "Ed Lacabanne, Glenn Price, April Lee,"},
-		{UNK_LANG, kITENotWyrmKeep, kCText, "Edward Lacabanne, Glenn Price, April Lee,"},
-		{UNK_LANG, kITEWyrmKeep, kCText, "Lisa Sample, Brian Dowrick, Reed Waller,"},
-		{EN_ANY, kITEWyrmKeep, kCText, "Allison Hershey and Talin"},
-		{DE_DEU, kITEWyrmKeep, kCText, "Allison Hershey und Talin"},
-		{IT_ITA, kITEWyrmKeep, kCText, "Allison Hershey e Talin"},
-		{EN_ANY, kITENotWyrmKeep, kCText, "Lisa Iennaco, Brian Dowrick, Reed"},
-		{EN_ANY, kITENotWyrmKeep, kCText, "Waller, Allison Hershey and Talin"},
-		{DE_DEU, kITEAny, kCText, "Waller, Allison Hershey und Talin"},
-		{IT_ITA, kITEAny, kCText, "Waller, Allison Hershey e Talin"},
-		{EN_ANY, kITENotWyrmKeep, kCHeader, "Art Direction"},
-		{DE_DEU, kITENotWyrmKeep, kCHeader, "Grafische Leitung"},
-		{IT_ITA, kITENotWyrmKeep, kCHeader, "Direzione Grafica"},
-		{UNK_LANG, kITENotWyrmKeep, kCText, "Allison Hershey"}
-	};
-
-	int n_credits2 = ARRAYSIZE(credits2);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event = _vm->_events->queue(&event);
-
-		if (_vm->_anim->hasAnimation(0)) {
-			// Begin title screen background animation
-			_vm->_anim->setFrameTime(0, 100);
-
-			event.type = kEvTOneshot;
-			event.code = kAnimEvent;
-			event.op = kEventPlay;
-			event.param = 0;
-			event.time = 0;
-			q_event = _vm->_events->chain(q_event, &event);
-		}
-
-		// Queue game credits list
-		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
-		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
-
-		// End scene after credit display
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = 1000;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure parameter");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroFairePathProc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroFairePathProc(param);
-}
-
-// Handles third intro credit screen (path to puzzle tent)
-int Scene::ITEIntroFairePathProc(int param) {
-	Event event;
-	Event *q_event;
-
-	static const IntroCredit credits1[] = {
-		{EN_ANY, kITEAny, kCHeader, "Programming"},
-		{DE_DEU, kITEAny, kCHeader, "Programmiert von"},
-		{IT_ITA, kITEAny, kCHeader, "Programmazione"},
-		{UNK_LANG, kITEAny, kCText, "Talin, Walter Hochbrueckner,"},
-		{EN_ANY, kITEAny, kCText, "Joe Burks and Robert Wiggins"},
-		{DE_DEU, kITEAny, kCText, "Joe Burks und Robert Wiggins"},
-		{IT_ITA, kITEAny, kCText, "Joe Burks e Robert Wiggins"},
-		{EN_ANY, kITEPCCD | kITEWyrmKeep, kCHeader, "Additional Programming"},
-		{EN_ANY, kITEPCCD | kITEWyrmKeep, kCText, "John Bolton"},
-		{UNK_LANG, kITEMac, kCHeader, "Macintosh Version"},
-		{UNK_LANG, kITEMac, kCText, "Michael McNally and Robert McNally"},
-		{EN_ANY, kITEAny, kCHeader, "Music and Sound"},
-		{DE_DEU, kITEAny, kCHeader, "Musik und Sound"},
-		{IT_ITA, kITEAny, kCHeader, "Musica e Sonoro"},
-		{UNK_LANG, kITEAny, kCText, "Matt Nathan"}
-	};
-
-	int n_credits1 = ARRAYSIZE(credits1);
-
-	static const IntroCredit credits2[] = {
-		{EN_ANY, kITEAny, kCHeader, "Directed by"},
-		{DE_DEU, kITEAny, kCHeader, "Regie"},
-		{IT_ITA, kITEAny, kCHeader, "Regia"},
-		{UNK_LANG, kITEAny, kCText, "Talin"}
-	};
-
-	int n_credits2 = ARRAYSIZE(credits2);
-
-	switch (param) {
-	case SCENE_BEGIN:
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event = _vm->_events->queue(&event);
-
-		// Begin title screen background animation
-		_vm->_anim->setCycles(0, -1);
-
-		event.type = kEvTOneshot;
-		event.code = kAnimEvent;
-		event.op = kEventPlay;
-		event.param = 0;
-		event.time = 0;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		// Queue game credits list
-		q_event = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1);
-		q_event = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2);
-
-		// End scene after credit display
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = 1000;
-		q_event = _vm->_events->chain(q_event, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure parameter");
-		break;
-	}
-
-	return 0;
-}
-
-int Scene::SC_ITEIntroFaireTentProc(int param, void *refCon) {
-	return ((Scene *)refCon)->ITEIntroFaireTentProc(param);
-}
-
-// Handles fourth intro credit screen (treehouse view)
-int Scene::ITEIntroFaireTentProc(int param) {
-	Event event;
-	Event *q_event;
-	Event *q_event_start;
-
-	switch (param) {
-	case SCENE_BEGIN:
-
-		// Start 'dissolve' transition to new scene background
-		event.type = kEvTContinuous;
-		event.code = kTransitionEvent;
-		event.op = kEventDissolve;
-		event.time = 0;
-		event.duration = DISSOLVE_DURATION;
-		q_event_start = _vm->_events->queue(&event);
-
-		// End scene after momentary pause
-		event.type = kEvTOneshot;
-		event.code = kSceneEvent;
-		event.op = kEventEnd;
-		event.time = 5000;
-		q_event = _vm->_events->chain(q_event_start, &event);
-
-		break;
-	case SCENE_END:
-		break;
-	default:
-		warning("Illegal scene procedure parameter");
-		break;
-	}
-
-	return 0;
-}
-
-} // End of namespace Saga

Modified: scummvm/trunk/engines/saga/module.mk
===================================================================
--- scummvm/trunk/engines/saga/module.mk	2008-05-26 11:10:46 UTC (rev 32282)
+++ scummvm/trunk/engines/saga/module.mk	2008-05-26 11:14:30 UTC (rev 32283)
@@ -11,11 +11,11 @@
 	font.o \
 	font_map.o \
 	gfx.o \
-	ihnm_introproc.o \
 	image.o \
 	interface.o \
+	introproc_ihnm.o \
+	introproc_ite.o \
 	isomap.o \
-	ite_introproc.o \
 	itedata.o \
 	objectmap.o \
 	puzzle.o \


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