diff options
author | Travis Howell | 2004-01-01 10:42:10 +0000 |
---|---|---|
committer | Travis Howell | 2004-01-01 10:42:10 +0000 |
commit | f84500897200ad1825301286c8b1bfaeecf3a8ab (patch) | |
tree | 73a43a3850b2c95cee61c47a459bbd78c11199dc /simon | |
parent | dcbbb04d3cb7f21d654f7098ab4dc3deb814fd6f (diff) | |
download | scummvm-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.cpp | 10 | ||||
-rw-r--r-- | simon/vga.cpp | 8 |
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); |