[Scummvm-git-logs] scummvm master -> fa2609bf1e4e3b8eba1f14a6b44682d6b130fcab

dreammaster dreammaster at scummvm.org
Wed Sep 21 04:35:21 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
fa2609bf1e XEEN: In progress Clouds intro, subtitles cleanup


Commit: fa2609bf1e4e3b8eba1f14a6b44682d6b130fcab
    https://github.com/scummvm/scummvm/commit/fa2609bf1e4e3b8eba1f14a6b44682d6b130fcab
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-20T22:35:14-04:00

Commit Message:
XEEN: In progress Clouds intro, subtitles cleanup

Changed paths:
    engines/xeen/resources.cpp
    engines/xeen/resources.h
    engines/xeen/worldofxeen/clouds_cutscenes.cpp
    engines/xeen/worldofxeen/cutscenes.cpp
    engines/xeen/worldofxeen/cutscenes.h
    engines/xeen/worldofxeen/darkside_cutscenes.cpp
    engines/xeen/worldofxeen/worldofxeen.cpp



diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 794e47c..5cc1e77 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -1587,6 +1587,10 @@ const char *const EVENT_SAMPLES[6] = {
 	"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
 };
 
+const char *const CLOUDS_INTRO1 = "\xC" "00\xB" "082\x9" "040\x3"
+	"cKing Burlock\xB" "190\x9" "040Peasants\xB" "082\x9" "247"
+	"Lord Xeen\xB" "190\x9" "258Xeen's Pet\xB" "179\x9" "150Crodo";
+
 const char *const DARKSIDE_ENDING1 = "\n\x3" "cCongratulations\n"
 	"\n"
 	"Your Final Score is:\n"
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 2439a76..fc7ff48 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -564,6 +564,8 @@ extern const char *const IDENTIFY_MONSTERS;
 
 extern const char *const EVENT_SAMPLES[6];
 
