aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Špalek2009-10-29 01:55:06 +0000
committerRobert Špalek2009-10-29 01:55:06 +0000
commit25b3e687a7e4aa9fcd643aed24f9ac15cb88ec48 (patch)
tree554bb6ca4eb86c91290b3605b524968defa9bc03
parentfa3305ee0162643c3e5694c8185365584aec180d (diff)
downloadscummvm-rg350-25b3e687a7e4aa9fcd643aed24f9ac15cb88ec48.tar.gz
scummvm-rg350-25b3e687a7e4aa9fcd643aed24f9ac15cb88ec48.tar.bz2
scummvm-rg350-25b3e687a7e4aa9fcd643aed24f9ac15cb88ec48.zip
Fix several palette fading bugs.
svn-id: r45497
-rw-r--r--engines/draci/game.cpp8
-rw-r--r--engines/draci/game.h2
-rw-r--r--engines/draci/screen.cpp6
-rw-r--r--engines/draci/script.cpp2
4 files changed, 9 insertions, 9 deletions
diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index b2e28b70a7..e59e4677b5 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -243,15 +243,15 @@ void Game::loop() {
if (_fadePhase > 0 && (_vm->_system->getMillis() - _fadeTick) >= kFadingTimeUnit) {
_fadeTick = _vm->_system->getMillis();
--_fadePhase;
- const BAFile *startPal = _vm->_paletteArchive->getFile(_currentRoom._palette);
- const BAFile *endPal = getScheduledPalette() >= 0 ? _vm->_paletteArchive->getFile(getScheduledPalette()) : NULL;
- _vm->_screen->interpolatePalettes(startPal->_data, endPal->_data, 0, kNumColours, _fadePhases - _fadePhase, _fadePhases);
+ const byte *startPal = _currentRoom._palette >= 0 ? _vm->_paletteArchive->getFile(_currentRoom._palette)->_data : NULL;
+ const byte *endPal = getScheduledPalette() >= 0 ? _vm->_paletteArchive->getFile(getScheduledPalette())->_data : NULL;
+ _vm->_screen->interpolatePalettes(startPal, endPal, 0, kNumColours, _fadePhases - _fadePhase, _fadePhases);
if (_loopSubstatus == kSubstatusFade && _fadePhase == 0) {
setExitLoop(true);
// Rewrite the palette index of the current
// room. This is necessary when two fadings
// are called after each other, such as in the
- // intro. We rely on that getScheduledPalette() >= 0.
+ // intro.
_currentRoom._palette = getScheduledPalette();
}
}
diff --git a/engines/draci/game.h b/engines/draci/game.h
index e4d857809b..0f1765345f 100644
--- a/engines/draci/game.h
+++ b/engines/draci/game.h
@@ -200,7 +200,7 @@ struct Room {
int _roomNum;
byte _music;
WalkingMap _walkingMap;
- byte _palette;
+ int _palette;
int _numOverlays;
int _init, _look, _use, _canUse;
bool _imInit, _imLook, _imUse;
diff --git a/engines/draci/screen.cpp b/engines/draci/screen.cpp
index d7c5dec027..019ffa605e 100644
--- a/engines/draci/screen.cpp
+++ b/engines/draci/screen.cpp
@@ -55,7 +55,7 @@ Screen::~Screen() {
*/
void Screen::setPalette(const byte *data, uint16 start, uint16 num) {
Common::MemoryReadStream pal(data ? data : _blackPalette, 3 * kNumColours);
- pal.seek(start * 4);
+ pal.seek(start * 3);
// Copy the palette
for (uint16 i = start; i < start + num; ++i) {
@@ -77,8 +77,8 @@ void Screen::setPalette(const byte *data, uint16 start, uint16 num) {
void Screen::interpolatePalettes(const byte *first, const byte *second, uint16 start, uint16 num, int index, int number) {
Common::MemoryReadStream firstPal(first ? first : _blackPalette, 3 * kNumColours);
Common::MemoryReadStream secondPal(second ? second : _blackPalette, 3 * kNumColours);
- firstPal.seek(start * 4);
- secondPal.seek(start * 4);
+ firstPal.seek(start * 3);
+ secondPal.seek(start * 3);
// Interpolate the palettes
for (uint16 i = start; i < start + num; ++i) {
diff --git a/engines/draci/script.cpp b/engines/draci/script.cpp
index b09a9d6298..ae8127d496 100644
--- a/engines/draci/script.cpp
+++ b/engines/draci/script.cpp
@@ -869,7 +869,7 @@ void Script::setPalette(Common::Queue<int> &params) {
}
// Immediately update the palette
_vm->_screen->copyToScreen();
- _vm->_system->delayMillis(100);
+ _vm->_system->delayMillis(20);
}
void Script::quitGame(Common::Queue<int> &params) {