aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen
diff options
context:
space:
mode:
authorPaul Gilbert2018-02-11 15:34:03 -0500
committerPaul Gilbert2018-02-11 15:34:03 -0500
commitc42d7663ae2d47896f696c53e8532ed0155a72d8 (patch)
treeeb974ab36fc53e49ff0bcbd756acf08b24b6b899 /engines/xeen
parent70e68ace1823e3535a6e82fddb7c960067fc6cb8 (diff)
downloadscummvm-rg350-c42d7663ae2d47896f696c53e8532ed0155a72d8.tar.gz
scummvm-rg350-c42d7663ae2d47896f696c53e8532ed0155a72d8.tar.bz2
scummvm-rg350-c42d7663ae2d47896f696c53e8532ed0155a72d8.zip
XEEN: Fixes and comments for Clouds Ending part 1
Diffstat (limited to 'engines/xeen')
-rw-r--r--engines/xeen/worldofxeen/clouds_cutscenes.cpp30
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.cpp1
2 files changed, 22 insertions, 9 deletions
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
index aa2fb14834..e19770a5f0 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -30,7 +30,7 @@ namespace WorldOfXeen {
#define ROTATE_BG screen.horizMerge(_mergeX); \
_mergeX = (_mergeX + 1) % SCREEN_WIDTH
#define LOAD_VORTEX loadScreen(Common::String::format("vort%02u.frm", cloudsCtr)); \
- if (cloudsCtr++ > 20) \
+ if (++cloudsCtr > 20) \
cloudsCtr = 1
bool CloudsCutscenes::showCloudsTitle() {
@@ -409,24 +409,27 @@ bool CloudsCutscenes::showCloudsEnding1() {
prec.clear();
- SpriteResource cast[16], darkLord[3];
+ SpriteResource cast1[7], cast2[7], darkLord[3];
for (int idx = 1; idx < 7; ++idx)
- cast[idx - 1].load(Common::String::format("cast%02u.end", idx));
+ cast1[idx - 1].load(Common::String::format("cast%02d.end", idx));
+ for (int idx = 1; idx < 7; ++idx)
+ cast2[idx - 1].load(Common::String::format("casb%02d.end", idx));
for (int idx = 1; idx < 4; ++idx)
darkLord[idx - 1].load(Common::String::format("darklrd%d.end", idx));
- // First vortex loop
+ // Castle close-up
int cloudsCtr = 1;
for (int idx = 1; idx < 16; ++idx) {
LOAD_VORTEX;
- cast[0].draw(0, 0);
- cast[0].draw(0, 0, Common::Point(0, 100));
+ cast1[0].draw(0, 0);
+ cast2[0].draw(0, 0, Common::Point(0, 100));
WAIT(3);
}
screen.loadPalette("mm4.pal");
screen.fadeIn(0x81);
+ // Castle gets destroyed / sucked into the vortex
const byte COUNTS1[6] = { 9, 3, 2, 2, 3, 15 };
bool flag = false;
for (int idx1 = 1; idx1 < 7; ++idx1) {
@@ -458,12 +461,13 @@ bool CloudsCutscenes::showCloudsEnding1() {
}
LOAD_VORTEX;
- cast[idx1 - 1].draw(0, idx2, Common::Point(0, 0));
- cast[idx1 - 1].draw(0, idx2, Common::Point(0, 100));
+ cast1[idx1 - 1].draw(0, idx2, Common::Point(0, 0));
+ cast2[idx1 - 1].draw(0, idx2, Common::Point(0, 100));
WAIT(3);
}
}
+ // Fade in of Alamar
for (int idx = 0; idx < 16; ++idx) {
LOAD_VORTEX;
@@ -495,15 +499,19 @@ bool CloudsCutscenes::showCloudsEnding1() {
}
sound.setMusicVolume(75);
+ // Alamar's monologue
for (int idx = 0; idx < 3; ++idx) {
switch (idx) {
case 0:
+ // You have defeated my general, Lord Xeen
sound.playSound("dark1.voc");
break;
case 1:
+ // And foiled my plans to conquer this world
sound.playSound("dark2.voc");
break;
case 2:
+ // But the Dark Side will always be mine
sound.playSound("dark3.voc");
break;
}
@@ -534,9 +542,11 @@ bool CloudsCutscenes::showCloudsEnding1() {
} while (sound.isPlaying() || _subtitleSize > 0);
}
+ // Laugh
sound.playSound("darklaff.voc");
sound.setMusicVolume(95);
+ // Alamar fade out
for (int idx = 12; idx >= 0; --idx) {
LOAD_VORTEX;
@@ -580,12 +590,14 @@ bool CloudsCutscenes::showCloudsEnding2() {
SpriteResource king("king.end"), room("room.end"), bigSky("bigsky.end"),
people("people.end"), crodo("crodo.end"), kingCord("kingcord.end");
+ // Later at Castle Burlock
screen.loadPalette("endgame.pal");
screen.loadBackground("later.raw");
screen.fadeIn();
WAIT(100);
screen.fadeOut();
+ // Horizontal pan to the right within throne room
screen.loadBackground("throne1.raw");
screen.loadPage(0);
screen.loadBackground("throne2.raw");
@@ -594,7 +606,6 @@ bool CloudsCutscenes::showCloudsEnding2() {
int ctr1 = 0, ctr3 = -1, ctr4 = 0, ctr5 = 0;
int xp2 = SCREEN_WIDTH;
for (int ctr2 = SCREEN_WIDTH, xp1 = 117, xp3 = 0; ctr2 > 0; ) {
- events.updateGameCounter();
screen.horizMerge(xp3);
people.draw(0, 0, Common::Point(xp1, 68), SPRFLAG_800);
if (xp3 > 250) {
@@ -633,6 +644,7 @@ bool CloudsCutscenes::showCloudsEnding2() {
Graphics::ManagedSurface savedBg;
savedBg.blitFrom(screen);
+ // Close up of King Roland
const int XLIST1[13] = { 0, -5, -10, -15, -20, -25, -30, -33, -27, -22, -17 };
const int XLIST2[13] = { 60, 145, 130, 115, 100, 85, 70, 57, 53, 48, 42, 39, 34 };
const int YLIST[13] = { 42, 39, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index b2ff215ebf..d585535c51 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -176,6 +176,7 @@ void WorldOfXeenEngine::showCutscene(const Common::String &name, int status, uin
else if (name == "WORLDEND")
showWorldOfXeenEnding((GooberState)status, score);
+ _screen->freePages();
_events->clearEvents();
_quitMode = QMODE_MENU;
}