[Scummvm-git-logs] scummvm master -> 4f49df9ff247c69eb8ce3e54a9a0312596fb0f9a
npjg
nathanael.gentrydb8 at gmail.com
Mon Jul 27 03:49:57 UTC 2020
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b3b7ed19a4 DIRECTOR: Rework palette handling
1e38497d8a DIRECTOR: Properly read frame palette id
013c7276e7 DIRECTOR: Implement basic puppetPalette
3cb5b5acb4 DIRECTOR: LINGO: Implement kTheFramePalette
d6ac60a221 DIRECTOR: LINGO: Implement kTheFrameTempo
4f49df9ff2 DIRECTOR: LINGO: Implement palette of cast
Commit: b3b7ed19a4bf336c4190e924cc4105f0db7896dd
https://github.com/scummvm/scummvm/commit/b3b7ed19a4bf336c4190e924cc4105f0db7896dd
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: Rework palette handling
Now there is no static for default palettes. All the defaults have negative ids
anyway, so those are just protected by the new setter method.
Changed paths:
engines/director/cast.cpp
engines/director/cast.h
engines/director/director.cpp
engines/director/director.h
engines/director/graphics.cpp
engines/director/types.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index d2211994b6..7d75a366d2 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -95,9 +95,6 @@ Cast::~Cast() {
for (Common::HashMap<int, CastMember *>::iterator it = _loadedCast->begin(); it != _loadedCast->end(); ++it)
delete it->_value;
- for (uint i = 0; i < _loadedPalettes.size(); i++)
- delete[] _loadedPalettes[i].palette;
-
delete _loadedStxts;
delete _loadedCast;
delete _lingoArchive;
@@ -211,7 +208,7 @@ bool Cast::loadArchive() {
Common::SeekableSubReadStreamEndian *pal = _castArchive->getResource(MKTAG('C', 'L', 'U', 'T'), clutList[i]);
debugC(2, kDebugLoading, "****** Loading Palette CLUT, #%d", clutList[i]);
- loadPalette(*pal, i);
+ loadPalette(*pal, i + 1);
delete pal;
}
@@ -399,32 +396,20 @@ void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
stream.readByte();
}
+ int palette = -1;
if (_vm->getVersion() >= 4) {
- for (int i = 0; i < 0x16; i++) {
+ for (int i = 0; i < 0x16; i++)
stream.readByte();
- }
- int palette = (int16)stream.readUint16() - 1;
- if (palette <= 0) {
- // Builtin palette
- _vm->setPalette(palette);
- } else if ((uint)palette - 1 < _loadedPalettes.size()) {
- // Loaded palette
- PaletteV4 pal = _loadedPalettes[palette - 1];
- _vm->setPalette(pal.palette, pal.length);
- } else {
- // Default palette
- _vm->setPalette(-1);
- }
+ palette = (int16)stream.readUint16() - 1;
- for (int i = 0; i < 0x08; i++) {
+ for (int i = 0; i < 0x08; i++)
stream.readByte();
- }
- } else {
- // Set default palette for earlier versions
- _vm->setPalette(-1);
}
+ if (!_vm->setPalette(palette))
+ _vm->setPalette(-1);
+
debugC(1, kDebugLoading, "Cast::loadConfig(): len: %d, ver: %d, framerate: %d, light: %d, unk: %d, font: %d, size: %d"
", style: %d", len, ver1, currentFrameRate, lightswitch, unk1, commentFont, commentSize, commentStyle);
debugC(1, kDebugLoading, "Cast::loadConfig(): stagecolor: %d, depth: %d, color: %d, rgb: 0x%04x 0x%04x 0x%04x",
@@ -619,7 +604,7 @@ void Cast::loadPalette(Common::SeekableSubReadStreamEndian &stream, int id) {
index -= 3;
}
- _loadedPalettes.push_back(PaletteV4(id, _palette, steps));
+ g_director->addPalette(id, _palette, steps);
}
void Cast::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 0ddb358fc9..c76cb89af2 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -89,7 +89,6 @@ public:
Common::HashMap<int, CastMember *> *_loadedCast;
Common::HashMap<int, const Stxt *> *_loadedStxts;
- Common::Array<PaletteV4> _loadedPalettes;
uint16 _castIDoffset;
uint16 _castArrayStart;
uint16 _castArrayEnd;
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 4907d02c28..6bad75a7be 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -69,7 +69,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
syncSoundSettings();
// Load Palettes
- loadPalettes();
+ loadDefaultPalettes();
// Load Patterns
loadPatterns();
@@ -117,6 +117,8 @@ DirectorEngine::~DirectorEngine() {
for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _openResFiles.begin(); it != _openResFiles.end(); ++it) {
delete it->_value;
}
+
+ clearPalettes();
}
Archive *DirectorEngine::getMainArchive() const { return _currentStage->getMainArchive(); }
diff --git a/engines/director/director.h b/engines/director/director.h
index 159863acf9..c4c56654d4 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -107,6 +107,7 @@ struct PaletteV4 {
int length;
PaletteV4(int i, byte *p, int l) : id(i), palette(p), length(l) {}
+ PaletteV4() : id(0), palette(nullptr), length(0) {}
};
struct MacShape {
@@ -184,10 +185,12 @@ public:
Common::String getCurrentPath() const;
// graphics.cpp
- void setPalette(int id);
+ void addPalette(int id, byte *palette, int length);
+ bool setPalette(int id);
void setPalette(byte *palette, uint16 count);
+ void clearPalettes();
bool hasFeature(EngineFeature f) const override;
- void loadPalettes();
+ void loadDefaultPalettes();
const byte *getPalette() const { return _currentPalette; }
uint16 getPaletteColorCount() const { return _currentPaletteLength; }
void loadPatterns();
@@ -238,7 +241,7 @@ private:
Graphics::MacPatterns _director3Patterns;
Graphics::MacPatterns _director3QuickDrawPatterns;
- Common::HashMap<int, PaletteV4 *> _director4Palettes;
+ Common::HashMap<int, PaletteV4> _loadedPalettes;
};
extern DirectorEngine *g_director;
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 7103b5821a..42a9022d0e 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -563,19 +563,6 @@ static byte winPalette[768] = {
};
-static PaletteV4 director4Palettes[] = {
- PaletteV4(-1, macPalette, 256),
- PaletteV4(-2, rainbowPalette, 256),
- PaletteV4(-3, grayscalePalette, 256),
- PaletteV4(-4, pastelsPalette, 256),
- PaletteV4(-5, vividPalette, 256),
- PaletteV4(-6, ntscPalette, 256),
- PaletteV4(-7, metallicPalette, 256),
- PaletteV4(-101, winPalette, 256),
- PaletteV4(0, nullptr, 0)
-};
-
-
static byte director3Patterns[][8] = {
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0x77, 0xFF, 0xFF, 0xFF, 0x77, 0xFF },
@@ -754,19 +741,40 @@ Graphics::MacPatterns &DirectorEngine::getPatterns() {
return _director3QuickDrawPatterns;
}
-void DirectorEngine::loadPalettes() {
- for (PaletteV4 *pal = director4Palettes; pal->id != 0; pal++) {
- _director4Palettes[pal->id] = pal;
+void DirectorEngine::loadDefaultPalettes() {
+ _loadedPalettes[kClutSystemMac] = PaletteV4(kClutSystemMac, macPalette, 256);
+ _loadedPalettes[kClutRainbow] = PaletteV4(kClutRainbow, rainbowPalette, 256);
+ _loadedPalettes[kClutGrayscale] = PaletteV4(kClutGrayscale, grayscalePalette, 256);
+ _loadedPalettes[kClutPastels] = PaletteV4(kClutPastels, pastelsPalette, 256);
+ _loadedPalettes[kClutVivid] = PaletteV4(kClutVivid, vividPalette, 256);
+ _loadedPalettes[kClutNTSC] = PaletteV4(kClutNTSC, ntscPalette, 256);
+ _loadedPalettes[kClutMetallic] = PaletteV4(kClutMetallic, metallicPalette, 256);
+ _loadedPalettes[kClutSystemWin] = PaletteV4(kClutSystemWin, winPalette, 256);
+}
+
+void DirectorEngine::addPalette(int id, byte *palette, int length) {
+ if (id < 0) {
+ warning("DirectorEngine::addPalette(): Negative palette ids reserved for default palettes");
+ return;
+ } else if (_loadedPalettes.contains(id)) {
+ // TODO: Can castmember palettes conflict with those in the cast config?
+ warning("DirectorEngine::addPalette(): Attempting to replace palette %d", id);
+ return;
}
+
+ _loadedPalettes[id] = PaletteV4(id, palette, length);
}
-void DirectorEngine::setPalette(int id) {
- if (!_director4Palettes.contains(id)) {
+bool DirectorEngine::setPalette(int id) {
+ if (!_loadedPalettes.contains(id)) {
warning("setPalette(): no palette with matching id %d", id);
- return;
+ return false;
}
- PaletteV4 *pal = _director4Palettes[id];
- setPalette(pal->palette, pal->length);
+
+ PaletteV4 pal = _loadedPalettes[id];
+ setPalette(pal.palette, pal.length);
+
+ return true;
}
void DirectorEngine::setPalette(byte *palette, uint16 count) {
@@ -777,6 +785,13 @@ void DirectorEngine::setPalette(byte *palette, uint16 count) {
_wm->passPalette(palette, count);
}
+void DirectorEngine::clearPalettes() {
+ for (Common::HashMap<int, PaletteV4>::iterator it = _loadedPalettes.begin(); it != _loadedPalettes.end(); ++it) {
+ if (it->_value.id > 0)
+ delete[] it->_value.palette;
+ }
+}
+
void DirectorEngine::setCursor(int type) {
switch (type) {
case kCursorDefault:
diff --git a/engines/director/types.h b/engines/director/types.h
index 3891bc220c..e25bd9039f 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -274,14 +274,14 @@ enum TransitionType {
// TODO: Can there be any more built-in palette types?
enum PaletteType {
- kClutSystemMac = 0x0000,
- kClutSystemWin = 0xff9c,
- kClutRainbow = 0xffff,
- kClutGrayscale = 0xfffe,
- kClutPastels = 0xfffd,
- kClutVivid = 0xfffc,
- kClutNTSC = 0xfffb,
- kClutMetallic = 0xfffa
+ kClutSystemMac = -1,
+ kClutRainbow = -2,
+ kClutGrayscale = -3,
+ kClutPastels = -4,
+ kClutVivid = -5,
+ kClutNTSC = -6,
+ kClutMetallic = -7,
+ kClutSystemWin = -101
};
enum {
Commit: 1e38497d8a8a09b3c9aee8f5b371e67f07203d10
https://github.com/scummvm/scummvm/commit/1e38497d8a8a09b3c9aee8f5b371e67f07203d10
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: Properly read frame palette id
Changed paths:
engines/director/frame.cpp
engines/director/frame.h
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 35fd5ba245..90c862158d 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -211,7 +211,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
_colorTrans = stream->readByte();
// palette
- _palette.paletteId = stream->readUint16();
+ _palette.paletteId = stream->readSint16();
_palette.firstColor = stream->readByte(); // for cycles. note: these start at 0x80 (for pal entry 0)!
_palette.lastColor = stream->readByte();
_palette.flags = stream->readByte();
diff --git a/engines/director/frame.h b/engines/director/frame.h
index ca1cd24f49..51c0b0fb56 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -47,7 +47,7 @@ enum {
};
struct PaletteInfo {
- uint16 paletteId;
+ int paletteId;
byte firstColor;
byte lastColor;
Commit: 013c7276e70bd746edfca8e3a2be57071116a597
https://github.com/scummvm/scummvm/commit/013c7276e70bd746edfca8e3a2be57071116a597
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: Implement basic puppetPalette
Right now, only changing the palette itself is supported. Fades and other fancy
features will come later, as needed.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 6ef172b7b1..82eaee6c98 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1723,10 +1723,62 @@ void LB::b_pasteClipBoardInto(int nargs) {
void LB::b_puppetPalette(int nargs) {
g_lingo->convertVOIDtoString(0, nargs);
+ int numFrames = 0, speed = 0, palette = 0;
+ Datum d;
- g_lingo->printSTUBWithArglist("b_puppetPalette", nargs);
+ switch (nargs) {
+ case 3:
+ numFrames = g_lingo->pop().asInt();
+ // fall through
+ case 2:
+ speed = g_lingo->pop().asInt();
+ // fall through
+ case 1:
+ d = g_lingo->pop();
+
+ if (d.type == STRING) {
+ // TODO: It seems that there are not strings for Mac and Win system palette
+ Common::String palStr = d.asString();
+ if (palStr.equalsIgnoreCase("Rainbow")) {
+ palette = kClutRainbow;
+ } else if (palStr.equalsIgnoreCase("Grayscale")) {
+ palette = kClutGrayscale;
+ } else if (palStr.equalsIgnoreCase("Pastels")) {
+ palette = kClutPastels;
+ } else if (palStr.equalsIgnoreCase("Vivid")) {
+ palette = kClutVivid;
+ } else if (palStr.equalsIgnoreCase("NTSC")) {
+ palette = kClutMetallic;
+ } else if (palStr.equalsIgnoreCase("Metallic")) {
+ palette = kClutSystemWin;
+ } else {
+ CastMember *member = g_director->getCurrentMovie()->getCastMemberByName(palStr);
- g_lingo->dropStack(nargs);
+ if (member && member->_type == kCastPalette)
+ palette = member->getID();
+ }
+ } else {
+ palette = d.asInt();
+ }
+ break;
+ default:
+ ARGNUMCHECK(1);
+ g_lingo->dropStack(nargs);
+ return;
+ }
+
+ if (palette) {
+ g_director->setPalette(palette);
+ g_director->getCurrentMovie()->getScore()->_puppetPalette = true;
+ } else {
+ // Setting puppetPalette to 0 disables it (Lingo Dictionary, 226)
+ g_director->setPalette(g_director->getCurrentMovie()->getScore()->_lastPalette);
+ g_director->getCurrentMovie()->getScore()->_puppetPalette = false;
+ }
+
+ // TODO: Implement advanced features that use these.
+ if (numFrames || speed)
+ warning("b_puppetPalette: Skipping extra features");
}
void LB::b_puppetSound(int nargs) {
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index af799189d8..335f4b4384 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -54,7 +54,10 @@ Score::Score(Movie *movie) {
_lingo = _vm->getLingo();
_soundManager = _vm->getSoundManager();
+
_puppetTempo = 0x00;
+ _puppetPalette = false;
+ _lastPalette = 0;
_labels = nullptr;
_currentCursor = nullptr;
@@ -405,6 +408,12 @@ void Score::renderFrame(uint16 frameId, RenderMode mode) {
if (!renderTransition(frameId))
renderSprites(frameId, mode);
+ int currentPalette = _frames[frameId]->_palette.paletteId;
+ if (!_puppetPalette && currentPalette != _lastPalette) {
+ _lastPalette = currentPalette;
+ g_director->setPalette(currentPalette);
+ }
+
_stage->render();
if (_frames[frameId]->_sound1 || _frames[frameId]->_sound2)
diff --git a/engines/director/score.h b/engines/director/score.h
index 9617146bb8..b623ce4c2b 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -120,6 +120,9 @@ public:
byte _currentFrameRate;
byte _puppetTempo;
+ bool _puppetPalette;
+ int _lastPalette;
+
PlayState _playState;
uint32 _nextFrameTime;
int _waitForChannel;
Commit: 3cb5b5acb4c41d9217eff46bce00039aea137cb3
https://github.com/scummvm/scummvm/commit/3cb5b5acb4c41d9217eff46bce00039aea137cb3
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: LINGO: Implement kTheFramePalette
Changed paths:
engines/director/lingo/lingo-the.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 571e4454cb..db016d2dcf 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -431,7 +431,8 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
getTheEntitySTUB(kTheFrameScript);
break;
case kTheFramePalette:
- getTheEntitySTUB(kTheFramePalette);
+ d.type = INT;
+ d.u.i = _vm->getCurrentMovie()->getScore()->getCurrentPalette();
break;
case kTheFrameTempo:
getTheEntitySTUB(kTheFrameTempo);
@@ -814,6 +815,9 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
#define setTheEntitySTUB(entity) \
warning("Lingo::setTheEntity(): Unprocessed setting entity %s", entity2str(entity));
+#define setTheEntityReadOnly(entity) \
+ warning("Lingo::setTheEntity: Attempt to set read-only entity %s", entity2str(entity));
+
void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
if (debugChannelSet(3, kDebugLingoExec)) {
debugC(3, kDebugLingoExec, "Lingo::setTheEntity(%s, %s, %s, %s)", entity2str(entity), id.asString(true).c_str(), field2str(field), d.asString(true).c_str());
@@ -871,7 +875,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
setTheEntitySTUB(kTheFrameScript);
break;
case kTheFramePalette:
- setTheEntitySTUB(kTheFramePalette);
+ setTheEntityReadOnly(kTheFramePalette);
break;
case kTheFullColorPermit:
// No op in ScummVM. We always allow it
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 335f4b4384..f692c38315 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -90,6 +90,10 @@ Score::~Score() {
delete _labels;
}
+int Score::getCurrentPalette() {
+ return _frames[_currentFrame]->_palette.paletteId;
+}
+
bool Score::processImmediateFrameScript(Common::String s, int id) {
s.trim();
diff --git a/engines/director/score.h b/engines/director/score.h
index b623ce4c2b..95dd6d2a84 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -81,8 +81,11 @@ public:
void startPlay();
void step();
void stopPlay();
+
void setCurrentFrame(uint16 frameId) { _nextFrame = frameId; }
uint16 getCurrentFrame() { return _currentFrame; }
+ int getCurrentPalette();
+
Channel *getChannelById(uint16 id);
Sprite *getSpriteById(uint16 id);
Commit: d6ac60a2210bdc1a2fd8f910ddde4d64933bbbc4
https://github.com/scummvm/scummvm/commit/d6ac60a2210bdc1a2fd8f910ddde4d64933bbbc4
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: LINGO: Implement kTheFrameTempo
Changed paths:
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index db016d2dcf..dd80ff26f9 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -435,7 +435,8 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.u.i = _vm->getCurrentMovie()->getScore()->getCurrentPalette();
break;
case kTheFrameTempo:
- getTheEntitySTUB(kTheFrameTempo);
+ d.type = INT;
+ d.u.i = _vm->getCurrentMovie()->getScore()->_currentFrameRate;
break;
case kTheFreeBlock:
case kTheFreeBytes:
@@ -877,6 +878,9 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
case kTheFramePalette:
setTheEntityReadOnly(kTheFramePalette);
break;
+ case kTheFrameTempo:
+ setTheEntityReadOnly(kTheFramePalette);
+ break;
case kTheFullColorPermit:
// No op in ScummVM. We always allow it
break;
Commit: 4f49df9ff247c69eb8ce3e54a9a0312596fb0f9a
https://github.com/scummvm/scummvm/commit/4f49df9ff247c69eb8ce3e54a9a0312596fb0f9a
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-26T23:46:06-04:00
Commit Message:
DIRECTOR: LINGO: Implement palette of cast
Bitmap cast members also now have palette read in correctly, since the CLUT
field can refer to a castmember and not just one of the builtin fields.
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 5c9415327c..c8980842c9 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -70,7 +70,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
if (_bytes & 0x8000) {
_bitsPerPixel = stream.readUint16();
- _clut = (PaletteType)stream.readUint16();
+ _clut = stream.readSint16() - 1;
} else {
_bitsPerPixel = 1;
_clut = kClutSystemMac;
@@ -95,7 +95,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
if (stream.eos()) {
_bitsPerPixel = 0;
} else {
- _clut = (PaletteType)stream.readUint16();
+ _clut = stream.readSint16() - 1;
stream.readUint16();
/* uint16 unk1 = */ stream.readUint16();
stream.readUint16();
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 671143270b..898e7fd139 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -105,7 +105,7 @@ public:
uint16 _regY;
uint16 _flags2;
uint16 _bytes;
- PaletteType _clut;
+ int _clut;
uint16 _bitsPerPixel;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index dd80ff26f9..d350eaca78 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1503,7 +1503,8 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
break;
case kThePalette:
- warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
+ if (member->_type == kCastBitmap)
+ d.u.i = ((BitmapCastMember *)member)->_clut;
break;
case kThePicture:
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
@@ -1697,7 +1698,8 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
warning("STUB: Lingo::setTheCast(): Unprocessed setting field \"%s\" of cast %d", field2str(field), id);
break;
case kThePalette:
- warning("STUB: Lingo::setTheCast(): Unprocessed setting field \"%s\" of cast %d", field2str(field), id);
+ if (member->_type == kCastBitmap)
+ ((BitmapCastMember *)member)->_clut = d.asInt();
break;
case kThePicture:
warning("STUB: Lingo::setTheCast(): Unprocessed setting field \"%s\" of cast %d", field2str(field), id);
More information about the Scummvm-git-logs
mailing list