aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.cpp86
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.h17
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.cpp33
3 files changed, 95 insertions, 41 deletions
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index abd8d691fd..4a0489c194 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -69,7 +69,7 @@ const int LEFT_CLAW_IDLE_Y[32] = {
};
-bool DarkSideCutscenes::showDarkSideTitle() {
+bool DarkSideCutscenes::showDarkSideTitle(bool seenIntro) {
EventsManager &events = *_vm->_events;
Screen &screen = *_vm->_screen;
Sound &sound = *_vm->_sound;
@@ -162,7 +162,7 @@ bool DarkSideCutscenes::showDarkSideTitle() {
return true;
}
-bool DarkSideCutscenes::showDarkSideIntro() {
+bool DarkSideCutscenes::showDarkSideIntro(bool seenIntro) {
FileManager &files = *g_vm->_files;
Screen &screen = *g_vm->_screen;
Sound &sound = *g_vm->_sound;
@@ -170,20 +170,31 @@ bool DarkSideCutscenes::showDarkSideIntro() {
files._isDarkCc = true;
files.setGameCc(1);
- _ball.load("ball.int");
- _dragon1.load("dragon1.int");
- _claw.load("claw.int");
+ if (showDarkSideTitle(seenIntro)) {
+ if (seenIntro) {
+ if (g_vm->getGameID() == GType_WorldOfXeen)
+ seenIntro = showWorldOfXeenLogo();
+ } else {
+ _ball.load("ball.int");
+ _dragon1.load("dragon1.int");
+ _claw.load("claw.int");
+
+ seenIntro = showDarkSideIntro1() && showDarkSideIntro2() && showDarkSideIntro3();
+
+ _ball.clear();
+ _dragon1.clear();
+ _claw.clear();
- bool result = showDarkSideIntro1() && showDarkSideIntro2() && showDarkSideIntro3();
+ if (seenIntro && g_vm->getGameID() == GType_WorldOfXeen)
+ seenIntro = showWorldOfXeenLogo();
+ }
+ }
sound.stopAllAudio();
sound.setMusicVolume(100);
screen.freePages();
- _ball.clear();
- _dragon1.clear();
- _claw.clear();
- return result;
+ return seenIntro;
}
bool DarkSideCutscenes::rubCrystalBall(bool fadeIn) {
@@ -799,6 +810,61 @@ bool DarkSideCutscenes::showDarkSideIntro3() {
WAIT(2);
}
+ screen.fadeOut();
+ return true;
+}
+
+bool DarkSideCutscenes::showWorldOfXeenLogo() {
+ EventsManager &events = *_vm->_events;
+ Screen &screen = *_vm->_screen;
+ Sound &sound = *_vm->_sound;
+ SpriteResource fizzle("fizzle.int");
+ SpriteResource wfire[7];
+ for (uint idx = 0; idx < 7; ++idx)
+ wfire[idx].load(Common::String::format("wfire%u.int", idx + 1));
+
+ screen.loadBackground("firemain.raw");
+ screen.loadPalette("firemain.pal");
+ screen.saveBackground();
+ screen.fadeIn();
+ WAIT(10);
+
+ for (int idx = 0; idx < 28; ++idx) {
+ if (idx == 17)
+ sound.playSound("explosio.voc");
+ if (!sound.isSoundPlaying() && idx < 17)
+ sound.playSound("rumble.voc");
+
+ screen.restoreBackground();
+ wfire[idx / 5].draw(0, idx % 5, Common::Point(0, 45));
+ WAIT(2);
+ }
+
+ screen.saveBackground();
+
+ for (int loopCtr = 0; loopCtr < 2; ++loopCtr) {
+ for (int idx = 0; idx < 21; ++idx) {
+ screen.restoreBackground();
+ wfire[6].draw(0, idx, Common::Point(0, 45));
+
+ switch (idx) {
+ case 0:
+ case 11:
+ sound.playSound("thud.voc");
+ break;
+ case 3:
+ sound.playFX(60);
+ break;
+ default:
+ break;
+ }
+
+ WAIT(2);
+ }
+ }
+
+ WAIT(10);
+ screen.fadeOut();
return true;
}
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.h b/engines/xeen/worldofxeen/darkside_cutscenes.h
index 8a013794a9..f3e8fd8873 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.h
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.h
@@ -48,6 +48,11 @@ private:
void animatePharoah(int frame);
/**
+ * Shows the Dark Side of Xeen title screen
+ */
+ bool showDarkSideTitle(bool seenIntro);
+
+ /**
* Shows part 1 of the Dark Side intro - up to the point where
* Dragon Pharoah ends "contact the Queen"
*/
@@ -64,6 +69,11 @@ private:
bool showDarkSideIntro3();
/**
+ * Shows the World of Xeen logo from the end of the Dark Side intro
+ */
+ bool showWorldOfXeenLogo();
+
+ /**
* Shows part 1 of the Dark Side ending, everything up to Corak appearing
*/
bool showDarkSideEnding1();
@@ -96,14 +106,9 @@ public:
DarkSideCutscenes(XeenEngine *vm) : Cutscenes(vm) {}
/**
- * Shows the Dark Side of Xeen title screen
- */
- bool showDarkSideTitle();
-
- /**
* Shows the Dark Side of Xeen intro sequence
*/
- bool showDarkSideIntro();
+ bool showDarkSideIntro(bool seenIntro);
/**
* Shows the Dark Side of Xeen ending sequence
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index 61552eb7e5..88ab3d3c44 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -161,14 +161,6 @@ void WorldOfXeenEngine::showCutscene(const Common::String &name, int status, uin
showDarkSideEnding(score);
else if (name == "WORLDEND")
showWorldOfXeenEnding((GooberState)status, score);
- else if (name == "CLOUDS_TITLE")
- showCloudsTitle();
- else if (name == "CLOUDS_INTRO")
- showCloudsIntro();
- else if (name == "DARKSIDE_TITLE")
- showDarkSideTitle();
- else if (name == "DARKSIDE_INTRO")
- showDarkSideIntro();
_screen->freePages();
_sound->stopAllAudio();
@@ -178,25 +170,16 @@ void WorldOfXeenEngine::showCutscene(const Common::String &name, int status, uin
void WorldOfXeenEngine::showStartup() {
bool seenIntro = ConfMan.hasKey("seen_intro") && ConfMan.getBool("seen_intro");
+ bool completedIntro;
- // Show the title animation
- bool completedTitle = true;
- //(getGameID() == GType_Clouds) ?
- // showCloudsTitle() : showDarkSideTitle();
- _sound->stopAllAudio();
+ if (getGameID() == GType_Clouds)
+ completedIntro = showCloudsIntro();
+ else
+ completedIntro = showDarkSideIntro(seenIntro);
- // Unless user aborted the title, go
- if (completedTitle && !seenIntro) {
- if (getGameID() == GType_Clouds)
- seenIntro = showCloudsIntro();
- else
- seenIntro = showDarkSideIntro();
-
- seenIntro = false;//****DEBUG****
- if (seenIntro) {
- ConfMan.setBool("seen_intro", true);
- ConfMan.flushToDisk();
- }
+ if (!seenIntro && completedIntro) {
+ ConfMan.setBool("seen_intro", true);
+ ConfMan.flushToDisk();
}
_gameMode = GMODE_MENU;