From afb5f5d5ab6906b786afabff42a84287f23dc305 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 3 May 2006 04:07:37 +0000 Subject: Fix scrolling glitches in Oracle of FF svn-id: r22290 --- engines/simon/charset.cpp | 16 ++++++++++------ engines/simon/oracle.cpp | 23 +---------------------- engines/simon/simon.h | 1 - engines/simon/vga.cpp | 6 ++---- 4 files changed, 13 insertions(+), 33 deletions(-) diff --git a/engines/simon/charset.cpp b/engines/simon/charset.cpp index 51545c56d4..ef6c4b4f6a 100644 --- a/engines/simon/charset.cpp +++ b/engines/simon/charset.cpp @@ -1534,17 +1534,14 @@ void SimonEngine::video_putchar_drawchar(WindowBlock *window, uint x, uint y, by _lockWord |= 0x8000; - dst = getFrontBuf(); - dst += y * _dxSurfacePitch + x + window->textColumnOffset; + dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset; if (getGameType() == GType_FF) { - dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset; h = 13; w = feebleFontSize[chr - 0x20]; src = feeble_video_font + (chr - 0x20) * 13; } else { - dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset; h = 8; w = 6; @@ -1584,8 +1581,15 @@ void SimonEngine::video_putchar_drawchar(WindowBlock *window, uint x, uint y, by int8 b = *src++; i = 0; do { - if (b < 0) - dst[i] = color; + if (b < 0) { + if (getGameType() == GType_FF) { + if (dst[i] == 0) + dst[i] = color; + } else { + dst[i] = color; + } + } + b <<= 1; } while (++i != w); dst += _dxSurfacePitch; diff --git a/engines/simon/oracle.cpp b/engines/simon/oracle.cpp index 4d3302e5b8..08ddb3ae0f 100644 --- a/engines/simon/oracle.cpp +++ b/engines/simon/oracle.cpp @@ -79,10 +79,8 @@ void SimonEngine::linksDown() { void SimonEngine::scrollOracle() { int i; - for (i = 0; i < 5; i++) { + for (i = 0; i < 5; i++) scrollOracleUp(); - bltOracleText(); - } } void SimonEngine::oracleTextUp() { @@ -112,7 +110,6 @@ void SimonEngine::oracleTextUp() { if(sub) startSubroutineEx(sub); setBitFlag(94, false); - bltOracleText(); } if (_currentBoxNumber != 601 || !getBitFlag(89)) break; @@ -147,7 +144,6 @@ void SimonEngine::oracleTextDown() { if (sub) startSubroutineEx(sub); setBitFlag(93, false); - bltOracleText(); } if (_currentBoxNumber != 600 || !getBitFlag(89)) break; @@ -212,23 +208,6 @@ void SimonEngine::scrollOracleDown() { } } -void SimonEngine::bltOracleText() { - byte *src, *dst1, *dst2; - uint16 h; - - src = getFrontBuf() + 103 * _screenWidth + 136; - dst1 = getFrontBuf() + 103 * _screenWidth + 136; - dst2 = getBackBuf() + 103 * _screenWidth + 136; - - for (h = 0; h < 104; h++) { - memcpy(dst1, src, 360); - memcpy(dst2, src, 360); - dst1 += _screenWidth; - dst2 += _screenWidth; - src += _screenWidth; - } -} - void SimonEngine::oracleLogo() { Common::Rect srcRect, dstRect; byte *src, *dst; diff --git a/engines/simon/simon.h b/engines/simon/simon.h index 45016a848a..dc31681517 100644 --- a/engines/simon/simon.h +++ b/engines/simon/simon.h @@ -618,7 +618,6 @@ protected: void saveUserGame(int slot); void windowBackSpace(WindowBlock *window); - void bltOracleText(); void oracleLogo(); void scrollOracle(); void scrollOracleUp(); diff --git a/engines/simon/vga.cpp b/engines/simon/vga.cpp index e6731a076e..b4f7490b45 100644 --- a/engines/simon/vga.cpp +++ b/engines/simon/vga.cpp @@ -1781,11 +1781,9 @@ void SimonEngine::vc36_setWindowImage() { uint16 vga_res = vcReadNextWord(); uint16 windowNum = vcReadNextWord(); - if (getGameType() == GType_FF) { - // TODO - } else if (getGameType() == GType_SIMON2) { + if (getGameType() == GType_SIMON2) { set_video_mode_internal(windowNum, vga_res); - } else { + } else if (getGameType() == GType_SIMON1) { if (windowNum == 16) { _copyPartialMode = 2; } else { -- cgit v1.2.3