diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/tsage/sound.cpp | 26 | ||||
-rw-r--r-- | engines/tsage/sound.h | 9 |
2 files changed, 24 insertions, 11 deletions
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 834395e7da..a8dcb5cd07 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -38,8 +38,12 @@ SoundManager::SoundManager() { _minVersion = 0x102; _maxVersion = 0x10A; - for (int i = 0; i < 16; ++i) + for (int i = 0; i < SOUND_ARR_SIZE; ++i) { + _field89[i] = 0; + _groupList[i] = 0; + _fieldE9[i] = 0; _field109[i] = 0; + } _groupMask = 0; _volume = 127; @@ -90,12 +94,12 @@ void SoundManager::listenerSynchronise(Serialiser &s) { } void SoundManager::checkResVersion(const byte *soundData) { - int minVersion = READ_LE_UINT16(soundData + 4); - int maxVersion = READ_LE_UINT16(soundData + 6); + int maxVersion = READ_LE_UINT16(soundData + 4); + int minVersion = READ_LE_UINT16(soundData + 6); - if (_globals->_soundManager._minVersion >= maxVersion) + if (_globals->_soundManager._minVersion < minVersion) error("Attempt to play/prime sound resource that is too new"); - if (_globals->_soundManager._minVersion > minVersion) + if (_globals->_soundManager._minVersion > maxVersion) error("Attempt to play/prime sound resource that is too old"); } @@ -216,7 +220,7 @@ int SoundManager::_sfDetermineGroup(const byte *soundData) { if ((v & _globals->_soundManager._groupMask) == v) return v; - p = soundData + 6 + (READ_LE_UINT16(p + 4) * 4); + p += 6 + (READ_LE_UINT16(p + 4) * 4); } return 0; @@ -300,7 +304,7 @@ void SoundManager::_sfExtractTrackInfo(trackInfoStruct *trackInfo, const byte *s } } - p = soundData + 6 + (READ_LE_UINT16(p + 4) * 4); + p += 6 + (READ_LE_UINT16(p + 4) * 4); } } @@ -308,6 +312,14 @@ void SoundManager::_sfTerminate() { } +void SoundManager::_sfExtractGroupMask() { + uint32 mask = 0; + for (int idx = 0; idx < SOUND_ARR_SIZE; ++idx) + mask |= _globals->_soundManager._groupList[idx]; + + _globals->_soundManager._groupMask = mask; +} + /*--------------------------------------------------------------------------*/ Sound::Sound() { diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index b175da71c5..0da04d3044 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -65,7 +65,7 @@ public: bool __sndmgrReady; int _minVersion, _maxVersion; Common::List<Sound *> _playList; - int _field109[16]; + int _field109[SOUND_ARR_SIZE]; uint32 _groupMask; int _volume; int _disableCtr; @@ -75,9 +75,9 @@ public: Common::List<SoundDriverEntry> _driverList; Common::List<SoundDriver *> _installedDrivers; - int _field89[16]; - int _fieldA9[16]; - int _fieldE9[16]; + int _field89[SOUND_ARR_SIZE]; + uint16 _groupList[SOUND_ARR_SIZE]; + int _fieldE9[SOUND_ARR_SIZE]; int _field16D; public: @@ -132,6 +132,7 @@ public: static void _sfUpdateLoop(Sound *sound); static void _sfSetMasterVol(int volume); static void _sfExtractTrackInfo(trackInfoStruct *trackInfo, const byte *soundData, int groupNum); + static void _sfExtractGroupMask(); }; class Sound: public EventHandler { |