diff options
Diffstat (limited to 'engines/xeen/worldofxeen/clouds_cutscenes.cpp')
-rw-r--r-- | engines/xeen/worldofxeen/clouds_cutscenes.cpp | 205 |
1 files changed, 170 insertions, 35 deletions
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp index 9c29ca73da..d9f03443c6 100644 --- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp +++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp @@ -21,6 +21,7 @@ */ #include "xeen/worldofxeen/clouds_cutscenes.h" +#include "xeen/resources.h" #include "xeen/sound.h" namespace Xeen { @@ -40,53 +41,187 @@ bool CloudsCutscenes::showCloudsTitle() { SpriteResource logo[2] = { SpriteResource("logo.vga"), SpriteResource("logo1.vga") }; - sound.playFX(1); +sound.playFX(1); - for (int idx = 0; idx < 80; ++idx) { - screen.restoreBackground(); - logo[idx / 65].draw(screen, idx % 65); - screen.update(); - - switch (idx) { - case 37: - sound.playFX(0); - sound.playFX(53); - sound.playSound("fire.voc"); - break; - case 52: - case 60: - sound.playFX(3); - break; - case 64: - sound.playFX(2); - break; - case 66: - sound.playFX(52); - sound.playSound("meangro&.voc"); - break; - default: - break; - } +for (int idx = 0; idx < 80; ++idx) { + screen.restoreBackground(); + logo[idx / 65].draw(screen, idx % 65); + screen.update(); - WAIT(2); + switch (idx) { + case 37: + sound.playFX(0); + sound.playFX(53); + sound.playSound("fire.voc"); + break; + case 52: + case 60: + sound.playFX(3); + break; + case 64: + sound.playFX(2); + break; + case 66: + sound.playFX(52); + sound.playSound("meangro&.voc"); + break; + default: + break; } - screen.restoreBackground(); - screen.update(); - WAIT(30); + WAIT(2); +} - screen.fadeOut(8); - logo[0].clear(); - logo[1].clear(); +screen.restoreBackground(); +screen.update(); +WAIT(30); - return true; +screen.fadeOut(8); +logo[0].clear(); +logo[1].clear(); + +return true; } bool CloudsCutscenes::showCloudsIntro() { - // TODO EventsManager &events = *_vm->_events; + Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; + SpriteResource stars("stars.vga"), intro1("intro1.vga"), + lake("lake.vga"), xeen("xeen.vga"), wizTower("wiztower.vga"), + wizTower2("wiztwer2.vga"), lake2("lake2.vga"), lake3("lake3.vga"), + xeen1("xeen1.vga"); + + // Show the production splash screen sound.playSong("mm4theme.m"); + screen.loadBackground("jvc.raw"); + screen.loadPalette("mm4.pal"); + screen.update(); + screen.fadeIn(); + WAIT(30); + screen.fadeOut(8); + + // Clouds of Xeen title with vertically scrolling background + screen.loadPalette("intro.pal"); + screen.loadBackground("blank.raw"); + screen.saveBackground(); + stars.draw(screen, 0); + stars.draw(screen, 1, Common::Point(160, 0)); + screen.loadPage(0); + intro1.draw(screen, 0); + screen.loadPage(1); + + bool fadeFlag = true; + for (int yCtr = SCREEN_HEIGHT, yScroll = 0, xeenCtr = -1; yCtr > 0; --yCtr, ++yScroll) { + screen.vertMerge(yScroll); + if (yCtr < 160) { + xeen.draw(screen, 0); + } + else if (yCtr < 100) { + xeen.draw(screen, 0); + if (++xeenCtr < 14) + xeen1.draw(screen, xeenCtr); + } + screen.update(); + + if (fadeFlag) { + screen.fadeIn(); + fadeFlag = false; + } + + WAIT(1); + } + + // Remainder of vertical scrolling of background + screen.restoreBackground(); + intro1.draw(screen, 0); + screen.loadPage(0); + lake.draw(screen, 0); + screen.loadPage(1); + + bool drawFlag = false; + for (int yCtr = SCREEN_HEIGHT - 1, yScroll = 1, lakeCtr = 0; yCtr > 0; --yCtr, ++yScroll) { + screen.vertMerge(yScroll); + + if (yCtr < 95) { + if (++lakeCtr >= 44 || drawFlag) { + lakeCtr = 0; + drawFlag = true; + } else { + lake3.draw(screen, lakeCtr, Common::Point(0, yCtr)); + } + } + + xeen.draw(screen, 0); + screen.update(); + WAIT(1); + } + + screen.freePages(); + + // Flying creatures moving horizontally + lake.draw(screen, 0); + screen.saveBackground(); + + int frameNum = 0; + events.updateGameCounter(); + for (int idx = 0; idx < 100; ++idx) { + frameNum = (frameNum + 1) % 43; + screen.restoreBackground(); + lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800); + WAIT(1); + } + + // Zoom in on a closeup of the wizardry tower + const int XLIST1[16] = { 0, 5, 10, 15, 20, 25, 30, 35, 40, 44, 48, 52, 56, 60, 64, 68 }; + const int XLIST2[16] = { 160, 155, 150, 145, 140, 135, 130, 125, 120, 114, 108, 102, 96, 90, 84, 78 }; + const int YLIST[23] = { 0, 6, 12, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 51 }; + + for (int idx = 15; idx >= 0; --idx) { + events.updateGameCounter(); + + screen.restoreBackground(); + lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800); + frameNum = (frameNum + 1) % 43; + wizTower.draw(screen, 0, Common::Point(XLIST1[idx], YLIST[idx]), 0, idx); + wizTower.draw(screen, 1, Common::Point(XLIST2[idx], YLIST[idx]), 0, idx); + screen.update(); + WAIT(1); + } + + // Cloaked figure walks horizontally + wizTower.draw(screen, 0); + wizTower.draw(screen, 1, Common::Point(160, 0)); + screen.saveBackground(); + + for (int idx = 0; idx < 39; ++idx) { + screen.restoreBackground(); + wizTower2.draw(screen, idx); + screen.update(); + + WAIT(2); + } + + screen.fadeOut(); + lake2.clear(); + lake3.clear(); + xeen1.clear(); + + // + const char *const VOCS[14] = { + "crodo1.voc", "crodo2.voc", "iamking.voc", "crodo3.voc", + "ya1.voc", "crodo4a.voc", "crodo4b.voc", "crodo4c.voc", + "xeenlaff.voc", "tiger2&.voc", "crodo5.voc", "crodo6.voc", + "xeenlaff.voc", "tiger2&.voc" + }; + SpriteResource groupo("groupo.vga"), group("group.vga"), crodo("crodo.vga"); + + groupo.draw(screen, 0); + groupo.draw(screen, 1, Common::Point(160, 0)); + crodo.draw(screen, 0, Common::Point(0, -5)); + screen._windows[0].writeString(CLOUDS_INTRO1); + + // TODO events.wait(5000); return true; |