[Scummvm-git-logs] scummvm master -> da06ecad9b60abbb1ce5b7c2f68fdd1c14a5fdb6
sev-
noreply at scummvm.org
Sun May 14 12:10:26 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
da06ecad9b DIRECTOR: Move _lastPalette to DirectorEngine
Commit: da06ecad9b60abbb1ce5b7c2f68fdd1c14a5fdb6
https://github.com/scummvm/scummvm/commit/da06ecad9b60abbb1ce5b7c2f68fdd1c14a5fdb6
Author: Scott Percival (code at moral.net.au)
Date: 2023-05-14T14:10:22+02:00
Commit Message:
DIRECTOR: Move _lastPalette to DirectorEngine
If the destination movie uses a palette cast member in the same location
as the source, but with different data; Director will assume that the old
palette is correct right up until it has to switch to something else via
the score.
Additionally, ensure that all palettes are loaded into the index when
the Cast is loaded, not just single ones that haven't been loaded before.
Fixes movie transitions and palette rendering in Phibos: Following the Comet.
Changed paths:
engines/director/cast.cpp
engines/director/director.h
engines/director/graphics.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index b209a7c52c4..e8db296fded 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1267,6 +1267,10 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
warning("STUB: Cast::loadCastInfo(): Film loop cast member info not yet supported for version %d", _version);
}
+ // For PaletteCastMember, run load() as we need it right now
+ if (member->_type == kCastPalette)
+ member->load();
+
ci->autoHilite = castInfo.flags & 2;
ci->scriptId = castInfo.scriptId;
if (ci->scriptId != 0)
diff --git a/engines/director/director.h b/engines/director/director.h
index 26f4a6418c0..3018c5b774f 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -260,6 +260,7 @@ public:
uint16 _wmWidth;
uint16 _wmHeight;
byte _fpsLimit;
+ CastMemberID _lastPalette;
private:
byte _currentPalette[768];
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 899eafba6b0..3f824f2efb4 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -133,14 +133,8 @@ void DirectorEngine::loadDefaultPalettes() {
PaletteV4 *DirectorEngine::getPalette(const CastMemberID &id) {
if (!_loadedPalettes.contains(id)) {
- CastMember *member = getCurrentMovie()->getCastMember(id);
- if (member && member->_type == kCastPalette) {
- member->load();
- }
- if (!_loadedPalettes.contains(id)) {
- warning("DirectorEngine::getPalette(): Palette %s not found", id.asString().c_str());
- return nullptr;
- }
+ warning("DirectorEngine::getPalette(): Palette %s not found", id.asString().c_str());
+ return nullptr;
}
return &_loadedPalettes[id];
@@ -161,13 +155,12 @@ bool DirectorEngine::setPalette(const CastMemberID &id) {
if (id.isNull()) {
// Palette id of 0 is unused
return false;
- }
+ }
PaletteV4 *pal = getPalette(id);
if (!pal)
return false;
setPalette(pal->palette, pal->length);
-
return true;
}
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 8546cc83efc..9bef00da406 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2427,10 +2427,10 @@ void LB::b_puppetPalette(int nargs) {
// FIXME: set system palette decided by platform, should be fixed after windows palette is working.
// try to set mac system palette if lastPalette is 0.
- if (score->_lastPalette.isNull())
+ if (g_director->_lastPalette.isNull())
g_director->setPalette(CastMemberID(kClutSystemMac, -1));
else
- g_director->setPalette(score->_lastPalette);
+ g_director->setPalette(g_director->_lastPalette);
}
// TODO: Implement advanced features that use these.
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 1ca5c0e2a6c..870bf54eec8 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -66,7 +66,6 @@ Score::Score(Movie *movie) {
_puppetTempo = 0x00;
_puppetPalette = false;
- _lastPalette = CastMemberID(0, 0);
_paletteTransitionIndex = 0;
memset(_paletteSnapshotBuffer, 0, 768);
@@ -105,7 +104,7 @@ Score::~Score() {
}
CastMemberID Score::getCurrentPalette() {
- return _lastPalette;
+ return g_director->_lastPalette;
}
bool Score::processImmediateFrameScript(Common::String s, int id) {
@@ -276,12 +275,6 @@ void Score::startPlay() {
return;
}
- _lastPalette = _frames[_currentFrame]->_palette.paletteId;
- if (_lastPalette.isNull())
- _lastPalette = _movie->getCast()->_defaultPalette;
- debugC(2, kDebugImages, "Score::startPlay(): palette changed to %s", _lastPalette.asString().c_str());
- _vm->setPalette(_lastPalette);
-
// All frames in the same movie have the same number of channels
if (_playState != kPlayStopped)
for (uint i = 0; i < _frames[1]->_sprites.size(); i++)
@@ -800,17 +793,17 @@ void Score::setLastPalette(uint16 frameId) {
// If the palette is defined in the frame and doesn't match
// the current one, set it
- bool paletteChanged = (currentPalette != _lastPalette) && (!currentPalette.isNull());
+ bool paletteChanged = (currentPalette != g_director->_lastPalette) && (!currentPalette.isNull());
if (paletteChanged) {
debugC(2, kDebugImages, "Score::setLastPalette(): palette changed to %s, from %s", currentPalette.asString().c_str(), isCachedPalette ? "cache" :"frame");
- _lastPalette = currentPalette;
+ g_director->_lastPalette = currentPalette;
_paletteTransitionIndex = 0;
// Switch to a new palette immediately if:
// - this is color cycling mode, or
// - the cached palette ID is different (i.e. we jumped in the score)
if (_frames[frameId]->_palette.colorCycling || isCachedPalette)
- g_director->setPalette(_lastPalette);
+ g_director->setPalette(g_director->_lastPalette);
}
}
@@ -1615,9 +1608,9 @@ Common::String Score::formatChannelInfo() {
result += Common::String::format("PAL: paletteId: %s, firstColor: %d, lastColor: %d, flags: %d, cycleCount: %d, speed: %d, frameCount: %d, fade: %d, delay: %d, style: %d, currentId: %s, defaultId: %s\n",
frame._palette.paletteId.asString().c_str(), frame._palette.firstColor, frame._palette.lastColor, frame._palette.flags,
frame._palette.cycleCount, frame._palette.speed, frame._palette.frameCount,
- frame._palette.fade, frame._palette.delay, frame._palette.style, _lastPalette.asString().c_str(), defaultPalette.asString().c_str());
+ frame._palette.fade, frame._palette.delay, frame._palette.style, g_director->_lastPalette.asString().c_str(), defaultPalette.asString().c_str());
} else {
- result += Common::String::format("PAL: paletteId: 000, currentId: %s, defaultId: %s\n", _lastPalette.asString().c_str(), defaultPalette.asString().c_str());
+ result += Common::String::format("PAL: paletteId: 000, currentId: %s, defaultId: %s\n", g_director->_lastPalette.asString().c_str(), defaultPalette.asString().c_str());
}
result += Common::String::format("TRAN: transType: %d, transDuration: %d, transChunkSize: %d\n",
frame._transType, frame._transDuration, frame._transChunkSize);
diff --git a/engines/director/score.h b/engines/director/score.h
index 04da7f07cb9..fe5d06ff77c 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -149,7 +149,6 @@ public:
byte _puppetTempo;
bool _puppetPalette;
- CastMemberID _lastPalette;
int _paletteTransitionIndex;
byte _paletteSnapshotBuffer[768];
@@ -178,7 +177,6 @@ private:
uint16 _nextFrame;
int _currentLabel;
DirectorSound *_soundManager;
- int _currentPalette;
int _previousBuildBotBuild = -1;
};
More information about the Scummvm-git-logs
mailing list