aboutsummaryrefslogtreecommitdiff
path: root/engines/simon/midi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/simon/midi.cpp')
-rw-r--r--engines/simon/midi.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/engines/simon/midi.cpp b/engines/simon/midi.cpp
index c96ee7336f..108936d255 100644
--- a/engines/simon/midi.cpp
+++ b/engines/simon/midi.cpp
@@ -110,6 +110,12 @@ void MidiPlayer::send(uint32 b) {
// has already been allocated.
if (!_current->channel[b & 0x0F])
return;
+ } else if ((b & 0xFFF0) == 0x79B0) {
+ // A minimum implementation of "All controllers off" should set
+ // the volume to 100. We have to make sure that volume is
+ // re-adjusted by the master volume afterwards. This happens in
+ // Simon 1, on eating the mushroom to turn back to normal size.
+ _current->volume[channel] = 100;
}
if (!_current->channel[channel])
@@ -118,6 +124,8 @@ void MidiPlayer::send(uint32 b) {
if (channel == 9)
_current->channel[9]->volume(_current->volume[9] * _masterVolume / 255);
_current->channel[channel]->send(b);
+ if ((b & 0xFFF0) == 0x79B0)
+ _current->channel[channel]->volume(_current->volume[channel] * _masterVolume / 255);
}
}