[Scummvm-git-logs] scummvm master -> 05b6bb2021afd4f655124fe450a17d8ee91af264
djsrv
dservilla at gmail.com
Thu Jul 2 15:41:39 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
64fdff14eb DIRECTOR: Initialize cast members w/ cast and ID
4977b640e6 DIRECTOR: Remove old ShapeCastMember constructor
05b6bb2021 DIRECTOR: Add Cast convenience methods
Commit: 64fdff14ebc9613f503e8bcc1805791d9738a478
https://github.com/scummvm/scummvm/commit/64fdff14ebc9613f503e8bcc1805791d9738a478
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-02T11:40:22-04:00
Commit Message:
DIRECTOR: Initialize cast members w/ cast and ID
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 5763d9d71d..0cae5fb724 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -31,16 +31,18 @@
namespace Director {
-CastMember::CastMember() {
+CastMember::CastMember(Cast* cast, uint16 castId) {
_type = kCastTypeNull;
- _cast = nullptr;
+ _cast = cast;
+ _castId = castId;
_widget = nullptr;
_hilite = false;
_modified = true;
}
-BitmapCastMember::BitmapCastMember(Common::ReadStreamEndian &stream, uint32 castTag, uint16 version) {
+BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint32 castTag, uint16 version)
+ : CastMember(cast, castId) {
_type = kCastBitmap;
_img = nullptr;
_bytes = 0;
@@ -133,7 +135,8 @@ void BitmapCastMember::createWidget() {
_widget->getSurface()->blitFrom(*_img->getSurface());
}
-DigitalVideoCastMember::DigitalVideoCastMember(Common::ReadStreamEndian &stream, uint16 version) {
+DigitalVideoCastMember::DigitalVideoCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
+ : CastMember(cast, castId) {
_type = kCastDigitalVideo;
if (version < 4) {
@@ -177,7 +180,8 @@ DigitalVideoCastMember::DigitalVideoCastMember(Common::ReadStreamEndian &stream,
}
}
-SoundCastMember::SoundCastMember(Common::ReadStreamEndian &stream, uint16 version) {
+SoundCastMember::SoundCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
+ : CastMember(cast, castId) {
_type = kCastSound;
_audio = nullptr;
_looping = 0;
@@ -190,7 +194,8 @@ SoundCastMember::SoundCastMember(Common::ReadStreamEndian &stream, uint16 versio
}
}
-TextCastMember::TextCastMember(Common::ReadStreamEndian &stream, uint16 version, bool asButton) {
+TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version, bool asButton)
+ : CastMember(cast, castId) {
_type = kCastText;
_borderSize = kSizeNone;
@@ -465,7 +470,8 @@ bool TextCastMember::setEditable(bool editable) {
return true;
}
-ShapeCastMember::ShapeCastMember(Common::ReadStreamEndian &stream, uint16 version) {
+ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
+ : CastMember(cast, castId) {
_type = kCastShape;
byte flags, unk1;
@@ -520,7 +526,7 @@ ShapeCastMember::ShapeCastMember(Common::ReadStreamEndian &stream, uint16 versio
_initialRect.debugPrint(0, "ShapeCastMember: rect:");
}
-ShapeCastMember::ShapeCastMember() {
+ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId) : CastMember(cast, castId) {
_shapeType = kShapeRectangle;
_pattern = 0;
_fgCol = 0;
@@ -531,7 +537,8 @@ ShapeCastMember::ShapeCastMember() {
_ink = kInkTypeCopy;
}
-ScriptCastMember::ScriptCastMember(Common::ReadStreamEndian &stream, uint16 version) {
+ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
+ : CastMember(cast, castId) {
_type = kCastLingoScript;
_scriptType = kNoneScript;
@@ -577,7 +584,8 @@ ScriptCastMember::ScriptCastMember(Common::ReadStreamEndian &stream, uint16 vers
}
}
-RTECastMember::RTECastMember(Common::ReadStreamEndian &stream, uint16 version) : TextCastMember(stream, version) {
+RTECastMember::RTECastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
+ : TextCastMember(cast, castId, stream, version) {
_type = kCastRTE;
}
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 6abf607135..39ab2e5029 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -52,8 +52,12 @@ struct Resource;
class CastMember {
public:
- CastMember();
+ CastMember(Cast *cast, uint16 castId);
virtual ~CastMember() {};
+
+ Cast *getCast() { return _cast; }
+ uint16 getID() { return _castId; }
+
virtual bool isEditable() { return false; }
virtual bool setEditable(bool editable) { return false; }
virtual bool isModified() { return _modified; }
@@ -63,7 +67,6 @@ public:
virtual void getColors(int *fgcolor, int *bgcolor) { return; }
CastType _type;
- Cast *_cast;
Common::Rect _initialRect;
Common::Rect _boundingRect;
Common::Array<Resource> _children;
@@ -72,11 +75,15 @@ public:
bool _hilite;
Graphics::MacWidget *_widget;
+
+private:
+ Cast *_cast;
+ uint16 _castId;
};
class BitmapCastMember : public CastMember {
public:
- BitmapCastMember(Common::ReadStreamEndian &stream, uint32 castTag, uint16 version);
+ BitmapCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint32 castTag, uint16 version);
~BitmapCastMember();
virtual void createWidget() override;
// virtual void setColors(int *fgcolor, int *bgcolor) override;
@@ -97,7 +104,7 @@ public:
class DigitalVideoCastMember : public CastMember {
public:
- DigitalVideoCastMember(Common::ReadStreamEndian &stream, uint16 version);
+ DigitalVideoCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
bool _looping;
bool _pauseAtStart;
@@ -114,7 +121,7 @@ public:
class SoundCastMember : public CastMember {
public:
- SoundCastMember(Common::ReadStreamEndian &stream, uint16 version);
+ SoundCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
bool _looping;
AudioDecoder *_audio;
@@ -122,8 +129,8 @@ public:
class ShapeCastMember : public CastMember {
public:
- ShapeCastMember(Common::ReadStreamEndian &stream, uint16 version);
- ShapeCastMember();
+ ShapeCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
+ ShapeCastMember(Cast *cast, uint16 castId);
ShapeType _shapeType;
uint16 _pattern;
@@ -137,7 +144,7 @@ public:
class TextCastMember : public CastMember {
public:
- TextCastMember(Common::ReadStreamEndian &stream, uint16 version, bool asButton = false);
+ TextCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version, bool asButton = false);
virtual void setColors(int *fgcolor, int *bgcolor) override;
virtual void getColors(int *fgcolor, int *bgcolor) override;
@@ -182,7 +189,7 @@ private:
class ScriptCastMember : public CastMember {
public:
- ScriptCastMember(Common::ReadStreamEndian &stream, uint16 version);
+ ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
uint32 _id;
ScriptType _scriptType;
@@ -190,7 +197,7 @@ public:
class RTECastMember : public TextCastMember {
public:
- RTECastMember(Common::ReadStreamEndian &stream, uint16 version);
+ RTECastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
void loadChunks();
};
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 182a4b45db..30710f812f 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -889,7 +889,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
if (member->_type == kCastLingoScript)
scriptType = ((ScriptCastMember *)member)->_scriptType;
- CastMemberInfo *info = member->_cast->_castsInfo[castId];
+ CastMemberInfo *info = member->getCast()->_castsInfo[castId];
if (info)
castName = info->name;
}
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 7c5f40e346..8435ca950d 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1121,7 +1121,7 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
warning("Lingo::setTheCast(): The cast %d not found. type: %d", id, castType);
return;
}
- member->_cast->_lingoArchive->addCode(d.u.s->c_str(), kCastScript, id);
+ member->getCast()->_lingoArchive->addCode(d.u.s->c_str(), kCastScript, id);
castInfo->script = d.asString();
break;
case kTheText:
Commit: 4977b640e6739e44ed11c77bf61e4416b432409c
https://github.com/scummvm/scummvm/commit/4977b640e6739e44ed11c77bf61e4416b432409c
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-02T11:40:22-04:00
Commit Message:
DIRECTOR: Remove old ShapeCastMember constructor
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 0cae5fb724..2cad3f16ed 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -526,17 +526,6 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::ReadStreamEn
_initialRect.debugPrint(0, "ShapeCastMember: rect:");
}
-ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId) : CastMember(cast, castId) {
- _shapeType = kShapeRectangle;
- _pattern = 0;
- _fgCol = 0;
- _bgCol = 0;
- _fillType = 0;
- _lineThickness = 0;
- _lineDirection = 0;
- _ink = kInkTypeCopy;
-}
-
ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version)
: CastMember(cast, castId) {
_type = kCastLingoScript;
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 39ab2e5029..88b9c04d3a 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -130,7 +130,6 @@ public:
class ShapeCastMember : public CastMember {
public:
ShapeCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
- ShapeCastMember(Cast *cast, uint16 castId);
ShapeType _shapeType;
uint16 _pattern;
Commit: 05b6bb2021afd4f655124fe450a17d8ee91af264
https://github.com/scummvm/scummvm/commit/05b6bb2021afd4f655124fe450a17d8ee91af264
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-02T11:40:22-04:00
Commit Message:
DIRECTOR: Add Cast convenience methods
Changed paths:
engines/director/cast.cpp
engines/director/cast.h
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo.cpp
engines/director/movie.cpp
engines/director/movie.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 83f62fb07e..ea5d187ea7 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -118,6 +118,24 @@ CastMember *Cast::getCastMember(int castId) {
return result;
}
+CastMember *Cast::getCastMemberByName(const Common::String &name) {
+ CastMember *result = nullptr;
+
+ if (_castsNames.contains(name)) {
+ result = _loadedCast->getVal(_castsNames[name]);
+ }
+ return result;
+}
+
+CastMemberInfo *Cast::getCastMemberInfo(int castId) {
+ CastMemberInfo *result = nullptr;
+
+ if (_castsInfo.contains(castId)) {
+ result = _castsInfo[castId];
+ }
+ return result;
+}
+
const Stxt *Cast::getStxt(int castId) {
const Stxt *result = nullptr;
@@ -628,27 +646,27 @@ void Cast::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
else
error("Cast::loadCastDataVWCR(): non-existent reference to BitmapCastMember");
- _loadedCast->setVal(id, new BitmapCastMember(stream, tag, _vm->getVersion()));
+ _loadedCast->setVal(id, new BitmapCastMember(this, id, stream, tag, _vm->getVersion()));
break;
case kCastText:
debugC(3, kDebugLoading, "Cast::loadCastDataVWCR(): CastTypes id: %d(%s) TextCastMember", id, numToCastNum(id));
- _loadedCast->setVal(id, new TextCastMember(stream, _vm->getVersion()));
+ _loadedCast->setVal(id, new TextCastMember(this, id, stream, _vm->getVersion()));
break;
case kCastShape:
debugC(3, kDebugLoading, "Cast::loadCastDataVWCR(): CastTypes id: %d(%s) ShapeCastMember", id, numToCastNum(id));
- _loadedCast->setVal(id, new ShapeCastMember(stream, _vm->getVersion()));
+ _loadedCast->setVal(id, new ShapeCastMember(this, id, stream, _vm->getVersion()));
break;
case kCastButton:
debugC(3, kDebugLoading, "Cast::loadCastDataVWCR(): CastTypes id: %d(%s) ButtonCast", id, numToCastNum(id));
- _loadedCast->setVal(id, new TextCastMember(stream, _vm->getVersion(), true));
+ _loadedCast->setVal(id, new TextCastMember(this, id, stream, _vm->getVersion(), true));
break;
case kCastSound:
debugC(3, kDebugLoading, "Cast::loadCastDataVWCR(): CastTypes id: %d(%s) SoundCastMember", id, numToCastNum(id));
- _loadedCast->setVal(id, new SoundCastMember(stream, _vm->getVersion()));
+ _loadedCast->setVal(id, new SoundCastMember(this, id, stream, _vm->getVersion()));
break;
case kCastDigitalVideo:
debugC(3, kDebugLoading, "Cast::loadCastDataVWCR(): CastTypes id: %d(%s) DigitalVideoCastMember", id, numToCastNum(id));
- _loadedCast->setVal(id, new DigitalVideoCastMember(stream, _vm->getVersion()));
+ _loadedCast->setVal(id, new DigitalVideoCastMember(this, id, stream, _vm->getVersion()));
break;
default:
warning("Cast::loadCastDataVWCR(): Unhandled cast id: %d(%s), type: %d, %d bytes", id, numToCastNum(id), castType, size);
@@ -656,7 +674,6 @@ void Cast::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
continue;
}
stream.seek(returnPos);
- _loadedCast->getVal(id)->_cast = this;
}
}
@@ -726,35 +743,35 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
switch (castType) {
case kCastBitmap:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastBitmap (%d children)", res->children.size());
- _loadedCast->setVal(id, new BitmapCastMember(castStream, res->tag, _vm->getVersion()));
+ _loadedCast->setVal(id, new BitmapCastMember(this, id, castStream, res->tag, _vm->getVersion()));
break;
case kCastSound:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastSound (%d children)", res->children.size());
- _loadedCast->setVal(id, new SoundCastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new SoundCastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastText:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastText (%d children)", res->children.size());
- _loadedCast->setVal(id, new TextCastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new TextCastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastShape:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastShape (%d children)", res->children.size());
- _loadedCast->setVal(id, new ShapeCastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new ShapeCastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastButton:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastButton (%d children)", res->children.size());
- _loadedCast->setVal(id, new TextCastMember(castStream, _vm->getVersion(), true));
+ _loadedCast->setVal(id, new TextCastMember(this, id, castStream, _vm->getVersion(), true));
break;
case kCastLingoScript:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastLingoScript");
- _loadedCast->setVal(id, new ScriptCastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new ScriptCastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastRTE:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastRTE (%d children)", res->children.size());
- _loadedCast->setVal(id, new RTECastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new RTECastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastDigitalVideo:
debugC(3, kDebugLoading, "Cast::loadCastData(): loading kCastDigitalVideo (%d children)", res->children.size());
- _loadedCast->setVal(id, new DigitalVideoCastMember(castStream, _vm->getVersion()));
+ _loadedCast->setVal(id, new DigitalVideoCastMember(this, id, castStream, _vm->getVersion()));
break;
case kCastFilmLoop:
warning("STUB: Cast::loadCastData(): kCastFilmLoop (%d children)", res->children.size());
@@ -780,8 +797,6 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
}
if (_loadedCast->contains(id)) { // Skip unhandled casts
- _loadedCast->getVal(id)->_cast = this;
-
debugCN(3, kDebugLoading, "Children: ");
for (uint child = 0; child < res->children.size(); child++) {
debugCN(3, kDebugLoading, "%d ", res->children[child].index);
diff --git a/engines/director/cast.h b/engines/director/cast.h
index f416397ec3..fcb2f24b24 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -70,6 +70,8 @@ public:
Common::Rect getCastMemberInitialRect(int castId);
void setCastMemberModified(int castId);
CastMember *getCastMember(int castId);
+ CastMember *getCastMemberByName(const Common::String &name);
+ CastMemberInfo *getCastMemberInfo(int castId);
const Stxt *getStxt(int castId);
void dumpScript(const char *script, ScriptType type, uint16 id);
@@ -82,8 +84,6 @@ private:
public:
Archive *_castArchive;
- Common::HashMap<uint16, CastMemberInfo *> _castsInfo;
- Common::HashMap<Common::String, int, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _castsNames;
Common::HashMap<uint16, Common::String> _fontMap;
Common::HashMap<int, CastMember *> *_loadedCast;
@@ -101,6 +101,9 @@ private:
Movie *_movie;
Common::String _macName;
+
+ Common::HashMap<uint16, CastMemberInfo *> _castsInfo;
+ Common::HashMap<Common::String, int, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _castsNames;
};
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 30710f812f..0147410ca2 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -889,7 +889,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
if (member->_type == kCastLingoScript)
scriptType = ((ScriptCastMember *)member)->_scriptType;
- CastMemberInfo *info = member->getCast()->_castsInfo[castId];
+ CastMemberInfo *info = g_director->getCurrentMovie()->getCastMemberInfo(castId);
if (info)
castName = info->name;
}
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 8435ca950d..d9c1e6610d 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -955,8 +955,6 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
return d;
}
- Cast *cast = movie->getCast();
-
CastMember *member = _vm->getCurrentMovie()->getCastMember(id);
if (!member) {
if (field == kTheLoaded) {
@@ -966,6 +964,7 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
}
return d;
}
+ Cast *cast = member->getCast();
if (field == kTheHilite) {
d.u.i = member->_hilite;
@@ -973,17 +972,10 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
}
CastType castType = member->_type;
- CastMemberInfo *castInfo = nullptr;
- if (cast->_castsInfo.contains(id)) {
- castInfo = cast->_castsInfo.getVal(id);
- } else {
- Cast *shared = movie->getSharedCast();
- if (shared && shared->_castsInfo.contains(id)) {
- castInfo = shared->_castsInfo.getVal(id);
- } else {
- warning("Lingo::getTheCast(): CastMember info for %d not found", id);
- return d;
- }
+ CastMemberInfo *castInfo = cast->getCastMemberInfo(id);
+ if (!castInfo) {
+ warning("Lingo::getTheCast(): CastMember info for %d not found", id);
+ return d;
}
switch (field) {
@@ -1043,12 +1035,6 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
int id = 0;
- Cast *cast = _vm->getCurrentMovie()->getCast();
-
- if (!cast) {
- warning("Lingo::setTheCast(): The cast %d field \"%s\" setting over non-active cast", id, field2str(field));
- return;
- }
if (id1.type == INT) {
id = id1.u.i;
@@ -1064,10 +1050,9 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
warning("Lingo::setTheCast(): CastMember id %d doesn't exist", id);
return;
}
+ Cast *cast = member->getCast();
CastType castType = member->_type;
- CastMemberInfo *castInfo = cast->_castsInfo[id];
-
- // FIXME: Properly handle shared cast
+ CastMemberInfo *castInfo = cast->getCastMemberInfo(id);
switch (field) {
case kTheBackColor: {
@@ -1121,7 +1106,7 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
warning("Lingo::setTheCast(): The cast %d not found. type: %d", id, castType);
return;
}
- member->getCast()->_lingoArchive->addCode(d.u.s->c_str(), kCastScript, id);
+ cast->_lingoArchive->addCode(d.u.s->c_str(), kCastScript, id);
castInfo->script = d.asString();
break;
case kTheText:
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 91ca1a03e5..43b2a6623f 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1167,12 +1167,11 @@ int Lingo::castIdFetch(Datum &var) {
return 0;
}
- Cast *cast = movie->getCast();
-
int id = 0;
if (var.type == STRING) {
- if (cast->_castsNames.contains(*var.u.s))
- id = cast->_castsNames[*var.u.s];
+ CastMember *member = movie->getCastMemberByName(var.asString());
+ if (member)
+ id = member->getID();
else
warning("castIdFetch: reference to non-existent cast member: %s", var.u.s->c_str());
} else if (var.type == INT || var.type == FLOAT) {
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 145cd93b49..5ce41b9a21 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -237,6 +237,22 @@ CastMember *Movie::getCastMember(int castId) {
return result;
}
+CastMember *Movie::getCastMemberByName(const Common::String &name) {
+ CastMember *result = _cast->getCastMemberByName(name);
+ if (result == nullptr && _sharedCast) {
+ result = _sharedCast->getCastMemberByName(name);
+ }
+ return result;
+}
+
+CastMemberInfo *Movie::getCastMemberInfo(int castId) {
+ CastMemberInfo *result = _cast->getCastMemberInfo(castId);
+ if (result == nullptr && _sharedCast) {
+ result = _sharedCast->getCastMemberInfo(castId);
+ }
+ return result;
+}
+
const Stxt *Movie::getStxt(int castId) {
const Stxt *result = _cast->getStxt(castId);
if (result == nullptr && _sharedCast) {
diff --git a/engines/director/movie.h b/engines/director/movie.h
index be09d3bf5e..f2b68126b8 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -60,6 +60,8 @@ public:
void loadSharedCastsFrom(Common::String filename);
CastMember *getCastMember(int castId);
+ CastMember *getCastMemberByName(const Common::String &name);
+ CastMemberInfo *getCastMemberInfo(int castId);
const Stxt *getStxt(int castId);
LingoArchive *getMainLingoArch();
More information about the Scummvm-git-logs
mailing list