[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