aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/ambient_sounds.cpp
diff options
context:
space:
mode:
authorThanasis Antoniou2019-07-17 19:08:43 +0300
committerThanasis Antoniou2019-07-17 19:09:15 +0300
commitcaa4578add35021bfbb00b5f81359592402096a3 (patch)
tree2133b0dd3f4e71324bafc1ca65699ba79483e512 /engines/bladerunner/ambient_sounds.cpp
parentd1ff73cbb381db1876e2dbdf0457c9efc76fcd1a (diff)
downloadscummvm-rg350-caa4578add35021bfbb00b5f81359592402096a3.tar.gz
scummvm-rg350-caa4578add35021bfbb00b5f81359592402096a3.tar.bz2
scummvm-rg350-caa4578add35021bfbb00b5f81359592402096a3.zip
BLADERUNNER: Use unsigned 32bit diff for time durations
Diffstat (limited to 'engines/bladerunner/ambient_sounds.cpp')
-rw-r--r--engines/bladerunner/ambient_sounds.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/engines/bladerunner/ambient_sounds.cpp b/engines/bladerunner/ambient_sounds.cpp
index 7d0db4763e..8fe7a1c16a 100644
--- a/engines/bladerunner/ambient_sounds.cpp
+++ b/engines/bladerunner/ambient_sounds.cpp
@@ -67,7 +67,7 @@ static inline void sort(int &a, int &b) {
void AmbientSounds::addSound(
int sfxId,
- int timeMin, int timeMax,
+ uint32 timeMin, uint32 timeMax,
int volumeMin, int volumeMax,
int panStartMin, int panStartMax,
int panEndMin, int panEndMax,
@@ -101,7 +101,7 @@ void AmbientSounds::removeAllNonLoopingSounds(bool stopPlaying) {
}
}
-void AmbientSounds::addSpeech(int actorId, int sentenceId, int timeMin, int timeMax, int volumeMin, int volumeMax, int panStartMin, int panStartMax, int panEndMin, int panEndMax, int priority, int unk) {
+void AmbientSounds::addSpeech(int actorId, int sentenceId, uint32 timeMin, uint32 timeMax, int volumeMin, int volumeMax, int panStartMin, int panStartMax, int panEndMin, int panEndMax, int priority, int unk) {
sort(volumeMin, volumeMax);
sort(panStartMin, panStartMax);
sort(panEndMin, panEndMax);
@@ -124,7 +124,7 @@ void AmbientSounds::playSpeech(int actorId, int sentenceId, int volume, int panS
_vm->_audioPlayer->playAud(name, volume * _ambientVolume / 100, panStart, panEnd, priority, kAudioPlayerOverrideVolume, Audio::Mixer::kSpeechSoundType);
}
-void AmbientSounds::addLoopingSound(int sfxId, int volume, int pan, int delay) {
+void AmbientSounds::addLoopingSound(int sfxId, int volume, int pan, uint32 delay) {
const Common::String &name = _vm->_gameInfo->getSfxTrack(sfxId);
int32 hash = MIXArchive::getHash(name);
@@ -147,7 +147,7 @@ void AmbientSounds::addLoopingSound(int sfxId, int volume, int pan, int delay) {
int actualVolumeStart = volume * _ambientVolume / 100;
int actualVolumeEnd = actualVolumeStart;
- if (delay > 0) {
+ if (delay > 0u) {
actualVolumeStart = 0;
}
@@ -162,7 +162,7 @@ void AmbientSounds::addLoopingSound(int sfxId, int volume, int pan, int delay) {
}
}
-void AmbientSounds::adjustLoopingSound(int sfxId, int volume, int pan, int delay) {
+void AmbientSounds::adjustLoopingSound(int sfxId, int volume, int pan, uint32 delay) {
int32 hash = MIXArchive::getHash(_vm->_gameInfo->getSfxTrack(sfxId));
int index = findLoopingTrackByHash(hash);
@@ -178,7 +178,7 @@ void AmbientSounds::adjustLoopingSound(int sfxId, int volume, int pan, int delay
}
}
-void AmbientSounds::removeLoopingSound(int sfxId, int delay) {
+void AmbientSounds::removeLoopingSound(int sfxId, uint32 delay) {
int32 hash = MIXArchive::getHash(_vm->_gameInfo->getSfxTrack(sfxId));
int index = findLoopingTrackByHash(hash);
if (index >= 0) {
@@ -186,7 +186,7 @@ void AmbientSounds::removeLoopingSound(int sfxId, int delay) {
}
}
-void AmbientSounds::removeAllLoopingSounds(int delay) {
+void AmbientSounds::removeAllLoopingSounds(uint32 delay) {
for (int i = 0; i < kLoopingSounds; i++) {
removeLoopingSoundByIndex(i, delay);
}
@@ -198,7 +198,8 @@ void AmbientSounds::tick() {
for (int i = 0; i != kNonLoopingSounds; ++i) {
NonLoopingSound &track = _nonLoopingSounds[i];
- if (!track.isActive || track.nextPlayTime > now) {
+ // unsigned difference is intentional
+ if (!track.isActive || now - track.nextPlayTimeStart < track.nextPlayTimeDiff) {
continue;
}
@@ -219,7 +220,8 @@ void AmbientSounds::tick() {
track.priority,
kAudioPlayerOverrideVolume);
- track.nextPlayTime = now + _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
+ track.nextPlayTimeStart = now;
+ track.nextPlayTimeDiff = _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
}
}
@@ -229,13 +231,13 @@ void AmbientSounds::setVolume(int volume) {
if (_loopingSounds[i].isActive && _loopingSounds[i].audioPlayerTrack != -1) {
int newVolume = _loopingSounds[i].volume * volume / 100;
if (_vm->_audioPlayer->isActive(_loopingSounds[i].audioPlayerTrack)) {
- _vm->_audioPlayer->adjustVolume(_loopingSounds[i].audioPlayerTrack, newVolume, 1, false);
+ _vm->_audioPlayer->adjustVolume(_loopingSounds[i].audioPlayerTrack, newVolume, 1u, false);
} else {
_loopingSounds[i].audioPlayerTrack = _vm->_audioPlayer->playAud(_loopingSounds[i].name, 1, _loopingSounds[i].pan, _loopingSounds[i].pan, 99, kAudioPlayerLoop | kAudioPlayerOverrideVolume);
if (_loopingSounds[i].audioPlayerTrack == -1) {
removeLoopingSound(i, 0);
} else {
- _vm->_audioPlayer->adjustVolume(_loopingSounds[i].audioPlayerTrack, newVolume, 1, false);
+ _vm->_audioPlayer->adjustVolume(_loopingSounds[i].audioPlayerTrack, newVolume, 1u, false);
}
}
}
@@ -298,7 +300,7 @@ int AmbientSounds::findLoopingTrackByHash(int32 hash) const {
void AmbientSounds::addSoundByName(
const Common::String &name,
- int timeMin, int timeMax,
+ uint32 timeMin, uint32 timeMax,
int volumeMin, int volumeMax,
int panStartMin, int panStartMax,
int panEndMin, int panEndMax,
@@ -316,9 +318,10 @@ void AmbientSounds::addSoundByName(
track.isActive = true;
track.name = name;
track.hash = MIXArchive::getHash(name);
- track.timeMin = 1000 * timeMin;
- track.timeMax = 1000 * timeMax;
- track.nextPlayTime = now + _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
+ track.timeMin = 1000u * timeMin;
+ track.timeMax = 1000u * timeMax;
+ track.nextPlayTimeStart = now;
+ track.nextPlayTimeDiff = _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
track.volumeMin = volumeMin;
track.volumeMax = volumeMax;
track.volume = 0;
@@ -341,10 +344,10 @@ void AmbientSounds::removeNonLoopingSoundByIndex(int index, bool stopPlaying) {
// track.field_45 = 0;
}
-void AmbientSounds::removeLoopingSoundByIndex(int index, int delay) {
+void AmbientSounds::removeLoopingSoundByIndex(int index, uint32 delay) {
LoopingSound &track = _loopingSounds[index];
if (track.isActive && track.audioPlayerTrack != -1 && _vm->_audioPlayer->isActive(track.audioPlayerTrack)) {
- if (delay > 0) {
+ if (delay > 0u) {
_vm->_audioPlayer->adjustVolume(track.audioPlayerTrack, 0, delay, false);
} else {
_vm->_audioPlayer->stop(track.audioPlayerTrack, false);
@@ -409,10 +412,11 @@ void AmbientSounds::load(SaveFileReadStream &f) {
track.hash = f.readSint32LE();
f.skip(4); // track.audioPlayerTrack is not used after load
track.audioPlayerTrack = -1;
- track.timeMin = f.readInt();
- track.timeMax = f.readInt();
+ track.timeMin = (uint32)f.readInt();
+ track.timeMax = (uint32)f.readInt();
f.skip(4); // track.nextPlayTime is not used after load
- track.nextPlayTime = now + _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
+ track.nextPlayTimeStart = now;
+ track.nextPlayTimeDiff = _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
track.volumeMin = f.readInt();
track.volumeMax = f.readInt();
track.volume = f.readInt();
@@ -442,7 +446,7 @@ void AmbientSounds::load(SaveFileReadStream &f) {
if (track.audioPlayerTrack == -1) {
removeLoopingSoundByIndex(i, 0);
} else {
- _vm->_audioPlayer->adjustVolume(track.audioPlayerTrack, _ambientVolume * track.volume / 100, 2, false);
+ _vm->_audioPlayer->adjustVolume(track.audioPlayerTrack, _ambientVolume * track.volume / 100, 2u, false);
}
}
}