[Scummvm-git-logs] scummvm master -> ddc621d2bab657035eae38cb4c4bf6fed611d9dc
sev-
noreply at scummvm.org
Fri Jan 16 15:46:58 UTC 2026
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
c77fb02137 DIRECTOR: Add full version of Welcome to the Future + XObjects
b4b3a8dc70 DIRECTOR: Fix detection entry for beyondthewall
41afdf15ef DIRECTOR: Fix buggy behaviour of d_strstr
606da4c9d4 DIRECTOR: Fix Ghost/NotGhost/Reverse/NotReverse ink types in 32bpp mode
ddc621d2ba DIRECTOR: Make 32-bit BITDDecoder images output an RGBA surface
Commit: c77fb021375e0889c8a6f8f0e9817a56b4dd1dfa
https://github.com/scummvm/scummvm/commit/c77fb021375e0889c8a6f8f0e9817a56b4dd1dfa
Author: Scott Percival (code at moral.net.au)
Date: 2026-01-16T18:46:52+03:00
Commit Message:
DIRECTOR: Add full version of Welcome to the Future + XObjects
Changed paths:
A engines/director/lingo/xlibs/b/blockthedrawingxobj.cpp
A engines/director/lingo/xlibs/b/blockthedrawingxobj.h
A engines/director/lingo/xlibs/m/mazexobj.cpp
A engines/director/lingo/xlibs/m/mazexobj.h
A engines/director/lingo/xlibs/p/playsoundmoviexobj.cpp
A engines/director/lingo/xlibs/p/playsoundmoviexobj.h
A engines/director/lingo/xlibs/s/savenrestorexobj.cpp
A engines/director/lingo/xlibs/s/savenrestorexobj.h
A engines/director/lingo/xlibs/t/temnotaxobj.cpp
A engines/director/lingo/xlibs/t/temnotaxobj.h
engines/director/detection_tables.h
engines/director/lingo/lingo-object.cpp
engines/director/module.mk
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index 51244f461b3..e82f49181d6 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -578,6 +578,7 @@ static const PlainGameDescriptor directorGames[] = {
{ "winniewitch", "Winnie the Witch" },
{ "wishbone", "Wishbone and the Amazing Odyssey" },
{ "wrath", "Wrath of the Gods" },
+ { "wttf", "Welcome to the Future" },
{ "xanthus", "Xanthus" },
{ "xfools", "The X-Fools: The Spoof is Out There" },
{ "xmasstory", "A Christmas Story" },
@@ -1878,7 +1879,6 @@ static const PlainGameDescriptor directorGames[] = {
{ "windows95", "Microsoft Windows 95" },
{ "worldatlas", "World Reference Atlas" },
{ "wpmainstreet", "WordPerfect Main Street" },
- { "wttf", "Welcome to the Future" },
{ "wwaldocircus", "Where's Waldo? At the Circus" },
{ "wwaldogeo", "Where's Waldo? Exploring Geography" },
{ "xfiles", "The X-Files" },
@@ -6493,7 +6493,7 @@ static const DirectorGameDescription gameDescriptions[] = {
WINDEMO2("worldatlas", "Sampler", "ATLAS.EXE", "t:73fd017684b6fd92d0b8a743994705ab", 696807,
"DATA/CONTENTM.DIR", "f:f4c9435dac6653651bf7c86480c3333b", 681228, 404),
- // Full game is not Director
+ MACGAME1f("wttf", "", "BLUESKY/WELCOME24", "rt:e8072b708d1d05793d0b8a3f1e2f301b", 483808, 404, GF_32BPP),
MACDEMO1("wttf", "Demo", "WTTF", "01be45e7241194dad07938e7059b88e3", 483518, 404),
// Full game is not Director
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 54209644d83..3b6de46841b 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -38,6 +38,7 @@
#include "director/lingo/xlibs/b/batqt.h"
#include "director/lingo/xlibs/b/bimxobj.h"
#include "director/lingo/xlibs/b/blitpict.h"
+#include "director/lingo/xlibs/b/blockthedrawingxobj.h"
#include "director/lingo/xlibs/c/cdromxobj.h"
#include "director/lingo/xlibs/c/closebleedwindowxcmd.h"
#include "director/lingo/xlibs/c/colorxobj.h"
@@ -100,6 +101,7 @@
#include "director/lingo/xlibs/m/movutils.h"
#include "director/lingo/xlibs/m/msfile.h"
#include "director/lingo/xlibs/m/mystisle.h"
+#include "director/lingo/xlibs/m/mazexobj.h"
#include "director/lingo/xlibs/o/openbleedwindowxcmd.h"
#include "director/lingo/xlibs/o/orthoplayxobj.h"
#include "director/lingo/xlibs/p/paco.h"
@@ -112,6 +114,7 @@
#include "director/lingo/xlibs/p/printomatic.h"
#include "director/lingo/xlibs/p/processxobj.h"
#include "director/lingo/xlibs/p/putcurs.h"
+#include "director/lingo/xlibs/p/playsoundmoviexobj.h"
#include "director/lingo/xlibs/q/qtmovie.h"
#include "director/lingo/xlibs/q/qtcatmovieplayerxobj.h"
#include "director/lingo/xlibs/q/qtvr.h"
@@ -124,7 +127,9 @@
#include "director/lingo/xlibs/s/spacemgr.h"
#include "director/lingo/xlibs/s/stagetc.h"
#include "director/lingo/xlibs/s/syscolor.h"
+#include "director/lingo/xlibs/s/savenrestorexobj.h"
#include "director/lingo/xlibs/t/tengu.h"
+#include "director/lingo/xlibs/t/temnotaxobj.h"
#include "director/lingo/xlibs/u/unittest.h"
#include "director/lingo/xlibs/v/valkyrie.h"
#include "director/lingo/xlibs/v/versions.h"
@@ -251,6 +256,7 @@ static const struct XLibProto {
XLIBDEF(BatQT, kXObj, 400), // D4
XLIBDEF(BIMXObj, kXObj, 400), // D4
XLIBDEF(BlitPictXObj, kXObj, 400), // D4
+ XLIBDEF(BlockTheDrawingXObj, kXObj, 400), // D4
XLIBDEF(BudAPIXtra, kXtraObj, 500), // D5
XLIBDEF(CDROMXObj, kXObj, 200), // D2
XLIBDEF(CloseBleedWindowXCMD,kXObj, 300), // D3
@@ -307,6 +313,7 @@ static const struct XLibProto {
XLIBDEF(ManiacBgXObj, kXObj, 300), // D3
XLIBDEF(MapNavigatorXObj, kXObj, 400), // D4
XLIBDEF(MasterAppXtra, kXtraObj, 500), // D5
+ XLIBDEF(MazeXObj, kXObj, 400), // D4
XLIBDEF(MemCheckXObj, kXObj, 400), // D4
XLIBDEF(MemoryXObj, kXObj, 300), // D3
XLIBDEF(Misc, kXObj, 400), // D4
@@ -328,6 +335,7 @@ static const struct XLibProto {
XLIBDEF(PalXObj, kXObj, 400), // D4
XLIBDEF(PanelXObj, kXObj, 200), // D2
XLIBDEF(PharaohsXObj, kXObj, 400), // D4
+ XLIBDEF(PlaySoundMovieXObj, kXObj, 400), // D4
XLIBDEF(PopUpMenuXObj, kXObj, 200), // D2
XLIBDEF(Porta, kXObj, 300), // D3
XLIBDEF(PrefPath, kXObj, 400), // D4
@@ -344,6 +352,7 @@ static const struct XLibProto {
XLIBDEF(RegistryReaderXtra, kXtraObj, 500), // D5
XLIBDEF(RemixXCMD, kXObj, 300), // D3
XLIBDEF(RolloverToolkitXtra,kXtraObj, 500), // D5
+ XLIBDEF(SaveNRestoreXObj, kXObj, 400), // D4
XLIBDEF(ScrnUtilXtra, kXtraObj, 500), // D5
XLIBDEF(SerialPortXObj, kXObj, 200), // D2
XLIBDEF(SmackerXtra, kXtraObj, 500), // D5
@@ -358,6 +367,7 @@ static const struct XLibProto {
XLIBDEF(StayToonedOberXtra, kXtraObj, 500), // D5
XLIBDEF(StayToonedToonXtra, kXtraObj, 500), // D5
XLIBDEF(SysColorXObj, kXObj, 400), // D4
+ XLIBDEF(TemnotaXObj, kXObj, 400), // D4
XLIBDEF(TenguXObj, kXObj, 400), // D4
XLIBDEF(TimextraXtra, kXtraObj, 500), // D5
XLIBDEF(UnitTestXObj, kXObj, 400), // D4
diff --git a/engines/director/lingo/xlibs/b/blockthedrawingxobj.cpp b/engines/director/lingo/xlibs/b/blockthedrawingxobj.cpp
new file mode 100644
index 00000000000..ea75a7e60c5
--- /dev/null
+++ b/engines/director/lingo/xlibs/b/blockthedrawingxobj.cpp
@@ -0,0 +1,103 @@
+/* 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/xlibs/b/blockthedrawingxobj.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * wttf
+ *
+ **************************************************/
+
+/*
+-- BlockTheDrawingXObj v 1.0d2 (c) 1995 Samizdat Productions.
+-- All Rights Reserved.
+-- Written by Christopher P. Kelly.
+I mNew
+IIIII mSetRect
+I mInstallPatch
+I mRemovePatch
+I mDisposeMem
+ */
+
+namespace Director {
+
+const char *BlockTheDrawingXObj::xlibName = "BlockTheDrawingXObj";
+const XlibFileDesc BlockTheDrawingXObj::fileNames[] = {
+ { "BlockTheDrawingXObj", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", BlockTheDrawingXObj::m_new, 0, 0, 400 },
+ { "setRect", BlockTheDrawingXObj::m_setRect, 4, 4, 400 },
+ { "installPatch", BlockTheDrawingXObj::m_installPatch, 0, 0, 400 },
+ { "removePatch", BlockTheDrawingXObj::m_removePatch, 0, 0, 400 },
+ { "disposeMem", BlockTheDrawingXObj::m_disposeMem, 0, 0, 400 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+BlockTheDrawingXObject::BlockTheDrawingXObject(ObjectType ObjectType) :Object<BlockTheDrawingXObject>("BlockTheDrawingXObj") {
+ _objType = ObjectType;
+}
+
+void BlockTheDrawingXObj::open(ObjectType type, const Common::Path &path) {
+ BlockTheDrawingXObject::initMethods(xlibMethods);
+ BlockTheDrawingXObject *xobj = new BlockTheDrawingXObject(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 BlockTheDrawingXObj::close(ObjectType type) {
+ BlockTheDrawingXObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void BlockTheDrawingXObj::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("BlockTheDrawingXObj::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(BlockTheDrawingXObj::m_setRect, 0)
+XOBJSTUB(BlockTheDrawingXObj::m_installPatch, 0)
+XOBJSTUB(BlockTheDrawingXObj::m_removePatch, 0)
+XOBJSTUB(BlockTheDrawingXObj::m_disposeMem, 0)
+
+}
diff --git a/engines/director/lingo/xlibs/b/blockthedrawingxobj.h b/engines/director/lingo/xlibs/b/blockthedrawingxobj.h
new file mode 100644
index 00000000000..df6a0780b2a
--- /dev/null
+++ b/engines/director/lingo/xlibs/b/blockthedrawingxobj.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_XLIBS_B_BLOCKTHEDRAWINGXOBJ_H
+#define DIRECTOR_LINGO_XLIBS_B_BLOCKTHEDRAWINGXOBJ_H
+
+namespace Director {
+
+class BlockTheDrawingXObject : public Object<BlockTheDrawingXObject> {
+public:
+ BlockTheDrawingXObject(ObjectType objType);
+};
+
+namespace BlockTheDrawingXObj {
+
+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_setRect(int nargs);
+void m_installPatch(int nargs);
+void m_removePatch(int nargs);
+void m_disposeMem(int nargs);
+
+} // End of namespace BlockTheDrawingXObj
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/xlibs/m/mazexobj.cpp b/engines/director/lingo/xlibs/m/mazexobj.cpp
new file mode 100644
index 00000000000..a49b64fa0d4
--- /dev/null
+++ b/engines/director/lingo/xlibs/m/mazexobj.cpp
@@ -0,0 +1,144 @@
+/* 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/xlibs/m/mazexobj.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * wttf
+ *
+ **************************************************/
+
+/*
+-- Maze XObj v 1.09F (c) 1995 Samizdat Productions. All Rights Reserved.
+-- written by Christopher P. Kelly
+I mNew
+II mUserClicked where
+II mCheckClick where
+S mGetKeySettings
+IS mSetKeySettings string
+S mGetLocSettings
+IS mSetLocSettings string
+I mGetTemplate
+I mGetKeyAdded
+IS mSetCDPath fullpath
+IS mSetHDPath fullpath
+IIIII mSetMovieBox t,l,b,r
+II mUpdateScreen moveFlag
+I mFixScreen
+I mGetLevel
+II mGetKeyState keyNum
+III mSetKeyState keyNum, state
+II mSetPreclickOption onOrOff
+I mDisposeMem
+ */
+
+namespace Director {
+
+const char *MazeXObj::xlibName = "MazeObj";
+const XlibFileDesc MazeXObj::fileNames[] = {
+ { "MazeObj", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", MazeXObj::m_new, 0, 0, 400 },
+ { "userClicked", MazeXObj::m_userClicked, 1, 1, 400 },
+ { "checkClick", MazeXObj::m_checkClick, 1, 1, 400 },
+ { "getKeySettings", MazeXObj::m_getKeySettings, 0, 0, 400 },
+ { "setKeySettings", MazeXObj::m_setKeySettings, 1, 1, 400 },
+ { "getLocSettings", MazeXObj::m_getLocSettings, 0, 0, 400 },
+ { "setLocSettings", MazeXObj::m_setLocSettings, 1, 1, 400 },
+ { "getTemplate", MazeXObj::m_getTemplate, 0, 0, 400 },
+ { "getKeyAdded", MazeXObj::m_getKeyAdded, 0, 0, 400 },
+ { "setCDPath", MazeXObj::m_setCDPath, 1, 1, 400 },
+ { "setHDPath", MazeXObj::m_setHDPath, 1, 1, 400 },
+ { "setMovieBox", MazeXObj::m_setMovieBox, 4, 4, 400 },
+ { "updateScreen", MazeXObj::m_updateScreen, 1, 1, 400 },
+ { "fixScreen", MazeXObj::m_fixScreen, 0, 0, 400 },
+ { "getLevel", MazeXObj::m_getLevel, 0, 0, 400 },
+ { "getKeyState", MazeXObj::m_getKeyState, 1, 1, 400 },
+ { "setKeyState", MazeXObj::m_setKeyState, 2, 2, 400 },
+ { "setPreclickOption", MazeXObj::m_setPreclickOption, 1, 1, 400 },
+ { "disposeMem", MazeXObj::m_disposeMem, 0, 0, 400 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+MazeXObject::MazeXObject(ObjectType ObjectType) :Object<MazeXObject>("MazeObj") {
+ _objType = ObjectType;
+}
+
+void MazeXObj::open(ObjectType type, const Common::Path &path) {
+ MazeXObject::initMethods(xlibMethods);
+ MazeXObject *xobj = new MazeXObject(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 MazeXObj::close(ObjectType type) {
+ MazeXObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void MazeXObj::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("MazeXObj::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(MazeXObj::m_userClicked, 0)
+XOBJSTUB(MazeXObj::m_checkClick, 0)
+XOBJSTUB(MazeXObj::m_getKeySettings, "")
+XOBJSTUB(MazeXObj::m_setKeySettings, 0)
+XOBJSTUB(MazeXObj::m_getLocSettings, "")
+XOBJSTUB(MazeXObj::m_setLocSettings, 0)
+XOBJSTUB(MazeXObj::m_getTemplate, 0)
+XOBJSTUB(MazeXObj::m_getKeyAdded, 0)
+XOBJSTUB(MazeXObj::m_setCDPath, 0)
+XOBJSTUB(MazeXObj::m_setHDPath, 0)
+XOBJSTUB(MazeXObj::m_setMovieBox, 0)
+XOBJSTUB(MazeXObj::m_updateScreen, 0)
+XOBJSTUB(MazeXObj::m_fixScreen, 0)
+XOBJSTUB(MazeXObj::m_getLevel, 0)
+XOBJSTUB(MazeXObj::m_getKeyState, 0)
+XOBJSTUB(MazeXObj::m_setKeyState, 0)
+XOBJSTUB(MazeXObj::m_setPreclickOption, 0)
+XOBJSTUB(MazeXObj::m_disposeMem, 0)
+
+}
diff --git a/engines/director/lingo/xlibs/m/mazexobj.h b/engines/director/lingo/xlibs/m/mazexobj.h
new file mode 100644
index 00000000000..398e880dabb
--- /dev/null
+++ b/engines/director/lingo/xlibs/m/mazexobj.h
@@ -0,0 +1,64 @@
+/* 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_XLIBS_M_MAZEXOBJ_H
+#define DIRECTOR_LINGO_XLIBS_M_MAZEXOBJ_H
+
+namespace Director {
+
+class MazeXObject : public Object<MazeXObject> {
+public:
+ MazeXObject(ObjectType objType);
+};
+
+namespace MazeXObj {
+
+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_userClicked(int nargs);
+void m_checkClick(int nargs);
+void m_getKeySettings(int nargs);
+void m_setKeySettings(int nargs);
+void m_getLocSettings(int nargs);
+void m_setLocSettings(int nargs);
+void m_getTemplate(int nargs);
+void m_getKeyAdded(int nargs);
+void m_setCDPath(int nargs);
+void m_setHDPath(int nargs);
+void m_setMovieBox(int nargs);
+void m_updateScreen(int nargs);
+void m_fixScreen(int nargs);
+void m_getLevel(int nargs);
+void m_getKeyState(int nargs);
+void m_setKeyState(int nargs);
+void m_setPreclickOption(int nargs);
+void m_disposeMem(int nargs);
+
+} // End of namespace MazeXObj
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/xlibs/p/playsoundmoviexobj.cpp b/engines/director/lingo/xlibs/p/playsoundmoviexobj.cpp
new file mode 100644
index 00000000000..4b93de39628
--- /dev/null
+++ b/engines/director/lingo/xlibs/p/playsoundmoviexobj.cpp
@@ -0,0 +1,102 @@
+/* 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/xlibs/p/playsoundmoviexobj.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * wttf
+ *
+ **************************************************/
+
+/*
+-- SaveNRestore XObj v 1.0d2 (c) 1995 Samizdat Productions. All Rights Reserved.
+-- written by Christopher P. Kelly
+I mNew
+IS mMovieOpen fullPathName
+I mMovieIdle
+II mMovieSetVolume newVolume
+I mMovieStop
+ */
+
+namespace Director {
+
+const char *PlaySoundMovieXObj::xlibName = "PlaySoundMovieXObj";
+const XlibFileDesc PlaySoundMovieXObj::fileNames[] = {
+ { "PlaySoundMovieXObj", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", PlaySoundMovieXObj::m_new, 0, 0, 400 },
+ { "movieOpen", PlaySoundMovieXObj::m_movieOpen, 1, 1, 400 },
+ { "movieIdle", PlaySoundMovieXObj::m_movieIdle, 0, 0, 400 },
+ { "movieSetVolume", PlaySoundMovieXObj::m_movieSetVolume, 1, 1, 400 },
+ { "movieStop", PlaySoundMovieXObj::m_movieStop, 0, 0, 400 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+PlaySoundMovieXObject::PlaySoundMovieXObject(ObjectType ObjectType) :Object<PlaySoundMovieXObject>("PlaySoundMovieXObj") {
+ _objType = ObjectType;
+}
+
+void PlaySoundMovieXObj::open(ObjectType type, const Common::Path &path) {
+ PlaySoundMovieXObject::initMethods(xlibMethods);
+ PlaySoundMovieXObject *xobj = new PlaySoundMovieXObject(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 PlaySoundMovieXObj::close(ObjectType type) {
+ PlaySoundMovieXObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void PlaySoundMovieXObj::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("PlaySoundMovieXObj::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(PlaySoundMovieXObj::m_movieOpen, 0)
+XOBJSTUB(PlaySoundMovieXObj::m_movieIdle, 0)
+XOBJSTUB(PlaySoundMovieXObj::m_movieSetVolume, 0)
+XOBJSTUB(PlaySoundMovieXObj::m_movieStop, 0)
+
+}
diff --git a/engines/director/lingo/xlibs/p/playsoundmoviexobj.h b/engines/director/lingo/xlibs/p/playsoundmoviexobj.h
new file mode 100644
index 00000000000..302a74c7865
--- /dev/null
+++ b/engines/director/lingo/xlibs/p/playsoundmoviexobj.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_XLIBS_P_PLAYSOUNDMOVIEXOBJ_H
+#define DIRECTOR_LINGO_XLIBS_P_PLAYSOUNDMOVIEXOBJ_H
+
+namespace Director {
+
+class PlaySoundMovieXObject : public Object<PlaySoundMovieXObject> {
+public:
+ PlaySoundMovieXObject(ObjectType objType);
+};
+
+namespace PlaySoundMovieXObj {
+
+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_movieOpen(int nargs);
+void m_movieIdle(int nargs);
+void m_movieSetVolume(int nargs);
+void m_movieStop(int nargs);
+
+} // End of namespace PlaySoundMovieXObj
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/xlibs/s/savenrestorexobj.cpp b/engines/director/lingo/xlibs/s/savenrestorexobj.cpp
new file mode 100644
index 00000000000..700d0529696
--- /dev/null
+++ b/engines/director/lingo/xlibs/s/savenrestorexobj.cpp
@@ -0,0 +1,132 @@
+/* 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/xlibs/s/savenrestorexobj.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * wttf
+ *
+ **************************************************/
+
+/*
+-- SaveNRestore XObj v 1.0d2 (c) 1995 Samizdat Productions. All Rights Reserved.
+-- written by Christopher P. Kelly
+I mNew
+II mWriteSettingsFile
+II mReadSettingsFile
+IS mSetDirectorMovie
+IS mSetSubLocation1
+IS mSetSubLocation2
+IIII mSetKeys whichList position value
+IS mSetMazeKeys
+IS mSetMazeLocation
+S mGetDirectorMovie
+S mGetSubLocation1
+S mGetSubLocation2
+III mGetKeys whichList position
+S mGetMazeKeys
+S mGetMazeLocation
+ */
+
+namespace Director {
+
+const char *SaveNRestoreXObj::xlibName = "SaveNRestoreXObj";
+const XlibFileDesc SaveNRestoreXObj::fileNames[] = {
+ { "SaveNRestoreXObj", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", SaveNRestoreXObj::m_new, 0, 0, 400 },
+ { "writeSettingsFile", SaveNRestoreXObj::m_writeSettingsFile, 1, 1, 400 },
+ { "readSettingsFile", SaveNRestoreXObj::m_readSettingsFile, 1, 1, 400 },
+ { "setDirectorMovie", SaveNRestoreXObj::m_setDirectorMovie, 1, 1, 400 },
+ { "setSubLocation1", SaveNRestoreXObj::m_setSubLocation1, 1, 1, 400 },
+ { "setSubLocation2", SaveNRestoreXObj::m_setSubLocation2, 1, 1, 400 },
+ { "setKeys", SaveNRestoreXObj::m_setKeys, 3, 3, 400 },
+ { "setMazeKeys", SaveNRestoreXObj::m_setMazeKeys, 1, 1, 400 },
+ { "setMazeLocation", SaveNRestoreXObj::m_setMazeLocation, 1, 1, 400 },
+ { "getDirectorMovie", SaveNRestoreXObj::m_getDirectorMovie, 0, 0, 400 },
+ { "getSubLocation1", SaveNRestoreXObj::m_getSubLocation1, 0, 0, 400 },
+ { "getSubLocation2", SaveNRestoreXObj::m_getSubLocation2, 0, 0, 400 },
+ { "getKeys", SaveNRestoreXObj::m_getKeys, 2, 2, 400 },
+ { "getMazeKeys", SaveNRestoreXObj::m_getMazeKeys, 0, 0, 400 },
+ { "getMazeLocation", SaveNRestoreXObj::m_getMazeLocation, 0, 0, 400 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+SaveNRestoreXObject::SaveNRestoreXObject(ObjectType ObjectType) :Object<SaveNRestoreXObject>("SaveNRestoreXObj") {
+ _objType = ObjectType;
+}
+
+void SaveNRestoreXObj::open(ObjectType type, const Common::Path &path) {
+ SaveNRestoreXObject::initMethods(xlibMethods);
+ SaveNRestoreXObject *xobj = new SaveNRestoreXObject(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 SaveNRestoreXObj::close(ObjectType type) {
+ SaveNRestoreXObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void SaveNRestoreXObj::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("SaveNRestoreXObj::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(SaveNRestoreXObj::m_writeSettingsFile, 0)
+XOBJSTUB(SaveNRestoreXObj::m_readSettingsFile, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setDirectorMovie, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setSubLocation1, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setSubLocation2, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setKeys, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setMazeKeys, 0)
+XOBJSTUB(SaveNRestoreXObj::m_setMazeLocation, 0)
+XOBJSTUB(SaveNRestoreXObj::m_getDirectorMovie, "")
+XOBJSTUB(SaveNRestoreXObj::m_getSubLocation1, "")
+XOBJSTUB(SaveNRestoreXObj::m_getSubLocation2, "")
+XOBJSTUB(SaveNRestoreXObj::m_getKeys, 0)
+XOBJSTUB(SaveNRestoreXObj::m_getMazeKeys, "")
+XOBJSTUB(SaveNRestoreXObj::m_getMazeLocation, "")
+
+}
diff --git a/engines/director/lingo/xlibs/s/savenrestorexobj.h b/engines/director/lingo/xlibs/s/savenrestorexobj.h
new file mode 100644
index 00000000000..5a54f5e6fb2
--- /dev/null
+++ b/engines/director/lingo/xlibs/s/savenrestorexobj.h
@@ -0,0 +1,60 @@
+/* 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_XLIBS_S_SAVENRESTOREXOBJ_H
+#define DIRECTOR_LINGO_XLIBS_S_SAVENRESTOREXOBJ_H
+
+namespace Director {
+
+class SaveNRestoreXObject : public Object<SaveNRestoreXObject> {
+public:
+ SaveNRestoreXObject(ObjectType objType);
+};
+
+namespace SaveNRestoreXObj {
+
+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_writeSettingsFile(int nargs);
+void m_readSettingsFile(int nargs);
+void m_setDirectorMovie(int nargs);
+void m_setSubLocation1(int nargs);
+void m_setSubLocation2(int nargs);
+void m_setKeys(int nargs);
+void m_setMazeKeys(int nargs);
+void m_setMazeLocation(int nargs);
+void m_getDirectorMovie(int nargs);
+void m_getSubLocation1(int nargs);
+void m_getSubLocation2(int nargs);
+void m_getKeys(int nargs);
+void m_getMazeKeys(int nargs);
+void m_getMazeLocation(int nargs);
+
+} // End of namespace SaveNRestoreXObj
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/xlibs/t/temnotaxobj.cpp b/engines/director/lingo/xlibs/t/temnotaxobj.cpp
new file mode 100644
index 00000000000..71dc1c5cd87
--- /dev/null
+++ b/engines/director/lingo/xlibs/t/temnotaxobj.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 "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/xlibs/t/temnotaxobj.h"
+
+/**************************************************
+ *
+ * USED IN:
+ * wttf
+ *
+ **************************************************/
+
+/*
+-- TemnotaXObj v 1.0d2 (c) 1995 Samizdat Productions.
+-- All Rights Reserved.
+-- written by Christopher P. Kelly
+I mNew
+I mPutUp
+I mGoAway
+ */
+
+namespace Director {
+
+const char *TemnotaXObj::xlibName = "TemnotaXObj";
+const XlibFileDesc TemnotaXObj::fileNames[] = {
+ { "TemnotaXObj", nullptr },
+ { nullptr, nullptr },
+};
+
+static MethodProto xlibMethods[] = {
+ { "new", TemnotaXObj::m_new, 0, 0, 400 },
+ { "putUp", TemnotaXObj::m_putUp, 0, 0, 400 },
+ { "goAway", TemnotaXObj::m_goAway, 0, 0, 400 },
+
+ { nullptr, nullptr, 0, 0, 0 }
+};
+
+static BuiltinProto xlibBuiltins[] = {
+
+ { nullptr, nullptr, 0, 0, 0, VOIDSYM }
+};
+
+TemnotaXObject::TemnotaXObject(ObjectType ObjectType) :Object<TemnotaXObject>("TemnotaXObj") {
+ _objType = ObjectType;
+}
+
+void TemnotaXObj::open(ObjectType type, const Common::Path &path) {
+ TemnotaXObject::initMethods(xlibMethods);
+ TemnotaXObject *xobj = new TemnotaXObject(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 TemnotaXObj::close(ObjectType type) {
+ TemnotaXObject::cleanupMethods();
+ g_lingo->_globalvars[xlibName] = Datum();
+
+}
+
+void TemnotaXObj::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("TemnotaXObj::m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->push(g_lingo->_state->me);
+}
+
+XOBJSTUB(TemnotaXObj::m_putUp, 0)
+XOBJSTUB(TemnotaXObj::m_goAway, 0)
+
+}
diff --git a/engines/director/lingo/xlibs/t/temnotaxobj.h b/engines/director/lingo/xlibs/t/temnotaxobj.h
new file mode 100644
index 00000000000..eb9ac7bfb72
--- /dev/null
+++ b/engines/director/lingo/xlibs/t/temnotaxobj.h
@@ -0,0 +1,48 @@
+/* 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_XLIBS_T_TEMNOTAXOBJ_H
+#define DIRECTOR_LINGO_XLIBS_T_TEMNOTAXOBJ_H
+
+namespace Director {
+
+class TemnotaXObject : public Object<TemnotaXObject> {
+public:
+ TemnotaXObject(ObjectType objType);
+};
+
+namespace TemnotaXObj {
+
+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_putUp(int nargs);
+void m_goAway(int nargs);
+
+} // End of namespace TemnotaXObj
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/module.mk b/engines/director/module.mk
index 9e3d48ab560..958520d232e 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -132,7 +132,12 @@ MODULE_OBJS = \
lingo/xlibs/m/movutils.o \
lingo/xlibs/m/msfile.o \
lingo/xlibs/m/mystisle.o \
+ lingo/xlibs/b/blockthedrawingxobj.o \
+ lingo/xlibs/m/mazexobj.o \
lingo/xlibs/o/openbleedwindowxcmd.o \
+ lingo/xlibs/p/playsoundmoviexobj.o \
+ lingo/xlibs/s/savenrestorexobj.o \
+ lingo/xlibs/t/temnotaxobj.o \
lingo/xlibs/o/orthoplayxobj.o \
lingo/xlibs/p/paco.o \
lingo/xlibs/p/palxobj.o \
Commit: b4b3a8dc70409b74615abc5670ab8e5d74d22230
https://github.com/scummvm/scummvm/commit/b4b3a8dc70409b74615abc5670ab8e5d74d22230
Author: Scott Percival (code at moral.net.au)
Date: 2026-01-16T18:46:52+03:00
Commit Message:
DIRECTOR: Fix detection entry for beyondthewall
Changed paths:
engines/director/detection_tables.h
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index e82f49181d6..486f27ad4ce 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -2526,10 +2526,10 @@ static const DirectorGameDescription gameDescriptions[] = {
WINGAME1t("bestservice", "", "BESTDEMO.EXE", "437d0bc26a89a5f8cda3bef31db23897", 370015, 310),
- MACGAME1("beyondthewall", "", "Beyond The Wall Of Stars", "107c6a6d3cce957eaa26d427e672000c", 465267, 300),
- MACGAME1("beyondthewall", "", "Desktop Folder/bstars", "107c6a6d3cce957eaa26d427e672000c", 465267, 300),
- WINGAME2t("beyondthewall", "", "WALL.EXE", "36a8d553a58437752e12b250389a4629", 225253,
- "TITLE.MMM", "1fa63036a9c55cdbec8830219315ee7a", 661220, 300),
+ MACGAME1("beyondthewall", "", "Beyond The Wall Of Stars", "rt:449d133e14d82d6fc87d76fd048c588d", 465267, 300),
+ MACGAME1("beyondthewall", "", "Desktop Folder/bstars", "rt:449d133e14d82d6fc87d76fd048c588d", 465267, 300),
+ WINGAME2t("beyondthewall", "", "PCMMMFIL/WALL.EXE", "t:36a8d553a58437752e12b250389a4629", 225253,
+ "PCMMMFIL/TITLE.MMM", "d:9e77d5f51082677628f62112f79f2eeb", 661220, 300),
MACDEMO1_l("bigtimemovie", "Demo", "BIG TIME MOVIE-Studios", "f5277c53bacd27936158dd3867e587e2", 392265, Common::JA_JPN, 311),
Commit: 41afdf15efd3d3a2682297dcf36e8005c65ff071
https://github.com/scummvm/scummvm/commit/41afdf15efd3d3a2682297dcf36e8005c65ff071
Author: Scott Percival (code at moral.net.au)
Date: 2026-01-16T18:46:52+03:00
Commit Message:
DIRECTOR: Fix buggy behaviour of d_strstr
Fixes substitution of the commander's name in Beyond the Wall of Stars -
this uses b_offset() to search for "iii", which was getting tripped up
by the singular letter I.
Changed paths:
engines/director/util.cpp
diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index 9e9cec7ef9a..777dc786c2b 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -1807,24 +1807,34 @@ bool compareStringEquality(const Common::String &s1, const Common::String &s2) {
}
const char *d_strstr(const char *str, const char *substr) {
- // Check if the substr is found inside the str
- int len = strlen(substr);
- const char *ref = substr;
-
- while (*str && *ref) {
- const uint32 c1 = getCharEquality(*str);
- const uint32 c2 = getCharEquality(*ref);
-
- str++;
+ while (*str && *substr) {
+ uint32 c1 = getCharEquality(*str);
+ uint32 c2 = getCharEquality(*substr);
+
+ if (c1 == c2) {
+ // inner loop, keep track of the starting character
+ const char *baseptr = str;
+ const char *ref = substr;
+ while (*baseptr && *ref) {
+ c1 = getCharEquality(*baseptr);
+ c2 = getCharEquality(*ref);
+
+ // characters equal, increment substring
+ if (c1 == c2) {
+ ref++;
+ } else {
+ break;
+ }
- if (c1 == c2)
- ref++;
+ // reached the end of the substring, success
+ if (!*ref)
+ return str;
- if (!*ref)
- return (str - len);
+ baseptr++;
+ }
+ }
- if (len == (ref - substr))
- ref = substr;
+ str++;
}
return nullptr;
Commit: 606da4c9d4195b7e93019320d9e86f92e51beb71
https://github.com/scummvm/scummvm/commit/606da4c9d4195b7e93019320d9e86f92e51beb71
Author: Scott Percival (code at moral.net.au)
Date: 2026-01-16T18:46:52+03:00
Commit Message:
DIRECTOR: Fix Ghost/NotGhost/Reverse/NotReverse ink types in 32bpp mode
Changed paths:
engines/director/graphics.cpp
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 4d3c4c46c53..d09b6152098 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -443,33 +443,53 @@ void InkPrimitives<T>::drawPoint(int x, int y, uint32 src, void *data) {
}
break;
case kInkTypeReverse:
- // XOR dst palette index with src.
- // Originally designed for 1-bit mode so that
- // black pixels would appear white on a black
- // background.
- *dst ^= src;
+ if (sizeof(T) == 1) {
+ // XOR dst palette index with src.
+ // Originally designed for 1-bit mode so that
+ // black pixels would appear white on a black
+ // background.
+ *dst ^= src;
+ } else {
+ // In 32-bit mode, this is the opposite??
+ *dst ^= ~(src);
+ }
break;
case kInkTypeNotReverse:
- // XOR dst palette index with the inverse of src.
- *dst ^= ~(src);
+ if (sizeof(T) == 1) {
+ // XOR dst palette index with the inverse of src.
+ *dst ^= ~(src);
+ } else {
+ // In 32-bit mode, this is the opposite??
+ *dst ^= src & 0xffffff00;
+ }
break;
case kInkTypeGhost:
if (p->oneBitImage || p->applyColor) {
*dst = (src == p->colorBlack) ? p->backColor : *dst;
} else {
- // AND dst palette index with the inverse of src.
- // Originally designed for 1-bit mode so that
- // black pixels would be invisible until they were
- // over a black background, showing as white.
- *dst = *dst & ~src;
+ if (sizeof(T) == 1) {
+ // AND dst palette index with the inverse of src.
+ // Originally designed for 1-bit mode so that
+ // black pixels would be invisible until they were
+ // over a black background, showing as white.
+ *dst = *dst & ~src;
+ } else {
+ // In 32-bit mode, OR dst RGBA with inverse src
+ *dst = *dst | ~src;
+ }
}
break;
case kInkTypeNotGhost:
if (p->oneBitImage || p->applyColor) {
*dst = (src == p->colorWhite) ? p->backColor : *dst;
} else {
- // AND dst palette index with src.
- *dst = *dst & src;
+ if (sizeof(T) == 1) {
+ // AND dst palette index with src.
+ *dst = *dst & src;
+ } else {
+ // In 32-bit mode, OR dst RGBA with src
+ *dst = *dst | src;
+ }
}
break;
default: {
Commit: ddc621d2bab657035eae38cb4c4bf6fed611d9dc
https://github.com/scummvm/scummvm/commit/ddc621d2bab657035eae38cb4c4bf6fed611d9dc
Author: Scott Percival (code at moral.net.au)
Date: 2026-01-16T18:46:52+03:00
Commit Message:
DIRECTOR: Make 32-bit BITDDecoder images output an RGBA surface
Changed paths:
engines/director/images.cpp
diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index beebc03bf97..735ad73b00f 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -149,8 +149,8 @@ BITDDecoder::BITDDecoder(int w, int h, uint16 bitsPerPixel, uint16 pitch, const
format = Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0);
break;
case 4:
- // RGB888
- format = Graphics::PixelFormat(4, 8, 8, 8, 0, 16, 8, 0, 0);
+ // RGB8888
+ format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
break;
default:
warning("BITDDecoder::BITDDecoder(): unsupported bpp %d", bitsPerPixel);
@@ -309,7 +309,7 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) {
pixels[(((y * _surface->w * 4)) + (x + 2 * _surface->w))] << 8 |
pixels[(((y * _surface->w * 4)) + (x + 3 * _surface->w))];
}
- *((uint32 *)_surface->getBasePtr(x, y)) = color;
+ *((uint32 *)_surface->getBasePtr(x, y)) = (color << 8) | 0xff;
x++;
break;
More information about the Scummvm-git-logs
mailing list