diff options
Diffstat (limited to 'engines/sci/resource_intern.h')
-rw-r--r-- | engines/sci/resource_intern.h | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/engines/sci/resource_intern.h b/engines/sci/resource_intern.h index f198eddeb3..ea3e05661f 100644 --- a/engines/sci/resource_intern.h +++ b/engines/sci/resource_intern.h @@ -144,17 +144,35 @@ public: class AudioVolumeResourceSource : public VolumeResourceSource { protected: + struct CompressedTableEntry { + uint32 offset; + uint32 size; + }; + uint32 _audioCompressionType; - int32 *_audioCompressionOffsetMapping; + Common::HashMap<uint32, CompressedTableEntry> _compressedOffsets; public: AudioVolumeResourceSource(ResourceManager *resMan, const Common::String &name, ResourceSource *map, int volNum); - virtual ~AudioVolumeResourceSource(); - virtual void loadResource(ResourceManager *resMan, Resource *res); virtual uint32 getAudioCompressionType() const; + + bool relocateMapOffset(uint32 &offset, uint32 &size) const { + if (_audioCompressionType == 0) { + return true; + } + + if (!_compressedOffsets.contains(offset)) { + return false; + } + + const CompressedTableEntry &entry = _compressedOffsets.getVal(offset); + offset = entry.offset; + size = entry.size; + return true; + } }; class ExtAudioMapResourceSource : public ResourceSource { |