[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