aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2006-05-03 04:07:37 +0000
committerTravis Howell2006-05-03 04:07:37 +0000
commitafb5f5d5ab6906b786afabff42a84287f23dc305 (patch)
tree0155f4146a11fc181dc14e7f3c257cf85de06cfc
parent91a67d1150f79665437c83181081e1abb48a7408 (diff)
downloadscummvm-rg350-afb5f5d5ab6906b786afabff42a84287f23dc305.tar.gz
scummvm-rg350-afb5f5d5ab6906b786afabff42a84287f23dc305.tar.bz2
scummvm-rg350-afb5f5d5ab6906b786afabff42a84287f23dc305.zip
Fix scrolling glitches in Oracle of FF
svn-id: r22290
-rw-r--r--engines/simon/charset.cpp16
-rw-r--r--engines/simon/oracle.cpp23
-rw-r--r--engines/simon/simon.h1
-rw-r--r--engines/simon/vga.cpp6
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 {