[Scummvm-git-logs] scummvm master -> 60385b7c0293634c6fe0a54727837508de13ba4f
sev-
noreply at scummvm.org
Fri Jul 3 16:56:16 UTC 2026
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
f8451b602f DIRECTOR: add more Demos
362e2e58c5 DIRECTOR: LINGO: Support the width/height of a rect
f12fccb505 DIRECTOR: loewe4: pretend 16-bit colour depth
60385b7c02 DIRECTOR: XTRA: Add GLU32 Xtra stub and bypass optgraph.dll copy protection
Commit: f8451b602f8a844c04f9b4d2eb9f08abd25b9632
https://github.com/scummvm/scummvm/commit/f8451b602f8a844c04f9b4d2eb9f08abd25b9632
Author: Lariaa (30549703+Lariaa at users.noreply.github.com)
Date: 2026-07-03T18:56:09+02:00
Commit Message:
DIRECTOR: add more Demos
- add Lannoo Dummy Demo
- add alternative path for Pettson 2 Demo
- fix hash for Oscar2 Demo
Changed paths:
engines/director/detection_tables.h
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index cbe5593fedd..ee6f7c28c8b 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -963,6 +963,7 @@ static const PlainGameDescriptor directorGames[] = {
{ "kjoeties", "Invasie van de Kjoeties" },
{ "klikker1", "Klikkerdeklik" },
{ "lannoo", "Lannoo Nieuwe Media Demo" },
+ { "lannoodummy", "Lannoo Placeholder Dummy" },
{ "moordspel", "Moordspel: Moord in Huize Huiver" },
{ "samson", "Op Reis Met Samson & Gert" },
{ "welkom", "Welkom op the Wereld" },
@@ -7638,7 +7639,7 @@ static const DirectorGameDescription gameDescriptions[] = {
WINDEMO2_l("osaka2", "Demo", "OSAKA2.EXE", "t:a1b15df3e663f99b015753bc82e22bcd", 1410110,
"WINMOVIE/BARGAIN.DIR", "d:949640df6d4db94e85b466da5e5d8470", 1880116, Common::JA_JPN, 501),
- WINDEMO1_l("oscar2", "Demo", "Oscar2/START.EXE", "a288605e511c815d7fcea9de6780d548", 1287391, Common::NL_NLD, 501),
+ WINDEMO1_l("oscar2", "Demo", "Oscar2/START.EXE", "t:a288605e511c815d7fcea9de6780d548", 1287391, Common::NL_NLD, 501),
WINGAME1("oscar2", "Windows 3.1", "oshof16.exe", "t:f7eee50cc1e538417a969f6a26b449a4", 1081413, 501),
WINGAME1("oscar2", "Windows 95", "oshof32.exe", "t:c65ee08c70eab2ff6ef2ac32bd93031c", 1559831, 501),
@@ -7712,7 +7713,7 @@ static const DirectorGameDescription gameDescriptions[] = {
//found on TKKG4 Verraad bij TKKG by Lannoo (Belgium)
WINDEMO1_l("pettson2dutchdemo", "", "pettdemo.exe", "t:99186d8de1156cabce545f66f413f9d0", 1430755, Common::NL_NLD, 501),
-
+ WINDEMO1_l("pettson2dutchdemo", "", "Pettson/pettdemo.exe", "t:99186d8de1156cabce545f66f413f9d0", 1430755, Common::NL_NLD, 501),
// From Japanese Star Trek: Borg DVD (2000)
WINGAME1_l("picarddossier", "DVD", "OMNIBORG.EXE", "t:312801acbcbedcb6825414dad03538e8", 1501528, Common::JA_JPN, 501),
@@ -9642,6 +9643,9 @@ static const DirectorGameDescription gameDescriptions[] = {
WINGAME2("kgbpocahontas", "", "CDGe.EXE", "t:7d1d6dba1026a1be63d60b7f14111619", 3037522,
"CBAIOBJ.dir", "f:5f374ed90aca597fd43a0726ff2cf710", 204224, 702),
+ //found on TKKG Releases by Lannoo (Belgium)
+ WINGAME1_l("lannoodummy", "", "start_pc.exe", "t:2b8f3db3c94ebb395938ae2dc5bbb425", 1901292, Common::NL_NLD, 702),
+
WINDEMO1_l("kidpix", "Demo", "kidpix.exe", "t:edb63181702824aaacfffe73012cbff3", 7445882, Common::KO_KOR, 702),
// Extra activities on Little Bear Thinking Adventures
Commit: 362e2e58c536a5a943917f377b5d0d7b070ca296
https://github.com/scummvm/scummvm/commit/362e2e58c536a5a943917f377b5d0d7b070ca296
Author: Lariaa (30549703+Lariaa at users.noreply.github.com)
Date: 2026-07-03T18:56:09+02:00
Commit Message:
DIRECTOR: LINGO: Support the width/height of a rect
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 13d3fd36f26..0bb0f124334 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -2496,6 +2496,10 @@ void Lingo::getObjectProp(Datum &obj, Common::String &propName) {
d = obj.u.farr->arr[2];
} else if (propName.equalsIgnoreCase("bottom")) {
d = obj.u.farr->arr[3];
+ } else if (propName.equalsIgnoreCase("width")) {
+ d = obj.u.farr->arr[2].asInt() - obj.u.farr->arr[0].asInt();
+ } else if (propName.equalsIgnoreCase("height")) {
+ d = obj.u.farr->arr[3].asInt() - obj.u.farr->arr[1].asInt();
} else {
g_lingo->lingoError("Lingo::getObjectProp: Rect <%s> has no property '%s'", obj.asString(true).c_str(), propName.c_str());
}
@@ -2656,6 +2660,10 @@ void Lingo::setObjectProp(Datum &obj, Common::String &propName, Datum &val) {
obj.u.farr->arr[2] = val.asInt();
} else if (propName.equalsIgnoreCase("bottom")) {
obj.u.farr->arr[3] = val.asInt();
+ } else if (propName.equalsIgnoreCase("width")) {
+ obj.u.farr->arr[2] = obj.u.farr->arr[0].asInt() + val.asInt();
+ } else if (propName.equalsIgnoreCase("height")) {
+ obj.u.farr->arr[3] = obj.u.farr->arr[1].asInt() + val.asInt();
} else {
g_lingo->lingoError("Lingo::setObjectProp: Rect <%s> has no property '%s'", obj.asString(true).c_str(), propName.c_str());
}
Commit: f12fccb50577a9aa13f36e00a2c61edd53c1015f
https://github.com/scummvm/scummvm/commit/f12fccb50577a9aa13f36e00a2c61edd53c1015f
Author: Lariaa (30549703+Lariaa at users.noreply.github.com)
Date: 2026-07-03T18:56:09+02:00
Commit Message:
DIRECTOR: loewe4: pretend 16-bit colour depth
fixes the 8bit nag screen in Löwenzahn 4
Changed paths:
engines/director/game-quirks.cpp
diff --git a/engines/director/game-quirks.cpp b/engines/director/game-quirks.cpp
index 82308bcdac6..6d06750ccb1 100644
--- a/engines/director/game-quirks.cpp
+++ b/engines/director/game-quirks.cpp
@@ -327,6 +327,7 @@ const struct Quirk {
{ "flipper", Common::kPlatformWindows, &quirkPretend16Bit },
{ "incarnatia", Common::kPlatformMacintosh, &quirkPretend16Bit },
{ "incarnatia", Common::kPlatformWindows, &quirkPretend16Bit },
+ { "loewe4", Common::kPlatformWindows, &quirkPretend16Bit },
// The standard FileIO xlib exists as both an XObject and Xtra version, with similar functionality
// but incompatible APIs.
Commit: 60385b7c0293634c6fe0a54727837508de13ba4f
https://github.com/scummvm/scummvm/commit/60385b7c0293634c6fe0a54727837508de13ba4f
Author: Lariaa (30549703+Lariaa at users.noreply.github.com)
Date: 2026-07-03T18:56:09+02:00
Commit Message:
DIRECTOR: XTRA: Add GLU32 Xtra stub and bypass optgraph.dll copy protection
Shipped in:
* Löwenzahn 4 (D7), Löwenzahn 5 (D8), Löwenzahn 7 (D8), Löwenzahn 8 (D8.5)
* Löwenzahn Adventskalender (D8.5), Löwenzahn Spielebox (D9)
* TKKG 6, 7, 8, 9
* Tiger Team 2
* Kommissar Kugelblitz - Vermisst am Missisippi
Changed paths:
A engines/director/lingo/xtras/g/glu32.cpp
A engines/director/lingo/xtras/g/glu32.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 23bdb9c502d..9fbc2be1294 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -165,6 +165,7 @@
#include "director/lingo/xtras/f/filextra.h"
#include "director/lingo/xtras/f/filextra4.h"
#include "director/lingo/xtras/g/getdir.h"
+#include "director/lingo/xtras/g/glu32.h"
#include "director/lingo/xtras/k/keypoll.h"
#include "director/lingo/xtras/m/masterapp.h"
#include "director/lingo/xtras/m/mui.h"
@@ -310,6 +311,7 @@ static const struct XLibProto {
XLIBDEF(FlushMouseXFCN, kXObj, 300), // D3
XLIBDEF(FlushXObj, kXObj, 300), // D3
XLIBDEF(FPlayXObj, kXObj, 200), // D2
+ XLIBDEF(GLU32Xtra, kXtraObj, 500), // D5
XLIBDEF(GenUtilsXObj, kXObj, 400), // D4
XLIBDEF(GetDirXtra, kXtraObj, 500), // D5
XLIBDEF(GetScreenRectsXFCN, kXObj, 300), // D3
diff --git a/engines/director/lingo/xtras/g/glu32.cpp b/engines/director/lingo/xtras/g/glu32.cpp
new file mode 100644
index 00000000000..c60bdbd70fb
--- /dev/null
+++ b/engines/director/lingo/xtras/g/glu32.cpp
@@ -0,0 +1,209 @@
+/* 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 "common/system.h"
+
+#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/g/glu32.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * Löwenzahn 4 (D7)(hashed), Löwenzahn 5 (D8) (hashed), Löwenzahn 7 (D8)(hashed), Löwenzahn 8 (D8.5)(hashed)
+ * Löwenzahn Adventskalender (D8.5) (hashed), Löwenzahn Spielebox (D9)(optgraph.dll is a dummy)
+ * TKKG 6 (disabled in start.dir), 7(hashed), 8(hashed), 9 (hashed)
+ * Tiger Team 2 (detectionTable TBD)
+ * Kommissar Kugelblitz - Vermisst am Missisippi (hashed)
+ *
+ **************************************************/
+
+/*
+-- xtra GLU32 -- Calls Win32 DLL Functions(v1.1)Ravi S. Singh Copyright(c) 1999
+new object me
+GLUNew object me,string DLLName,string FunctionName,string ReturnType,string Params,integer Vendor,integer CallingConvention -- Load DLL and Function
+GLUCall object me, * -- Call the Function
+GLUGetResults object me, * -- Get Call By Reference Results
+GLUDispose object me, -- Unload DLL
+GLUGetErrorString object me, integer code -- Retrieves a String for Given Error Code
+GLUGetLastError object me, -- Gets Last Error Code
+*GLURegister string SerialNumber, -- Unlock Function
+GLUGetProp object me,string Property -- Gets a system property
+GLUSetProp object me,string Property, * -- Sets a property
+ */
+
+namespace Director {
+
+const char *GLU32Xtra::xlibName = "GLU32";
+const XlibFileDesc GLU32Xtra::fileNames[] = {
+ { "glu32", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", GLU32Xtra::m_new, 0, 0, 500 },
+ { "GLUNew", GLU32Xtra::m_GLUNew, 6, 6, 500 },
+ { "GLUCall", GLU32Xtra::m_GLUCall, -1, 0, 500 },
+ { "GLUGetResults", GLU32Xtra::m_GLUGetResults, -1, 0, 500 },
+ { "GLUDispose", GLU32Xtra::m_GLUDispose, 1, 1, 500 },
+ { "GLUGetErrorString", GLU32Xtra::m_GLUGetErrorString, 1, 1, 500 },
+ { "GLUGetLastError", GLU32Xtra::m_GLUGetLastError, 1, 1, 500 },
+ { "GLUGetProp", GLU32Xtra::m_GLUGetProp, 1, 1, 500 },
+ { "GLUSetProp", GLU32Xtra::m_GLUSetProp, -1, 0, 500 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+ { "GLURegister", GLU32Xtra::m_GLURegister, 2, 2, 500, HBLTIN },
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+GLU32XtraObject::GLU32XtraObject(ObjectType ObjectType) :Object<GLU32XtraObject>("GLU32") {
+ _objType = ObjectType;
+}
+
+bool GLU32XtraObject::hasProp(const Common::String &propName) {
+ return (propName == "name");
+}
+
+Datum GLU32XtraObject::getProp(const Common::String &propName) {
+ if (propName == "name")
+ return Datum(GLU32Xtra::xlibName);
+ warning("GLU32Xtra::getProp: unknown property '%s'", propName.c_str());
+ return Datum();
+}
+
+void GLU32Xtra::open(ObjectType type, const Common::Path &path) {
+ GLU32XtraObject::initMethods(xlibMethods);
+ GLU32XtraObject *xobj = new GLU32XtraObject(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 GLU32Xtra::close(ObjectType type) {
+ GLU32XtraObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void GLU32Xtra::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("GLU32Xtra::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+void GLU32Xtra::m_GLUNew(int nargs) {
+ g_lingo->printArgs("GLU32Xtra::m_GLUNew", nargs);
+ GLU32XtraObject *me = (GLU32XtraObject *)g_lingo->_state->me.u.obj;
+
+ Common::String dll, func;
+ for (int i = nargs - 1; i >= 0; i--) {
+ Datum d = g_lingo->pop();
+ if (i == 0)
+ dll = d.asString();
+ else if (i == 1)
+ func = d.asString();
+ }
+ me->_dll = dll;
+ me->_func = func;
+
+ g_lingo->push(Datum(0)); // 0 == no error
+}
+
+void GLU32Xtra::m_GLUCall(int nargs) {
+ // We cannot run real DLLs, so all genuinely-uncallable bindings return 0;
+ // except the Tivola/Terzio copy-protection probe optgraph.dll!initdisplay. The real
+ // DLL returns a per-title magic which is compaired against a hard-coded constant.
+ // We return the expected value per game.
+ g_lingo->printArgs("GLU32Xtra::m_GLUCall", nargs);
+ GLU32XtraObject *me = (GLU32XtraObject *)g_lingo->_state->me.u.obj;
+ g_lingo->dropStack(nargs);
+
+ Common::String dll = me->_dll;
+ for (int i = (int)dll.size() - 1; i >= 0; i--) {
+ if (dll[i] == '\\' || dll[i] == '/') {
+ dll = dll.substr(i + 1);
+ break;
+ }
+ }
+
+ if (dll.equalsIgnoreCase("optgraph.dll") && me->_func.equalsIgnoreCase("initdisplay")) {
+ Common::String gameId = g_director->getGameId();
+ if (gameId == "tkkg7") {
+ g_lingo->push(Datum((int)43123212)); //tested
+ return;
+ }
+ if (gameId == "tkkg8") {
+ g_lingo->push(Datum((int)16325536)); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "tkkg9") {
+ g_lingo->push(Datum((int)16988788)); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "komissar1") {
+ g_lingo->push(Datum(Common::String("37211457"))); // TODO: Check with the game
+ return;
+ }
+ if (ga
+ if (gameId == "loewe4") {
+ g_lingo->push(Datum(Common::String("13665984"))); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "loewe5") {
+ g_lingo->push(Datum(Common::String("22457882"))); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "loewe7") {
+ g_lingo->push(Datum(Common::String("15225045"))); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "loewe8") {
+ g_lingo->push(Datum(Common::String("32370583"))); // TODO: Check with the game
+ return;
+ }
+ if (gameId == "loewecalendar") {
+ g_lingo->push(Datum(Common::String("92263924"))); // TODO: Check with the game
+ return;
+ }
+ // TODO: Tiger Team 2: 32546872
+ warning("GLU32Xtra::m_GLUCall: unhandled optgraph.dll copy protection for game '%s'", gameId.c_str());
+ }
+
+ g_lingo->push(Datum(0));
+}
+
+XOBJSTUB(GLU32Xtra::m_GLUGetResults, 0)
+XOBJSTUB(GLU32Xtra::m_GLUDispose, 0)
+XOBJSTUB(GLU32Xtra::m_GLUGetErrorString, 0)
+XOBJSTUB(GLU32Xtra::m_GLUGetLastError, 0)
+XOBJSTUB(GLU32Xtra::m_GLURegister, 0)
+XOBJSTUB(GLU32Xtra::m_GLUGetProp, 0)
+XOBJSTUB(GLU32Xtra::m_GLUSetProp, 0)
+
+}
diff --git a/engines/director/lingo/xtras/g/glu32.h b/engines/director/lingo/xtras/g/glu32.h
new file mode 100644
index 00000000000..cdaa73842c2
--- /dev/null
+++ b/engines/director/lingo/xtras/g/glu32.h
@@ -0,0 +1,61 @@
+/* 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_G_GLU32_H
+#define DIRECTOR_LINGO_XTRAS_G_GLU32_H
+
+namespace Director {
+
+class GLU32XtraObject : public Object<GLU32XtraObject> {
+public:
+ GLU32XtraObject(ObjectType objType);
+
+ bool hasProp(const Common::String &propName) override;
+ Datum getProp(const Common::String &propName) override;
+
+ Common::String _dll;
+ Common::String _func;
+};
+
+namespace GLU32Xtra {
+
+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_GLUNew(int nargs);
+void m_GLUCall(int nargs);
+void m_GLUGetResults(int nargs);
+void m_GLUDispose(int nargs);
+void m_GLUGetErrorString(int nargs);
+void m_GLUGetLastError(int nargs);
+void m_GLURegister(int nargs);
+void m_GLUGetProp(int nargs);
+void m_GLUSetProp(int nargs);
+
+} // End of namespace GLU32Xtra
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/module.mk b/engines/director/module.mk
index f2ce92bd4d3..60146591951 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -107,6 +107,7 @@ MODULE_OBJS = \
lingo/xlibs/g/getscreenrectsxfcn.o \
lingo/xlibs/g/getscreensizexfcn.o \
lingo/xlibs/g/getsoundinlevel.o \
+ lingo/xtras/g/glu32.o \
lingo/xlibs/g/gpid.o \
lingo/xlibs/h/henry.o \
lingo/xlibs/h/hitmap.o \
More information about the Scummvm-git-logs
mailing list