[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