diff options
author | Sven Hesse | 2012-06-15 15:09:01 +0200 |
---|---|---|
committer | Sven Hesse | 2012-06-15 15:09:01 +0200 |
commit | 5961609a56a910d81d38389c6ac61d06eca6f029 (patch) | |
tree | 1e64164a143b9fdfad5efd9723b40e87721d0a30 /engines/gob/resources.cpp | |
parent | 7632246264102d88922fc963284af6250ea12f57 (diff) | |
download | scummvm-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.cpp | 12 |
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; |