aboutsummaryrefslogtreecommitdiff
path: root/simon
diff options
context:
space:
mode:
authorOliver Kiehl2002-12-07 17:36:38 +0000
committerOliver Kiehl2002-12-07 17:36:38 +0000
commita42d84f01ee8082614a4753f1649f2a67a9deac2 (patch)
tree370f5996c600fcb5bc09b03d43555359816db2d2 /simon
parent0ecd439fe1e719e568f0bab78558aa0314f617ed (diff)
downloadscummvm-rg350-a42d84f01ee8082614a4753f1649f2a67a9deac2.tar.gz
scummvm-rg350-a42d84f01ee8082614a4753f1649f2a67a9deac2.tar.bz2
scummvm-rg350-a42d84f01ee8082614a4753f1649f2a67a9deac2.zip
added the possibility to interrupt conversations in simon2 as in the original game
svn-id: r5870
Diffstat (limited to 'simon')
-rw-r--r--simon/simon.cpp25
-rw-r--r--simon/simon.h1
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();