Fix scrolling glitches in Oracle of FF

svn-id: r22290
This commit is contained in:
Travis Howell 2006-05-03 04:07:37 +00:00
parent 91a67d1150
commit afb5f5d5ab
4 changed files with 13 additions and 33 deletions

View File

@ -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;

View File

@ -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;

View File

@ -618,7 +618,6 @@ protected:
void saveUserGame(int slot);
void windowBackSpace(WindowBlock *window);
void bltOracleText();
void oracleLogo();
void scrollOracle();
void scrollOracleUp();

View File

@ -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 {