[Scummvm-git-logs] scummvm master -> 5496db64fb4e2dcbd426b36c2cd85a72ef9f2aed

sev- noreply at scummvm.org
Tue Mar 29 14:09:43 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:
5496db64fb DIRECTOR: Add duplicate lingo command


Commit: 5496db64fb4e2dcbd426b36c2cd85a72ef9f2aed
    https://github.com/scummvm/scummvm/commit/5496db64fb4e2dcbd426b36c2cd85a72ef9f2aed
Author: Pragyansh Chaturvedi (r41k0u) (pragyanshchaturvedi18 at gmail.com)
Date: 2022-03-29T16:09:37+02:00

Commit Message:
DIRECTOR: Add duplicate lingo command

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


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 201f6a6c932..08390078ab9 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -99,7 +99,10 @@ Cast::~Cast() {
 
 	if (_loadedCast)
 		for (Common::HashMap<int, CastMember *>::iterator it = _loadedCast->begin(); it != _loadedCast->end(); ++it)
-			delete it->_value;
+			if (it->_value) {
+				it->_value = nullptr;
+				delete it->_value;
+			}
 
 	for (Common::HashMap<uint16, CastMemberInfo *>::iterator it = _castsInfo.begin(); it != _castsInfo.end(); ++it)
 		delete it->_value;
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 6d5d841ceeb..b49e9dd386e 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1738,9 +1738,27 @@ void LB::b_copyToClipBoard(int nargs) {
 }
 
 void LB::b_duplicate(int nargs) {
-	g_lingo->printSTUBWithArglist("b_duplicate", nargs);
+	Datum to = g_lingo->pop();
+	Datum from = g_lingo->pop();
 
-	g_lingo->dropStack(nargs);
+	Frame *currentFrame = g_director->getCurrentMovie()->getScore()->_frames[g_director->getCurrentMovie()->getScore()->getCurrentFrame()];
+	CastMember *castMember = g_director->getCurrentMovie()->getCastMember(from.asMemberID());
+	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+
+	castMember->setModified(true);
+	g_director->getCurrentMovie()->getCast()->_loadedCast->setVal(to.u.i, 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_editableText(int nargs) {




More information about the Scummvm-git-logs mailing list