[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