[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