aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/support/files_manager.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-05-15 18:44:47 -0400
committerPaul Gilbert2016-07-15 19:11:06 -0400
commit053ff7ab75e0ee1f18606dd6c7488c5cc0d31ae5 (patch)
treecead39d2d48e3ed2d6c2b0ad18afabde4518dd47 /engines/titanic/support/files_manager.cpp
parent2680caa5bde09e3ecc7a1c8ef6c345e2bc9a134b (diff)
downloadscummvm-rg350-053ff7ab75e0ee1f18606dd6c7488c5cc0d31ae5.tar.gz
scummvm-rg350-053ff7ab75e0ee1f18606dd6c7488c5cc0d31ae5.tar.bz2
scummvm-rg350-053ff7ab75e0ee1f18606dd6c7488c5cc0d31ae5.zip
TITANIC: Change engine to use titanic.dat
Diffstat (limited to 'engines/titanic/support/files_manager.cpp')
-rw-r--r--engines/titanic/support/files_manager.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/engines/titanic/support/files_manager.cpp b/engines/titanic/support/files_manager.cpp
index eb2f95e92e..c415731f16 100644
--- a/engines/titanic/support/files_manager.cpp
+++ b/engines/titanic/support/files_manager.cpp
@@ -28,10 +28,38 @@ namespace Titanic {
CFilesManager::CFilesManager() : _gameManager(nullptr), _assetsPath("Assets"),
_field0(0), _drive(-1), _field18(0), _field1C(0), _field3C(0) {
- _exeResources.loadFromEXE("st.exe");
+ loadResourceIndex();
}
CFilesManager::~CFilesManager() {
+ _datFile.close();
+}
+
+void CFilesManager::loadResourceIndex() {
+ if (!_datFile.open("titanic.dat"))
+ error("Could not find titanic.dat data file");
+
+ uint headerId = _datFile.readUint32BE();
+ uint version = _datFile.readUint16LE();
+ if (headerId != MKTAG('S', 'V', 'T', 'N') || version < 1)
+ error("Invalid data file");
+
+ // Read in entries
+ uint offset, size;
+ char c;
+ Common::String resourceName;
+ for (;;) {
+ offset = _datFile.readUint32LE();
+ size = _datFile.readUint32LE();
+ if (size == 0)
+ break;
+
+ Common::String resName;
+ while ((c = _datFile.readByte()) != '\0')
+ resName += c;
+
+ _resources[resName] = ResourceEntry(offset, size);
+ }
}
bool CFilesManager::fileExists(const CString &name) {
@@ -92,9 +120,11 @@ void CFilesManager::preload(const CString &name) {
// We don't currently do any preloading of resources
}
-Common::SeekableReadStream *CFilesManager::getResource(
- Common::WinResourceID area, Common::WinResourceID name) {
- return _exeResources.getResource(area, name);
+Common::SeekableReadStream *CFilesManager::getResource(const CString &str) {
+ ResourceEntry resEntry = _resources[str];
+ _datFile.seek(resEntry._offset);
+
+ return _datFile.readStream(resEntry._size);
}
} // End of namespace Titanic