[Scummvm-git-logs] scummvm master -> 96d66710d726442c708950654214902fa0992256

moralrecordings noreply at scummvm.org
Fri Jul 12 19:19:02 UTC 2024


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9c6693e354 DIRECTOR: Fix bitmap reg offset signedness
96d66710d7 DIRECTOR: LINGO: Fix the paramCount to not include padding VOIDs


Commit: 9c6693e354176de37a46247a912d6358df693670
    https://github.com/scummvm/scummvm/commit/9c6693e354176de37a46247a912d6358df693670
Author: Scott Percival (code at moral.net.au)
Date: 2024-07-13T03:18:41+08:00

Commit Message:
DIRECTOR: Fix bitmap reg offset signedness

Changed paths:
    engines/director/castmember/bitmap.cpp
    engines/director/castmember/bitmap.h


diff --git a/engines/director/castmember/bitmap.cpp b/engines/director/castmember/bitmap.cpp
index 47b418c4fa2..c1b325e5b86 100644
--- a/engines/director/castmember/bitmap.cpp
+++ b/engines/director/castmember/bitmap.cpp
@@ -66,8 +66,8 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 		_bytes = stream.readUint16();
 		_initialRect = Movie::readRect(stream);
 		_boundingRect = Movie::readRect(stream);
-		_regY = stream.readUint16();
-		_regX = stream.readUint16();
+		_regY = stream.readSint16();
+		_regX = stream.readSint16();
 
 		if (_bytes & 0x8000) {
 			_bitsPerPixel = stream.readUint16();
diff --git a/engines/director/castmember/bitmap.h b/engines/director/castmember/bitmap.h
index 08e94a6443a..98c76c441bc 100644
--- a/engines/director/castmember/bitmap.h
+++ b/engines/director/castmember/bitmap.h
@@ -65,8 +65,8 @@ public:
 	Graphics::Surface *_matte;
 
 	uint16 _pitch;
-	uint16 _regX;
-	uint16 _regY;
+	int16 _regX;
+	int16 _regY;
 	uint16 _flags2;
 	uint16 _bytes;
 	CastMemberID _clut;


Commit: 96d66710d726442c708950654214902fa0992256
    https://github.com/scummvm/scummvm/commit/96d66710d726442c708950654214902fa0992256
Author: Scott Percival (code at moral.net.au)
Date: 2024-07-13T03:18:41+08:00

Commit Message:
DIRECTOR: LINGO: Fix the paramCount to not include padding VOIDs

Fixes music playback in Virtual Nightclub.

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 5c955dbe02e..3819f4d4c77 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -226,7 +226,7 @@ void Lingo::switchStateFromWindow() {
 	_state = window->getLingoState();
 }
 
-void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal, int paramCount) {
+void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal, int paramCount, int nargs) {
 	Common::Array<CFrame *> &callstack = _state->callstack;
 
 	debugC(5, kDebugLingoExec, "Pushing frame %d", callstack.size() + 1);
@@ -240,8 +240,8 @@ void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRet
 	fp->sp = funcSym;
 	fp->allowRetVal = allowRetVal;
 	fp->defaultRetVal = defaultRetVal;
-	fp->paramCount = paramCount;
-	for (int i = 0; i < paramCount; i++) {
+	fp->paramCount = paramCount;  // number of args, excluding nulls for missing named args
+	for (int i = 0; i < nargs; i++) { // number of args on the stack
 		fp->paramList.insert_at(0, pop());
 	}
 
@@ -267,13 +267,13 @@ void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRet
 	}
 
 	if (funcSym.argNames) {
-		if ((int)funcSym.argNames->size() > fp->paramCount) {
-			warning("%d arg names defined for %d args! Ignoring the last %d names", funcSym.argNames->size(), fp->paramCount, funcSym.argNames->size() - fp->paramCount);
+		if ((int)funcSym.argNames->size() > fp->paramList.size()) {
+			debugC(1, kDebugLingoExec, "%d arg names defined for %d args! Ignoring the last %d names", funcSym.argNames->size(), fp->paramList.size(), funcSym.argNames->size() - fp->paramList.size());
 		}
 		for (int i = (int)funcSym.argNames->size() - 1; i >= 0; i--) {
 			Common::String name = (*funcSym.argNames)[i];
 			if (!localvars->contains(name)) {
-				if (i < fp->paramCount) {
+				if (i < fp->paramList.size()) {
 					Datum value = fp->paramList[i];
 					(*localvars)[name] = value;
 				} else {
@@ -1711,7 +1711,6 @@ void LC::call(const Symbol &funcSym, int nargs, bool allowRetVal) {
 					d.type = VOID;
 					g_lingo->push(d);
 					nargs++;
-					paramCount++;
 				}
 			}
 		} else if (funcSym.nargs > nargs || funcSym.maxArgs < nargs) {
@@ -1783,7 +1782,7 @@ void LC::call(const Symbol &funcSym, int nargs, bool allowRetVal) {
 		defaultRetVal = funcSym.target; // return me
 	}
 
-	g_lingo->pushContext(funcSym, allowRetVal, defaultRetVal, paramCount);
+	g_lingo->pushContext(funcSym, allowRetVal, defaultRetVal, paramCount, nargs);
 }
 
 void LC::c_procret() {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 4b56c20ce1f..185893fab3e 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -409,7 +409,7 @@ public:
 	void switchStateFromWindow();
 	void freezeState();
 	void freezePlayState();
-	void pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal, int paramCount);
+	void pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal, int paramCount, int nargs);
 	void popContext(bool aborting = false);
 	void cleanLocalVars();
 	void varAssign(const Datum &var, const Datum &value);




More information about the Scummvm-git-logs mailing list