aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/tsage/sound.cpp26
-rw-r--r--engines/tsage/sound.h9
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 {