[Scummvm-git-logs] scummvm master -> cd9ba2b1f8a8d4c7f563335273180d90e06f3b27
sev-
noreply at scummvm.org
Mon Jul 13 17:34:23 UTC 2026
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
cadef05669 DIRECTOR: LINGO: Add Border Xtra stub
6a5c414613 DIRECTOR: LINGO: Map QT3Asset Xtra to QuickTimeSupport
bc9010f735 DIRECTOR: Don't create a digital-video widget for an empty sprite bbox
164cd6171d DIRECTOR: Guard copyStretchImg against an empty target rect
ff1a63471f DIRECTOR: XTRA: Add physicus optgraph.dll copy-protection magic (English)
cd9ba2b1f8 DIRECTOR: LINGO: Implement BudAPI baDiskInfo type detection and baFileExists
Commit: cadef056691b52797af33f86791f123750717e00
https://github.com/scummvm/scummvm/commit/cadef056691b52797af33f86791f123750717e00
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: LINGO: Add Border Xtra stub
Changed paths:
A engines/director/lingo/xtras/b/border.cpp
A engines/director/lingo/xtras/b/border.h
engines/director/lingo/lingo-object.cpp
engines/director/module.mk
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 9fbc2be1294..92002ac9bfa 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -158,6 +158,7 @@
#include "director/lingo/xlibs/x/xwin.h"
#include "director/lingo/xlibs/y/yasix.h"
#include "director/lingo/xtras/a/audio.h"
+#include "director/lingo/xtras/b/border.h"
#include "director/lingo/xtras/b/budapi.h"
#include "director/lingo/xtras/d/directsound.h"
#include "director/lingo/xtras/d/displayres.h"
@@ -271,6 +272,7 @@ static const struct XLibProto {
XLIBDEF(BIMXObj, kXObj, 400), // D4
XLIBDEF(BlitPictXObj, kXObj, 400), // D4
XLIBDEF(BlockTheDrawingXObj, kXObj, 400), // D4
+ XLIBDEF(BorderXtra, kXtraObj, 500), // D5
XLIBDEF(BudAPIXtra, kXtraObj, 500), // D5
XLIBDEF(CDROMXObj, kXObj, 200), // D2
XLIBDEF(CloseBleedWindowXCMD,kXObj, 300), // D3
diff --git a/engines/director/lingo/xtras/b/border.cpp b/engines/director/lingo/xtras/b/border.cpp
new file mode 100644
index 00000000000..3707c813aff
--- /dev/null
+++ b/engines/director/lingo/xtras/b/border.cpp
@@ -0,0 +1,97 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "director/director.h"
+#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-object.h"
+#include "director/lingo/lingo-utils.h"
+#include "director/lingo/xtras/b/border.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * Physikus (l'Espresso, Italian; Ruske & Pühretmaier)
+ *
+ **************************************************/
+
+/*
+ * Border() -- registers the Border Xtra instance.
+ * new object me
+ * Register object me, integer key -- validate the registration key
+ */
+
+namespace Director {
+
+const char *BorderXtra::xlibName = "Border";
+const XlibFileDesc BorderXtra::fileNames[] = {
+ { "Border", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", BorderXtra::m_new, 0, 0, 500 },
+ { "Register", BorderXtra::m_register, 1, 1, 500 },
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+BorderXtraObject::BorderXtraObject(ObjectType ObjectType) :Object<BorderXtraObject>("Border") {
+ _objType = ObjectType;
+}
+
+bool BorderXtraObject::hasProp(const Common::String &propName) {
+ return (propName == "name");
+}
+
+Datum BorderXtraObject::getProp(const Common::String &propName) {
+ if (propName == "name")
+ return Datum(BorderXtra::xlibName);
+ warning("BorderXtra::getProp: unknown property '%s'", propName.c_str());
+ return Datum();
+}
+
+void BorderXtra::open(ObjectType type, const Common::Path &path) {
+ BorderXtraObject::initMethods(xlibMethods);
+ BorderXtraObject *xobj = new BorderXtraObject(type);
+ if (type == kXtraObj) {
+ g_lingo->_openXtras.push_back(xlibName);
+ g_lingo->_openXtraObjects.push_back(xobj);
+ }
+ g_lingo->exposeXObject(xlibName, xobj);
+ g_lingo->initBuiltIns(xlibBuiltins);
+}
+
+void BorderXtra::close(ObjectType type) {
+ BorderXtraObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+}
+
+void BorderXtra::m_new(int nargs) {
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(BorderXtra::m_register, 0)
+
+} // End of namespace Director
diff --git a/engines/director/lingo/xtras/b/border.h b/engines/director/lingo/xtras/b/border.h
new file mode 100644
index 00000000000..ea9fc1139a6
--- /dev/null
+++ b/engines/director/lingo/xtras/b/border.h
@@ -0,0 +1,50 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef DIRECTOR_LINGO_XTRAS_B_BORDER_H
+#define DIRECTOR_LINGO_XTRAS_B_BORDER_H
+
+namespace Director {
+
+class BorderXtraObject : public Object<BorderXtraObject> {
+public:
+ BorderXtraObject(ObjectType objType);
+
+ bool hasProp(const Common::String &propName) override;
+ Datum getProp(const Common::String &propName) override;
+};
+
+namespace BorderXtra {
+
+extern const char *xlibName;
+extern const XlibFileDesc fileNames[];
+
+void open(ObjectType type, const Common::Path &path);
+void close(ObjectType type);
+
+void m_new(int nargs);
+void m_register(int nargs);
+
+} // End of namespace BorderXtra
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/module.mk b/engines/director/module.mk
index 8bc6c97a99f..2ae2f4e25c1 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -189,6 +189,7 @@ MODULE_OBJS = \
lingo/xlibs/x/xwin.o \
lingo/xlibs/y/yasix.o \
lingo/xtras/a/audio.o \
+ lingo/xtras/b/border.o \
lingo/xtras/b/budapi.o \
lingo/xtras/d/datetime.o \
lingo/xtras/d/directsound.o \
Commit: 6a5c414613f4933bf8925e7ac6bc1af76d1f3d8d
https://github.com/scummvm/scummvm/commit/6a5c414613f4933bf8925e7ac6bc1af76d1f3d8d
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: LINGO: Map QT3Asset Xtra to QuickTimeSupport
Changed paths:
engines/director/lingo/xlibs/q/qtsupport.cpp
diff --git a/engines/director/lingo/xlibs/q/qtsupport.cpp b/engines/director/lingo/xlibs/q/qtsupport.cpp
index a1597237368..b3cf4584280 100644
--- a/engines/director/lingo/xlibs/q/qtsupport.cpp
+++ b/engines/director/lingo/xlibs/q/qtsupport.cpp
@@ -25,6 +25,7 @@
* The Legend of Lotus Spring
* Löwenzahn 2&3
* Oscar the Balloonist Drops into the Countryside
+ * Physicus / Physikus (l'Espresso, Italian; Ruske & Pühretmaier)
*
*************************************/
@@ -68,6 +69,7 @@ const char *QTSupport::xlibName = "QuickTimeSupport";
const XlibFileDesc QTSupport::fileNames[] = {
{ "QuickTime Asset", nullptr },
{ "QTASSET", nullptr },
+ { "QT3Asset", nullptr }, // QuickTime 3 Asset Xtra
{ nullptr, nullptr },
};
Commit: bc9010f735d86c040d7a162ee7bfa9d525cd5e15
https://github.com/scummvm/scummvm/commit/bc9010f735d86c040d7a162ee7bfa9d525cd5e15
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: Don't create a digital-video widget for an empty sprite bbox
A video sprite not yet positioned has a 0x0 bbox; building a zero-dimension
widget divides by zero in the nearest-neighbour scaler.
Fixes SIGFPE in Graphics::scaleNN via DigitalVideoCastMember::createWidget in Physicus/Physikus (Intro.dxr)
Changed paths:
engines/director/castmember/digitalvideo.cpp
diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 3f2e1dc34d2..c6311a75c28 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -433,6 +433,10 @@ Graphics::MacWidget *DigitalVideoCastMember::createWidget(Common::Rect &bbox, Ch
}
}
+ // Zero-sized bbox: nothing to render, and scaling to it would divide by zero.
+ if (bbox.width() <= 0 || bbox.height() <= 0)
+ return nullptr;
+
Graphics::MacWidget *widget = new Graphics::MacWidget(g_director->getCurrentWindow()->getMacWindow(), bbox.left, bbox.top, bbox.width(), bbox.height(), g_director->_wm, false);
_channel = channel;
Commit: 164cd6171d6e235943b82b122c0e9e426ec27c61
https://github.com/scummvm/scummvm/commit/164cd6171d6e235943b82b122c0e9e426ec27c61
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: Guard copyStretchImg against an empty target rect
Mirrors the existing source-surface guard: a zero-width/height target rect
reaches Surface::scale(0, 0), dividing by zero in the same scaler.
Fixes SIGFPE in Graphics::scaleNN via copyStretchImg in Physicus/Physikus (Intro.dxr)
Changed paths:
engines/director/images.cpp
diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index ad1537d38c7..816ca2fa0af 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -347,6 +347,10 @@ void copyStretchImg(const Graphics::Surface *srcSurface, Graphics::Surface *targ
// Source area is nonexistant
return;
}
+ if ((targetRect.width() <= 0) || (targetRect.height() <= 0)) {
+ // Target area is nonexistant
+ return;
+ }
Graphics::Surface *temp1 = nullptr;
Graphics::Surface *temp2 = nullptr;
Commit: ff1a63471fccea99dc76132b63da19951d0be2e0
https://github.com/scummvm/scummvm/commit/ff1a63471fccea99dc76132b63da19951d0be2e0
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: XTRA: Add physicus optgraph.dll copy-protection magic (English)
The English release's startMovie compares GLUCall()'s result against a
constant compiled into the movie's own bytecode (c_intpush 43289555; c_neq;
halt() on mismatch), not against anything optgraph.dll itself computes.
Fixes startMovie halt() on boot in Physicus (English, embedded projector movie in Physicus.exe)
Changed paths:
engines/director/lingo/xtras/g/glu32.cpp
diff --git a/engines/director/lingo/xtras/g/glu32.cpp b/engines/director/lingo/xtras/g/glu32.cpp
index e7551f5f6e8..764ad760b4f 100644
--- a/engines/director/lingo/xtras/g/glu32.cpp
+++ b/engines/director/lingo/xtras/g/glu32.cpp
@@ -190,6 +190,10 @@ void GLU32Xtra::m_GLUCall(int nargs) {
g_lingo->push(Datum(Common::String("92263924"))); // TODO: Check with the game
return;
}
+ if (gameId == "physicus" && g_director->getLanguage() == Common::EN_ANY) {
+ g_lingo->push(Datum((int)43289555)); //tested
+ return;
+ }
// TODO: Tiger Team 2: 32546872
warning("GLU32Xtra::m_GLUCall: unhandled optgraph.dll copy protection for game '%s'", gameId.c_str());
}
Commit: cd9ba2b1f8a8d4c7f563335273180d90e06f3b27
https://github.com/scummvm/scummvm/commit/cd9ba2b1f8a8d4c7f563335273180d90e06f3b27
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-13T19:34:13+02:00
Commit Message:
DIRECTOR: LINGO: Implement BudAPI baDiskInfo type detection and baFileExists
Report drive E: as CD-Rom and C: as Hard.
Fixes empty CD-drive list causing getAt() out-of-bounds in Physicus/Physikus (Intro.dxr, BehaviorScript 15)
Changed paths:
engines/director/lingo/xtras/b/budapi.cpp
diff --git a/engines/director/lingo/xtras/b/budapi.cpp b/engines/director/lingo/xtras/b/budapi.cpp
index 7db2e31a146..e42fc031a1b 100644
--- a/engines/director/lingo/xtras/b/budapi.cpp
+++ b/engines/director/lingo/xtras/b/budapi.cpp
@@ -22,6 +22,7 @@
#include "common/system.h"
#include "director/director.h"
+#include "director/util.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-object.h"
#include "director/lingo/lingo-utils.h"
@@ -34,6 +35,7 @@
* Loewenzahn 2 / 3 / 4 / 5 / 6 / 7 / 8 / Adventskalender / Spielebox
* TKKG 6 / 7 / 8 / 9 / 11 / 13 / 14
* Oscar the Balloonist Flies into the Mountains
+ * Physicus / Physikus (l'Espresso, Italian; Ruske & Pühretmaier)
*
**************************************************/
@@ -374,7 +376,26 @@ void BudAPIXtra::m_new(int nargs) {
XOBJSTUB(BudAPIXtra::m_baVersion, 0)
XOBJSTUB(BudAPIXtra::m_baSysFolder, 0)
XOBJSTUB(BudAPIXtra::m_baCpuInfo, 0)
-XOBJSTUB(BudAPIXtra::m_baDiskInfo, 0)
+void BudAPIXtra::m_baDiskInfo(int nargs) {
+ Common::String infoType = g_lingo->pop().asString();
+ Common::String disk = g_lingo->pop().asString();
+
+ if (!infoType.equalsIgnoreCase("type")) {
+ warning("STUB: BudAPIXtra::m_baDiskInfo: unsupported InfoType '%s'", infoType.c_str());
+ g_lingo->push(Datum());
+ return;
+ }
+
+ if (disk.hasSuffix(":"))
+ disk.deleteLastChar();
+
+ if (disk.equalsIgnoreCase("e"))
+ g_lingo->push(Datum(Common::String("CD-Rom")));
+ else if (disk.equalsIgnoreCase("c"))
+ g_lingo->push(Datum(Common::String("Hard")));
+ else
+ g_lingo->push(Datum(Common::String("")));
+}
XOBJSTUB(BudAPIXtra::m_baMemoryInfo, 0)
XOBJSTUB(BudAPIXtra::m_baFindApp, 0)
XOBJSTUB(BudAPIXtra::m_baReadIni, 0)
@@ -436,7 +457,10 @@ XOBJSTUB(BudAPIXtra::m_baPrinterInfo, 0)
XOBJSTUB(BudAPIXtra::m_baSetPrinter, 0)
XOBJSTUB(BudAPIXtra::m_baRefreshDesktop, 0)
XOBJSTUB(BudAPIXtra::m_baFileAge, 0)
-XOBJSTUB(BudAPIXtra::m_baFileExists, 0)
+void BudAPIXtra::m_baFileExists(int nargs) {
+ Common::String name = g_lingo->pop().asString();
+ g_lingo->push(Datum(findPath(name, true, true, false).empty() ? 0 : 1));
+}
XOBJSTUB(BudAPIXtra::m_baFolderExists, 0)
XOBJSTUB(BudAPIXtra::m_baCreateFolder, 0)
XOBJSTUB(BudAPIXtra::m_baDeleteFolder, 0)
More information about the Scummvm-git-logs
mailing list