[Scummvm-git-logs] scummvm master -> 701c816307985a7a08f3bb28d4e23042b01af54c

dreammaster dreammaster at scummvm.org
Mon Feb 5 03:56:24 CET 2018


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:
701c816307 XEEN: In progress implementing Clouds of Xeen ending


Commit: 701c816307985a7a08f3bb28d4e23042b01af54c
    https://github.com/scummvm/scummvm/commit/701c816307985a7a08f3bb28d4e23042b01af54c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2018-02-04T21:56:18-05:00

Commit Message:
XEEN: In progress implementing Clouds of Xeen ending

Changed paths:
    engines/xeen/worldofxeen/clouds_cutscenes.cpp
    engines/xeen/worldofxeen/clouds_cutscenes.h


diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
index 26ce12e..baec53b 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -336,7 +336,12 @@ bool CloudsCutscenes::showCloudsIntro() {
 	return true;
 }
 
-bool CloudsCutscenes::showCloudsEnding() {
+void CloudsCutscenes::showCloudsEnding() {
+	if (showCloudsEnding1())
+		showCloudsEnding2();
+}
+
+bool CloudsCutscenes::showCloudsEnding1() {
 	EventsManager &events = *_vm->_events;
 	FileManager &files = *_vm->_files;
 	Screen &screen = *_vm->_screen;
@@ -361,12 +366,13 @@ bool CloudsCutscenes::showCloudsEnding() {
 	sound.playFX(1);
 	sound.playFX(34);
 
+	// prec loop
 	for (int idx = 1; idx < 42; ++idx) {
 		// Load up the background frame of swirling clouds
 		loadScreen(Common::String::format("prec00%02u.frm", idx));
 
 		// Render castle in front of it
-		prec.draw(0, 0);
+		prec.draw(0, 0, Common::Point(0, 0));
 		prec.draw(0, 1, Common::Point(160, 0));
 		screen.update();
 
@@ -391,22 +397,181 @@ bool CloudsCutscenes::showCloudsEnding() {
 
 	prec.clear();
 
-	// Show swirling vortex
-	// TODO? SpriteResource vort[21];
-	SpriteResource cast[16], darkLord[4];
+	SpriteResource cast[16], darkLord[3];
 	for (int idx = 1; idx < 7; ++idx)
 		cast[idx - 1].load(Common::String::format("cast%02u.end", idx));
 	for (int idx = 1; idx < 4; ++idx)
-		darkLord[idx].load(Common::String::format("darklrd%d.end", idx));
+		darkLord[idx - 1].load(Common::String::format("darklrd%d.end", idx));
 
+	// First vortex loop
+	int cloudsCtr = 1;
 	for (int idx = 1; idx < 16; ++idx) {
-		loadScreen(Common::String::format("vort%02u.frm", idx));
+		loadScreen(Common::String::format("vort%02u.frm", cloudsCtr++));
 		cast[0].draw(0, 0);
-		cast[idx - 1].draw(0, 0, Common::Point(0, 100));
+		cast[0].draw(0, 0, Common::Point(0, 100));
+		WAIT(3);
+	}
+
+	screen.loadPalette("mm4.pal");
+	screen.fadeIn(0x81);
+
+	const byte COUNTS1[6] = { 9, 3, 2, 2, 3, 15 };
+	bool flag = false;
+	for (int idx1 = 1; idx1 < 7; ++idx1) {
+		for (int idx2 = 0; idx2 < COUNTS1[idx1 - 1]; ++idx2) {
+			loadScreen(Common::String::format("vort%02u.frm", cloudsCtr));
+			if (cloudsCtr++ > 20)
+				cloudsCtr = 1;
+
+			if (flag && !sound.isPlaying()) {
+				flag = false;
+				sound.playFX(34);
+			} else if (!flag && idx1 == 1 && idx2 == 6) {
+				flag = true;
+				sound.playSound("xeenlaff.voc");
+			}
+
+			switch (cloudsCtr) {
+			case 0:
+			case 1:
+			case 5:
+			case 9:
+			case 15:
+				sound.playFX(34);
+				break;
+			case 2:
+			case 7:
+			case 10:
+			case 13:
+				sound.playFX(33);
+				break;
+			default:
+				break;
+			}
+
+			cast[idx1 - 1].draw(0, idx2, Common::Point(0, 0));
+			cast[idx1 - 1].draw(0, idx2, Common::Point(0, 100));
+			WAIT(3);
+		}
+	}
+
+	for (int idx = 0; idx < 16; ++idx) {
+		loadScreen(Common::String::format("vort%02u.frm", cloudsCtr));
+		if (cloudsCtr++ > 20)
+			cloudsCtr = 1;
+
+		if (idx < 7)
+			darkLord[0].draw(0, idx);
+		else if (idx < 11)
+			darkLord[1].draw(0, idx - 7);
+		else
+			darkLord[2].draw(0, idx - 11);
+
+		switch (cloudsCtr - 1) {
+		case 0:
+		case 4:
+		case 8:
+		case 14:
+			sound.playFX(34);
+			break;
+		case 1:
+		case 6:
+		case 9:
+		case 12:
+			sound.playFX(33);
+			break;
+		default:
+			break;
+		}
+
+		WAIT(3);
+	}
+	sound.setMusicVolume(75);
+
+	for (int idx = 0; idx < 3; ++idx) {
+		switch (idx) {
+		case 0:
+			sound.playSound("dark1.voc");
+			break;
+		case 1:
+			sound.playSound("dark2.voc");
+			break;
+		case 2:
+			sound.playSound("dark3.voc");
+			break;
+		}
+
+		do {
+			loadScreen(Common::String::format("vort%02u.frm", cloudsCtr));
+			if (cloudsCtr++ > 20)
+				cloudsCtr = 1;
+
+			darkLord[2].draw(0, getSpeakingFrame(2, 6));
+
+			switch (cloudsCtr - 1) {
+			case 0:
+			case 4:
+			case 8:
+			case 14:
+				sound.playFX(34);
+				break;
+			case 1:
+			case 6:
+			case 9:
+			case 12:
+				sound.playFX(33);
+				break;
+			default:
+				break;
+			}
+
+			showSubtitles(0);
+			WAIT(3);
+		} while (sound.isPlaying() || _subtitleSize > 0);
 	}
 
+	sound.playSound("darklaff.voc");
+	sound.setMusicVolume(95);
+
+	for (int idx = 12; idx >= 0; --idx) {
+		loadScreen(Common::String::format("vort%02u.frm", cloudsCtr));
+		if (cloudsCtr++ > 20)
+			cloudsCtr = 1;
+
+		if (idx < 7)
+			darkLord[0].draw(0, idx);
+		else if (idx < 11)
+			darkLord[1].draw(0, idx - 7);
+		else
+			darkLord[2].draw(0, idx - 11);
+
+		switch (cloudsCtr - 1) {
+		case 0:
+		case 4:
+		case 8:
+		case 14:
+			sound.playFX(34);
+			break;
+		case 1:
+		case 6:
+		case 9:
+		case 12:
+			sound.playFX(33);
+			break;
+		default:
+			break;
+		}
+
+		WAIT(3);
+	}
+
+	sound.stopSound();
+	screen.fadeOut();
+	return true;
+}
+
+bool CloudsCutscenes::showCloudsEnding2() {
 	// TODO
-	WAIT(5000);
 	return true;
 }
 
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.h b/engines/xeen/worldofxeen/clouds_cutscenes.h
index 262d36b..8469f7c 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.h
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.h
@@ -39,6 +39,16 @@ private:
 	static const byte _DECODE_TABLE2[256];
 private:
 	void loadScreen(const Common::String &name);
+
+	/**
+	 * Shows part 1 of the Clouds of Xeen ending
+	 */
+	bool showCloudsEnding1();
+
+	/**
+	 * Shows part 1 of the Clouds of Xeen ending
+	 */
+	bool showCloudsEnding2();
 public:
 	CloudsCutscenes(XeenEngine *vm) : Cutscenes(vm) {}
 
@@ -55,7 +65,7 @@ public:
 	/**
 	 * Shows the Clouds of Xeen ending sequence
 	 */
-	bool showCloudsEnding();
+	void showCloudsEnding();
 };
 
 } // End of namespace WorldOfXeen





More information about the Scummvm-git-logs mailing list