[Scummvm-git-logs] scummvm master -> 23af6ab526f30d00c8fbc551d6c034e6637f37cf
djsrv
dservilla at gmail.com
Mon Aug 17 04:23:33 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0963803d27 DIRECTOR: LINGO: castIdFetch -> Datum::asCastId
23af6ab526 DIRECTOR: LINGO: Use asCastId in b_cursor
Commit: 0963803d272e011cb6b5839e483d9f0cdbd3c780
https://github.com/scummvm/scummvm/commit/0963803d272e011cb6b5839e483d9f0cdbd3c780
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-16T23:31:35-04:00
Commit Message:
DIRECTOR: LINGO: castIdFetch -> Datum::asCastId
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 40f0c04e8a..da783e9283 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1845,7 +1845,7 @@ void LB::b_puppetSound(int nargs) {
return;
}
- int castId = g_lingo->castIdFetch(castMember);
+ int castId = castMember.asCastId();
sound->playCastMember(castId, 1);
}
@@ -2321,7 +2321,7 @@ void LB::b_version(int nargs) {
void LB::b_cast(int nargs) {
Datum d = g_lingo->pop();
if (d.type == STRING) {
- d = g_lingo->castIdFetch(d);
+ d = d.asCastId();
}
Datum res = d.asInt();
@@ -2332,7 +2332,7 @@ void LB::b_cast(int nargs) {
void LB::b_field(int nargs) {
Datum d = g_lingo->pop();
if (d.type == STRING) {
- d = g_lingo->castIdFetch(d);
+ d = d.asCastId();
}
Datum res = d.asInt();
@@ -2342,7 +2342,7 @@ void LB::b_field(int nargs) {
void LB::b_script(int nargs) {
Datum d = g_lingo->pop();
- int castId = g_lingo->castIdFetch(d);
+ int castId = d.asCastId();
CastMember *cast = g_director->getCurrentMovie()->getCastMember(castId);
if (cast) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 03f459cc87..fab7e62a12 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1275,7 +1275,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
break;
case kTheCastNum:
{
- int castId = castIdFetch(d);
+ int castId = d.asCastId();
if (castId != sprite->_castId) {
g_director->getCurrentWindow()->addDirtyRect(channel->getBbox());
channel->setCast(castId);
@@ -1309,8 +1309,8 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
if (d.type == INT) {
channel->_cursor.readFromResource(d.asInt());
} else if (d.type == ARRAY && d.u.farr->size() == 2) {
- uint cursorId = castIdFetch(d.u.farr->operator[](0));
- uint maskId = castIdFetch(d.u.farr->operator[](1));
+ uint cursorId = d.u.farr->operator[](0).asCastId();
+ uint maskId = d.u.farr->operator[](1).asCastId();
channel->_cursor.readFromCast(cursorId, maskId);
}
break;
@@ -1463,7 +1463,7 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
return d;
}
- int id = g_lingo->castIdFetch(id1);
+ int id = id1.asCastId();
CastMember *member = movie->getCastMember(id);
if (!member) {
@@ -1492,7 +1492,7 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
return;
}
- int id = g_lingo->castIdFetch(id1);
+ int id = id1.asCastId();
CastMember *member = movie->getCastMember(id);
if (!member) {
@@ -1517,7 +1517,7 @@ Datum Lingo::getTheField(Datum &id1, int field) {
return d;
}
- int id = g_lingo->castIdFetch(id1);
+ int id = id1.asCastId();
CastMember *member = movie->getCastMember(id);
if (!member) {
@@ -1550,7 +1550,7 @@ void Lingo::setTheField(Datum &id1, int field, Datum &d) {
return;
}
- int id = g_lingo->castIdFetch(id1);
+ int id = id1.asCastId();
CastMember *member = movie->getCastMember(id);
if (!member) {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index a9431dca75..9abeab02f1 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1016,6 +1016,46 @@ Common::String Datum::asString(bool printonly) const {
return s;
}
+int Datum::asCastId() const {
+ Movie *movie = g_director->getCurrentMovie();
+ if (!movie) {
+ warning("Datum::asCastId: No movie");
+ return 0;
+ }
+
+ int castId = 0;
+ switch (type) {
+ case STRING:
+ {
+ CastMember *member = movie->getCastMemberByName(asString());
+ if (member)
+ return member->getID();
+
+ warning("Datum::asCastId: reference to non-existent cast member: %s", asString().c_str());
+ return 0;
+ }
+ break;
+ case INT:
+ case CASTREF:
+ case FIELDREF:
+ castId = u.i;
+ break;
+ case FLOAT:
+ castId = u.f;
+ break;
+ case VOID:
+ warning("Datum::asCastId: reference to VOID cast ID");
+ break;
+ default:
+ error("Datum::asCastId: unsupported cast ID type %s", type2str());
+ }
+
+ if (!g_director->getCurrentMovie()->getCastMember(castId))
+ warning("Datum::asCastId: reference to non-existent cast ID: %d", castId);
+
+ return castId;
+}
+
const char *Datum::type2str(bool isk) const {
static char res[20];
@@ -1217,39 +1257,6 @@ int Lingo::getInt(uint pc) {
return (int)READ_UINT32(&((*_currentScript)[pc]));
}
-int Lingo::castIdFetch(const Datum &var) {
- Movie *movie = _vm->getCurrentMovie();
- if (!movie) {
- warning("castIdFetch: No movie");
- return 0;
- }
-
- if (var.type == STRING) {
- CastMember *member = movie->getCastMemberByName(*var.u.s);
- if (member)
- return member->getID();
-
- warning("castIdFetch: reference to non-existent cast member: %s", var.u.s->c_str());
- return 0;
- }
-
- int castId = 0;
- if (var.type == INT || var.type == CASTREF || var.type == FIELDREF) {
- castId = var.u.i;
- } else if (var.type == FLOAT) {
- castId = var.u.f;
- } else if (var.type == VOID) {
- warning("castIdFetch: reference to VOID cast ID");
- } else {
- error("castIdFetch: was expecting STRING or INT, got %s", var.type2str());
- }
-
- if (!_vm->getCurrentMovie()->getCastMember(castId))
- warning("castIdFetch: reference to non-existent cast ID: %d", castId);
-
- return castId;
-}
-
void Lingo::varAssign(Datum &var, Datum &value, bool global, DatumHash *localvars) {
if (localvars == nullptr) {
localvars = _localvars;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index f725eee43a..8af8bebcfa 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -139,6 +139,7 @@ struct Datum { /* interpreter stack type */
double asFloat() const;
int asInt() const;
Common::String asString(bool printonly = false) const;
+ int asCastId() const;
const char *type2str(bool isk = false) const;
@@ -285,7 +286,6 @@ public:
void pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal);
void popContext();
void cleanLocalVars();
- int castIdFetch(const Datum &var);
void varAssign(Datum &var, Datum &value, bool global = false, DatumHash *localvars = nullptr);
Datum varFetch(Datum &var, bool global = false, DatumHash *localvars = nullptr, bool silent = false);
Commit: 23af6ab526f30d00c8fbc551d6c034e6637f37cf
https://github.com/scummvm/scummvm/commit/23af6ab526f30d00c8fbc551d6c034e6637f37cf
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-16T23:43:02-04:00
Commit Message:
DIRECTOR: LINGO: Use asCastId in b_cursor
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 da783e9283..5480528bf8 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1512,7 +1512,7 @@ void LB::b_cursor(int nargs) {
Datum sprite = d.u.farr->operator[](0);
Datum mask = d.u.farr->operator[](1);
- g_lingo->func_cursor(sprite.asInt(), mask.asInt());
+ g_lingo->func_cursor(sprite.asCastId(), mask.asCastId());
} else {
g_lingo->func_cursor(d.asInt(), -1);
}
More information about the Scummvm-git-logs
mailing list