diff options
author | Matthew Hoops | 2012-07-05 20:36:34 -0400 |
---|---|---|
committer | Matthew Hoops | 2012-07-05 20:36:34 -0400 |
commit | 3860f341365a59ff96ec41e61e3952be01915b40 (patch) | |
tree | b0342b8131d54b629c893ae150bb505c9198a2af /engines/pegasus/neighborhood | |
parent | 91efe792d5b231752dd16888729a94f323363fa0 (diff) | |
download | scummvm-rg350-3860f341365a59ff96ec41e61e3952be01915b40.tar.gz scummvm-rg350-3860f341365a59ff96ec41e61e3952be01915b40.tar.bz2 scummvm-rg350-3860f341365a59ff96ec41e61e3952be01915b40.zip |
PEGASUS: Implement screen fading
This does linear instead of gamma for speed and complexity reasons.
Diffstat (limited to 'engines/pegasus/neighborhood')
-rw-r--r-- | engines/pegasus/neighborhood/caldoria/caldoria.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/engines/pegasus/neighborhood/caldoria/caldoria.cpp b/engines/pegasus/neighborhood/caldoria/caldoria.cpp index 0e5868cb7d..817a24a162 100644 --- a/engines/pegasus/neighborhood/caldoria/caldoria.cpp +++ b/engines/pegasus/neighborhood/caldoria/caldoria.cpp @@ -204,17 +204,24 @@ void Caldoria::start() { if (!pullbackMovie->loadFile("Images/Caldoria/Pullback.movie")) error("Could not load pullback movie"); - bool skipped = false; - Input input; - + // Draw the first frame so we can fade to it + pullbackMovie->pauseVideo(true); + const Graphics::Surface *frame = pullbackMovie->decodeNextFrame(); + assert(frame); + assert(frame->format == g_system->getScreenFormat()); + g_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, 64, 112, frame->w, frame->h); _vm->_gfx->doFadeInSync(kTwoSeconds * kFifteenTicksPerSecond, kFifteenTicksPerSecond); + pullbackMovie->pauseVideo(false); bool saveAllowed = _vm->swapSaveAllowed(false); bool openAllowed = _vm->swapLoadAllowed(false); + bool skipped = false; + Input input; + while (!_vm->shouldQuit() && !pullbackMovie->endOfVideo()) { if (pullbackMovie->needsUpdate()) { - const Graphics::Surface *frame = pullbackMovie->decodeNextFrame(); + frame = pullbackMovie->decodeNextFrame(); if (frame) { g_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, 64, 112, frame->w, frame->h); @@ -233,6 +240,9 @@ void Caldoria::start() { delete pullbackMovie; + if (_vm->shouldQuit()) + return; + _vm->swapSaveAllowed(saveAllowed); _vm->swapLoadAllowed(openAllowed); @@ -240,11 +250,8 @@ void Caldoria::start() { if (!skipped) { uint32 white = g_system->getScreenFormat().RGBToColor(0xff, 0xff, 0xff); - _vm->_gfx->doFadeOutSync(kThreeSeconds * kFifteenTicksPerSecond, kFifteenTicksPerSecond, white); - g_system->delayMillis(3 * 1000 / 2); - getExtraEntry(kCaldoria00WakeUp1, entry); _navMovie.setTime(entry.movieStart); _navMovie.redrawMovieWorld(); |