diff options
-rw-r--r-- | graphics/animation.cpp | 32 | ||||
-rw-r--r-- | graphics/animation.h | 2 | ||||
-rw-r--r-- | sword1/animation.cpp | 35 | ||||
-rw-r--r-- | sword2/driver/animation.cpp | 35 |
4 files changed, 34 insertions, 70 deletions
diff --git a/graphics/animation.cpp b/graphics/animation.cpp index 65aca29b00..d8219c5a55 100644 --- a/graphics/animation.cpp +++ b/graphics/animation.cpp @@ -48,6 +48,23 @@ BaseAnimationState::~BaseAnimationState() { +bool BaseAnimationState::checkPaletteSwitch() { +#ifdef BACKEND_8BIT + // if we have reached the last image with this palette, switch to new one + if (framenum == palettes[palnum].end) { + unsigned char *l = lut2; + palnum++; + setPalette(palettes[palnum].pal); + lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2); + lut2 = lut; + lut = l; + return true; + } +#endif + + return false; +} + #ifdef BACKEND_8BIT /** @@ -100,21 +117,6 @@ void BaseAnimationState::buildLookup(int p, int lines) { } } -bool BaseAnimationState::checkPaletteSwitch() { - // if we have reached the last image with this palette, switch to new one - if (framenum == palettes[palnum].end) { - unsigned char *l = lut2; - palnum++; - setPalette(palettes[palnum].pal); - lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2); - lut2 = lut; - lut = l; - return true; - } - - return false; -} - #else OverlayColor *BaseAnimationState::lookup = 0; diff --git a/graphics/animation.h b/graphics/animation.h index cfd96b3d78..0ddaf76e5c 100644 --- a/graphics/animation.h +++ b/graphics/animation.h @@ -123,9 +123,9 @@ public: virtual ~BaseAnimationState(); protected: + bool checkPaletteSwitch(); #ifdef BACKEND_8BIT void buildLookup(int p, int lines); - bool checkPaletteSwitch(); virtual void setPalette(byte *pal) = 0; #else void buildLookup(void); diff --git a/sword1/animation.cpp b/sword1/animation.cpp index f1ea311b1c..7f571e84a2 100644 --- a/sword1/animation.cpp +++ b/sword1/animation.cpp @@ -122,7 +122,7 @@ bool AnimationState::init(const char *name) { frameskipped = 0; ticks = _sys->get_msecs(); - /* Play audio - TODO: Sync with video?*/ + // Play audio sndfile = new File(); bgSoundStream = AudioStream::openStreamFile(name, sndfile); @@ -176,42 +176,19 @@ bool AnimationState::decodeFrame() { if (bgSoundStream && !bgSound.isActive()) return false; -#ifdef BACKEND_8BIT if (checkPaletteSwitch() || (bgSoundStream == NULL) || - ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { + ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || + frameskipped > 10) { if (frameskipped > 10) { warning("force frame %i redraw", framenum); frameskipped = 0; } +#ifdef BACKEND_8BIT _scr->plotYUV(lut, sequence_i->width, sequence_i->height, info->display_fbuf->buf); - - if (bgSoundStream) { - while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum) - _sys->delay_msecs(10); - } else { - ticks += 83; - while (_sys->get_msecs() < ticks) - _sys->delay_msecs(10); - } - - } else { - warning("dropped frame %i", framenum); - frameskipped++; - } - - buildLookup(palnum + 1, lutcalcnum); - #else - - if ((bgSoundStream == NULL) || - ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { - if (frameskipped > 10) { - warning("force frame %i redraw", framenum); - frameskipped = 0; - } plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf); - _sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT); +#endif if (bgSoundStream) { while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum) @@ -227,6 +204,8 @@ bool AnimationState::decodeFrame() { frameskipped++; } +#ifdef BACKEND_8BIT + buildLookup(palnum + 1, lutcalcnum); #endif framenum++; diff --git a/sword2/driver/animation.cpp b/sword2/driver/animation.cpp index 94302dc631..302300f051 100644 --- a/sword2/driver/animation.cpp +++ b/sword2/driver/animation.cpp @@ -222,14 +222,18 @@ bool AnimationState::decodeFrame() { if (bgSoundStream && !bgSound.isActive()) return false; -#ifdef BACKEND_8BIT if (checkPaletteSwitch() || (bgSoundStream == NULL) || - ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { + ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || + frameskipped > 10) { if (frameskipped > 10) { warning("force frame %i redraw", framenum); frameskipped = 0; } +#ifdef BACKEND_8BIT _vm->_graphics->plotYUV(lut, sequence_i->width, sequence_i->height, info->display_fbuf->buf); +#else + plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf); +#endif if (bgSoundStream) { while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum) @@ -239,38 +243,17 @@ bool AnimationState::decodeFrame() { _vm->sleepUntil(ticks); } +#ifdef BACKEND_8BIT _vm->_graphics->setNeedFullRedraw(); +#endif } else { warning("dropped frame %i", framenum); frameskipped++; } +#ifdef BACKEND_8BIT buildLookup(palnum + 1, lutcalcnum); - -#else - - if ((bgSoundStream == NULL) || - ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { - if (frameskipped > 10) { - warning("force frame %i redraw", framenum); - frameskipped = 0; - } - plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf); - - if (bgSoundStream) { - while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum) - _sys->delay_msecs(10); - } else { - ticks += 83; - _vm->sleepUntil(ticks); - } - - } else { - warning("dropped frame %i", framenum); - frameskipped++; - } - #endif framenum++; |