aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/totfile.cpp
diff options
context:
space:
mode:
authorSven Hesse2010-02-25 15:22:26 +0000
committerSven Hesse2010-02-25 15:22:26 +0000
commit6e07e3e6424750d8d6d8536dd67d4962f2ea9db4 (patch)
treefed136efc09cb0be42f8256fcfd607248962d409 /engines/gob/totfile.cpp
parent151889a76786dc554bf91ad16f4ca8dfbb0a1cb5 (diff)
downloadscummvm-rg350-6e07e3e6424750d8d6d8536dd67d4962f2ea9db4.tar.gz
scummvm-rg350-6e07e3e6424750d8d6d8536dd67d4962f2ea9db4.tar.bz2
scummvm-rg350-6e07e3e6424750d8d6d8536dd67d4962f2ea9db4.zip
Fixing problems with the texts table in TOT files when the order of the texts and resources tables are switched in the TOT file
svn-id: r48124
Diffstat (limited to 'engines/gob/totfile.cpp')
-rw-r--r--engines/gob/totfile.cpp49
1 files changed, 44 insertions, 5 deletions
diff --git a/engines/gob/totfile.cpp b/engines/gob/totfile.cpp
index bbf62c143b..5cc723ba7d 100644
--- a/engines/gob/totfile.cpp
+++ b/engines/gob/totfile.cpp
@@ -97,11 +97,50 @@ bool TOTFile::getProperties(Properties &props) const {
for (int i = 0; i < 14; i++)
props.functions[i] = READ_LE_UINT16(_header + 100 + i * 2);
- props.scriptEnd = _stream->size();
- if (props.textsOffset > 0)
- props.scriptEnd = MIN(props.scriptEnd, props.textsOffset);
- if (props.resourcesOffset > 0)
- props.scriptEnd = MIN(props.scriptEnd, props.resourcesOffset);
+ uint32 fileSize = _stream->size();
+ uint32 textsOffset = props.textsOffset;
+ uint32 resourcesOffset = props.resourcesOffset;
+
+ if (textsOffset == 0xFFFFFFFF)
+ textsOffset = 0;
+ if (resourcesOffset == 0xFFFFFFFF)
+ resourcesOffset = 0;
+
+ props.scriptEnd = fileSize;
+ if (textsOffset > 0)
+ props.scriptEnd = MIN(props.scriptEnd, textsOffset);
+ if (resourcesOffset > 0)
+ props.scriptEnd = MIN(props.scriptEnd, resourcesOffset);
+
+ // Calculate the sizes of the texts and resources tables for every possible order
+ if ((textsOffset > 0) && (resourcesOffset > 0)) {
+ // Both exists
+
+ if (props.textsOffset > resourcesOffset) {
+ // First resources, then texts
+ props.textsSize = fileSize - textsOffset;
+ props.resourcesSize = textsOffset - resourcesOffset;
+ } else {
+ // First texts, then resources
+ props.textsSize = resourcesOffset - textsOffset;
+ props.resourcesSize = fileSize - resourcesOffset;
+ }
+ } else if (textsOffset > 0) {
+ // Only the texts table exists
+
+ props.textsSize = fileSize - textsOffset;
+ props.resourcesSize = 0;
+ } else if (resourcesOffset > 0) {
+ // Only the resources table exists
+
+ props.textsSize = 0;
+ props.resourcesSize = fileSize - resourcesOffset;
+ } else {
+ // Both don't exists
+
+ props.textsSize = 0;
+ props.resourcesSize = 0;
+ }
return true;
}