diff options
author | Travis Howell | 2006-04-07 09:04:36 +0000 |
---|---|---|
committer | Travis Howell | 2006-04-07 09:04:36 +0000 |
commit | c0e984a80a4d9cd959328051e2bf03702a594ff9 (patch) | |
tree | 06a990046b0a44deacbc78aba76acc4400808253 /engines/simon/simon.cpp | |
parent | e806e891e3a0f3675e567271e371ff8d760a63d7 (diff) | |
download | scummvm-rg350-c0e984a80a4d9cd959328051e2bf03702a594ff9.tar.gz scummvm-rg350-c0e984a80a4d9cd959328051e2bf03702a594ff9.tar.bz2 scummvm-rg350-c0e984a80a4d9cd959328051e2bf03702a594ff9.zip |
Fix some horizontal scrolling issues in FF
svn-id: r21661
Diffstat (limited to 'engines/simon/simon.cpp')
-rw-r--r-- | engines/simon/simon.cpp | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/engines/simon/simon.cpp b/engines/simon/simon.cpp index 27bf2c442d..01b5f4538a 100644 --- a/engines/simon/simon.cpp +++ b/engines/simon/simon.cpp @@ -2359,7 +2359,9 @@ void SimonEngine::set_video_mode_internal(uint mode, uint vga_res_id) { _usePaletteDelay = true; } else { _scrollX = 0; + _scrollY = 0; _scrollXMax = 0; + _scrollYMax = 0; _scrollCount = 0; _scrollFlag = 0; _scrollHeight = 134; @@ -2491,21 +2493,35 @@ void SimonEngine::scroll_timeout() { if (_scrollCount == 0) return; - if (_scrollCount < 0) { - if (_scrollFlag != -1) { - _scrollFlag = -1; - if (++_scrollCount == 0) - return; + if (getGameType() == GType_FF) { + if (_scrollCount < 0) { + if (_scrollFlag != -8) { + _scrollFlag = -8; + _scrollCount += 8; + } + } else { + if (_scrollFlag != 8) { + _scrollFlag = 8; + _scrollCount -= 8; + } } } else { - if (_scrollFlag != 1) { - _scrollFlag = 1; - if (--_scrollCount == 0) - return; + if (_scrollCount < 0) { + if (_scrollFlag != -1) { + _scrollFlag = -1; + if (++_scrollCount == 0) + return; + } + } else { + if (_scrollFlag != 1) { + _scrollFlag = 1; + if (--_scrollCount == 0) + return; + } } - } - add_vga_timer(6, NULL, 0, 0); + add_vga_timer(6, NULL, 0, 0); + } } void SimonEngine::vcResumeSprite(const byte *code_ptr, uint16 cur_file, uint16 cur_sprite) { @@ -2626,7 +2642,10 @@ void SimonEngine::timer_vga_sprites() { if (_paletteFlag == 2) _paletteFlag = 1; - if ((getGameType() == GType_SIMON2 || getGameType() == GType_FF) && _scrollFlag) { + if (getGameType() == GType_FF && _scrollCount) { + scroll_timeout(); + } + if (getGameType() == GType_SIMON2 && _scrollFlag) { scrollEvent(); } @@ -3736,6 +3755,10 @@ void SimonEngine::dx_update_screen_and_palette() { memcpy(_sdl_buf_attached, _sdl_buf, _screenWidth * _screenHeight); + if (getGameType() == GType_FF && _scrollFlag) { + scrollEvent(); + } + if (_paletteColorCount != 0) { if (getGameType() == GType_SIMON1 && _usePaletteDelay) { delay(100); |