aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen
diff options
context:
space:
mode:
authorPaul Gilbert2018-02-28 22:07:00 -0500
committerPaul Gilbert2018-02-28 22:07:00 -0500
commita3c8840dcc867429872142deb80eb8d2181483f4 (patch)
treed537c35b35a8eec22a70e4efc2dd0424d269dcf7 /engines/xeen
parent29b8812af3cafd58c8e39d00427b4f30e7f2ebe1 (diff)
downloadscummvm-rg350-a3c8840dcc867429872142deb80eb8d2181483f4.tar.gz
scummvm-rg350-a3c8840dcc867429872142deb80eb8d2181483f4.tar.bz2
scummvm-rg350-a3c8840dcc867429872142deb80eb8d2181483f4.zip
XEEN: In progress implementing Dark Side intro
Diffstat (limited to 'engines/xeen')
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.cpp472
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.h16
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.cpp16
3 files changed, 424 insertions, 80 deletions
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index 904e94e4b2..79160088e4 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -27,16 +27,47 @@
#include "xeen/worldofxeen/worldofxeen_resources.h"
namespace Xeen {
-namespace WorldOfXeen {
+ namespace WorldOfXeen {
-static const int CUTSCENES_XLIST[32] = {
+#define WAIT_SUBTITLES(time) \
+ showSubtitles(); \
+ WAIT(time)
+
+static const int PHAROAH_FRAMES[32] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 2, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+const int PHAROAH_YLIST[32] = {
+ -3, -3, -3, -3, -3, -3, -3, -3, -1, 0, 0, 0, 0, 0, 0, 0,
+ -1, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3
+};
+const int CLAW_XLIST[32] = {
+ 223, 208, 187, 158, 129, 104, 85, 70, 61, 53, 49,
+ 46, 46, 49, 53, 56, 61, 67, 72, 82, 91, 103,
+ 117, 130, 142, 156, 170, 184, 199, 210, 221, 227
+};
+const int CLAW_YLIST[32] = {
+ 116, 111, 105, 103, 101, 96, 93, 92, 92, 95, 98,
+ 100, 104, 107, 107, 105, 102, 100, 98, 99, 101, 104,
+ 107, 109, 110, 111, 114, 115, 115, 116, 116, 118
+};
+static const int CLAW_XLIST2[32] = {
146, 145, 143, 141, 141, 141, 141, 141, 141, 141, 141, 142, 143, 144, 145, 146,
146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146
};
-static const int CUTSCENES_YLIST[32] = {
+static const int CLAW_YLIST2[32] = {
143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
143, 143, 144, 145, 145, 145, 145, 145, 145, 145, 145, 144, 143, 143, 143, 143
};
+const int CLAW_XLIST3[32] = {
+ 223, 222, 220, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 221
+};
+const int CLAW_YLIST3[32] = {
+ 116, 116, 116, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118
+};
+
bool DarkSideCutscenes::showDarkSideTitle() {
EventsManager &events = *_vm->_events;
@@ -126,15 +157,8 @@ bool DarkSideCutscenes::showDarkSideTitle() {
// Pause for a bit
WAIT(10);
-
- sound.setMusicVolume(95);
-
screen.fadeOut(8);
- screen.loadBackground("jvc.raw");
- screen.fadeIn();
- WAIT(60);
- screen.fadeOut(8);
return true;
}
@@ -142,7 +166,19 @@ bool DarkSideCutscenes::showDarkSideIntro() {
_vm->_files->_isDarkCc = true;
_vm->_files->setGameCc(1);
- return showDarkSideIntro1();
+ _ball.load("ball.int");
+ _dragon1.load("dragon1.int");
+ _claw.load("claw.int");
+
+ bool result = showDarkSideIntro1() && showDarkSideIntro2();
+
+ _vm->_sound->stopAllAudio();
+ _vm->_sound->setMusicVolume(100);
+ _ball.clear();
+ _dragon1.clear();
+ _claw.clear();
+
+ return result;
}
bool DarkSideCutscenes::showDarkSideIntro1() {
@@ -159,8 +195,18 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 98, 90, 82
};
- _subtitles.load("special.bin");
+ // Play the intro music
+ sound.setMusicVolume(95);
+// sound.playSong("bigtheme.m");
+
+ screen.loadBackground("jvc.raw");
screen.loadPalette("dark.pal");
+ screen.fadeIn();
+
+ WAIT(60);
+ screen.fadeOut(8);
+
+ _subtitles.load("special.bin");
screen.loadBackground("pyramid2.raw");
screen.loadPage(0);
screen.loadPage(1);
@@ -176,18 +222,10 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
screen.restoreBackground();
screen.loadPage(1);
- // Play the intro music
- sound.playSong("bigtheme.m");
-
// Show Might and Magic Darkside of Xeen title, and gradualy scroll
// the background vertically down to show the Pharoah's base
- int yp = 0;
- int idx1 = 0;
- bool skipElapsed = false;
- uint32 timeExpired = 0;
bool fadeFlag = true;
-
- for (int yCtr = SCREEN_HEIGHT, frameNum = 0; yCtr > 0; ) {
+ for (int yp = 0, frameNum = 0, idx1 = 0; yp < SCREEN_HEIGHT && !_vm->shouldExit(); ++yp) {
screen.vertMerge(yp);
title.draw(0, 0);
@@ -198,14 +236,6 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
if (!idx1)
frameNum = (frameNum + 1) % 10;
- if (!skipElapsed) {
- timeExpired = MAX((int)events.timeElapsed() - 1, 1);
- skipElapsed = true;
- }
-
- yCtr -= timeExpired;
- yp = MIN((uint)(yp + timeExpired), (uint)200);
-
WAIT(1);
if (fadeFlag) {
@@ -215,15 +245,15 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
}
screen.vertMerge(SCREEN_HEIGHT);
- screen.saveBackground(1);
+ screen.saveBackground();
screen.freePages();
WAIT(30);
// Zoom into the Pharoah's base closeup view
- for (int idx = 14; idx >= 0; --idx) {
- pyraTop.draw(0, 0, Common::Point(XLIST1[idx], YLIST1[idx]));
- pyraTop.draw(0, 1, Common::Point(XLIST2[idx], YLIST1[idx]));
+ for (int idx = 14; idx >= 0 && !_vm->shouldExit(); --idx) {
+ pyraTop.draw(0, 0, Common::Point(XLIST1[idx], YLIST1[idx]), 0, idx);
+ pyraTop.draw(0, 1, Common::Point(XLIST2[idx], YLIST1[idx]), 0, idx);
if (idx == 2)
sound.setMusicVolume(48);
@@ -239,7 +269,7 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
_subtitleLineNum = 0;
bool phar2 = false;
- for (int idx = 0; idx < 19; ++idx) {
+ for (int idx = 0; idx < 19 && !_vm->shouldExit(); ++idx) {
screen.restoreBackground();
pyramid.draw(0, idx, Common::Point(132, 62));
showSubtitles();
@@ -247,24 +277,12 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
if (!sound.isSoundPlaying() && !phar2)
sound.playSound("pharoh1b.voc");
- events.updateGameCounter();
- while (timeElapsed() < 4) {
- showSubtitles();
- events.pollEventsAndWait();
- if (events.isKeyMousePressed())
- return false;
- }
+ WAIT_SUBTITLES(4);
}
waitForLineOrSound();
screen.fadeOut();
- screen.freePages();
- title.clear();
- pyraTop.clear();
- pyramid.clear();
- //
- SpriteResource dragon("dragon.int");
const int XLIST3[10] = { 102, 103, 104, 104, 104, 103, 102, 101, 101, 101 };
const int YLIST3[10] = { 30, 29, 28, 27, 26, 25, 24, 25, 26, 28 };
const int FRAMES3[70] = {
@@ -274,9 +292,11 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
29, 10, -6, -26, -40, -56, -72, -83, 154, 141, 125, 105, 94, 83, 74,
69, 68, 70, 73, 77, 83, 89, 94, 99, 109
};
- const char *const PHAR2_VOC[5] = {
+ const char *const PHAR_VOC[5] = {
"pharoh2a.voc", "pharoh2b.voc", "pharoh2c.voc", "pharoh2d.voc", "pharoh2e.voc"
};
+
+ SpriteResource dragon("dragon.int");
recordTime();
resetSubtitles(0);
_subtitleLineNum = 0;
@@ -287,8 +307,12 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
screen.loadBackground("3room.raw");
screen.loadPage(0);
screen.loadBackground("1room.raw");
+ screen.saveBackground();
screen.horizMerge(SCREEN_WIDTH);
- dragon.draw(0, 0, Common::Point(XLIST3[0], YLIST3[0]), SPRFLAG_800);
+ dragon.draw(0, 9, Common::Point(XLIST3[0], YLIST3[0]), SPRFLAG_800);
+
+ showSubtitles();
+ screen.fadeIn();
int posNum = 0, phar2Index = 0, ctr = 0;
for (int idx = SCREEN_WIDTH, frameNum = 0; idx >= 0; --idx) {
@@ -301,9 +325,9 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
return false;
if (idx == SCREEN_WIDTH)
- sound.playSound(PHAR2_VOC[0]);
+ sound.playSound(PHAR_VOC[0]);
if (!sound.isSoundPlaying() && phar2Index < 4)
- sound.playSound(PHAR2_VOC[1 + phar2Index++]);
+ sound.playSound(PHAR_VOC[1 + phar2Index++]);
if (phar2Index == 4) {
if (!sound.isSoundPlaying() && !_subtitleSize)
@@ -323,6 +347,324 @@ bool DarkSideCutscenes::showDarkSideIntro1() {
WAIT(1);
}
+ sound.stopSound();
+ screen.fadeOut();
+ screen.freePages();
+ return true;
+}
+
+void DarkSideCutscenes::animatePharoah(int frame) {
+ if (frame)
+ _ball.draw(0, frame - 1);
+ _claw.draw(0, 5, Common::Point(CLAW_XLIST2[frame], CLAW_YLIST2[frame]), SPRFLAG_800);
+ _claw.draw(0, 6, Common::Point(149, 184));
+ _dragon1.draw(0, PHAROAH_FRAMES[frame], Common::Point(139, PHAROAH_YLIST[frame]), SPRFLAG_800);
+ _claw.draw(0, frame % 5, Common::Point(CLAW_XLIST2[frame], CLAW_YLIST2[frame]), SPRFLAG_800);
+}
+
+#define ANIMATE_PHAROAH \
+ screen.restoreBackground(); \
+ animatePharoah(clawCtr); \
+ clawCtr = (clawCtr + 1) % 32
+
+bool DarkSideCutscenes::showDarkSideIntro2() {
+ EventsManager &events = *_vm->_events;
+ Screen &screen = *_vm->_screen;
+ Sound &sound = *_vm->_sound;
+ SpriteResource goon("goon.int"), darkLord("darklord.int"), queen("queen.int"),
+ wizard("wizard.int"), fizzle("fizzle.int"), wizMth("izmth.int");
+ int idx, clawCtr;
+
+ screen.loadBackground("ball.raw");
+ screen.saveBackground();
+
+ for (idx = 0; idx < 32; ++idx) {
+ screen.restoreBackground();
+ animatePharoah(idx);
+
+ if (idx == 0)
+ screen.fadeIn();
+ WAIT(3);
+ }
+
+ for (idx = 0, clawCtr = 0; idx < 11; ++idx) {
+ ANIMATE_PHAROAH;
+ if (idx > 3)
+ queen.draw(0, 0, Common::Point(9, 57));
+ fizzle.draw(0, idx, Common::Point(9, 57));
+
+ if (idx == 6) {
+ sound.playSound("ido2.voc");
+ //sound.stopSong(); ?
+ }
+
+ clawCtr = (clawCtr + 1) % 32;
+ if (idx > 6)
+ showSubtitles();
+ WAIT(3);
+ }
+
+ const char *const VOC_NAMES[4] = { "queen1.voc", "queen2.voc", "queenhis.voc", "pharoh4.voc" };
+ int nwcIndex = 0, vocIndex = 0;
+ do {
+ ANIMATE_PHAROAH;
+
+ if (!sound.isSoundPlaying() && vocIndex < 3) {
+ if (!_subtitleSize) {
+ if (!vocIndex) {
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+ }
+
+ sound.playSound(VOC_NAMES[vocIndex++]);
+ if (vocIndex == 3)
+ nwcIndex = 7;
+ }
+ }
+
+ if (nwcIndex) {
+ queen.draw(0, (nwcIndex >= 17) ? 0 : nwcIndex,
+ Common::Point(9, 57));
+ if (nwcIndex < 17)
+ ++nwcIndex;
+ } else {
+ queen.draw(0, (vocIndex == 0) ? 0 : getSpeakingFrame(0, 5),
+ Common::Point(9, 57));
+ }
+
+ clawCtr = (clawCtr + 1) % 32;
+ showSubtitles();
+ WAIT(3);
+ } while (vocIndex < 3 || sound.isSoundPlaying() || _subtitleSize);
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+
+ idx = 34;
+ do {
+ ANIMATE_PHAROAH;
+ queen.draw(0, 0, Common::Point(9, 57));
+
+ clawCtr = (clawCtr + 1) % 32;
+ if (++idx <= 37)
+ idx = 34;
+
+ showSubtitles();
+ WAIT(3);
+ } while (sound.isSoundPlaying() || _subtitleSize);
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+ sound.playSound("dark3.voc");
+
+ const char *const VOC_NAMES2[3] = { "pharoh5a.voc", "pharoh5b.voc", "laff1.voc" };
+ vocIndex = 0;
+
+ do {
+ ANIMATE_PHAROAH;
+ darkLord.draw(0, vocIndex == 1 ? getSpeakingFrame(0, 3) : 0, Common::Point(9, 57));
+
+ clawCtr = (clawCtr + 1) % 32;
+ showSubtitles();
+ WAIT(3);
+ if (!sound.isSoundPlaying())
+ sound.playSound(VOC_NAMES2[vocIndex++]);
+ } while (vocIndex < 3 && _subtitleSize);
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+
+ sound.playFX(42);
+ vocIndex = 0;
+
+ for (idx = 10; idx >= 0; --idx) {
+ ANIMATE_PHAROAH;
+
+ if (!sound.isSoundPlaying() && !vocIndex) {
+ sound.playSound("laff1.voc");
+ vocIndex = 1;
+ }
+
+ if (idx > 3)
+ darkLord.draw(0, getSpeakingFrame(0, 3), Common::Point(9, 57));
+ fizzle.draw(0, idx, Common::Point(9, 57));
+
+ clawCtr = (clawCtr + 1) % 32;
+ showSubtitles();
+ WAIT(3);
+ }
+
+ sound.playFX(0);
+
+ do {
+ ANIMATE_PHAROAH;
+ queen.draw(0, 0, Common::Point(9, 57));
+
+ clawCtr = (clawCtr + 1) % 32;
+ showSubtitles();
+ WAIT(3);
+ } while (sound.isSoundPlaying() || _subtitleSize);
+
+ for (idx = 0; idx < 32; ++idx) {
+ screen.restoreBackground();
+ animatePharoah(idx);
+
+ showSubtitles();
+ WAIT(3);
+ }
+
+ for (idx = 0, clawCtr = 0; idx < 11; ++idx) {
+ ANIMATE_PHAROAH;
+
+ if (idx > 3)
+ goon.draw(0, 0, Common::Point(9, 57));
+ if (idx == 6)
+ sound.playSound("pharoh6w.voc");
+
+ fizzle.draw(0, idx, Common::Point(9, 57));
+ clawCtr = (clawCtr + 1) % 32;
+
+ if (idx > 6)
+ showSubtitles();
+ WAIT(3);
+ }
+
+ const char *const VOC_NAMES3[2] = { "alamar1.voc", "pharoh7t.voc" };
+ vocIndex = nwcIndex = 0;
+
+ do {
+ ANIMATE_PHAROAH;
+ goon.draw(0, (vocIndex == 0) ? 0 : nwcIndex, Common::Point(9, 57));
+
+ if (!sound.isSoundPlaying() && !vocIndex && !_subtitleSize) {
+ // TODO: Subtitles stuff
+ recordTime();
+ _subtitleSize = 1;
+ sound.playSound(VOC_NAMES3[vocIndex++]);
+ sound.playFX(0);
+ }
+
+ nwcIndex = (nwcIndex + 1) % 17;
+ clawCtr = (clawCtr + 1) % 32;
+
+ showSubtitles();
+ WAIT(3);
+ } while (!vocIndex || sound.isSoundPlaying() || _subtitleSize);
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+ sound.playFX(42);
+
+ for (idx = 10; idx >= 0; --idx) {
+ ANIMATE_PHAROAH;
+ if (idx > 4)
+ goon.draw(0, 0, Common::Point(9, 57));
+ fizzle.draw(0, idx, Common::Point(9, 57));
+
+ if (!sound.isSoundPlaying() && !vocIndex) {
+ sound.playSound("pharoh7t.voc");
+ vocIndex = 1;
+ }
+
+ showSubtitles();
+ WAIT(3);
+ }
+
+ sound.playFX(0);
+
+ for (idx = 0; idx < 32; ++idx) {
+ screen.restoreBackground();
+ animatePharoah(idx);
+
+ if (_subtitleSize)
+ showSubtitles();
+ WAIT(3);
+ }
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+
+ for (idx = 0, clawCtr = 0; idx < 11; ++idx) {
+ ANIMATE_PHAROAH;
+
+ if (idx > 3)
+ wizard.draw(0, 0, Common::Point(9, 57));
+ fizzle.draw(0, 0, Common::Point(9, 57));
+
+ clawCtr = (clawCtr + 1) % 32;
+ if (idx == 5)
+ sound.playSound("pharoh8.voc");
+ if (idx > 6)
+ showSubtitles();
+
+ WAIT(3);
+ }
+
+ const char *const VOC_NAMES4[3] = { "ellinger.voc", "pharoh9a.voc", "pharoh9b.voc" };
+ vocIndex = 0;
+
+ do {
+ ANIMATE_PHAROAH;
+ wizard.draw(0, (vocIndex == 1) ? getSpeakingFrame(0, 3) : 0, Common::Point(9, 57));
+
+ if (!sound.isSoundPlaying() && vocIndex < 2 && !_subtitleSize) {
+ // TODO: Subtitle stuff
+ if (vocIndex == 0) {
+ recordTime();
+ _subtitleSize = 1;
+ } else {
+ _subtitleSize = 0;
+ }
+
+ sound.playSound(VOC_NAMES4[vocIndex++]);
+ sound.playFX(0);
+ }
+
+ clawCtr = (clawCtr + 1) % 32;
+ showSubtitles();
+ WAIT(3);
+ } while (vocIndex < 2 || sound.isSoundPlaying() || _subtitleSize);
+
+ sound.playFX(42);
+
+ for (idx = 10; idx >= 0; --idx) {
+ ANIMATE_PHAROAH;
+ if (idx > 4)
+ wizard.draw(0, 0, Common::Point(9, 57));
+ fizzle.draw(0, idx, Common::Point(9, 57));
+
+ if (!sound.isSoundPlaying() && !vocIndex) {
+ sound.playSound("pharoh7t.voc");
+ vocIndex = 1;
+ }
+
+ showSubtitles();
+ WAIT(3);
+ }
+
+ // TODO: Subtitle stuff
+ recordTime();
+ _subtitleSize = 1;
+ vocIndex = 0;
+
+ do {
+ ANIMATE_PHAROAH;
+
+ if (!sound.isSoundPlaying() && !vocIndex) {
+ sound.playSound("pharoh9b.voc");
+ vocIndex = 1;
+ }
+
+ showSubtitles();
+ WAIT(3);
+ } while (sound.isSoundPlaying() || !vocIndex || _subtitleSize);
+
return true;
}
@@ -1203,22 +1545,6 @@ void DarkSideCutscenes::showDarkSideScore(uint endingScore) {
}
void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, const char *msg3) {
- const int YLIST[32] = {
- -3, -3, -3, -3, -3, -3, -3, -3, -1, 0, 0, 0, 0, 0, 0, 0,
- -1, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3
- };
- const int FRAMES[32] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 2, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- const int XLIST2[32] = {
- 223, 222, 220, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
- 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 221
- };
- const int YLIST2[32] = {
- 116, 116, 116, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118,
- 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118
- };
Screen &screen = *_vm->_screen;
EventsManager &events = *_vm->_events;
Windows &windows = *_vm->_windows;
@@ -1230,10 +1556,10 @@ void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c
screen.loadBackground("3room.raw");
screen.saveBackground();
screen.loadPalette("dark.pal");
- claw.draw(0, 5, Common::Point(CUTSCENES_XLIST[0], CUTSCENES_YLIST[0]), SPRFLAG_800);
+ claw.draw(0, 5, Common::Point(CLAW_XLIST3[0], CLAW_YLIST3[0]), SPRFLAG_800);
claw.draw(0, 6, Common::Point(149, 184));
- dragon1.draw(0, FRAMES[0], Common::Point(139, YLIST[0]), SPRFLAG_800);
- claw.draw(0, 0, Common::Point(XLIST2[0], YLIST2[0]), SPRFLAG_800);
+ dragon1.draw(0, PHAROAH_FRAMES[0], Common::Point(139, PHAROAH_YLIST[0]), SPRFLAG_800);
+ claw.draw(0, 0, Common::Point(CLAW_XLIST3[0], CLAW_YLIST3[0]), SPRFLAG_800);
screen.update();
screen.fadeIn();
events.clearEvents();
@@ -1246,10 +1572,10 @@ void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c
// Draw the dragon pharoah
events.updateGameCounter();
screen.restoreBackground();
- claw.draw(0, 5, Common::Point(CUTSCENES_XLIST[idx], CUTSCENES_YLIST[idx]), SPRFLAG_800);
+ claw.draw(0, 5, Common::Point(CLAW_XLIST3[idx], CLAW_YLIST3[idx]), SPRFLAG_800);
claw.draw(0, 6, Common::Point(145, 185));
- dragon1.draw(0, FRAMES[idx], Common::Point(139, YLIST[idx]), SPRFLAG_800);
- claw.draw(0, idx % 5, Common::Point(XLIST2[idx], YLIST2[idx]), SPRFLAG_800);
+ dragon1.draw(0, PHAROAH_FRAMES[idx], Common::Point(139, PHAROAH_YLIST[idx]), SPRFLAG_800);
+ claw.draw(0, idx % 5, Common::Point(CLAW_XLIST3[idx], CLAW_YLIST3[idx]), SPRFLAG_800);
// Form the text string to display the text
Common::String str1 = Common::String::format(Res.PHAROAH_ENDING_TEXT1,
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.h b/engines/xeen/worldofxeen/darkside_cutscenes.h
index c16a67f0b2..e6f35a7f61 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.h
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.h
@@ -33,12 +33,26 @@ namespace WorldOfXeen {
class DarkSideCutscenes : public Cutscenes {
private:
+ SpriteResource _ball, _claw, _dragon1;
+private:
/**
- * Shows part 1 of the Dark Side intro
+ * Shows part 1 of the Dark Side intro - up to the point where
+ * Dragon Pharoah ends "contact the Queen"
*/
bool showDarkSideIntro1();
/**
+ * Animaes the dragon pharoah
+ */
+ void animatePharoah(int frame);
+
+ /**
+ * Shows part 2 of the Dark Side intro
+ */
+ bool showDarkSideIntro2();
+
+
+ /**
* Shows part 1 of the Dark Side ending, everything up to Corak appearing
*/
bool showDarkSideEnding1();
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index f0fb5b9ba2..61552eb7e5 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -180,19 +180,23 @@ void WorldOfXeenEngine::showStartup() {
bool seenIntro = ConfMan.hasKey("seen_intro") && ConfMan.getBool("seen_intro");
// Show the title animation
- bool completedTitle = (getGameID() == GType_Clouds) ?
- showCloudsTitle() : showDarkSideTitle();
+ bool completedTitle = true;
+ //(getGameID() == GType_Clouds) ?
+ // showCloudsTitle() : showDarkSideTitle();
_sound->stopAllAudio();
// Unless user aborted the title, go
if (completedTitle && !seenIntro) {
if (getGameID() == GType_Clouds)
- showCloudsIntro();
+ seenIntro = showCloudsIntro();
else
- showDarkSideIntro();
+ seenIntro = showDarkSideIntro();
- ConfMan.setBool("seen_intro", true);
- ConfMan.flushToDisk();
+ seenIntro = false;//****DEBUG****
+ if (seenIntro) {
+ ConfMan.setBool("seen_intro", true);
+ ConfMan.flushToDisk();
+ }
}
_gameMode = GMODE_MENU;