diff options
Diffstat (limited to 'scumm/resource.cpp')
-rw-r--r-- | scumm/resource.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp index 3cdbd48a18..7b4da92599 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -224,11 +224,41 @@ bool ScummEngine::openFile(BaseScummFile &file, const char *filename) { bool result = false; if (!_containerFile.isEmpty()) { + char name[128]; + char temp[128]; + file.close(); file.open(_containerFile.c_str()); assert(file.isOpen()); - result = file.openSubFile(filename); + strncpy(name, filename, 128); + + // Some Mac demos (i.e. DOTT) have bundled file names different + // from target name. dottdemo.000 vs tentacle.000. So we should + // substitute those names too + if (_substResFileNameIndexBundle == 0) { + int substLastIndex = 0; + + while (substLastIndex != -1) { + if (file.openSubFile(name)) + break; + + substLastIndex = generateSubstResFileName(filename, name, sizeof(name), substLastIndex + 1); + } + + if (substLastIndex == 0) + substLastIndex = -1; + + _substResFileNameIndexBundle = substLastIndex; + + if (substLastIndex != -1) + debug(5, "Generated substitute in Mac bundle: [%s -> %s]", filename, name); + } + + if (_substResFileNameIndexBundle != -1) + generateSubstResFileName(filename, name, sizeof(temp), _substResFileNameIndexBundle); + + result = file.openSubFile(name); } if (!result) { |