[Scummvm-git-logs] scummvm master -> ab5f20f5cb9b75f0fb1674e9c5d233ae4705e6b8
sev-
noreply at scummvm.org
Fri Jul 22 12:10:14 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:
ab5f20f5cb DIRECTOR: LINGO: Implement offset rect Lingo builtin
Commit: ab5f20f5cb9b75f0fb1674e9c5d233ae4705e6b8
https://github.com/scummvm/scummvm/commit/ab5f20f5cb9b75f0fb1674e9c5d233ae4705e6b8
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-22T14:10:11+02:00
Commit Message:
DIRECTOR: LINGO: Implement offset rect Lingo builtin
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 89ca8216e56..d9b1e6c140b 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2706,11 +2706,27 @@ void LB::b_map(int nargs) {
}
void LB::b_offsetRect(int nargs) {
- g_lingo->printSTUBWithArglist("b_offsetRect", nargs);
+ Datum vert = g_lingo->pop();
+ Datum hori = g_lingo->pop();
+ Datum rect = g_lingo->pop();
- g_lingo->dropStack(nargs);
+ if (vert.type != INT ||
+ hori.type != INT ||
+ !(rect.type == RECT || (rect.type == ARRAY && rect.u.farr->arr.size() >= 4))) {
+ warning(" LB::b_offsetRect(): Invalid DatumType of inputs");
+ g_lingo->push(rect);
+ }
- g_lingo->push(Datum(0));
+ //When vert is positive, rect moves higher
+ //When hori is positive, rect moves towards right
+
+ rect.u.farr->arr[0].u.i += hori.u.i;
+ rect.u.farr->arr[2].u.i += hori.u.i;
+ rect.u.farr->arr[1].u.i -= vert.u.i;
+ rect.u.farr->arr[3].u.i -= vert.u.i;
+
+
+ g_lingo->push(rect);
}
void LB::b_union(int nargs) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 75c3a085ede..2f2d48c7275 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1649,6 +1649,15 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
sprite->_moveable = false;
}
break;
+ case kTheRect:
+ if (d.type == RECT || (d.type == ARRAY && d.u.farr->arr.size() >= 4)) {
+ score->renderSprites(score->getCurrentFrame(), kRenderForceUpdate);
+ channel->_currentPoint = Common::Point(d.u.farr->arr[0].u.i, d.u.farr->arr[1].u.i);
+ sprite->_width = d.u.farr->arr[2].u.i - d.u.farr->arr[0].u.i;
+ sprite->_height = d.u.farr->arr[3].u.i - d.u.farr->arr[1].u.i;
+ channel->_dirty = true;
+ }
+ break;
case kTheStartTime:
channel->_startTime = d.asInt();
if (sprite->_cast->_type == kCastDigitalVideo)
More information about the Scummvm-git-logs
mailing list