aboutsummaryrefslogtreecommitdiff
path: root/simon/simon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simon/simon.cpp')
-rw-r--r--simon/simon.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/simon/simon.cpp b/simon/simon.cpp
index de26fc38c8..03dd39a826 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -154,7 +154,9 @@ SimonState::SimonState(GameDetector *detector, OSystem *syst)
_voice_sound = 0;
_ambient_sound = 0;
- _music_playing = false;
+ _effects_paused = false;
+ _ambient_paused = false;
+ _music_paused = false;
}
SimonState::~SimonState()
@@ -4615,7 +4617,18 @@ void SimonState::delay(uint amount)
} else if (event.kbd.keycode == '-') {
midi.set_volume(midi.get_volume() - 10);
} else if (event.kbd.keycode == 'm') {
- midi.pause(_music_playing ^= 1);
+ midi.pause(_music_paused ^= 1);
+ } else if (event.kbd.keycode == 's') {
+ _effects_paused ^= 1;
+ } else if (event.kbd.keycode == 'b') {
+ _ambient_paused ^= 1;
+ if (_ambient_paused && _ambient_playing) {
+ _mixer->stop(_ambient_index);
+ } else if (_ambient_playing) {
+ uint tmp = _ambient_playing;
+ _ambient_playing = 0;
+ playAmbient(tmp);
+ }
} else if (event.kbd.flags == OSystem::KBD_CTRL) {
if (event.kbd.keycode == 'f') {
_fast_mode ^= 1;
@@ -5140,6 +5153,9 @@ void SimonState::playEffects(uint sound)
if (_effects_offsets == NULL)
return;
+ if (_effects_paused)
+ return;
+
if (_game == GAME_SIMON1TALKIE) { /* simon 1 talkie */
#ifdef USE_MAD
if (_effects_type == FORMAT_MP3) {
@@ -5166,6 +5182,9 @@ void SimonState::playAmbient(uint sound)
if (_effects_offsets == NULL)
return;
+ if (_ambient_paused)
+ return;
+
if (sound == _ambient_playing)
return;