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

sev- noreply at scummvm.org
Thu Jun 16 22:03:09 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:
ec3a741c29 DIRECTOR: LINGO: Implement copyToClipBoard and pasteClipBoardInto STUBs in Lingo Builtins


Commit: ec3a741c29c2b7b66a34330a88bd7bb6366b45b2
    https://github.com/scummvm/scummvm/commit/ec3a741c29c2b7b66a34330a88bd7bb6366b45b2
Author: Pragyansh Chaturvedi (r41k0u) (pragyanshchaturvedi18 at gmail.com)
Date: 2022-06-17T00:03:06+02:00

Commit Message:
DIRECTOR: LINGO: Implement copyToClipBoard and pasteClipBoardInto STUBs in Lingo Builtins

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index ea63829704e..f4bec6576f6 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -86,6 +86,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 	_currentWindow = nullptr;
 	_cursorWindow = nullptr;
 	_lingo = nullptr;
+	_clipBoard = nullptr;
 	_version = getDescriptionVersion();
 
 	_wm = nullptr;
diff --git a/engines/director/director.h b/engines/director/director.h
index 1fea005e835..55d897fb1e8 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -232,6 +232,7 @@ protected:
 public:
 	const DirectorGameDescription *_gameDescription;
 	Common::FSNode _gameDataDir;
+	CastMemberID *_clipBoard;
 
 private:
 	byte *_currentPalette;
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index fcff9fb9291..a20c5d6fb64 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1745,9 +1745,8 @@ void LB::b_constrainV(int nargs) {
 }
 
 void LB::b_copyToClipBoard(int nargs) {
-	g_lingo->printSTUBWithArglist("b_copyToClipBoard", nargs);
-
-	g_lingo->dropStack(nargs);
+	Datum d = g_lingo->pop();
+	g_director->_clipBoard = new CastMemberID(d.asMemberID());
 }
 
 void LB::b_duplicate(int nargs) {
@@ -2068,9 +2067,32 @@ void LB::b_moveableSprite(int nargs) {
 }
 
 void LB::b_pasteClipBoardInto(int nargs) {
-	g_lingo->printSTUBWithArglist("b_pasteClipBoardInto", nargs);
+	Datum to = g_lingo->pop();
+	if (!g_director->_clipBoard) {
+		warning("LB::b_pasteClipBoardInto(): Nothing to paste from clipboard, skipping paste..");
+		return;
+	}
 
-	g_lingo->dropStack(nargs);
+	Movie *movie = g_director->getCurrentMovie();
+	uint16 frame = movie->getScore()->getCurrentFrame(); 
+	Frame *currentFrame = movie->getScore()->_frames[frame];
+	CastMember *castMember = movie->getCastMember(*g_director->_clipBoard);
+	auto channels = movie->getScore()->_channels;
+
+	castMember->setModified(true);
+	movie->getCast()->_loadedCast->setVal(to.u.cast->member, castMember);
+
+	for (uint16 i = 0; i < currentFrame->_sprites.size(); i++) {
+		if (currentFrame->_sprites[i]->_castId == to.asMemberID())
+			currentFrame->_sprites[i]->setCast(to.asMemberID());
+	}
+
+	for (uint i = 0; i < channels.size(); i++) {
+		if (channels[i]->_sprite->_castId == to.asMemberID()) {
+			channels[i]->_sprite->setCast(to.asMemberID());
+			channels[i]->_dirty = true;
+		}
+	}
 }
 
 void LB::b_puppetPalette(int nargs) {




More information about the Scummvm-git-logs mailing list