[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