[Scummvm-git-logs] scummvm master -> 930d9236b857ff07a7a01bf29c4296de6b77dfff

rvanlaar noreply at scummvm.org
Sun Mar 6 10:07:47 UTC 2022


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
930d9236b8 DIRECTOR: LINGO: Implement loading rsrc XObjects


Commit: 930d9236b857ff07a7a01bf29c4296de6b77dfff
    https://github.com/scummvm/scummvm/commit/930d9236b857ff07a7a01bf29c4296de6b77dfff
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-03-06T11:07:35+01:00

Commit Message:
DIRECTOR: LINGO: Implement loading rsrc XObjects

Xobject files on mac can contain multiple XObjects.
Parse the names of XCOD and XCMD resources and try to load them as
XObjects.

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 5a24463f3d6..2031f696a8a 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1137,9 +1137,38 @@ void LB::b_openResFile(int nargs) {
 void LB::b_openXlib(int nargs) {
 	// TODO: When Xtras are implemented, determine whether to initialize
 	// the XObject or Xtra version of FileIO
+	Common::String xlibName;
 
 	Datum d = g_lingo->pop();
-	Common::String xlibName = d.asString();
+	if (g_director->getPlatform() == Common::kPlatformMacintosh) {
+		// try opening the file as a resfile
+		Common::String resPath = g_director->getCurrentWindow()->getCurrentPath() + d.asString();
+		if (!g_director->_openResFiles.contains(resPath)) {
+			MacArchive *resFile = new MacArchive();
+
+			if (resFile->openFile(pathMakeRelative(resPath))) {
+				g_director->_openResFiles.setVal(resPath, resFile);
+				uint32 XCOD = MKTAG('X', 'C', 'O', 'D');
+				uint32 XCMD = MKTAG('X', 'C', 'M', 'D');
+
+				Common::Array<uint16> rsrcList = resFile->getResourceIDList(XCOD);
+
+				for (uint i = 0; i < rsrcList.size(); i++) {
+					xlibName = resFile->getResourceDetail(XCOD, rsrcList[i]).name.c_str();
+					g_lingo->openXLib(xlibName, kXObj);
+				}
+
+				rsrcList = resFile->getResourceIDList(XCMD);
+				for (uint i = 0; i < rsrcList.size(); i++) {
+					xlibName = resFile->getResourceDetail(XCMD, rsrcList[i]).name.c_str();
+					g_lingo->openXLib(xlibName, kXObj);
+				}
+				return;
+			}
+		}
+	}
+
+	xlibName = d.asString();
 	g_lingo->openXLib(xlibName, kXObj);
 }
 




More information about the Scummvm-git-logs mailing list