[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