aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/worldofxeen/darkside_cutscenes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/xeen/worldofxeen/darkside_cutscenes.cpp')
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.cpp86
1 files changed, 76 insertions, 10 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;
}