aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/resources.cpp
diff options
context:
space:
mode:
authorSven Hesse2012-06-15 15:09:01 +0200
committerSven Hesse2012-06-15 15:09:01 +0200
commit5961609a56a910d81d38389c6ac61d06eca6f029 (patch)
tree1e64164a143b9fdfad5efd9723b40e87721d0a30 /engines/gob/resources.cpp
parent7632246264102d88922fc963284af6250ea12f57 (diff)
downloadscummvm-rg350-5961609a56a910d81d38389c6ac61d06eca6f029.tar.gz
scummvm-rg350-5961609a56a910d81d38389c6ac61d06eca6f029.tar.bz2
scummvm-rg350-5961609a56a910d81d38389c6ac61d06eca6f029.zip
GOB: Add a resource size workaround for Little Red
This fixes the missing resources in the screen where Little Red has to find the animals' homes for them.
Diffstat (limited to 'engines/gob/resources.cpp')
-rw-r--r--engines/gob/resources.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/engines/gob/resources.cpp b/engines/gob/resources.cpp
index d5497c25be..a84f4ac4b8 100644
--- a/engines/gob/resources.cpp
+++ b/engines/gob/resources.cpp
@@ -716,7 +716,7 @@ byte *Resources::getIMData(TOTResourceItem &totItem) const {
return _imData + offset;
}
-byte *Resources::getEXTData(EXTResourceItem &extItem, uint32 size) const {
+byte *Resources::getEXTData(EXTResourceItem &extItem, uint32 &size) const {
Common::SeekableReadStream *stream = _vm->_dataIO->getFile(_extFile);
if (!stream)
return 0;
@@ -726,6 +726,10 @@ byte *Resources::getEXTData(EXTResourceItem &extItem, uint32 size) const {
return 0;
}
+ // If that workaround is active, limit the resource size instead of throwing an error
+ if (_vm->hasResourceSizeWorkaround())
+ size = MIN<int>(size, stream->size() - extItem.offset);
+
byte *data = new byte[extItem.packed ? (size + 2) : size];
if (stream->read(data, size) != size) {
delete[] data;
@@ -737,7 +741,7 @@ byte *Resources::getEXTData(EXTResourceItem &extItem, uint32 size) const {
return data;
}
-byte *Resources::getEXData(EXTResourceItem &extItem, uint32 size) const {
+byte *Resources::getEXData(EXTResourceItem &extItem, uint32 &size) const {
Common::SeekableReadStream *stream = _vm->_dataIO->getFile(_exFile);
if (!stream)
return 0;
@@ -747,6 +751,10 @@ byte *Resources::getEXData(EXTResourceItem &extItem, uint32 size) const {
return 0;
}
+ // If that workaround is active, limit the resource size instead of throwing an error
+ if (_vm->hasResourceSizeWorkaround())
+ size = MIN<int>(size, stream->size() - extItem.offset);
+
byte *data = new byte[extItem.packed ? (size + 2) : size];
if (stream->read(data, size) != size) {
delete[] data;