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

dreammaster dreammaster at scummvm.org
Tue Sep 20 03:00:19 CEST 2016


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

Summary:
212b1b7531 XEEN: Fix compiler warning
d06e32f030 XEEN: Added remainder of Darkside ending


Commit: 212b1b7531d381e30144a1eccff50f4943d7698d
    https://github.com/scummvm/scummvm/commit/212b1b7531d381e30144a1eccff50f4943d7698d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-19T20:59:55-04:00

Commit Message:
XEEN: Fix compiler warning

Changed paths:
    engines/xeen/music.cpp



diff --git a/engines/xeen/music.cpp b/engines/xeen/music.cpp
index 9dab94b..e9311e9 100644
--- a/engines/xeen/music.cpp
+++ b/engines/xeen/music.cpp
@@ -687,12 +687,12 @@ void Music::loadEffectsData() {
 	_effectsData = effectsData;
 
 	// Locate the playFX routine
-	const byte *playFX = effectsData + READ_LE_UINT16(effectsData + 10) + 12;
-	assert(READ_BE_UINT16(playFX + 28) == 0x81FB);
-	uint numEffects = READ_LE_UINT16(playFX + 30);
+	const byte *fx = effectsData + READ_LE_UINT16(effectsData + 10) + 12;
+	assert(READ_BE_UINT16(fx + 28) == 0x81FB);
+	uint numEffects = READ_LE_UINT16(fx + 30);
 
-	assert(READ_BE_UINT16(playFX + 36) == 0x8B87);
-	const byte *table = effectsData + READ_LE_UINT16(playFX + 38);
+	assert(READ_BE_UINT16(fx + 36) == 0x8B87);
+	const byte *table = effectsData + READ_LE_UINT16(fx + 38);
 
 	// Extract the effects offsets
 	_effectsOffsets.resize(numEffects);


Commit: d06e32f030501457ab850efcb6c45366ed38f721
    https://github.com/scummvm/scummvm/commit/d06e32f030501457ab850efcb6c45366ed38f721
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-19T21:00:07-04:00

Commit Message:
XEEN: Added remainder of Darkside ending

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



diff --git a/engines/xeen/worldofxeen/cutscenes.h b/engines/xeen/worldofxeen/cutscenes.h
index 1443ba6..842b973 100644
--- a/engines/xeen/worldofxeen/cutscenes.h
+++ b/engines/xeen/worldofxeen/cutscenes.h
@@ -65,7 +65,7 @@ protected:
 	 * Delays either the specified number of frames, or until
 	 * an entire subtitle line is shown if subtitles are on
 	 */
-	bool subtitlesWait(uint minTime);
+	bool subtitlesWait(uint minTime = 0);
 
 	/**
 	 * Records the current execution time
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index 6c6dc68..ce462f9 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -224,11 +224,11 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	Screen &screen = *_vm->_screen;
 	Sound &sound = *_vm->_sound;
 
-	//sound.playSong("dngon3.m");
+	sound.playSong("dngon3.m");
 	screen.loadBackground("scene1.raw");
 	screen.loadPalette("endgame.pal");
 	screen.update();
-/*
+
 	screen.fadeIn();
 	WAIT(30);
 
@@ -315,7 +315,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	File whoosh("whoosh.voc");
 
 	screen.horizMerge();
-	int yp = 101, ctr = 0, frameNum = 0;
+	int yp = 101, tCtr = 0, frameNum = 0;
 	for (int xp = 0; xp < 320; xp += 2) {
 		screen.horizMerge(xp);
 
@@ -328,7 +328,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 			sound.playSound(whoosh);
 		WAIT(1);
 
-		if (++ctr % 2)
+		if (++tCtr % 2)
 			frameNum = (frameNum + 1) % 10;
 
 		if (xp < 100)
@@ -502,6 +502,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 		screen.restoreBackground();
 		showSubtitles();
 	} while (_subtitleSize);
+	
 	sc09.clear();
 
 	// Nor do you!
@@ -516,7 +517,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 			sound.playSound("nordo2.voc");
 
 		screen.restoreBackground();
-		sc09.draw(screen, getSpeakingFrame(0, 1));
+		sc10.draw(screen, getSpeakingFrame(0, 1));
 		showSubtitles();
 		WAIT(3);
 	}
@@ -525,8 +526,8 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 		screen.restoreBackground();
 		showSubtitles();
 	} while (_subtitleSize);
+
 	sc10.clear();
-	*/_subtitles.load("special.bin");
 
 	// Closeup of side of Alamar's helmet
 	SpriteResource sc11("sc11.end");
@@ -617,7 +618,7 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	screen.update();
 	screen.fadeIn();
 
-	for (int waveNum = 0; waveNum < 3; ++waveNum) {
+	for (int waveNum = 0; waveNum < 2; ++waveNum) {
 		for (int idx = 0; idx < 10; ++idx) {
 			if (waveNum == 0 && idx == 3)
 				sound.playSound("fight2.voc");
@@ -637,10 +638,440 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 	sc14.clear();
 
 	// Fighting start
+	SpriteResource sc15("sc15.end");
+	screen.loadBackground("mainback.raw");
+	screen.saveBackground();
+	sc15.draw(screen, 0, Common::Point(52, 84));
+	screen.update();
+
+	for (int idx = 0; idx < 21; ++idx) {
+		screen.restoreBackground();
+		sc15.draw(screen, idx, Common::Point(52, 84));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 4)
+			sound.playSound("disint.voc");
+		else if (idx == 12)
+			sound.playSound("explosio.voc");
+	}
+
+	sc15.clear();
+	sound.stopSound();
+
+	// I can not fail
+	SpriteResource sc16("sc16.end");
+	resetSubtitles();
+	recordTime();
+	_subtitleLineNum = 28;
+	_subtitleSize = 1;
+
+	screen.loadBackground("scene4.raw");
+	screen.loadPage(0);
+	screen.loadBackground("scene4-1.raw");
+	screen.loadPage(1);
+	screen.loadBackground("sc170001.raw");
+	screen.saveBackground();
+	screen.horizMerge(0);
+	sc16.draw(screen, 0, Common::Point(7, 29));	
+	showSubtitles();
+	sound.playSound("fail1.voc");
+
+	for (int idx = 0; idx < 5; ++idx) {
+		screen.horizMerge(0);
+		sc16.draw(screen, idx, Common::Point(7, 29));
+		showSubtitles();
+		WAIT(4);
+	}
+
+	// Force sphere goes horizontally
+	int val = 5;
+	for (int idx = 0; idx < 320; idx += 16) {
+		screen.horizMerge(idx);
+		sc16.draw(screen, (val >= 12) ? 11 : val++,
+			Common::Point(idx * -1 + 7, 29));
+
+		if (val > 10)
+			sc16.draw(screen, 12, Common::Point(273, 70));
+
+		showSubtitles();
+		WAIT(2);
+
+		if (idx == 48)
+			sound.playSound("alien2.voc");
+	}
+
+	screen.freePages();
+	sc16.clear();
+
+	// Sheltem protects himself with cloak
+	SpriteResource sc17[2] = {
+		SpriteResource("sc17xa.end"), SpriteResource("sc17xb.end")
+	};
+	screen.restoreBackground();
+	screen.update();
+
+	for (int idx = 0; idx < 16; ++idx) {
+		screen.restoreBackground();
+		sc17[idx / 8].draw(screen, idx % 8, Common::Point(44, 19));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 9)
+			sound.playSound("thud1.voc");
+	}
+
+	screen.fadeOut();
+	sc17[0].clear();
+	sc17[1].clear();
+
+	// Sheltem fires on Corak
+	SpriteResource sc18[4] = {
+		SpriteResource("sc18a.end"), SpriteResource("sc18b.end"),
+		SpriteResource("sc18c.end"), SpriteResource("sc18d.end")
+	};
+	screen.loadBackground("sc180001.raw");
+	screen.saveBackground();
+	screen.update();
+	screen.fadeIn();
+
+	for (int idx = 0; idx < 31; ++idx) {
+		screen.restoreBackground();
+		sc18[idx / 8].draw(screen, idx % 8, Common::Point(29, 12));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 2)
+			sound.playSound("gascompr.voc");
+	}
+
+	for (int idx = 0; idx < 4; ++idx)
+		sc18[idx].clear();
+	
+	// Closeup of Corak bleeding
+	SpriteResource sc19("sc19.end");
+	screen.loadBackground("sc190001.raw");
+	screen.saveBackground();
+	screen.update();
+
+	for (int idx = 0; idx < 28; ++idx) {
+		if (idx == 20)
+			sound.songCommand(207);
+
+		screen.restoreBackground();
+		sc19.draw(screen, idx, Common::Point(33, 10));
+		WAIT(3);
+	}
+
+	sc19.clear();
+	sound.stopSong();
+	screen.fadeOut();
+
+	// Corak waving his hands
+	SpriteResource sc20("sc20.end");
+	sound.setMusicVolume(95);
+	sound.playSong("sf17.m");
+	screen.loadBackground("blank.raw");
+	screen.saveBackground();
+	screen.update();
+	screen.fadeIn();
+
+	for (int waveNum = 0; waveNum < 2; ++waveNum) {
+		sound.playSound("cast.voc");
+
+		for (int idx = 0; idx < 9; ++idx) {
+			screen.restoreBackground();
+			sc20.draw(screen, idx, Common::Point(80, 18));
+			screen.update();
+			WAIT(3);
+		}
+	}
+
+	sc20.clear();
+
+	// Sheltem bounces back bolts that Corak fires
+	SpriteResource sc21("sc21.end");
+	File alien2("alien2.voc");
+	screen.loadBackground("mainback.raw");
+	screen.saveBackground();
+	sc21.draw(screen, 0, Common::Point(133, 81));
+	screen.update();
+
+	for (int boltNum = 0; boltNum < 4; ++boltNum) {
+		sound.playSound(alien2);
+
+		for (int idx = (boltNum == 0) ? 0 : 3; idx < 13; ++idx) {
+			screen.restoreBackground();
+			sc21.draw(screen, idx, Common::Point(133, 81));
+			WAIT(2);
+		}
+	}
+
+	screen.restoreBackground();
+	sc21.draw(screen, 0, Common::Point(133, 81));
+	screen.update();
+
+	sc21.clear();
+	alien2.close();
+
+	// Sheltem fires force sphere at Corak
+	SpriteResource sc22("sc22.end");
+	screen.loadBackground("scene4.raw");
+	screen.loadPage(0);
+	screen.loadBackground("scene4-1.raw");
+	screen.loadPage(1);
+	screen.loadBackground("sc230001.raw");
+	screen.saveBackground();
+	screen.horizMerge(SCREEN_WIDTH);
+
+	while (sound.isPlaying()) {
+		WAIT(1);
+	}
+
+	sc22.draw(screen, 0, Common::Point(156, 28));
+	screen.update();
+	sound.playSound("cast.voc");
+
+	for (int idx = 0; idx < 5; ++idx) {
+		screen.horizMerge(SCREEN_WIDTH);
+		sc22.draw(screen, idx, Common::Point(156, 28));
+		screen.update();
+		WAIT(3);
+	}
+
+	// The sphere travels horizontally
+	sound.playSound("gascompr.voc");
 
+	int ctr = 5;
+	for (int idx = SCREEN_WIDTH, xOffset = 0; idx >= 0; idx -= 16, xOffset += 16) {
+		screen.horizMerge(idx);
+		sc22.draw(screen, (ctr >= 8) ? 7 : ctr++,
+			Common::Point(xOffset + 156, 28), SPRFLAG_800);
+		if (ctr > 7)
+			sc22.draw(screen, 8, Common::Point(136, 64));
+		screen.update();
+
+		WAIT(2);
+	}
+
+	screen.freePages();
+	sc22.clear();
+
+	// Corak raises shield and blocks sphere
+	SpriteResource sc23[2] = {
+		SpriteResource("sc23a.end"), SpriteResource("sc23b.end")
+	};
+
+	screen.restoreBackground();
+	screen.update();
+	sound.playSound("cast.voc");
+
+	for (int idx = 0; idx < 19; ++idx) {
+		screen.restoreBackground();
+		sc23[idx / 12].draw(screen, idx % 12, Common::Point(72, 4));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 5)
+			sound.playSound("padspell.voc");
+		else if (idx == 11)
+			sound.playFX(9);
+	}
+
+	screen.restoreBackground();
+	sc23[0].draw(screen, 0, Common::Point(72, 4));
+	screen.update();
+	screen.fadeOut();
+
+	sc23[0].clear();
+	sc23[1].clear();
+
+	// Corak does a ricochet shot on Sheltem
+	SpriteResource sc24[2] = {
+		SpriteResource("sc24a.end"), SpriteResource("sc24b.end")
+	};
+
+	screen.loadBackground("mainback.raw");
+	screen.saveBackground();
+	sc24[0].draw(screen, 0, Common::Point(148, 0));
+	screen.update();
+	screen.fadeIn(4);
+	sound.playSound("cast.voc");
+
+	for (int idx = 0; idx < 30; ++idx) {
+		screen.restoreBackground();
+		sc24[idx / 15].draw(screen, idx % 15, Common::Point(148, 0));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 6)
+			sound.playSound("padspell.voc");
+		else if (idx == 11 || idx == 14)
+			sound.playSound("click.voc");
+		else if (idx == 17)
+			sound.playSound("thud1.voc");
+	}
+
+	sc24[0].clear();
+	sc24[1].clear();
+
+	// Admit your defeat Corak
+	// Interestingly, the original also has a sc25b.end here, which was of
+	// 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;
+
+	screen.loadBackground("sc250001.raw");
+	screen.saveBackground();
+	sc25.draw(screen, 0, Common::Point(27, 30));
+	screen.update();
+	
+	for (int struggleNum = 0; struggleNum < 2; ++struggleNum) {
+		for (int idx = 0; idx < 9; ++idx) {
+			if (struggleNum == 0 && idx == 2)
+				sound.playSound("admit2.voc");
+
+			sc25.draw(screen, idx, Common::Point(27, 30));
+			showSubtitles();
+			WAIT(3);
+		}
+	}
+	subtitlesWait();
+	sc25.clear();
+
+	// I do. Kamakazi time
+	SpriteResource sc26[4] = {
+		SpriteResource("sc26a.end"), SpriteResource("sc26b.end"),
+		SpriteResource("sc26c.end"), SpriteResource("sc26d.end")
+	};
+	resetSubtitles();
+	recordTime();
+	_subtitleLineNum = 30;
+	_subtitleSize = 1;
+
+	screen.loadBackground("sc260001.raw");
+	screen.saveBackground();
+	showSubtitles();
+	sound.playSound("ido2.voc");
+
+	for (int idx = 0; sound.isPlaying() || _subtitleSize; ) {
+		screen.restoreBackground();
+		sc26[idx / 8].draw(screen, idx % 8, Common::Point(58, 25));
+		WAIT(2);
+
+		idx = (idx == 31) ? 22 : idx + 1;
+	}
+
+	screen.loadBackground("sc270001.raw");
+	screen.saveBackground();
+
+	while (sound.isPlaying() && !_vm->shouldQuit()) {
+		events.pollEventsAndWait();
+		if (events.isKeyMousePressed())
+			return false;
+	}
+
+	for (int idx = 0; idx < 4; ++idx)
+		sc26[idx].clear();
+
+	// What? No!
+	SpriteResource sc27("sc27.end");
+	resetSubtitles();
+	recordTime();
+	_subtitleLineNum = 31;
+	_subtitleSize = 1;
+	showSubtitles();
+
+	for (int idx = 0; idx < 12; ++idx) {
+		if (idx == 1)
+			sound.playSound("what3.voc");
+
+		screen.restoreBackground();
+		sc27.draw(screen, idx, Common::Point(65, 22));
+		showSubtitles();
+		WAIT(3);
+	}
+
+	subtitlesWait();
+	sc27.clear();
+
+	// Vortex is opened and the two are sucked in, obliterating them
+	SpriteResource sc28[11] = {
+		SpriteResource("sca28.end"), SpriteResource("scb28.end"),
+		SpriteResource("scc28.end"), SpriteResource("scd28.end"),
+		SpriteResource("sce28.end"), SpriteResource("scf28.end"),
+		SpriteResource("scg28.end"), SpriteResource("sch28.end"),
+		SpriteResource("sci28.end"), SpriteResource("sck28.end"),
+		SpriteResource("sck28.end")
+	};
+
+	sound.playSong("dungeon2.m");
+	screen.fadeOut();
+	screen.loadBackground("mainback.raw");
+	screen.saveBackground();
+
+	sc28[0].draw(screen, 0, Common::Point(74, 0));
+	screen.update();
+	screen.fadeIn();
+
+	for (int idx = 0; idx < 44; ++idx) {
+		screen.restoreBackground();
+		sc28[idx / 4].draw(screen, idx % 4, Common::Point(74, 0));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 0 || idx == 10 || idx == 18)
+			sound.playSound("rumble.voc");
+		else if (idx == 27)
+			sound.playSound("airmon.voc");
+		else if (idx == 38)
+			sound.playSound("explosio.voc");
+	}
+
+	screen.fadeOut();
+	for (int idx = 0; idx < 11; ++idx)
+		sc28[idx].clear();
+
+	// Longshot of castle blowing up
+	SpriteResource sc29[6] = {
+		SpriteResource("sc29a.end"), SpriteResource("sc29b.end"),
+		SpriteResource("sc29c.end"), SpriteResource("sc29d.end"),
+		SpriteResource("sc29e.end"), SpriteResource("sc29f.end")
+	};
+
+	screen.loadBackground("sc290001.raw");
+	screen.saveBackground();
+	screen.fadeIn();
+
+	for (int idx = 0; idx < 54; ++idx) {
+		screen.restoreBackground();
+		if (idx == 40)
+			sound.songCommand(207);
+
+		sc29[idx / 10].draw(screen, idx % 10, Common::Point(92, 10));
+		screen.update();
+		WAIT(3);
+
+		if (idx == 1 || idx == 5 || idx == 11 || idx == 19 || idx == 34 || idx == 35)
+			sound.playSound("explosio.voc");
+	}
+
+	// Final bit of smoke from destroyed castle
+	for (int loopNum = 0; loopNum < 4; ++loopNum) {
+		for (int idx = 49; idx < 54; ++idx) {
+			screen.restoreBackground();
+			sc29[idx / 10].draw(screen, idx % 10, Common::Point(92, 10));
+			screen.update();
+			WAIT(3);
+		}
+	}
 
-	// TODO
-	events.wait(5000);
+	for (int idx = 0; idx < 6; ++idx)
+		sc29[idx].clear();
 
 	freeSubtitles();
 	return true;





More information about the Scummvm-git-logs mailing list