aboutsummaryrefslogtreecommitdiff
path: root/engines/simon/simon.cpp
diff options
context:
space:
mode:
authorTravis Howell2006-04-07 09:04:36 +0000
committerTravis Howell2006-04-07 09:04:36 +0000
commitc0e984a80a4d9cd959328051e2bf03702a594ff9 (patch)
tree06a990046b0a44deacbc78aba76acc4400808253 /engines/simon/simon.cpp
parente806e891e3a0f3675e567271e371ff8d760a63d7 (diff)
downloadscummvm-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.cpp47
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);