diff options
-rw-r--r-- | simon/simon.cpp | 25 | ||||
-rw-r--r-- | simon/simon.h | 1 |
2 files changed, 22 insertions, 4 deletions
diff --git a/simon/simon.cpp b/simon/simon.cpp index bbf5978d4e..49a90019e9 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -1133,8 +1133,8 @@ void SimonState::startSubroutine170() { Subroutine *sub; - /* XXX: stop speech */ - + _sound->stopVoice(); + sub = getSubroutineByID(170); if (sub != NULL) startSubroutineEx(sub); @@ -2475,7 +2475,6 @@ get_out:; #endif } - void SimonState::o_wait_for_vga(uint a) { _vga_wait_for = a; @@ -2489,6 +2488,12 @@ void SimonState::o_wait_for_vga(uint a) startSubroutine170(); break; } + if (_game & GAME_SIMON2) { + if (_vga_wait_for == 200 && !vc_get_bit(14)) { + skip_speech(); + break; + } + } } else { processSpecialKeys(); } @@ -2509,6 +2514,18 @@ void SimonState::o_wait_for_vga(uint a) _system->show_mouse(true); } +void SimonState::skip_speech() +{ + _sound->stopVoice(); + if (!(_bit_array[1] & 0x1000)) { + _bit_array[0] |= 0x4000; + _variableArray[200] = 5; + start_vga_code(4, 1, 0x1e, 0, 0, 0); + o_wait_for_vga(0x82); + o_unk_99_simon2(2, 1); + } +} + void SimonState::timer_vga_sprites() { VgaSprite *vsp; @@ -3761,7 +3778,7 @@ void SimonState::talk_with_speech(uint speech_id, uint num_1) return; if (!(_bit_array[0] & 0x4000 || _bit_array[1] & 0x1000)) { _bit_array[0] |= 0x4000; - + _variableArray[200] = 5; start_vga_code(4, 1, 0x1e, 0, 0, 0); o_wait_for_vga(0x82); } diff --git a/simon/simon.h b/simon/simon.h index 29a3053384..52b158742c 100644 --- a/simon/simon.h +++ b/simon/simon.h @@ -452,6 +452,7 @@ public: void o_unk_114(); void o_wait_for_vga(uint a); + void skip_speech(); void o_unk_120(uint a); void o_unk_126(); void o_unk_127(); |