aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/resource_intern.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/resource_intern.h')
-rw-r--r--engines/sci/resource_intern.h24
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 {