From caa4578add35021bfbb00b5f81359592402096a3 Mon Sep 17 00:00:00 2001 From: Thanasis Antoniou Date: Wed, 17 Jul 2019 19:08:43 +0300 Subject: BLADERUNNER: Use unsigned 32bit diff for time durations --- engines/bladerunner/ambient_sounds.cpp | 46 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'engines/bladerunner/ambient_sounds.cpp') 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); } } } -- cgit v1.2.3