+extern const char *const CLOUDS_INTRO1;
+
 extern const char *const DARKSIDE_ENDING1;
 extern const char *const DARKSIDE_ENDING2;
 
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
index 9c29ca7..d9f0344 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "xeen/worldofxeen/clouds_cutscenes.h"
+#include "xeen/resources.h"
 #include "xeen/sound.h"
 
 namespace Xeen {
@@ -40,53 +41,187 @@ bool CloudsCutscenes::showCloudsTitle() {
 	SpriteResource logo[2] = {
 		SpriteResource("logo.vga"), SpriteResource("logo1.vga")
 	};
-	sound.playFX(1);
+sound.playFX(1);
 
-	for (int idx = 0; idx < 80; ++idx) {
-		screen.restoreBackground();
-		logo[idx / 65].draw(screen, idx % 65);
-		screen.update();
-
-		switch (idx) {
-		case 37:
-			sound.playFX(0);
-			sound.playFX(53);
-			sound.playSound("fire.voc");
-			break;
-		case 52:
-		case 60:
-			sound.playFX(3);
-			break;
-		case 64:
-			sound.playFX(2);
-			break;
-		case 66:
-			sound.playFX(52);
-			sound.playSound("meangro&.voc");
-			break;
-		default:
-			break;
-		}
+for (int idx = 0; idx < 80; ++idx) {
+	screen.restoreBackground();
+	logo[idx / 65].draw(screen, idx % 65);
+	screen.update();
 
-		WAIT(2);
+	switch (idx) {
+	case 37:
+		sound.playFX(0);
+		sound.playFX(53);
+		sound.playSound("fire.voc");
+		break;
+	case 52:
+	case 60:
+		sound.playFX(3);
+		break;
+	case 64:
+		sound.playFX(2);
+		break;
+	case 66:
+		sound.playFX(52);
+		sound.playSound("meangro&.voc");
+		break;
+	default:
+		break;
 	}
 
-	screen.restoreBackground();
-	screen.update();
-	WAIT(30);
+	WAIT(2);
+}
 
-	screen.fadeOut(8);
-	logo[0].clear();
-	logo[1].clear();
+screen.restoreBackground();
+screen.update();
+WAIT(30);
 
-	return true;
+screen.fadeOut(8);
+logo[0].clear();
+logo[1].clear();
+
+return true;
 }
 
 bool CloudsCutscenes::showCloudsIntro() {
-	// TODO
 	EventsManager &events = *_vm->_events;
+	Screen &screen = *_vm->_screen;
 	Sound &sound = *_vm->_sound;
+	SpriteResource stars("stars.vga"), intro1("intro1.vga"),
+		lake("lake.vga"), xeen("xeen.vga"), wizTower("wiztower.vga"),
+		wizTower2("wiztwer2.vga"), lake2("lake2.vga"), lake3("lake3.vga"),
+		xeen1("xeen1.vga");
+
+	// Show the production splash screen
 	sound.playSong("mm4theme.m");
+	screen.loadBackground("jvc.raw");
+	screen.loadPalette("mm4.pal");
+	screen.update();
+	screen.fadeIn();
+	WAIT(30);
+	screen.fadeOut(8);
+
+	// Clouds of Xeen title with vertically scrolling background
+	screen.loadPalette("intro.pal");
+	screen.loadBackground("blank.raw");
+	screen.saveBackground();
+	stars.draw(screen, 0);
+	stars.draw(screen, 1, Common::Point(160, 0));
+	screen.loadPage(0);
+	intro1.draw(screen, 0);
+	screen.loadPage(1);
+
+	bool fadeFlag = true;
+	for (int yCtr = SCREEN_HEIGHT, yScroll = 0, xeenCtr = -1; yCtr > 0; --yCtr, ++yScroll) {
+		screen.vertMerge(yScroll);
+		if (yCtr < 160) {
+			xeen.draw(screen, 0);
+		}
+		else if (yCtr < 100) {
+			xeen.draw(screen, 0);
+			if (++xeenCtr < 14)
+				xeen1.draw(screen, xeenCtr);
+		}
+		screen.update();
+
+		if (fadeFlag) {
+			screen.fadeIn();
+			fadeFlag = false;
+		}
+
+		WAIT(1);
+	}
+
+	// Remainder of vertical scrolling of background
+	screen.restoreBackground();
+	intro1.draw(screen, 0);
+	screen.loadPage(0);
+	lake.draw(screen, 0);
+	screen.loadPage(1);
+
+	bool drawFlag = false;
+	for (int yCtr = SCREEN_HEIGHT - 1, yScroll = 1, lakeCtr = 0; yCtr > 0; --yCtr, ++yScroll) {
+		screen.vertMerge(yScroll);
+
+		if (yCtr < 95) {
+			if (++lakeCtr >= 44 || drawFlag) {
+				lakeCtr = 0;
+				drawFlag = true;
+			} else {
+				lake3.draw(screen, lakeCtr, Common::Point(0, yCtr));
+			}
+		}
+		
+		xeen.draw(screen, 0);
+		screen.update();
+		WAIT(1);
+	}
+
+	screen.freePages();
+
+	// Flying creatures moving horizontally
+	lake.draw(screen, 0);
+	screen.saveBackground();
+
+	int frameNum = 0;
+	events.updateGameCounter();
+	for (int idx = 0; idx < 100; ++idx) {
+		frameNum = (frameNum + 1) % 43;
+		screen.restoreBackground();
+		lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800);
+		WAIT(1);
+	}
+
+	// Zoom in on a closeup of the wizardry tower
+	const int XLIST1[16] = { 0, 5, 10, 15, 20, 25, 30, 35, 40, 44, 48, 52, 56, 60, 64, 68 };
+	const int XLIST2[16] = { 160, 155, 150, 145, 140, 135, 130, 125, 120, 114, 108, 102, 96, 90, 84, 78 };
+	const int YLIST[23] = { 0, 6, 12, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 51 };
+
+	for (int idx = 15; idx >= 0; --idx) {
+		events.updateGameCounter();
+
+		screen.restoreBackground();
+		lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800);
+		frameNum = (frameNum + 1) % 43;
+		wizTower.draw(screen, 0, Common::Point(XLIST1[idx], YLIST[idx]), 0, idx);
+		wizTower.draw(screen, 1, Common::Point(XLIST2[idx], YLIST[idx]), 0, idx);
+		screen.update();
+		WAIT(1);
+	}
+
+	// Cloaked figure walks horizontally
+	wizTower.draw(screen, 0);
+	wizTower.draw(screen, 1, Common::Point(160, 0));
+	screen.saveBackground();
+
+	for (int idx = 0; idx < 39; ++idx) {
+		screen.restoreBackground();
+		wizTower2.draw(screen, idx);
+		screen.update();
+
+		WAIT(2);
+	}
+
+	screen.fadeOut();
+	lake2.clear();
+	lake3.clear();
+	xeen1.clear();
+
+	//
+	const char *const VOCS[14] = {
+		"crodo1.voc", "crodo2.voc", "iamking.voc", "crodo3.voc",
+		"ya1.voc", "crodo4a.voc", "crodo4b.voc", "crodo4c.voc",
+		"xeenlaff.voc", "tiger2&.voc", "crodo5.voc", "crodo6.voc",
+		"xeenlaff.voc", "tiger2&.voc"
+	};
+	SpriteResource groupo("groupo.vga"), group("group.vga"), crodo("crodo.vga");
+
+	groupo.draw(screen, 0);
+	groupo.draw(screen, 1, Common::Point(160, 0));
+	crodo.draw(screen, 0, Common::Point(0, -5));
+	screen._windows[0].writeString(CLOUDS_INTRO1);
+
+	// TODO
 
 	events.wait(5000);
 	return true;
diff --git a/engines/xeen/worldofxeen/cutscenes.cpp b/engines/xeen/worldofxeen/cutscenes.cpp
index 701adb6..9710704 100644
--- a/engines/xeen/worldofxeen/cutscenes.cpp
+++ b/engines/xeen/worldofxeen/cutscenes.cpp
@@ -27,8 +27,10 @@ namespace Xeen {
 
 static const char *SUBTITLE_LINE = "\xC" "35\x3" "c\xB" "190\x9" "000%s";
 
-void Cutscenes::resetSubtitles() {
-	_subtitleLineNum = _subtitleSize = 0;
+void Cutscenes::resetSubtitles(uint lineNum, uint defaultSize) {
+	_subtitleLineNum = lineNum;
+	_subtitleSize = defaultSize;
+	recordTime();
 }
 
 void Cutscenes::showSubtitles(uint windowIndex) {
@@ -37,7 +39,7 @@ void Cutscenes::showSubtitles(uint windowIndex) {
 
 	if (sound._soundOn || _vm->shouldQuit()) {
 		// Sound is on, so subtitles aren't needed
-		resetSubtitles();
+		resetSubtitles(0, 0);
 	} else {
 		if (timeElapsed() > 1) {
 			++_subtitleSize;
diff --git a/engines/xeen/worldofxeen/cutscenes.h b/engines/xeen/worldofxeen/cutscenes.h
index 842b973..f4cb18e 100644
--- a/engines/xeen/worldofxeen/cutscenes.h
+++ b/engines/xeen/worldofxeen/cutscenes.h
@@ -49,7 +49,7 @@ protected:
 	/**
 	 * Resets the subtitles position
 	 */
-	void resetSubtitles();
+	void resetSubtitles(uint lineNum, uint defaultSize = 1);
 
 	/**
 	 * Free subtitles
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index 0517515..8624c2c 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -256,9 +256,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	WAIT(1);
 
 	_subtitles.load("special.bin");
-	recordTime();
-	resetSubtitles();
-	_subtitleLineNum = 21;
+	resetSubtitles(21, 0);
 
 	// Alamar stands up
 	for (int idx = 74; idx > 20; idx -= 2) {
@@ -433,9 +431,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	screen.fadeIn();
 	WAIT(2);
 
-	resetSubtitles();
-	_subtitleLineNum = 22;
-	recordTime();
+	resetSubtitles(22, 0);
 
 	for (int idx = 0; idx < 45; ++idx) {
 		screen.restoreBackground();
@@ -463,10 +459,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// Yep, that's my name, don't wear it out
 	SpriteResource sc08("sc08.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 23;
-	_subtitleSize = 1;
+	resetSubtitles(23);
 	sound.playFX(0);
 
 	for (int idx = 0; idx < 15; ++idx) {
@@ -493,10 +486,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	screen.saveBackground();
 	screen.update();
 
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 24;
-	_subtitleSize = 1;
+	resetSubtitles(24);
 
 	for (int idx = 0; idx < 15; ++idx) {
 		if (idx == 2)
@@ -517,10 +507,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// Nor do you!
 	SpriteResource sc10("sc10.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 25;
-	_subtitleSize = 1;
+	resetSubtitles(25);
 
 	for (int idx = 0; idx < 15; ++idx) {
 		if (idx == 3)
@@ -588,10 +575,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// I'm ready for you this time
 	SpriteResource sc13("sc13.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 26;
-	_subtitleSize = 1;
+	resetSubtitles(26);
 	sound.setMusicVolume(48);
 
 	for (int idx = 0; idx < 16; ++idx) {
@@ -616,10 +600,8 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// This fight will be your last
 	SpriteResource sc14("sc14.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 27;
-	_subtitleSize = 1;
+	resetSubtitles(27);
+
 	screen.fadeOut();
 	screen.loadBackground("blank.raw");
 	screen.saveBackground();
@@ -671,10 +653,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// I can not fail
 	SpriteResource sc16("sc16.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 28;
-	_subtitleSize = 1;
+	resetSubtitles(28);
 
 	screen.loadBackground("scene4.raw");
 	screen.loadPage(0);
@@ -930,10 +909,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	// Corak speaking here. It seems this was ditched in favor of the
 	// following closeup of him speaking "I do"
 	SpriteResource sc25("sc25a.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 29;
-	_subtitleSize = 1;
+	resetSubtitles(29);
 
 	screen.loadBackground("sc250001.raw");
 	screen.saveBackground();
@@ -958,10 +934,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 		SpriteResource("sc26a.end"), SpriteResource("sc26b.end"),
 		SpriteResource("sc26c.end"), SpriteResource("sc26d.end")
 	};
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 30;
-	_subtitleSize = 1;
+	resetSubtitles(30);
 
 	screen.loadBackground("sc260001.raw");
 	screen.saveBackground();
@@ -990,10 +963,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 
 	// What? No!
 	SpriteResource sc27("sc27.end");
-	resetSubtitles();
-	recordTime();
-	_subtitleLineNum = 31;
-	_subtitleSize = 1;
+	resetSubtitles(31);
 	showSubtitles();
 
 	for (int idx = 0; idx < 12; ++idx) {
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index 7f29249..6df07d9 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -40,7 +40,7 @@ void WorldOfXeenEngine::showIntro() {
 	if (gDebugLevel == 0)
 		return;
 
-	showCloudsTitle();
+	showCloudsIntro();
 	/*
 	bool completed = showDarkSideTitle();
 	if (!_seenDarkSideIntro && completed)





More information about the Scummvm-git-logs mailing list