[Scummvm-git-logs] scummvm master -> 411075d3900b010bc327fc5679bd72bfdc16d0e1
sev-
noreply at scummvm.org
Sat Oct 11 15:23:12 UTC 2025
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
898767ce82 DIRECTOR: Clarified sound channel behavior
169fd65780 DIRECTOR: Clarified sound channel behavior
1a90e72688 DIRECTOR: Implement void() which is a funciton in D6+
896331b190 JANITORIAL: Fix code formattin
3bfcf928d8 DIRECTOR: Fix printOMatic as Xtra
0b3d72ceee DIRECTOR: LINGO: Added sanity check to 'the number of xtras'
411075d390 DIRECTOR: LINGO: Add sanity check to presence of script to execute
Commit: 898767ce822544a4e3ff396de169b14defdb0f96
https://github.com/scummvm/scummvm/commit/898767ce822544a4e3ff396de169b14defdb0f96
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T15:35:59+02:00
Commit Message:
DIRECTOR: Clarified sound channel behavior
In all D versions, was tested in D3, the sound channel starts
immediately on a channel, without awaiting trransition to
complete or even start.
This is why also tempo channel is there for "Wait for sound 1"
Fixes intro in the melements
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 651df313e30..adc6e11ea0b 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -847,6 +847,8 @@ void Score::renderFrame(uint16 frameId, RenderMode mode, bool sound1Changed, boo
if (_window->_newMovieStarted)
renderCursor(_movie->getWindow()->getMousePos(), true);
+ // If we have transitions, sounds start in parallel
+ playSoundChannel(false, sound1Changed, sound2Changed);
if (_skipTransition) {
incrementFilmLoops();
@@ -866,7 +868,6 @@ void Score::renderFrame(uint16 frameId, RenderMode mode, bool sound1Changed, boo
renderPaletteCycle(mode);
}
- playSoundChannel(false, sound1Changed, sound2Changed);
playQueuedSound(); // this is currently only used in FPlayXObj
if (_cursorDirty) {
Commit: 169fd65780d90e9208ba6b7f0c190fb424584a3d
https://github.com/scummvm/scummvm/commit/169fd65780d90e9208ba6b7f0c190fb424584a3d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T15:37:36+02:00
Commit Message:
DIRECTOR: Clarified sound channel behavior
It does not restart the sound as long as the same sound is
played. Tested starting from D3
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index adc6e11ea0b..20b04046516 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -771,7 +771,7 @@ void Score::update() {
bool sound1Changed = true;
bool sound2Changed = true;
- if (_version >= kFileVer600 && !_firstRun) {
+ if (!_firstRun) {
// We check if the sound channels have changed, and only restart
// the sound if they have. Even if the sound was stopped
//
Commit: 1a90e72688abb259ae332f2a1e063a0589f25cf6
https://github.com/scummvm/scummvm/commit/1a90e72688abb259ae332f2a1e063a0589f25cf6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T15:54:33+02:00
Commit Message:
DIRECTOR: Implement void() which is a funciton in D6+
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-builtins.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 7c91b5a696c..1a6f7affa64 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -68,6 +68,7 @@ static const BuiltinProto builtins[] = {
{ "sin", LB::b_sin, 1, 1, 400, FBLTIN }, // D4 f
{ "sqrt", LB::b_sqrt, 1, 1, 200, FBLTIN }, // D2 f
{ "tan", LB::b_tan, 1, 1, 400, FBLTIN }, // D4 f
+ { "void", LB::b_void, 0, 0, 600, FBLTIN }, // D6 f
// String
{ "chars", LB::b_chars, 3, 3, 200, FBLTIN }, // D2 f
{ "charToNum", LB::b_charToNum, 1, 1, 200, FBLTIN }, // D2 f
@@ -716,6 +717,10 @@ void LB::b_tan(int nargs) {
g_lingo->push(res);
}
+void LB::b_void(int nargs) {
+ g_lingo->pushVoid();
+}
+
///////////////////
// String
///////////////////
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index 819cf0b2e78..07d6e40d545 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -40,6 +40,7 @@ void b_random(int nargs);
void b_sin(int nargs);
void b_sqrt(int nargs);
void b_tan(int nargs);
+void b_void(int nargs);
void b_chars(int nargs);
void b_charToNum(int nargs);
Commit: 896331b190cfa2f16922fbbaf01d2bdafcc4bcc8
https://github.com/scummvm/scummvm/commit/896331b190cfa2f16922fbbaf01d2bdafcc4bcc8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T15:55:07+02:00
Commit Message:
JANITORIAL: Fix code formattin
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1a6f7affa64..f6bfb7c3709 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1841,8 +1841,8 @@ void LB::b_xFactoryList(int nargs) {
void LB::b_xtra(int nargs) {
Datum d = g_lingo->pop();
if (d.type == INT) {
- int i = d.asInt() -1; // Lingo index for XTRAs start at 1
- if (i >=0 && (uint)i < g_lingo->_openXtraObjects.size()) {
+ int i = d.asInt() - 1; // Lingo index for XTRAs start at 1
+ if (i >= 0 && (uint)i < g_lingo->_openXtraObjects.size()) {
Datum var = g_lingo->_openXtraObjects[i];
g_lingo->push(var);
return;
Commit: 3bfcf928d8354cf7d9a44e30fa96473f49164d86
https://github.com/scummvm/scummvm/commit/3bfcf928d8354cf7d9a44e30fa96473f49164d86
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T16:56:04+02:00
Commit Message:
DIRECTOR: Fix printOMatic as Xtra
It was declared as Xtra but was missing the relvant object properties
and lists
Changed paths:
engines/director/lingo/xlibs/printomatic.cpp
engines/director/lingo/xlibs/printomatic.h
diff --git a/engines/director/lingo/xlibs/printomatic.cpp b/engines/director/lingo/xlibs/printomatic.cpp
index 99259e19c1a..f60da6f0e6b 100644
--- a/engines/director/lingo/xlibs/printomatic.cpp
+++ b/engines/director/lingo/xlibs/printomatic.cpp
@@ -281,11 +281,24 @@ PrintOMaticXObject::PrintOMaticXObject(ObjectType ObjectType) :Object<PrintOMati
_objType = ObjectType;
}
+bool PrintOMaticXObject::hasProp(const Common::String &propName) {
+ return (propName == "name");
+}
+
+Datum PrintOMaticXObject::getProp(const Common::String &propName) {
+ if (propName == "name")
+ return Datum(PrintOMaticXObj::xlibName);
+ warning("FileIO::PrintOMaticXObject: unknown property '%s'", propName.c_str());
+ return Datum();
+}
+
void PrintOMaticXObj::open(ObjectType type, const Common::Path &path) {
PrintOMaticXObject::initMethods(xlibMethods);
PrintOMaticXObject *xobj = new PrintOMaticXObject(type);
- if (type == kXtraObj)
- g_lingo->_openXtras.push_back(xlibName);
+ if (type == kXtraObj) {
+ g_lingo->_openXtras.push_back(xlibName);
+ g_lingo->_openXtraObjects.push_back(xobj);
+ }
g_lingo->exposeXObject(xlibName, xobj);
g_lingo->initBuiltIns(xlibBuiltins);
}
diff --git a/engines/director/lingo/xlibs/printomatic.h b/engines/director/lingo/xlibs/printomatic.h
index 44c67b93a0a..b00b11dbf9e 100644
--- a/engines/director/lingo/xlibs/printomatic.h
+++ b/engines/director/lingo/xlibs/printomatic.h
@@ -27,6 +27,9 @@ namespace Director {
class PrintOMaticXObject : public Object<PrintOMaticXObject> {
public:
PrintOMaticXObject(ObjectType objType);
+
+ bool hasProp(const Common::String &propName) override;
+ Datum getProp(const Common::String &propName) override;
};
namespace PrintOMaticXObj {
Commit: 0b3d72ceee2c6b4c91053df71c37dcd260090b78
https://github.com/scummvm/scummvm/commit/0b3d72ceee2c6b4c91053df71c37dcd260090b78
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T16:58:39+02:00
Commit Message:
DIRECTOR: LINGO: Added sanity check to 'the number of xtras'
We forgot to add object declarations to Xlib/XObject PrintOMatic,
which led to discrepancy between 'number of xtras' and 'xtra(n)'
calls.
This check is meant to catch such situation in future.
Fixed check.dxr in melements
Changed paths:
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 8108c42216a..9adc9ca53f5 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1529,6 +1529,10 @@ int Lingo::getMembersNum(uint16 castLibID) {
}
int Lingo::getXtrasNum() {
+ if (_openXtraObjects.size() < _openXtras.size()) {
+ warning("Lingo::getXtrasNum(): Mismatch between openXtras (%d) and openXtraObjects (%d)!", _openXtras.size(), _openXtraObjects.size());
+ }
+
return _openXtras.size();
}
Commit: 411075d3900b010bc327fc5679bd72bfdc16d0e1
https://github.com/scummvm/scummvm/commit/411075d3900b010bc327fc5679bd72bfdc16d0e1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-11T17:22:22+02:00
Commit Message:
DIRECTOR: LINGO: Add sanity check to presence of script to execute
It is observed that the behaviors may destroy their own scripts on
'c_procret' which seems to be harmless but leads to crashes in
the script execution loop
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 35ac88ed4df..73981ec6275 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -675,6 +675,11 @@ bool Lingo::execute(int targetFrame) {
g_debugger->stepHook();
+ if (_state->script == nullptr) {
+ warning("Lingo::execute(): PANIC: No script to execute (1)");
+ break;
+ }
+
_state->pc++;
(*((*_state->script)[_state->pc - 1]))();
@@ -689,6 +694,11 @@ bool Lingo::execute(int targetFrame) {
_globalCounter++;
localCounter++;
+ if (_state->script == nullptr) {
+ warning("Lingo::execute(): PANIC: No script to execute (2)");
+ break;
+ }
+
if (!_abort && _state->pc >= (*_state->script).size()) {
warning("Lingo::execute(): Bad PC (%d)", _state->pc);
break;
More information about the Scummvm-git-logs
mailing list