aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-17 16:55:13 +0000
committerJohannes Schickel2008-04-17 16:55:13 +0000
commit710976824e841164ee7e64469f26b11bb1220303 (patch)
tree00897bff1ca36be4ae3a0effdb32aea143effdd5 /engines/kyra
parent6cd8eda9bd81283e63e7d2784aa278e2f774de22 (diff)
downloadscummvm-rg350-710976824e841164ee7e64469f26b11bb1220303.tar.gz
scummvm-rg350-710976824e841164ee7e64469f26b11bb1220303.tar.bz2
scummvm-rg350-710976824e841164ee7e64469f26b11bb1220303.zip
Fixed Kyra 3 TLK file loading.
svn-id: r31541
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/resource.cpp33
1 files changed, 6 insertions, 27 deletions
diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp
index 10fdd60b5e..ce8a67845d 100644
--- a/engines/kyra/resource.cpp
+++ b/engines/kyra/resource.cpp
@@ -685,24 +685,17 @@ bool ResLoaderTlk::loadFile(const Common::String &filename, Common::SeekableRead
uint32 filename = stream.readUint32LE();
uint32 offset = stream.readUint32LE();
- entry.offset = offset;
- entry.size = 0;
+ entry.offset = offset+4;
char realFilename[20];
snprintf(realFilename, 20, "%.08u.AUD", filename);
- files.push_back(FileList::value_type(realFilename, entry));
- }
-
- Common::sort(files.begin(), files.end(), ResLoaderTlk::sortTlkFileList);
-
- for (FileList::iterator iter = files.begin(); iter != files.end(); ++iter) {
- FileList::const_iterator next = ResLoaderTlk::nextFile(files, iter);
- uint32 endOffset = (next == files.end() ? stream.size() : next->entry.offset);
-
- assert(endOffset >= iter->entry.offset);
+ uint32 curOffset = stream.pos();
+ stream.seek(entry.offset+2, SEEK_SET);
+ entry.size = stream.readUint32LE();
+ stream.seek(curOffset, SEEK_SET);
- iter->entry.size = endOffset - iter->entry.offset;
+ files.push_back(FileList::value_type(realFilename, entry));
}
return true;
@@ -717,20 +710,6 @@ Common::SeekableReadStream *ResLoaderTlk::loadFileFromArchive(const Common::Stri
return stream;
}
-bool ResLoaderTlk::sortTlkFileList(const File &l, const File &r) {
- return (l.entry.offset < r.entry.offset);
-}
-
-ResLoaderTlk::FileList::const_iterator ResLoaderTlk::nextFile(const FileList &list, FileList::const_iterator iter) {
- ResArchiveLoader::FileList::const_iterator next = iter;
- while ((++next) != list.end()) {
- if (next->entry.offset != iter->entry.offset)
- return next;
- }
-
- return next;
-}
-
#pragma mark -
void Resource::initializeLoaders() {