diff options
author | Paul Gilbert | 2016-05-15 18:44:47 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-15 19:11:06 -0400 |
commit | 053ff7ab75e0ee1f18606dd6c7488c5cc0d31ae5 (patch) | |
tree | cead39d2d48e3ed2d6c2b0ad18afabde4518dd47 /engines/titanic/support/files_manager.cpp | |
parent | 2680caa5bde09e3ecc7a1c8ef6c345e2bc9a134b (diff) | |
download | scummvm-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.cpp | 38 |
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 |