aboutsummaryrefslogtreecommitdiff
path: root/engines/sword1
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword1')
-rw-r--r--engines/sword1/animation.cpp36
-rw-r--r--engines/sword1/animation.h1
2 files changed, 33 insertions, 4 deletions
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp
index a16f000659..441e622184 100644
--- a/engines/sword1/animation.cpp
+++ b/engines/sword1/animation.cpp
@@ -23,7 +23,6 @@
*
*/
-
#include "common/file.h"
#include "sword1/sword1.h"
#include "sword1/animation.h"
@@ -72,6 +71,9 @@ MoviePlayer::MoviePlayer(SwordEngine *vm, Text *textMan, Audio::Mixer *snd, OSys
_bgSoundStream = NULL;
_decoderType = decoderType;
_decoder = decoder;
+
+ _white = 255;
+ _black = 0;
}
MoviePlayer::~MoviePlayer() {
@@ -254,9 +256,35 @@ bool MoviePlayer::playVideo() {
if (frame)
_vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
- if (_decoder->hasDirtyPalette())
+ if (_decoder->hasDirtyPalette()) {
_decoder->setSystemPalette();
+ uint32 maxWeight = 0;
+ uint32 minWeight = 0xFFFFFFFF;
+ uint32 weight;
+ byte r, g, b;
+
+ byte *palette = _decoder->getPalette();
+
+ for (int i = 0; i < 256; i++) {
+ r = *palette++;
+ g = *palette++;
+ b = *palette++;
+
+ weight = 3 * r * r + 6 * g * g + 2 * b * b;
+
+ if (weight >= maxWeight) {
+ maxWeight = weight;
+ _white = i;
+ }
+
+ if (weight <= minWeight) {
+ minWeight = weight;
+ _black = i;
+ }
+ }
+ }
+
Graphics::Surface *screen = _vm->_system->lockScreen();
performPostProcessing((byte *)screen->pixels);
_vm->_system->unlockScreen();
@@ -275,11 +303,11 @@ bool MoviePlayer::playVideo() {
}
byte MoviePlayer::findBlackPalIndex() {
- return 0;
+ return _black;
}
byte MoviePlayer::findWhitePalIndex() {
- return 0xff;
+ return _white;
}
DXADecoderWithSound::DXADecoderWithSound(Audio::Mixer *mixer, Audio::SoundHandle *bgSoundHandle)
diff --git a/engines/sword1/animation.h b/engines/sword1/animation.h
index 82343f2800..193d5cf7ca 100644
--- a/engines/sword1/animation.h
+++ b/engines/sword1/animation.h
@@ -85,6 +85,7 @@ protected:
OSystem *_system;
Common::Array<MovieText *> _movieTexts;
int _textX, _textY, _textWidth, _textHeight;
+ byte _white, _black;
DecoderType _decoderType;
Graphics::VideoDecoder *_decoder;