[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