aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb
diff options
context:
space:
mode:
authorD G Turner2012-06-05 01:00:01 +0100
committerD G Turner2012-06-05 01:00:01 +0100
commit7d29e4017d37f7aee4035b3d7288c8c5478633be (patch)
tree61a48d4b5887780863dcafc3d54d4e9428c5fe6a /engines/dreamweb
parentb8989cafc725a262d6f3c941c44f2e1a54d6818d (diff)
downloadscummvm-rg350-7d29e4017d37f7aee4035b3d7288c8c5478633be.tar.gz
scummvm-rg350-7d29e4017d37f7aee4035b3d7288c8c5478633be.tar.bz2
scummvm-rg350-7d29e4017d37f7aee4035b3d7288c8c5478633be.zip
DREAMWEB: Modify Sound code to better match original behaviour.
This fixes bug #3531635 - "DREAMWEB: doors don't play "open" sound when opening". In addition, the resultant code is simpler and should better match the original behaviour and a basic playtest has not shown any regressions.
Diffstat (limited to 'engines/dreamweb')
-rw-r--r--engines/dreamweb/sound.cpp42
-rw-r--r--engines/dreamweb/sound.h3
2 files changed, 12 insertions, 33 deletions
diff --git a/engines/dreamweb/sound.cpp b/engines/dreamweb/sound.cpp
index 76c734e932..570f76f2f9 100644
--- a/engines/dreamweb/sound.cpp
+++ b/engines/dreamweb/sound.cpp
@@ -35,14 +35,12 @@ DreamWebSound::DreamWebSound(DreamWebEngine *vm) : _vm(vm) {
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));
- _channel0 = 0;
- _channel1 = 0;
-
_currentSample = 0xff;
- _channel0Playing = 0;
+ _channel0Playing = 255;
_channel0Repeat = 0;
_channel0NewSound = false;
_channel1Playing = 255;
+ _channel1NewSound = false;
_volume = 0;
_volumeTo = 0;
@@ -82,13 +80,9 @@ void DreamWebSound::volumeAdjust() {
void DreamWebSound::playChannel0(uint8 index, uint8 repeat) {
debug(1, "playChannel0(index:%d, repeat:%d)", index, repeat);
- if (index == _channel0Playing) {
- warning("playChannel0(index: %d) already playing! Forcing restart...", index);
- _channel0NewSound = true;
- }
-
_channel0Playing = index;
_channel0Repeat = repeat;
+ _channel0NewSound = true;
}
void DreamWebSound::playChannel1(uint8 index) {
@@ -97,6 +91,7 @@ void DreamWebSound::playChannel1(uint8 index) {
return;
_channel1Playing = index;
+ _channel1NewSound = true;
}
void DreamWebSound::cancelCh0() {
@@ -186,10 +181,6 @@ void DreamWebSound::stopSound(uint8 channel) {
debug(1, "stopSound(%u)", channel);
assert(channel == 0 || channel == 1);
_vm->_mixer->stopHandle(_channelHandle[channel]);
- if (channel == 0)
- _channel0 = 0;
- else
- _channel1 = 0;
}
bool DreamWebSound::loadSpeech(const Common::String &filename) {
@@ -229,35 +220,24 @@ void DreamWebSound::soundHandler() {
volume = (8 - volume) * Audio::Mixer::kMaxChannelVolume / 8;
_vm->_mixer->setChannelVolume(_channelHandle[0], volume);
- uint8 ch0 = _channel0Playing;
- if (ch0 == 255)
- ch0 = 0;
- uint8 ch1 = _channel1Playing;
- if (ch1 == 255)
- ch1 = 0;
- uint8 ch0loop = _channel0Repeat;
-
- if (_channel0 != ch0 || _channel0NewSound) {
- _channel0 = ch0;
+ if (_channel0NewSound) {
_channel0NewSound = false;
- if (ch0) {
- playSound(0, ch0, ch0loop);
+ if (_channel0Playing != 255) {
+ playSound(0, _channel0Playing, _channel0Repeat);
}
}
- if (_channel1 != ch1) {
- _channel1 = ch1;
- if (ch1) {
- playSound(1, ch1, 1);
+ if (_channel1NewSound) {
+ _channel1NewSound = false;
+ if (_channel1Playing != 255) {
+ playSound(1, _channel1Playing, 1);
}
}
if (!_vm->_mixer->isSoundHandleActive(_channelHandle[0])) {
_channel0Playing = 255;
- _channel0 = 0;
}
if (!_vm->_mixer->isSoundHandleActive(_channelHandle[1])) {
_channel1Playing = 255;
- _channel1 = 0;
}
}
diff --git a/engines/dreamweb/sound.h b/engines/dreamweb/sound.h
index a38dbf3c1a..1ab06dc694 100644
--- a/engines/dreamweb/sound.h
+++ b/engines/dreamweb/sound.h
@@ -68,13 +68,12 @@ private:
Audio::SoundHandle _channelHandle[2];
- uint8 _channel0, _channel1;
-
uint8 _currentSample;
uint8 _channel0Playing;
uint8 _channel0Repeat;
bool _channel0NewSound;
uint8 _channel1Playing;
+ bool _channel1NewSound;
uint8 _volume;
uint8 _volumeTo;