[Scummvm-git-logs] scummvm master -> 87e8a7bb7cd4ea9d907c0bf002a8a3c9dd58ae8e
sev-
noreply at scummvm.org
Fri Dec 2 23:24:42 UTC 2022
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
41c69d087f DIRECTOR: LINGO: Generalized resolving palette names
97b7cb60fd DIRECTOR: Added API for referring to the cast members by name and type
21c77c7a65 DIRECTOR: Cache cast members by name and type
87e8a7bb7c DIRECTOR: LINGO: Search sounds by name AND type
Commit: 41c69d087f8b9d6e769027152ec2d483dfa1860a
https://github.com/scummvm/scummvm/commit/41c69d087f8b9d6e769027152ec2d483dfa1860a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-03T00:24:18+01:00
Commit Message:
DIRECTOR: LINGO: Generalized resolving palette names
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 406b90cb7ea..1ebc97c6976 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2263,6 +2263,35 @@ void LB::b_pasteClipBoardInto(int nargs) {
}
}
+static const struct PaletteNames {
+ const char *name;
+ PaletteType type;
+} paletteNames[] = {
+ { "System", kClutSystemMac },
+ { "System - Mac", kClutSystemMac },
+ { "Rainbow", kClutRainbow },
+ { "Grayscale", kClutGrayscale },
+ { "Pastels", kClutPastels },
+ { "Vivid", kClutVivid },
+ { "NTSC", kClutNTSC },
+ { "Metallic", kClutMetallic },
+ //{ "Web 216", },
+ //{ "VGA", },
+ //{ "System - Win", },
+ { "SYSTEM - WIN (DIR 4)", kClutSystemWin },
+
+ // Japanese palette names.
+ // TODO: Check encoding. Original is SJIS
+ { "\x83V\x83X\x83""e\x83\x80 - Mac", kClutSystemMac }, // ã·ã¹ãã - Mac
+ { "\x83\x8C>\x83""C\x83\x93\x83{\x81[", kClutRainbow }, // ã¬ã¤ã³ãã¼
+ { "\x83O\x83>\x8C\x81[\x83X\x83P\x81[\x83\x8B", kClutGrayscale }, // ã°ã¬ã¼ã¹ã±ã¼ã«
+ { "\x83p\x83>X\x83""e\x83\x8B", kClutPastels }, // ãã¹ãã«
+ { "\x83r\x83>r\x83""b\x83h", kClutVivid }, // ãããã
+ { "\x83\x81\x83^\x83\x8A\x83""b\x83N", kClutMetallic }, // ã¡ã¿ãªãã¯
+ // { "\x83V\x83X\x83""e\x83\x80 - Win", }, // ã·ã¹ãã - Win
+ { "\x83V\x83X\x83""e\x83\x80 - Win (Dir 4)", kClutSystemWin }, // ã·ã¹ãã - Win (Dir 4)
+};
+
void LB::b_puppetPalette(int nargs) {
g_lingo->convertVOIDtoString(0, nargs);
int numFrames = 0, speed = 0, palette = 0;
@@ -2282,18 +2311,10 @@ void LB::b_puppetPalette(int nargs) {
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 = kClutNTSC;
- } else if (palStr.equalsIgnoreCase("Metallic")) {
- palette = kClutMetallic;
+
+ for (int i = 0; i < ARRAYSIZE(paletteNames); i++) {
+ if (palStr.equalsIgnoreCase(paletteNames[i].name))
+ palette = paletteNames[i].type;
}
}
if (!palette) {
Commit: 97b7cb60fdde9573869bc8ababf05c91865fa01e
https://github.com/scummvm/scummvm/commit/97b7cb60fdde9573869bc8ababf05c91865fa01e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-03T00:24:18+01:00
Commit Message:
DIRECTOR: Added API for referring to the cast members by name and type
Changed paths:
engines/director/cast.cpp
engines/director/cast.h
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/movie.cpp
engines/director/movie.h
engines/director/types.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 245aee83e44..110d90bb185 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -133,11 +133,18 @@ void Cast::releaseCastMemberWidget() {
it->_value->releaseWidget();
}
-CastMember *Cast::getCastMemberByName(const Common::String &name) {
+CastMember *Cast::getCastMemberByNameAndType(const Common::String &name, CastType type) {
CastMember *result = nullptr;
- if (_castsNames.contains(name)) {
- result = _loadedCast->getVal(_castsNames[name]);
+ if (type == kCastTypeAny) {
+ if (_castsNames.contains(name)) {
+ result = _loadedCast->getVal(_castsNames[name]);
+ }
+ } else {
+ Common::String cname = Common::String::format("%s:%d", name.c_str(), type);
+
+ if (_castsNames.contains(cname))
+ result = _loadedCast->getVal(_castsNames[cname]);
}
return result;
}
diff --git a/engines/director/cast.h b/engines/director/cast.h
index aec5ab69a9b..abf7bacef63 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -106,7 +106,7 @@ public:
CastMember *setCastMember(CastMemberID castId, CastMember *cast);
bool eraseCastMember(CastMemberID castId);
CastMember *getCastMember(int castId);
- CastMember *getCastMemberByName(const Common::String &name);
+ CastMember *getCastMemberByNameAndType(const Common::String &name, CastType type);
CastMember *getCastMemberByScriptId(int scriptId);
CastMemberInfo *getCastMemberInfo(int castId);
const Stxt *getStxt(int castId);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 249b7a9b3ac..8152d4c201f 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1114,11 +1114,11 @@ Common::String Datum::asString(bool printonly) const {
return s;
}
-CastMemberID Datum::asMemberID() const {
+CastMemberID Datum::asMemberID(CastType castType) const {
if (type == CASTREF || type == FIELDREF)
return *u.cast;
- return g_lingo->resolveCastMember(*this, 0);
+ return g_lingo->resolveCastMember(*this, 0, castType);
}
Common::Point Datum::asPoint() const {
@@ -1649,7 +1649,7 @@ Common::U32String Lingo::evalChunkRef(const Datum &var) {
return result;
}
-CastMemberID Lingo::resolveCastMember(const Datum &memberID, const Datum &castLib) {
+CastMemberID Lingo::resolveCastMember(const Datum &memberID, const Datum &castLib, CastType type) {
Movie *movie = g_director->getCurrentMovie();
if (!movie) {
warning("Lingo::resolveCastMember: No movie");
@@ -1659,7 +1659,7 @@ CastMemberID Lingo::resolveCastMember(const Datum &memberID, const Datum &castLi
switch (memberID.type) {
case STRING:
{
- CastMember *member = movie->getCastMemberByName(memberID.asString(), castLib.asInt());
+ CastMember *member = movie->getCastMemberByNameAndType(memberID.asString(), castLib.asInt(), type);
if (member)
return CastMemberID(member->getID(), castLib.asInt());
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index c7014a54590..e189b016357 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -168,7 +168,7 @@ struct Datum { /* interpreter stack type */
double asFloat() const;
int asInt() const;
Common::String asString(bool printonly = false) const;
- CastMemberID asMemberID() const;
+ CastMemberID asMemberID(CastType castType = kCastTypeAny) const;
Common::Point asPoint() const;
bool isRef() const;
@@ -358,7 +358,7 @@ public:
Datum varFetch(const Datum &var, bool silent = false);
Common::U32String evalChunkRef(const Datum &var);
Datum findVarV4(int varType, const Datum &id);
- CastMemberID resolveCastMember(const Datum &memberID, const Datum &castLib);
+ CastMemberID resolveCastMember(const Datum &memberID, const Datum &castLib, CastType type);
void exposeXObject(const char *name, Datum obj);
int getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly);
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 8e82d17da48..29c7e801f43 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -350,15 +350,15 @@ bool Movie::eraseCastMember(CastMemberID memberID) {
return false;
}
-CastMember *Movie::getCastMemberByName(const Common::String &name, int castLib) {
+CastMember *Movie::getCastMemberByNameAndType(const Common::String &name, int castLib, CastType type) {
CastMember *result = nullptr;
if (_casts.contains(castLib)) {
- result = _casts.getVal(castLib)->getCastMemberByName(name);
+ result = _casts.getVal(castLib)->getCastMemberByNameAndType(name, type);
if (result == nullptr && _sharedCast) {
- result = _sharedCast->getCastMemberByName(name);
+ result = _sharedCast->getCastMemberByNameAndType(name, type);
}
} else {
- warning("Movie::getCastMemberByName: Unknown castLib %d", castLib);
+ warning("Movie::getCastMemberByNameAndType: Unknown castLib %d", castLib);
}
return result;
}
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 01efcc0318b..77af1a8dbc1 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -104,7 +104,7 @@ public:
CastMember *getCastMember(CastMemberID memberID);
CastMember *createOrReplaceCastMember(CastMemberID memberID, CastMember *cast);
bool eraseCastMember(CastMemberID memberID);
- CastMember *getCastMemberByName(const Common::String &name, int castLib);
+ CastMember *getCastMemberByNameAndType(const Common::String &name, int castLib, CastType type);
CastMemberInfo *getCastMemberInfo(CastMemberID memberID);
const Stxt *getStxt(CastMemberID memberID);
diff --git a/engines/director/types.h b/engines/director/types.h
index 718c04bf145..c95bd5fa197 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -31,6 +31,7 @@ enum MovieFlag {
};
enum CastType {
+ kCastTypeAny = -1,
kCastTypeNull = 0,
kCastBitmap = 1,
kCastFilmLoop = 2,
Commit: 21c77c7a65ccb988b136f44bcc0d88c70514f804
https://github.com/scummvm/scummvm/commit/21c77c7a65ccb988b136f44bcc0d88c70514f804
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-03T00:24:18+01:00
Commit Message:
DIRECTOR: Cache cast members by name and type
Changed paths:
engines/director/cast.cpp
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 110d90bb185..79ce2feb78c 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1317,6 +1317,7 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
CastMemberInfo *ci = new CastMemberInfo();
Common::MemoryReadStreamEndian *entryStream;
+ CastMember *member = _loadedCast->getVal(id);
// We have here variable number of strings. Thus, instead of
// adding tons of ifs, we use this switch()
@@ -1365,8 +1366,14 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
// Multiple casts can have the same name. In director only the first one is used.
if (!_castsNames.contains(ci->name)) {
_castsNames[ci->name] = id;
+ }
+
+ // Store name with type
+ Common::String cname = Common::String::format("%s:%d", ci->name.c_str(), member->_type);
+ if (!_castsNames.contains(cname)) {
+ _castsNames[cname] = id;
} else {
- debugC(4, kDebugLoading, "Cast::loadCastInfo(): duplicate cast name: %s for castIDs: %s %s", ci->name.c_str(), numToCastNum(id), numToCastNum(_castsNames[ci->name]));
+ debugC(4, kDebugLoading, "Cast::loadCastInfo(): duplicate cast name: %s for castIDs: %s %s", cname.c_str(), numToCastNum(id), numToCastNum(_castsNames[ci->name]));
}
}
// fallthrough
@@ -1377,7 +1384,6 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
break;
}
- CastMember *member = _loadedCast->getVal(id);
// For D4+ we may force Lingo scripts
if (_version < kFileVer400 || debugChannelSet(-1, kDebugNoBytecode)) {
if (!ci->script.empty()) {
Commit: 87e8a7bb7cd4ea9d907c0bf002a8a3c9dd58ae8e
https://github.com/scummvm/scummvm/commit/87e8a7bb7cd4ea9d907c0bf002a8a3c9dd58ae8e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-03T00:24:18+01:00
Commit Message:
DIRECTOR: LINGO: Search sounds by name AND type
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1ebc97c6976..9e0543899cc 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2371,7 +2371,7 @@ void LB::b_puppetSound(int nargs) {
// So we'll just queue it to be played later.
if (nargs == 1) {
- CastMemberID castMember = g_lingo->pop().asMemberID();
+ CastMemberID castMember = g_lingo->pop().asMemberID(kCastSound);
// in D2 manual p206, puppetSound 0 will turn off the puppet status of sound
sound->setPuppetSound(castMember, 1);
More information about the Scummvm-git-logs
mailing list