diff options
author | Paul Gilbert | 2018-01-31 06:59:27 -0500 |
---|---|---|
committer | Paul Gilbert | 2018-01-31 06:59:27 -0500 |
commit | 09095d66479ecfe2d52ef6f6a1d8ed00f2eaa9dd (patch) | |
tree | 9c478786c77dfebf046d89236416ca0559a4707f /engines/xeen/worldofxeen/worldofxeen.cpp | |
parent | 7c5619220572757b1a548e07ca926db085c10be6 (diff) | |
download | scummvm-rg350-09095d66479ecfe2d52ef6f6a1d8ed00f2eaa9dd.tar.gz scummvm-rg350-09095d66479ecfe2d52ef6f6a1d8ed00f2eaa9dd.tar.bz2 scummvm-rg350-09095d66479ecfe2d52ef6f6a1d8ed00f2eaa9dd.zip |
XEEN: Move the World of Xeen ending cutscene to it's own file
Diffstat (limited to 'engines/xeen/worldofxeen/worldofxeen.cpp')
-rw-r--r-- | engines/xeen/worldofxeen/worldofxeen.cpp | 442 |
1 files changed, 1 insertions, 441 deletions
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp index 9f4181510f..87b4013d54 100644 --- a/engines/xeen/worldofxeen/worldofxeen.cpp +++ b/engines/xeen/worldofxeen/worldofxeen.cpp @@ -30,8 +30,7 @@ namespace Xeen { namespace WorldOfXeen { WorldOfXeenEngine::WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc) - : XeenEngine(syst, gameDesc), CloudsCutscenes(this), - DarkSideCutscenes(this) { + : XeenEngine(syst, gameDesc), WorldOfXeenCutscenes(this) { _seenDarkSideIntro = false; _pendingAction = WOX_PLAY_GAME; } @@ -177,444 +176,5 @@ void WorldOfXeenEngine::showCutscene(const Common::String &name) { showWorldOfXeenEnding(); } -void WorldOfXeenEngine::showWorldOfXeenEnding() { - Windows &windows = *_windows; - Window &w0 = windows[0]; - - _files->setGameCc(1); - _sound->playSong("outday3.m"); - showPharaohEndText(Res.WORLD_END_TEXT[0], nullptr, nullptr); - _sound->playSound("elect.voc"); - - Graphics::ManagedSurface savedBg; - _screen->loadBackground("skymain.raw"); - savedBg.copyFrom(*_screen); - _screen->loadBackground("twrsky1.raw"); - _screen->loadPage(0); - _screen->loadPage(1); - _screen->loadPalette("skymain.pal"); - - SpriteResource sc02("sc02.eg2"), tower1("tower1.eg2"), tower2("tower2.eg2"), - sc3a("sc3a.eg2"), sc06("sc06.eg2"), sc14("sc14.eg2"), sc13("sc13.eg2"), - sc17("sc17.eg2"), cube("cube.eg2"), hands("hands.eg2"), - sc10("sc10.eg2"), staff("staff.eg2"); - SpriteResource sc3b[2] = { - SpriteResource("sc3b1.eg2"), SpriteResource("sc3b2.eg2") - }; - SpriteResource sc20[4] = { - SpriteResource("sc20[0].eg2"), SpriteResource("sc20b.eg2"), - SpriteResource("sc20c.eg2"), SpriteResource("sc20d.eg2") - }; - SpriteResource sc22[2] = { - SpriteResource("sc22a.eg2"), SpriteResource("sc22b.eg2") - }; - - windows[41].writeString("\x1\xD"); - _screen->fadeOut(); - while (!shouldQuit() && _sound->isPlaying()) - _events->pollEventsAndWait(); - - _sound->playSong("nwblksmt.m"); - _screen->blitFrom(savedBg); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[1]); - w0.update(); - _screen->fadeIn(); - - _events->updateGameCounter(); - _events->wait(60); - - for (int idx = 0; idx < 50 && !shouldQuit(); ++idx) { - if (idx == 9 || idx == 22 || idx == 33 || idx == 44) - _sound->playSound("whoosh.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc02.draw(0, idx); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[1]); - w0.update(); - - _events->wait(2); - } - - for (int idx = 0; idx < 40 && !shouldQuit(); ++idx) { - _screen->horizMerge(); - _events->updateGameCounter(); - tower1.draw(0, 0, Common::Point(0, 0), SPRFLAG_800); - sc3a.draw(0, idx, Common::Point(91, 86), SPRFLAG_800); - - w0.update(); - _events->wait(2); - } - - int frame = 40, frame2 = 0; - for (int idx = 0, xp = 0; idx < SCREEN_WIDTH && !shouldQuit(); ++idx) { - _events->updateGameCounter(); - _screen->horizMerge(xp); - tower1.draw(0, 0, Common::Point(idx, 0), SPRFLAG_800); - sc3a.draw(0, frame, Common::Point(idx + 91, 86), SPRFLAG_800); - tower2.draw(0, 0, Common::Point(idx - 320, 0), SPRFLAG_800); - tower2.draw(0, 1, Common::Point(idx - (SCREEN_WIDTH / 2), 0), SPRFLAG_800); - sc3b[frame2 / 30].draw(0, frame2 % 30, Common::Point(idx - 277, 65), SPRFLAG_800); - - frame = (frame + 1) % 57; - if (idx > (SCREEN_WIDTH / 2)) - frame2 = (frame2 + 1) % 60; - xp -= 2; - if (xp < 1) - xp = SCREEN_WIDTH; - - if (idx > 120) - setWorldEndingSubtitle(Res.WORLD_END_TEXT[2]); - w0.update(); - _events->wait(2); - } - - for (; frame2 < 60 && !shouldQuit(); ++frame2) { - _events->updateGameCounter(); - _screen->horizMerge(frame); - tower2.draw(0, 0, Common::Point(0, 0), SPRFLAG_800); - tower2.draw(0, 1, Common::Point(SCREEN_WIDTH / 2, 0), SPRFLAG_800); - sc3b[frame2 / 30].draw(frame2 % 30, 0, Common::Point(43, 65), SPRFLAG_800); - - setWorldEndingSubtitle(Res.WORLD_END_TEXT[2]); - w0.update(); - _events->wait(2); - } - - if (shouldQuit()) - return; - _screen->freePages(); - _screen->fadeOut(); - _screen->loadBackground("foura.raw"); - savedBg.blitFrom(*_screen); - - sc06.draw(0, 0, Common::Point(26, 25)); - w0.update(); - _screen->fadeIn(); - - for (int idx = 0; idx < 26 && !shouldQuit(); ++idx) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc06.draw(0, idx, Common::Point(26, 75)); - _events->wait(2); - } - - if (shouldQuit()) - return; - _screen->fadeOut(); - _screen->loadBackground("eg140001.raw"); - savedBg.blitFrom(*_screen); - w0.update(); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[3]); - _screen->fadeIn(); - - for (int idx1 = 0; idx1 < 2 && !shouldQuit(); ++idx1) { - for (int idx2 = 0; idx2 < 15 && !shouldQuit(); ++idx2) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc14.draw(0, idx2, Common::Point(141, 63)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[3]); - - w0.update(); - _events->wait(2); - } - } - - _screen->loadBackground("eg100001.raw"); - _screen->loadPage(0); - savedBg.blitFrom(*_screen); - - for (int idx1 = 0; idx1 < 2 && !shouldQuit(); ++idx1) { - for (int idx2 = 0; idx2 < 6 && !shouldQuit(); ++idx2) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc14.draw(0, idx2, Common::Point(26, 21)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[4]); - - w0.update(); - _events->wait(2); - } - } - - _screen->blitFrom(savedBg); - sc13.draw(0, 5, Common::Point(26, 21)); - savedBg.blitFrom(*_screen); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[4]); - w0.update(); - - frame = 0; - for (int idx = 185; idx > 68 && !shouldQuit(); idx -= 3) { - if (!_sound->isPlaying()) - _sound->playSound("cast.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc17.draw(0, 0, Common::Point(33, idx), SPRFLAG_4000); - sc17.draw(0, frame, Common::Point(33, idx), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[4]); - - w0.update(); - _events->wait(2); - frame = (frame + 1) % 17; - } - - for (int idx = 0; idx < 17 && !shouldQuit(); ++idx) { - if (!_sound->isPlaying()) - _sound->playSound("cast.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc17.draw(0, 0, Common::Point(33, 68), SPRFLAG_4000); - sc17.draw(0, idx, Common::Point(33, 68), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[4]); - - w0.update(); - _events->wait(2); - } - - if (shouldQuit()) - return; - _screen->blitFrom(savedBg); - sc17.draw(0, 0, Common::Point(33, 68), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[4]); - w0.update(); - _screen->fadeOut(); - - _screen->loadBackground("eg140001.raw"); - savedBg.blitFrom(*_screen); - w0.update(); - _screen->fadeIn(); - - for (int idx1 = 0; idx1 < 2 && !shouldQuit(); ++idx1) { - for (int idx2 = 0; idx2 < 15 && !shouldQuit(); ++idx2) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc14.draw(0, idx2, Common::Point(141, 63)); - - w0.update(); - _events->wait(3); - } - } - - _screen->horizMerge(0); - savedBg.blitFrom(*_screen); - - for (int idx1 = 0; idx1 < 3 && !shouldQuit(); ++idx1) { - for (int idx2 = 0; idx2 < 15 && !shouldQuit(); ++idx2) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc10.draw(0, idx2, Common::Point(26, 21)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[5]); - - w0.update(); - _events->wait(3); - } - } - - _screen->blitFrom(savedBg); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[5]); - w0.update(); - - for (int idx = 185; idx > 13 && !shouldQuit(); idx -= 6) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - staff.draw(0, 0, Common::Point(196, idx), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[5]); - - w0.update(); - _events->wait(2); - } - - _events->updateGameCounter(); - _events->wait(30); - if (shouldQuit()) - return; - - _screen->fadeOut(); - _screen->loadBackground("eg140001.raw"); - savedBg.blitFrom(*_screen); - w0.update(); - _screen->fadeIn(); - - for (int idx1 = 0; idx1 < 2 && !shouldQuit(); ++idx1) { - for (int idx2 = 0; idx2 < 15 && !shouldQuit(); ++idx2) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc14.draw(0, idx2, Common::Point(141, 63)); - - w0.update(); - _events->wait(3); - } - } - - if (shouldQuit()) - return; - _screen->loadBackground("tablmain.raw"); - savedBg.blitFrom(*_screen); - _screen->loadPage(1); - sc20[0].draw(0, 0, Common::Point(26, 55)); - hands.draw(0, 0, Common::Point(58, 17)); - cube.draw(0, 0, Common::Point(101, 11), SPRFLAG_4000); - w0.update(); - _sound->playSound("cast.voc"); - - for (int idx = 0; idx < 5 && !shouldQuit(); ++idx) { - if (!_sound->isPlaying()) - _sound->playSound("cast.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[0].draw(0, 0, Common::Point(26, 55)); - hands.draw(0, 0, Common::Point(58, 17)); - cube.draw(0, 0, Common::Point(101, 11), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(2); - } - - frame = 0; - for (int idx = 0; idx < 16 && !shouldQuit(); ++idx) { - if (!_sound->isPlaying()) - _sound->playSound("cast.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[0].draw(0, 0, Common::Point(26, 55)); - hands.draw(0, 0, Common::Point(58, 17)); - cube.draw(0, frame, Common::Point(101, 11), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(2); - frame = (frame + 1) % 5; - } - - frame = 0; - for (int idx = 11; idx < 82 && !shouldQuit(); ++idx) { - if (!_sound->isPlaying()) - _sound->playSound("cast.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[0].draw(0, 0, Common::Point(26, 55)); - cube.draw(0, frame, Common::Point(101, idx), SPRFLAG_4000); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(2); - frame = (frame + 1) % 5; - } - - _sound->stopSound(); - if (shouldQuit()) - return; - - _sound->playSound("click.voc"); - _sound->playSound("padspell.voc"); - - for (int idx = 0; idx < 14 && !shouldQuit(); ++idx) { - if (idx == 10) - _sound->playSound("padspell.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[idx / 7].draw(0, idx % 7, Common::Point(26, 55)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(2); - } - - for (int idx = 0; idx < 17 && !shouldQuit(); ++idx) { - if (idx == 10) - _sound->playSound("padspell.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[2].draw(0, idx, Common::Point(26, 55)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(3); - } - - for (int idx = 0; idx < 6 && !shouldQuit(); ++idx) { - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc20[3].draw(0, idx, Common::Point(26, 55)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - - w0.update(); - _events->wait(4); - } - - if (shouldQuit()) - return; - _screen->blitFrom(savedBg); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[6]); - w0.update(); - _events->updateGameCounter(); - _events->wait(30); - - _screen->horizMerge(SCREEN_WIDTH); - savedBg.blitFrom(*_screen); - _screen->freePages(); - - for (int idx = 0; idx < 35 && !shouldQuit(); ++idx) { - if (idx == 3) - _sound->playSound("click.voc"); - else if (idx == 5 || idx == 15) - _sound->playSound("elect.voc"); - else if (idx == 22) - _sound->playSound("explosio.voc"); - - _events->updateGameCounter(); - _screen->blitFrom(savedBg); - sc22[idx / 20].draw(0, idx % 20, Common::Point(112, 17)); - setWorldEndingSubtitle(Res.WORLD_END_TEXT[7]); - - w0.update(); - _events->wait(3); - } - - if (shouldQuit()) - return; - SpriteResource sc23[8] = { - SpriteResource("sc23a.eg2"), SpriteResource("sc23b.eg2"), - SpriteResource("sc23c.eg2"), SpriteResource("sc23d.eg2"), - SpriteResource("sc23e.eg2"), SpriteResource("sc23f.eg2"), - SpriteResource("sc23g.eg2"), SpriteResource("sc23h.eg2") - }; - SpriteResource sc24("sc24.eg2"); - - _screen->fadeOut(); - _screen->loadBackground("eg23prt2.raw"); - savedBg.blitFrom(*_screen); - sc23[0].draw(0, 0); - w0.update(); - _screen->fadeIn(); - - for (int idx = 0; idx < 61 && !shouldQuit(); ++idx) { - if (idx == 2 || idx == 15 || idx == 25 || idx == 33 || idx == 41) - _sound->playSound("gascompr.voc"); - - _events->updateGameCounter(); - sc23[idx / 8].draw(0, frame % 8); - w0.update(); - _events->wait(4); - } - - // TODO -} - -void WorldOfXeenEngine::setWorldEndingSubtitle(const Common::String &msg) { - Windows &windows = *_windows; - const char *const FORMAT1 = "\xB""000\t000\xC""38\x3""c%s"; - const char *const FORMAT2 = "\xB""000\t000\xC""39\x3""c%s"; - windows[28].writeString(Common::String::format(FORMAT1, msg.c_str())); - windows[28].writeString(Common::String::format(FORMAT2, msg.c_str())); -} - } // End of namespace WorldOfXeen } // End of namespace Xeen |