diff options
Diffstat (limited to 'engines/xeen/worldofxeen/clouds_cutscenes.cpp')
-rw-r--r-- | engines/xeen/worldofxeen/clouds_cutscenes.cpp | 182 |
1 files changed, 172 insertions, 10 deletions
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp index d9f03443c6..7b73e12e0e 100644 --- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp +++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp @@ -91,6 +91,7 @@ bool CloudsCutscenes::showCloudsIntro() { lake("lake.vga"), xeen("xeen.vga"), wizTower("wiztower.vga"), wizTower2("wiztwer2.vga"), lake2("lake2.vga"), lake3("lake3.vga"), xeen1("xeen1.vga"); + _subtitles.load("special.bin"); // Show the production splash screen sound.playSong("mm4theme.m"); @@ -207,23 +208,121 @@ bool CloudsCutscenes::showCloudsIntro() { 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"); + // All the lines whilst the scroll is open + SpriteResource groupo("groupo.vga"), group("group.vga"), + crodo("crodo.vga"), box("box.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); + + doScroll(false, true); + sound.setMusicVolume(75); + screen.restoreBackground(); + screen.update(); + resetSubtitles(0, 1); - // TODO + // Loop through each spoken line + int ctr1 = 0, ctr2 = 0, ctr3 = 0, ctr4 = 0, ctr5 = 0, totalCtr = 0; + for (int lineCtr = 0; lineCtr < 14; ++lineCtr) { + if (lineCtr != 6 || lineCtr != 7) { + sound.playSound(_INTRO_VOCS[lineCtr]); + } + + for (int frameNum = 0, lookup = 0; sound.isPlaying() || _subtitleSize; ) { + groupo.draw(screen, 0); + groupo.draw(screen, 1, Common::Point(160, 0)); + + switch (lineCtr) { + case 2: + ctr1 = (ctr1 + 1) % 5; + group.draw(screen, ctr1); + ctr4 = (ctr4 + 1) % 9; + break; + + case 4: + ctr4 = (ctr4 + 1) % 9 + 9; + break; + + case 8: + case 12: + ctr2 = (ctr2 + 1) % 3; + ctr4 = (ctr4 + 1) % 9; + ctr3 = (ctr3 + 1) % 6 + 3; + break; + + case 9: + case 13: + ctr3 = (ctr3 + 1) % 3; + group.draw(screen, ctr3 + 43, Common::Point(178, 134)); + ctr4 = (ctr4 + 1) % 9; + ctr2 = (ctr2 % 15) + 3; + break; + + default: + ctr4 = (ctr4 + 1) % 9; + ctr2 = (ctr2 + 1) % 15 + 3; + ctr3 = (ctr3 + 1) % 6 + 3; + break; + } + + group.draw(screen, ctr4 + 5, Common::Point(0, 99)); + group.draw(screen, ctr2 + 24, Common::Point(202, 12)); + if ((++totalCtr % 30) == 0) + group.draw(screen, 43, Common::Point(178, 134)); + + switch (lineCtr) { + case 2: + case 4: + case 8: + case 9: + case 12: + case 13: { + crodo.draw(screen, 0, Common::Point(0, -5)); + screen._windows[0].writeString(CLOUDS_INTRO1); + + ctr5 = (ctr5 + 1) % 19; + WAIT(1); + showSubtitles(); + continue; + } + + default: + crodo.draw(screen, frameNum, Common::Point(0, -5)); + if (lookup > 30) + lookup = 30; + frameNum = _INTRO_FRAMES_VALS[_INTRO_FRAMES_LOOKUP[lineCtr]][lookup]; + screen._windows[0].writeString(CLOUDS_INTRO1); + + ctr5 = (ctr5 + 1) % 19; + WAIT(1); + showSubtitles(); + break; + } + + events.updateGameCounter(); + while (events.timeElapsed() < _INTRO_FRAMES_MAX[_INTRO_FRAMES_LOOKUP[lineCtr]][lookup] + || sound.isPlaying()) { + WAIT(1); + } + + if (!sound._soundOn && lookup > 30) + lookup = 0; + } + + if (!sound._soundOn) + lineCtr = 20; + + if (lineCtr == 5) + sound.playSound(_INTRO_VOCS[6]); + else if (lineCtr == 6) + sound.playSound(_INTRO_VOCS[7]); + } + + sound.songCommand(50); + doScroll(true, false); - events.wait(5000); return true; } @@ -232,4 +331,67 @@ bool CloudsCutscenes::showCloudsEnding() { return true; } +const char *const CloudsCutscenes::_INTRO_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" +}; +const int CloudsCutscenes::_INTRO_FRAMES_LOOKUP[14] = { 0, 1, 0, 2, 0, 3, 4, 5, 0, 0, 6, 7, 0, 0 }; +const int CloudsCutscenes::_INTRO_FRAMES_VALS[8][32] = { + { + 4, 2, 3, 0, 2, 3, 2, 0, 1, 1, 3, 4, 3, 2, 4, 2, + 3, 4, 3, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + },{ + 3, 2, 3, 2, 4, 3, 0, 3, 2, 2, 3, 1, 2, 3, 3, 3, + 2, 3, 2, 3, 2, 0, 3, 2, 0, 0, 0, 0, 0, 0, 2, 4 + },{ + 3, 1, 2, 3, 0, 3, 4, 3, 2, 3, 0, 3, 2, 3, 2, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3 + },{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 3 + },{ + 4, 2, 2, 3, 2, 3, 3, 4, 2, 4, 2, 0, 3, 2, 3, 2, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 2, 3 + },{ + 2, 0, 2, 3, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 2, 3, 1 + },{ + 3, 2, 0, 2, 4, 2, 3, 2, 3, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 4, 0, 2 + },{ + 3, 2, 4, 1, 2, 4, 3, 2, 3, 0, 2, 2, 0, 3, 2, 3, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } +}; + +const int CloudsCutscenes::_INTRO_FRAMES_MAX[8][32] = { + { + 2, 5, 6, 9, 10, 11, 12, 13, 14, 23, 25, 29, 31, 35, 38, 41, + 42, 45, 50, 52, 55, 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, { + 1, 4, 6, 8, 9, 11, 13, 15, 17, 18, 19, 22, 28, 29, 30, 31, + 0, 39, 0, 44, 0, 50, 51, 0, 54, 0, 0, 0, 0, 0, 0, 4 + }, { + 6, 9, 11, 13, 15, 19, 21, 23, 25, 27, 28, 31, 35, 39, 40, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7 + }, { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4 + }, { + 5, 9, 10, 11, 13, 15, 18, 23, 26, 31, 33, 36, 37, 41, 43, 45, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 12 + }, { + 14, 17, 20, 23, 27, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 8, 11, 13 + }, { + 15, 16, 17, 19, 21, 24, 24, 27, 34, 35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 10, 11, 13 + }, { + 17, 19, 22, 23, 26, 30, 32, 34, 40, 43, 47, 52, 53, 55, 57, 60, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } +}; + } // End of namespace Xeen |