aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2011-05-02 21:30:20 +1000
committerPaul Gilbert2011-05-24 21:24:17 +1000
commitc5cbfc4ac21c285ee02876daf603031f0ed4c830 (patch)
tree23179d65381d741e6b94178d6707e74669786f60
parent941fc4b1d53b25c4655771594476d855fbaa2a15 (diff)
downloadscummvm-rg350-c5cbfc4ac21c285ee02876daf603031f0ed4c830.tar.gz
scummvm-rg350-c5cbfc4ac21c285ee02876daf603031f0ed4c830.tar.bz2
scummvm-rg350-c5cbfc4ac21c285ee02876daf603031f0ed4c830.zip
TSAGE: Bugfixes for extracting sound data properties
-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 ccc64726ae..73ce7a1f53 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -33,8 +33,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;
@@ -85,12 +89,12 @@ void SoundManager::listenerSynchronize(Serializer &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");
}
@@ -211,7 +215,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;
@@ -295,7 +299,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);
}
}
@@ -303,6 +307,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 fb9a0c3f89..2cc5dec61e 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -62,7 +62,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;
@@ -72,9 +72,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:
@@ -129,6 +129,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 {