aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorGregory Montoir2009-01-25 12:10:06 +0000
committerGregory Montoir2009-01-25 12:10:06 +0000
commit7f594fa21d820520f6e19559e5934bd495c96deb (patch)
tree7685ded12113a9703407623907a95f043f3365a1 /engines
parent0a7b4fd14640fad30a94f165e749cf7c2967987b (diff)
downloadscummvm-rg350-7f594fa21d820520f6e19559e5934bd495c96deb.tar.gz
scummvm-rg350-7f594fa21d820520f6e19559e5934bd495c96deb.tar.bz2
scummvm-rg350-7f594fa21d820520f6e19559e5934bd495c96deb.zip
TUCKER: modified flic playback to make use of dirtyrects
svn-id: r36060
Diffstat (limited to 'engines')
-rw-r--r--engines/tucker/sequences.cpp59
-rw-r--r--engines/tucker/tucker.h2
2 files changed, 31 insertions, 30 deletions
diff --git a/engines/tucker/sequences.cpp b/engines/tucker/sequences.cpp
index bb064cff9f..abda4a8c10 100644
--- a/engines/tucker/sequences.cpp
+++ b/engines/tucker/sequences.cpp
@@ -496,7 +496,6 @@ int TuckerEngine::handleSpecialObjectSelectionSequence() {
AnimationSequencePlayer::AnimationSequencePlayer(OSystem *system, Audio::Mixer *mixer, Common::EventManager *event, int num)
: _system(system), _mixer(mixer), _event(event), _seqNum(num) {
memset(_animationPalette, 0, sizeof(_animationPalette));
- memset(_paletteBuffer, 0, sizeof(_paletteBuffer));
_soundSeqDataOffset = 0;
_soundSeqDataCount = 0;
_soundSeqDataIndex = 0;
@@ -559,7 +558,7 @@ void AnimationSequencePlayer::mainLoop() {
++_updateFuncIndex;
_seqNum = this->_updateFunc[_updateFuncIndex].num;
}
- _system->copyRectToScreen(_offscreenBuffer, 320, 0, 0, kScreenWidth, kScreenHeight);
+ _system->copyRectToScreen(_offscreenBuffer, kScreenWidth, 0, 0, kScreenWidth, kScreenHeight);
_system->setPalette(_animationPalette, 0, 256);
_system->updateScreen();
syncTime();
@@ -832,19 +831,20 @@ void AnimationSequencePlayer::updateSounds() {
}
void AnimationSequencePlayer::fadeInPalette() {
- memset(_paletteBuffer, 0, sizeof(_paletteBuffer));
+ uint8 paletteBuffer[256 * 4];
+ memset(paletteBuffer, 0, sizeof(paletteBuffer));
bool fadeColors = true;
for (int step = 0; step < 64; ++step) {
if (fadeColors) {
fadeColors = false;
for (int i = 0; i < 1024; ++i) {
- if ((i & 3) != 3 && _paletteBuffer[i] < _animationPalette[i]) {
- const int color = _paletteBuffer[i] + 4;
- _paletteBuffer[i] = MIN<int>(color, _animationPalette[i]);
+ if ((i & 3) != 3 && paletteBuffer[i] < _animationPalette[i]) {
+ const int color = paletteBuffer[i] + 4;
+ paletteBuffer[i] = MIN<int>(color, _animationPalette[i]);
fadeColors = true;
}
}
- _system->setPalette(_paletteBuffer, 0, 256);
+ _system->setPalette(paletteBuffer, 0, 256);
_system->updateScreen();
}
_system->delayMillis(1000 / 60);
@@ -852,19 +852,20 @@ void AnimationSequencePlayer::fadeInPalette() {
}
void AnimationSequencePlayer::fadeOutPalette() {
- memcpy(_paletteBuffer, _animationPalette, 1024);
+ uint8 paletteBuffer[256 * 4];
+ memcpy(paletteBuffer, _animationPalette, 1024);
bool fadeColors = true;
for (int step = 0; step < 64; ++step) {
if (fadeColors) {
fadeColors = false;
for (int i = 0; i < 1024; ++i) {
- if ((i & 3) != 3 && _paletteBuffer[i] > 0) {
- const int color = _paletteBuffer[i] - 4;
- _paletteBuffer[i] = MAX<int>(0, color);
+ if ((i & 3) != 3 && paletteBuffer[i] > 0) {
+ const int color = paletteBuffer[i] - 4;
+ paletteBuffer[i] = MAX<int>(0, color);
fadeColors = true;
}
}
- _system->setPalette(_paletteBuffer, 0, 256);
+ _system->setPalette(paletteBuffer, 0, 256);
_system->updateScreen();
}
_system->delayMillis(1000 / 60);
@@ -902,13 +903,13 @@ void AnimationSequencePlayer::openAnimation(int index, const char *fileName) {
_flicPlayer[index].decodeNextFrame();
if (index == 0) {
memcpy(_animationPalette, _flicPlayer[index].getPalette(), 1024);
- memcpy(_offscreenBuffer, _flicPlayer[index].getOffscreen(), kScreenWidth * kScreenHeight);
+ _flicPlayer[index].copyDirtyRectsToBuffer(_offscreenBuffer, kScreenWidth);
}
}
void AnimationSequencePlayer::decodeNextAnimationFrame(int index) {
_flicPlayer[index].decodeNextFrame();
- memcpy(_offscreenBuffer, _flicPlayer[index].getOffscreen(), kScreenWidth * kScreenHeight);
+ _flicPlayer[index].copyDirtyRectsToBuffer(_offscreenBuffer, kScreenWidth);
if (index == 0) {
if (_flicPlayer[index].isPaletteDirty()) {
memcpy(_animationPalette, _flicPlayer[index].getPalette(), 1024);
@@ -946,11 +947,11 @@ void AnimationSequencePlayer::playIntroSeq19_20() {
_flicPlayer[1].reset();
}
}
- _flicPlayer[0].decodeNextFrame();
- const uint8 *t = _flicPlayer[1].getOffscreen();
- for (int i = 0; i < 64000; ++i) {
- const uint8 color = _flicPlayer[0].getOffscreen()[i];
- _offscreenBuffer[i] = color ? color : t[i];
+ decodeNextAnimationFrame(0);
+ for (int i = 0; i < kScreenWidth * kScreenHeight; ++i) {
+ if (_offscreenBuffer[i] == 0) {
+ _offscreenBuffer[i] = _flicPlayer[1].getOffscreen()[i];
+ }
}
updateSounds();
if (_flicPlayer[0].isLastFrame()) {
@@ -1049,13 +1050,14 @@ void AnimationSequencePlayer::drawPic2Part10() {
}
void AnimationSequencePlayer::drawPic1Part10() {
- for (int y = 0; y < 200; ++y) {
- memcpy(_offscreenBuffer + y * 320, _picBufPtr + 800 + y * 640 + _updateScreenWidth, 320);
- }
- for (int i = 0; i < 64000; ++i) {
- const uint8 color = _flicPlayer[0].getOffscreen()[i];
- if (color) {
- _offscreenBuffer[i] = color;
+ int offset = 0;
+ for (int y = 0; y < kScreenHeight; ++y) {
+ for (int x = 0; x < kScreenWidth; ++x) {
+ uint8 color = _flicPlayer[0].getOffscreen()[offset];
+ if (color == 0) {
+ color = _picBufPtr[800 + y * 640 + _updateScreenWidth + x];
+ }
+ _offscreenBuffer[offset++] = color;
}
}
}
@@ -1070,12 +1072,11 @@ void AnimationSequencePlayer::loadIntroSeq9_10() {
void AnimationSequencePlayer::playIntroSeq9_10() {
decodeNextAnimationFrame(0);
- if (_flicPlayer[0].getCurFrame() == 984) {
- drawPic2Part10();
- }
if (_flicPlayer[0].getCurFrame() >= 264 && _flicPlayer[0].getCurFrame() <= 295) {
drawPic1Part10();
_updateScreenWidth += 6;
+ } else if (_flicPlayer[0].getCurFrame() == 984) {
+ drawPic2Part10();
} else if (_flicPlayer[0].getCurFrame() >= 988 && _flicPlayer[0].getCurFrame() <= 996) {
drawPic1Part10();
_updateScreenWidth -= 25;
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index c9decaa13a..782b5f2e15 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -912,7 +912,7 @@ private:
const SequenceUpdateFunc *_updateFunc;
int _updateFuncIndex;
::Graphics::FlicPlayer _flicPlayer[2];
- uint8 _animationPalette[256 * 4], _paletteBuffer[256 * 4];
+ uint8 _animationPalette[256 * 4];
int _soundsList1Offset;
int _soundsList1Count;
int _soundsList2Offset;