From 2ef52a07cb0f658b35fee42f2f617e9799e2fae2 Mon Sep 17 00:00:00 2001 From: ysj1173886760 <1173886760@qq.com> Date: Wed, 7 Jul 2021 21:03:45 +0800 Subject: [PATCH] DIRECTOR: amend the way we are parsing palette for D2 --- engines/director/cast.cpp | 7 +++++-- engines/director/cast.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp index 20afc416774..5932bf354ce 100644 --- a/engines/director/cast.cpp +++ b/engines/director/cast.cpp @@ -322,7 +322,7 @@ void Cast::loadCast() { debugC(2, kDebugLoading, "****** Loading Palette CLUT, #%d", clutList[i]); PaletteV4 p = loadPalette(*pal); - g_director->addPalette(clutList[i], p.palette, p.length); + g_director->addPalette(clutList[i] & 0xff, p.palette, p.length); delete pal; } } @@ -508,9 +508,12 @@ void Cast::loadCastChildren() { // TODO: Verify how palettes work in >D4 versions if (_version >= kFileVer400 && _version < kFileVer500 && member->_children.size() == 1) { member->_palette = g_director->getPalette(member->_children[0].index); - } else if (_version < kFileVer400) { + } else if (_version >= kFileVer300 && _version < kFileVer400) { // D3 palettes are always kept in this ascending order member->_palette = g_director->getPalette((++p)->_value.id); + } else if (_version < kFileVer300) { + // for D2, we shall use the castId to get the palette + member->_palette = g_director->getPalette(member->getID()); } else { warning("Cast::loadSpriteChildren(): Expected 1 child for palette cast, got %d", member->_children.size()); } diff --git a/engines/director/cast.h b/engines/director/cast.h index 3ecb7b76f42..08d92495361 100644 --- a/engines/director/cast.h +++ b/engines/director/cast.h @@ -97,9 +97,9 @@ public: Common::String getVideoPath(int castId); void dumpScript(const char *script, ScriptType type, uint16 id); + PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream); private: - PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream); void loadScriptText(Common::SeekableReadStreamEndian &stream, uint16 id); void loadFontMap(Common::SeekableReadStreamEndian &stream); void loadFontMapV4(Common::SeekableReadStreamEndian &stream);