aboutsummaryrefslogtreecommitdiff
path: root/simon
diff options
context:
space:
mode:
authorTravis Howell2004-01-01 10:42:10 +0000
committerTravis Howell2004-01-01 10:42:10 +0000
commitf84500897200ad1825301286c8b1bfaeecf3a8ab (patch)
tree73a43a3850b2c95cee61c47a459bbd78c11199dc /simon
parentdcbbb04d3cb7f21d654f7098ab4dc3deb814fd6f (diff)
downloadscummvm-rg350-f84500897200ad1825301286c8b1bfaeecf3a8ab.tar.gz
scummvm-rg350-f84500897200ad1825301286c8b1bfaeecf3a8ab.tar.bz2
scummvm-rg350-f84500897200ad1825301286c8b1bfaeecf3a8ab.zip
Add work around for bug in French version of Simon the Sorcerer 1
svn-id: r12068
Diffstat (limited to 'simon')
-rw-r--r--simon/simon.cpp10
-rw-r--r--simon/vga.cpp8
2 files changed, 10 insertions, 8 deletions
diff --git a/simon/simon.cpp b/simon/simon.cpp
index 570a544d3f..25c75b4e82 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -2579,6 +2579,16 @@ void SimonEngine::vc_resume_sprite(byte *code_ptr, uint16 cur_file, uint16 cur_s
void SimonEngine::add_vga_timer(uint num, byte *code_ptr, uint cur_sprite, uint cur_file) {
VgaTimerEntry *vte;
+ // When Simon talks to the Golum about stew in French version of
+ // Simon the Sorcerer 1 the code_ptr is at wrong location for
+ // sprite 200. This was a bug in the original game, which
+ // caused several glitches in this scene.
+ // We work around the problem by correcting the code_ptr for sprite
+ // 200 in this scene, if it is wrong.
+ if (!(_game & GF_SIMON2) && (_language == 2) &&
+ (code_ptr - _vga_buffer_pointers[cur_file].vgaFile1 == 4) && (cur_sprite == 200) && (cur_file == 2))
+ code_ptr += 0x66;
+
_lock_word |= 1;
for (vte = _vga_timer_list; vte->delay; vte++) {
diff --git a/simon/vga.cpp b/simon/vga.cpp
index 62fcadb702..1f66a58e45 100644
--- a/simon/vga.cpp
+++ b/simon/vga.cpp
@@ -128,14 +128,6 @@ void SimonEngine::run_vga_script() {
opcode = *_vc_ptr++;
}
- // HACK Stop ScummVM error when Simon talks to Golum about Stew
- // in French version of Simon the Sorcerer 1. This was a bug in
- // the original game, which just ignored the invalid opcodes.
- // Unfortunately causes no subtitles and a stack of wait timeouts,
- // which also occured in original game.
- if (!(_game & GF_SIMON2) && (_language == 2) && opcode == 207)
- return;
-
if (opcode >= NUM_VIDEO_OP_CODES)
error("Invalid VGA opcode '%d' encountered", opcode);