aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2016-01-25 00:21:28 +0100
committerStrangerke2016-01-25 00:21:28 +0100
commitfb34336863ec8942ef7365c5decfdafcb020bc6a (patch)
tree2e614484353be040a9b816ae95ad67e82453190b
parent78b9a903add0431893c92e5e4c8f01b761a48277 (diff)
downloadscummvm-rg350-fb34336863ec8942ef7365c5decfdafcb020bc6a.tar.gz
scummvm-rg350-fb34336863ec8942ef7365c5decfdafcb020bc6a.tar.bz2
scummvm-rg350-fb34336863ec8942ef7365c5decfdafcb020bc6a.zip
LAB: Do not crash the DOS version in case of missing file as some files are known to be missing in the original
-rw-r--r--engines/lab/anim.cpp3
-rw-r--r--engines/lab/resource.cpp12
2 files changed, 12 insertions, 3 deletions
diff --git a/engines/lab/anim.cpp b/engines/lab/anim.cpp
index 3da4519109..f2e6992375 100644
--- a/engines/lab/anim.cpp
+++ b/engines/lab/anim.cpp
@@ -287,6 +287,9 @@ void Anim::readDiff(Common::File *diffFile, bool playOnce, bool onlyDiffData) {
_continuous = false;
+ if (!_diffFile)
+ return;
+
uint32 magicBytes = _diffFile->readUint32LE();
if (magicBytes != 1219009121) {
_isPlaying = false;
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
index 096d29361f..ed0cb37c67 100644
--- a/engines/lab/resource.cpp
+++ b/engines/lab/resource.cpp
@@ -211,9 +211,15 @@ Common::String Resource::translateFileName(const Common::String filename) {
Common::File *Resource::openDataFile(const Common::String filename, uint32 fileHeader) {
Common::File *dataFile = new Common::File();
dataFile->open(translateFileName(filename));
- if (!dataFile->isOpen())
- error("openDataFile: Couldn't open %s (%s)", translateFileName(filename).c_str(), filename.c_str());
-
+ warning("%s", filename.c_str());
+ if (!dataFile->isOpen()) {
+ // The DOS version is known to have some missing files
+ if (_vm->getPlatform() == Common::kPlatformDOS) {
+ warning("Incomplete DOS version, skipping file %s", filename.c_str());
+ return nullptr;
+ } else
+ error("openDataFile: Couldn't open %s (%s)", translateFileName(filename).c_str(), filename.c_str());
+ }
if (fileHeader > 0) {
uint32 headerTag = dataFile->readUint32BE();
if (headerTag != fileHeader) {