diff options
author | Sven Hesse | 2010-02-25 15:22:26 +0000 |
---|---|---|
committer | Sven Hesse | 2010-02-25 15:22:26 +0000 |
commit | 6e07e3e6424750d8d6d8536dd67d4962f2ea9db4 (patch) | |
tree | fed136efc09cb0be42f8256fcfd607248962d409 /engines/gob/totfile.cpp | |
parent | 151889a76786dc554bf91ad16f4ca8dfbb0a1cb5 (diff) | |
download | scummvm-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.cpp | 49 |
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; } |