[Scummvm-git-logs] scummvm master -> fe0723843b446a1d90794b0b19ae609a2ca08845

sev- noreply at scummvm.org
Mon May 23 22:36:41 UTC 2022


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
fe0723843b DIRECTOR: Implement STUB Lingo command move


Commit: fe0723843b446a1d90794b0b19ae609a2ca08845
    https://github.com/scummvm/scummvm/commit/fe0723843b446a1d90794b0b19ae609a2ca08845
Author: Pragyansh Chaturvedi (r41k0u) (pragyanshchaturvedi18 at gmail.com)
Date: 2022-05-24T00:36:38+02:00

Commit Message:
DIRECTOR: Implement STUB Lingo command move

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/tests/builtin.lingo


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index b49e9dd386e..03d80c49986 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1965,9 +1965,50 @@ void LB::b_marker(int nargs) {
 }
 
 void LB::b_move(int nargs) {
-	g_lingo->printSTUBWithArglist("b_move", nargs);
+	Datum src, dest;
 
-	g_lingo->dropStack(nargs);
+	if (nargs == 1) {
+		Datum d;
+		d.type = CASTREF;
+		d.u.cast = new CastMemberID();
+		d.u.cast->member = (int) g_director->getCurrentMovie()->getCast()->_castArrayStart;
+		g_lingo->push(d);
+		b_findEmpty(1);
+		dest = g_lingo->pop();
+		src = g_lingo->pop();
+	} else if (nargs == 2) {
+		dest = g_lingo->pop();
+		src = g_lingo->pop();
+	}
+
+	//Convert dest datum to type CASTREF if it is INT
+	//As CastMemberID constructor changes all the values, datum_int is used to preserve int
+	if (dest.type == INT) {
+		dest.type = CASTREF;
+		int datum_int = dest.u.i;
+		dest.u.cast = new CastMemberID();
+		dest.u.cast->member = datum_int;
+	}
+
+	//No need to move if src and dest are same
+	if (src.u.cast->member == dest.u.cast->member) {
+		return;
+	}
+
+	if (!g_director->getCurrentMovie()->getCast()->_loadedCast->contains(src.u.cast->member)) {
+		warning("b_move: Source CastMember doesn't exist");
+		return;
+	}
+
+	if (src.u.cast->castLib != 0) {
+		warning("b_move: wrong castLib '%d' in src CastMemberID", src.u.cast->castLib);
+	}
+
+	CastMember *toMove = g_director->getCurrentMovie()->getCast()->_loadedCast->getVal(src.u.cast->member);
+	CastMember *toReplace = new CastMember(*toMove);
+	toReplace->_type = kCastTypeNull;
+	g_director->getCurrentMovie()->getCast()->_loadedCast->setVal(dest.u.cast->member, toMove);
+	g_director->getCurrentMovie()->getCast()->_loadedCast->setVal(src.u.cast->member, toReplace);
 }
 
 void LB::b_moveableSprite(int nargs) {
diff --git a/engines/director/lingo/tests/builtin.lingo b/engines/director/lingo/tests/builtin.lingo
index 096820e803d..f9b70b27bb2 100644
--- a/engines/director/lingo/tests/builtin.lingo
+++ b/engines/director/lingo/tests/builtin.lingo
@@ -22,7 +22,8 @@ puppetTransition 2,4,20
 
 -- These are D4+
 move cast 1, cast 1
-move cast 1
+move cast 1, 3
+move cast 3, 1
 put findEmpty(cast 10)
 pasteClipBoardInto cast 2
 put the width of cast 1




More information about the Scummvm-git-logs mailing list