aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2004-03-22 01:28:45 +0000
committerMax Horn2004-03-22 01:28:45 +0000
commit4466a855986d08d20c6fc6296baec191e1f5e027 (patch)
treeee5437fcc265c1e8800565d9e1493818004a3f23
parenta9789acfc61a057c82c6cc42386afc9b23813c24 (diff)
downloadscummvm-rg350-4466a855986d08d20c6fc6296baec191e1f5e027.tar.gz
scummvm-rg350-4466a855986d08d20c6fc6296baec191e1f5e027.tar.bz2
scummvm-rg350-4466a855986d08d20c6fc6296baec191e1f5e027.zip
move commong code into separate source file (more could be done, but it's a start)
svn-id: r13358
-rw-r--r--graphics/animation.cpp157
-rw-r--r--graphics/animation.h85
-rw-r--r--sword1/animation.cpp150
-rw-r--r--sword1/animation.h65
-rw-r--r--sword2/driver/animation.cpp142
-rw-r--r--sword2/driver/animation.h62
6 files changed, 252 insertions, 409 deletions
diff --git a/graphics/animation.cpp b/graphics/animation.cpp
index 44d0d854eb..65aca29b00 100644
--- a/graphics/animation.cpp
+++ b/graphics/animation.cpp
@@ -21,3 +21,160 @@
#include "common/stdafx.h"
#include "graphics/animation.h"
+#include "common/file.h"
+#include "sound/audiostream.h"
+
+namespace Graphics {
+
+BaseAnimationState::BaseAnimationState(SoundMixer *snd, OSystem *sys, int width, int height)
+ : _snd(snd), _sys(sys), MOVIE_WIDTH(width), MOVIE_HEIGHT(height) {
+}
+
+BaseAnimationState::~BaseAnimationState() {
+#ifdef USE_MPEG2
+ _snd->stopHandle(bgSound);
+ if (decoder)
+ mpeg2_close(decoder);
+ delete mpgfile;
+ delete sndfile;
+#ifndef BACKEND_8BIT
+ _sys->hide_overlay();
+ free(overlay);
+#endif
+ if (bgSoundStream)
+ delete bgSoundStream;
+#endif
+}
+
+
+
+#ifdef BACKEND_8BIT
+
+/**
+ * Build 'Best-Match' RGB lookup table
+ */
+void BaseAnimationState::buildLookup(int p, int lines) {
+ int y, cb;
+ int r, g, b, ii;
+
+ if (p >= maxPalnum)
+ return;
+
+ if (p != curpal) {
+ curpal = p;
+ cr = 0;
+ pos = 0;
+ }
+
+ if (cr > BITDEPTH)
+ return;
+
+ for (ii = 0; ii < lines; ii++) {
+ r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
+ for (cb = 0; cb <= BITDEPTH; cb++) {
+ g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
+ b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
+
+ for (y = 0; y <= BITDEPTH; y++) {
+ int idx, bst = 0;
+ int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]);
+
+ for (idx = 1; idx < 256; idx++) {
+ long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]);
+ if (d2 < dis) {
+ bst = idx;
+ dis = d2;
+ }
+ }
+ lut2[pos++] = bst;
+
+ r += (1 << SHIFT);
+ g += (1 << SHIFT);
+ b += (1 << SHIFT);
+ }
+ r -= (BITDEPTH+1)*(1 << SHIFT);
+ }
+ cr++;
+ if (cr > BITDEPTH)
+ return;
+ }
+}
+
+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;
+
+void BaseAnimationState::buildLookup() {
+ if (lookup)
+ return;
+
+ lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor));
+
+ int y, cb, cr;
+ int r, g, b;
+ int pos = 0;
+
+ for (cr = 0; cr <= BITDEPTH; cr++) {
+ for (cb = 0; cb <= BITDEPTH; cb++) {
+ for (y = 0; y < 256; y++) {
+ r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
+ g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
+ b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
+
+ if (r < 0) r = 0;
+ else if (r > 255) r = 255;
+ if (g < 0) g = 0;
+ else if (g > 255) g = 255;
+ if (b < 0) b = 0;
+ else if (b > 255) b = 255;
+
+ lookup[pos++] = _sys->RGBToColor(r, g, b);
+ }
+ }
+ }
+}
+
+void BaseAnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) {
+
+ OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2;
+
+ int x, y;
+
+ int ypos = 0;
+ int cpos = 0;
+ int linepos = 0;
+
+ for (y = 0; y < height; y += 2) {
+ for (x = 0; x < width; x += 2) {
+ int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
+ cpos++;
+
+ ptr[linepos ] = lut[i + dat[0][ ypos ]];
+ ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
+ ptr[linepos ] = lut[i + dat[0][ ypos ]];
+ ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
+
+ }
+ linepos += (2 * MOVIE_WIDTH - width);
+ ypos += width;
+ }
+}
+
+#endif
+
+} // End of namespace Graphics
diff --git a/graphics/animation.h b/graphics/animation.h
index ce3ff6620f..cfd96b3d78 100644
--- a/graphics/animation.h
+++ b/graphics/animation.h
@@ -22,6 +22,11 @@
#ifndef GRAPHICS_ANIMATION_H
#define GRAPHICS_ANIMATION_H
+#include "common/scummsys.h"
+#include "sound/mixer.h"
+
+class AudioStream;
+
// Uncomment this if you are using libmpeg2 0.3.1.
// #define USE_MPEG2_0_3_1
@@ -50,7 +55,85 @@ typedef sequence_t mpeg2_sequence_t;
#endif
+#ifdef BACKEND_8BIT
+#define SQR(x) ((x) * (x))
+#define SHIFT 3
+#else
+#define SHIFT 1
+#endif
+
+#define BITDEPTH (1 << (8 - SHIFT))
+#define ROUNDADD (1 << (SHIFT - 1))
+
+#define BUFFER_SIZE 4096
+
+
+namespace Graphics {
+
+class BaseAnimationState {
+protected:
+ const int MOVIE_WIDTH;
+ const int MOVIE_HEIGHT;
+
+ SoundMixer *_snd;
+ OSystem *_sys;
+
+ uint framenum;
+ uint frameskipped;
+ uint32 ticks;
+
+#ifdef USE_MPEG2
+ mpeg2dec_t *decoder;
+ const mpeg2_info_t *info;
+#endif
+
+ File *mpgfile;
+ File *sndfile;
+ byte buffer[BUFFER_SIZE];
+ PlayingSoundHandle bgSound;
+ AudioStream *bgSoundStream;
-#endif \ No newline at end of file
+#ifdef BACKEND_8BIT
+ int palnum;
+ int maxPalnum;
+
+ byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)];
+ byte *lut;
+ byte *lut2;
+ int lutcalcnum;
+
+ int curpal;
+ int cr;
+ int pos;
+
+ struct {
+ uint cnt;
+ uint end;
+ byte pal[4 * 256];
+ } palettes[50];
+#else
+ static OverlayColor *lookup;
+ OverlayColor *overlay;
+#endif
+
+public:
+ BaseAnimationState(SoundMixer *snd, OSystem *sys, int width, int height);
+ virtual ~BaseAnimationState();
+
+protected:
+#ifdef BACKEND_8BIT
+ void buildLookup(int p, int lines);
+ bool checkPaletteSwitch();
+ virtual void setPalette(byte *pal) = 0;
+#else
+ void buildLookup(void);
+ void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat);
+#endif
+};
+
+
+} // End of namespace Graphics
+
+#endif
diff --git a/sword1/animation.cpp b/sword1/animation.cpp
index f8e5d16fd6..f1ea311b1c 100644
--- a/sword1/animation.cpp
+++ b/sword1/animation.cpp
@@ -22,31 +22,16 @@
#include "common/stdafx.h"
#include "common/file.h"
#include "sword1/animation.h"
+#include "sound/audiostream.h"
-#define MOVIE_WIDTH 640
-#define MOVIE_HEIGHT 400
-
namespace Sword1 {
AnimationState::AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys)
- : _scr(scr), _snd(snd), _sys(sys) {
+ : BaseAnimationState(snd, sys, 640, 400), _scr(scr) {
}
AnimationState::~AnimationState() {
-#ifdef USE_MPEG2
- _snd->stopHandle(bgSound);
- if (decoder)
- mpeg2_close(decoder);
- delete mpgfile;
- delete sndfile;
-#ifndef BACKEND_8BIT
- _sys->hide_overlay();
- free(overlay);
-#endif
- if (bgSoundStream)
- delete bgSoundStream;
-#endif
}
bool AnimationState::init(const char *name) {
@@ -155,137 +140,11 @@ bool AnimationState::init(const char *name) {
#ifdef BACKEND_8BIT
-/**
- * Build 'Best-Match' RGB lookup table
- */
-void AnimationState::buildLookup(int p, int lines) {
- int y, cb;
- int r, g, b, ii;
-
- if (p >= maxPalnum)
- return;
-
- if (p != curpal) {
- curpal = p;
- cr = 0;
- pos = 0;
- }
-
- if (cr > BITDEPTH)
- return;
-
- for (ii = 0; ii < lines; ii++) {
- r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
- for (cb = 0; cb <= BITDEPTH; cb++) {
- g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
- b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
- for (y = 0; y <= BITDEPTH; y++) {
- int idx, bst = 0;
- int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]);
-
- for (idx = 1; idx < 256; idx++) {
- long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]);
- if (d2 < dis) {
- bst = idx;
- dis = d2;
- }
- }
- lut2[pos++] = bst;
-
- r += (1 << SHIFT);
- g += (1 << SHIFT);
- b += (1 << SHIFT);
- }
- r -= (BITDEPTH+1)*(1 << SHIFT);
- }
- cr++;
- if (cr > BITDEPTH)
- return;
- }
-}
-
-bool AnimationState::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;
-}
void AnimationState::setPalette(byte *pal) {
_sys->setPalette(pal, 0, 256);
}
-#else
-
-OverlayColor *AnimationState::lookup = 0;
-
-void AnimationState::buildLookup() {
- if (lookup)
- return;
-
- lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor));
-
- int y, cb, cr;
- int r, g, b;
- int pos = 0;
-
- for (cr = 0; cr <= BITDEPTH; cr++) {
- for (cb = 0; cb <= BITDEPTH; cb++) {
- for (y = 0; y < 256; y++) {
- r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
- g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
- b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
- if (r < 0) r = 0;
- else if (r > 255) r = 255;
- if (g < 0) g = 0;
- else if (g > 255) g = 255;
- if (b < 0) b = 0;
- else if (b > 255) b = 255;
-
- lookup[pos++] = _sys->RGBToColor(r, g, b);
- }
- }
- }
-}
-
-void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) {
-
- OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2;
-
- int x, y;
-
- int ypos = 0;
- int cpos = 0;
- int linepos = 0;
-
- for (y = 0; y < height; y += 2) {
- for (x = 0; x < width; x += 2) {
- int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
- cpos++;
-
- ptr[linepos ] = lut[i + dat[0][ ypos ]];
- ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
- ptr[linepos ] = lut[i + dat[0][ ypos ]];
- ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
-
- }
- linepos += (2 * MOVIE_WIDTH - width);
- ypos += width;
- }
-
- _sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT);
-}
-
#endif
bool AnimationState::decodeFrame() {
@@ -344,13 +203,16 @@ bool AnimationState::decodeFrame() {
#else
- if ((bgSoundStream == NULL) || ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) {
+ 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);
+
if (bgSoundStream) {
while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum)
_sys->delay_msecs(10);
diff --git a/sword1/animation.h b/sword1/animation.h
index 1d9a2aecec..2e5346448e 100644
--- a/sword1/animation.h
+++ b/sword1/animation.h
@@ -27,71 +27,15 @@
#include "sword1/screen.h"
#include "sword1/sound.h"
-#include "sound/audiostream.h"
-namespace Sword1 {
-
-
-#ifdef BACKEND_8BIT
-#define SQR(x) ((x) * (x))
-#define SHIFT 3
-#else
-#define SHIFT 1
-#endif
-#define BITDEPTH (1 << (8 - SHIFT))
-#define ROUNDADD (1 << (SHIFT - 1))
-
-#define BUFFER_SIZE 4096
+namespace Sword1 {
-class AnimationState {
+class AnimationState : public Graphics::BaseAnimationState {
private:
Screen *_scr;
- SoundMixer *_snd;
- OSystem *_sys;
-
- uint framenum;
- uint frameskipped;
- uint32 ticks;
-
-#ifdef USE_MPEG2
- mpeg2dec_t *decoder;
- const mpeg2_info_t *info;
-#endif
-
- File *mpgfile;
- File *sndfile;
-
- byte buffer[BUFFER_SIZE];
-
- PlayingSoundHandle bgSound;
- AudioStream *bgSoundStream;
-
-#ifdef BACKEND_8BIT
- int palnum;
- int maxPalnum;
-
- byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)];
- byte *lut;
- byte *lut2;
- int lutcalcnum;
-
- int curpal;
- int cr;
- int pos;
-
- struct {
- uint cnt;
- uint end;
- byte pal[4 * 256];
- } palettes[50];
-#else
- static OverlayColor *lookup;
- OverlayColor * overlay;
-#endif
public:
-
AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys);
~AnimationState();
@@ -101,12 +45,7 @@ public:
private:
#ifdef BACKEND_8BIT
- void buildLookup(int p, int lines);
- bool checkPaletteSwitch();
void setPalette(byte *pal);
-#else
- void buildLookup(void);
- void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat);
#endif
};
diff --git a/sword2/driver/animation.cpp b/sword2/driver/animation.cpp
index d1fc9e59e4..94302dc631 100644
--- a/sword2/driver/animation.cpp
+++ b/sword2/driver/animation.cpp
@@ -32,29 +32,13 @@
#include "sword2/driver/menu.h"
#include "sword2/driver/render.h"
-#define MOVIE_WIDTH 640
-#define MOVIE_HEIGHT 480
-
namespace Sword2 {
AnimationState::AnimationState(Sword2Engine *vm)
- : _vm(vm), _snd(_vm->_mixer), _sys(_vm->_system) {
+ : BaseAnimationState(_vm->_mixer, _vm->_system, 640, 480), _vm(vm) {
}
AnimationState::~AnimationState() {
-#ifdef USE_MPEG2
- _snd->stopHandle(bgSound);
- if (decoder)
- mpeg2_close(decoder);
- delete mpgfile;
- delete sndfile;
-#ifndef BACKEND_8BIT
- _sys->hide_overlay();
- free(overlay);
-#endif
- if (bgSoundStream)
- delete bgSoundStream;
-#endif
}
bool AnimationState::init(const char *name) {
@@ -163,70 +147,6 @@ bool AnimationState::init(const char *name) {
#ifdef BACKEND_8BIT
-/**
- * Build 'Best-Match' RGB lookup table
- */
-void AnimationState::buildLookup(int p, int lines) {
- int y, cb;
- int r, g, b, ii;
-
- if (p >= maxPalnum)
- return;
-
- if (p != curpal) {
- curpal = p;
- cr = 0;
- pos = 0;
- }
-
- if (cr > BITDEPTH)
- return;
-
- for (ii = 0; ii < lines; ii++) {
- r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
- for (cb = 0; cb <= BITDEPTH; cb++) {
- g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
- b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
- for (y = 0; y <= BITDEPTH; y++) {
- int idx, bst = 0;
- int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]);
-
- for (idx = 1; idx < 256; idx++) {
- long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]);
- if (d2 < dis) {
- bst = idx;
- dis = d2;
- }
- }
- lut2[pos++] = bst;
-
- r += (1 << SHIFT);
- g += (1 << SHIFT);
- b += (1 << SHIFT);
- }
- r -= (BITDEPTH+1)*(1 << SHIFT);
- }
- cr++;
- if (cr > BITDEPTH)
- return;
- }
-}
-
-bool AnimationState::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;
-}
void AnimationState::setPalette(byte *pal) {
_vm->_graphics->setPalette(0, 256, pal, RDPAL_INSTANT);
@@ -234,64 +154,6 @@ void AnimationState::setPalette(byte *pal) {
#else
-OverlayColor *AnimationState::lookup = 0;
-
-void AnimationState::buildLookup() {
- if (lookup)
- return;
-
- lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor));
-
- int y, cb, cr;
- int r, g, b;
- int pos = 0;
-
- for (cr = 0; cr <= BITDEPTH; cr++) {
- for (cb = 0; cb <= BITDEPTH; cb++) {
- for (y = 0; y < 256; y++) {
- r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
- g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
- b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
- if (r < 0) r = 0;
- else if (r > 255) r = 255;
- if (g < 0) g = 0;
- else if (g > 255) g = 255;
- if (b < 0) b = 0;
- else if (b > 255) b = 255;
-
- lookup[pos++] = _sys->RGBToColor(r, g, b);
- }
- }
- }
-}
-
-void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) {
-
- OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2;
-
- int x, y;
-
- int ypos = 0;
- int cpos = 0;
- int linepos = 0;
-
- for (y = 0; y < height; y += 2) {
- for (x = 0; x < width; x += 2) {
- int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
- cpos++;
-
- ptr[linepos ] = lut[i + dat[0][ ypos ]];
- ptr[RENDERWIDE + linepos++] = lut[i + dat[0][width + ypos++]];
- ptr[linepos ] = lut[i + dat[0][ ypos ]];
- ptr[RENDERWIDE + linepos++] = lut[i + dat[0][width + ypos++]];
-
- }
- linepos += (2 * MOVIE_WIDTH - width);
- ypos += width;
- }
-}
-
void AnimationState::drawTextObject(SpriteInfo *s, uint8 *src) {
OverlayColor *dst = overlay + RENDERWIDE * (s->y) + s->x;
@@ -666,7 +528,7 @@ int32 MoviePlayer::playDummy(const char *filename, MovieTextObject *text[], uint
memset(_vm->_graphics->_buffer, 0, _vm->_graphics->_screenWide * MENUDEEP);
uint8 msg[] = "Cutscene - Narration Only: Press ESC to exit, or visit www.scummvm.org to download cutscene videos";
- Memory *data = _vm->_fontRenderer->makeTextSprite(msg, MOVIE_WIDTH, 255, _vm->_speechFontId);
+ Memory *data = _vm->_fontRenderer->makeTextSprite(msg, RENDERWIDE, 255, _vm->_speechFontId);
FrameHeader *frame = (FrameHeader *) data->ad;
SpriteInfo msgSprite;
uint8 *msgSurface;
diff --git a/sword2/driver/animation.h b/sword2/driver/animation.h
index 5d399c7c63..2303c5a558 100644
--- a/sword2/driver/animation.h
+++ b/sword2/driver/animation.h
@@ -29,66 +29,11 @@
namespace Sword2 {
-#ifdef BACKEND_8BIT
-#define SQR(x) ((x) * (x))
-#define SHIFT 3
-#else
-#define SHIFT 1
-#endif
-
-#define BITDEPTH (1 << (8 - SHIFT))
-#define ROUNDADD (1 << (SHIFT - 1))
-
-#define BUFFER_SIZE 4096
-
-class AnimationState {
+class AnimationState : public ::Graphics::BaseAnimationState {
private:
Sword2Engine *_vm;
- SoundMixer *_snd;
- OSystem *_sys;
-
- uint framenum;
- uint frameskipped;
- int ticks;
-
-#ifdef USE_MPEG2
- mpeg2dec_t *decoder;
- const mpeg2_info_t *info;
-#endif
-
- File *mpgfile;
- File *sndfile;
-
- byte buffer[BUFFER_SIZE];
-
- PlayingSoundHandle bgSound;
- AudioStream *bgSoundStream;
-
-#ifdef BACKEND_8BIT
- int palnum;
- int maxPalnum;
-
- byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)];
- byte *lut;
- byte *lut2;
- int lutcalcnum;
-
- int curpal;
- int cr;
- int pos;
-
- struct {
- uint cnt;
- uint end;
- byte pal[4 * 256];
- } palettes[50];
-#else
- static OverlayColor *lookup;
- OverlayColor *overlay;
-#endif
public:
-
AnimationState(Sword2Engine *vm);
~AnimationState();
@@ -104,12 +49,7 @@ public:
private:
#ifdef BACKEND_8BIT
- void buildLookup(int p, int lines);
- bool checkPaletteSwitch();
void setPalette(byte *pal);
-#else
- void buildLookup(void);
- void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat);
#endif
};