Fix scrolling glitches in Oracle of FF
svn-id: r22290
This commit is contained in:
parent
91a67d1150
commit
afb5f5d5ab
4 changed files with 13 additions and 33 deletions
|
@ -1534,17 +1534,14 @@ void SimonEngine::video_putchar_drawchar(WindowBlock *window, uint x, uint y, by
|
||||||
|
|
||||||
_lockWord |= 0x8000;
|
_lockWord |= 0x8000;
|
||||||
|
|
||||||
dst = getFrontBuf();
|
dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset;
|
||||||
dst += y * _dxSurfacePitch + x + window->textColumnOffset;
|
|
||||||
|
|
||||||
if (getGameType() == GType_FF) {
|
if (getGameType() == GType_FF) {
|
||||||
dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset;
|
|
||||||
h = 13;
|
h = 13;
|
||||||
w = feebleFontSize[chr - 0x20];
|
w = feebleFontSize[chr - 0x20];
|
||||||
|
|
||||||
src = feeble_video_font + (chr - 0x20) * 13;
|
src = feeble_video_font + (chr - 0x20) * 13;
|
||||||
} else {
|
} else {
|
||||||
dst = getFrontBuf() + y * _dxSurfacePitch + x + window->textColumnOffset;
|
|
||||||
h = 8;
|
h = 8;
|
||||||
w = 6;
|
w = 6;
|
||||||
|
|
||||||
|
@ -1584,8 +1581,15 @@ void SimonEngine::video_putchar_drawchar(WindowBlock *window, uint x, uint y, by
|
||||||
int8 b = *src++;
|
int8 b = *src++;
|
||||||
i = 0;
|
i = 0;
|
||||||
do {
|
do {
|
||||||
if (b < 0)
|
if (b < 0) {
|
||||||
dst[i] = color;
|
if (getGameType() == GType_FF) {
|
||||||
|
if (dst[i] == 0)
|
||||||
|
dst[i] = color;
|
||||||
|
} else {
|
||||||
|
dst[i] = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
b <<= 1;
|
b <<= 1;
|
||||||
} while (++i != w);
|
} while (++i != w);
|
||||||
dst += _dxSurfacePitch;
|
dst += _dxSurfacePitch;
|
||||||
|
|
|
@ -79,10 +79,8 @@ void SimonEngine::linksDown() {
|
||||||
void SimonEngine::scrollOracle() {
|
void SimonEngine::scrollOracle() {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < 5; i++)
|
||||||
scrollOracleUp();
|
scrollOracleUp();
|
||||||
bltOracleText();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimonEngine::oracleTextUp() {
|
void SimonEngine::oracleTextUp() {
|
||||||
|
@ -112,7 +110,6 @@ void SimonEngine::oracleTextUp() {
|
||||||
if(sub)
|
if(sub)
|
||||||
startSubroutineEx(sub);
|
startSubroutineEx(sub);
|
||||||
setBitFlag(94, false);
|
setBitFlag(94, false);
|
||||||
bltOracleText();
|
|
||||||
}
|
}
|
||||||
if (_currentBoxNumber != 601 || !getBitFlag(89))
|
if (_currentBoxNumber != 601 || !getBitFlag(89))
|
||||||
break;
|
break;
|
||||||
|
@ -147,7 +144,6 @@ void SimonEngine::oracleTextDown() {
|
||||||
if (sub)
|
if (sub)
|
||||||
startSubroutineEx(sub);
|
startSubroutineEx(sub);
|
||||||
setBitFlag(93, false);
|
setBitFlag(93, false);
|
||||||
bltOracleText();
|
|
||||||
}
|
}
|
||||||
if (_currentBoxNumber != 600 || !getBitFlag(89))
|
if (_currentBoxNumber != 600 || !getBitFlag(89))
|
||||||
break;
|
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() {
|
void SimonEngine::oracleLogo() {
|
||||||
Common::Rect srcRect, dstRect;
|
Common::Rect srcRect, dstRect;
|
||||||
byte *src, *dst;
|
byte *src, *dst;
|
||||||
|
|
|
@ -618,7 +618,6 @@ protected:
|
||||||
void saveUserGame(int slot);
|
void saveUserGame(int slot);
|
||||||
void windowBackSpace(WindowBlock *window);
|
void windowBackSpace(WindowBlock *window);
|
||||||
|
|
||||||
void bltOracleText();
|
|
||||||
void oracleLogo();
|
void oracleLogo();
|
||||||
void scrollOracle();
|
void scrollOracle();
|
||||||
void scrollOracleUp();
|
void scrollOracleUp();
|
||||||
|
|
|
@ -1781,11 +1781,9 @@ void SimonEngine::vc36_setWindowImage() {
|
||||||
uint16 vga_res = vcReadNextWord();
|
uint16 vga_res = vcReadNextWord();
|
||||||
uint16 windowNum = vcReadNextWord();
|
uint16 windowNum = vcReadNextWord();
|
||||||
|
|
||||||
if (getGameType() == GType_FF) {
|
if (getGameType() == GType_SIMON2) {
|
||||||
// TODO
|
|
||||||
} else if (getGameType() == GType_SIMON2) {
|
|
||||||
set_video_mode_internal(windowNum, vga_res);
|
set_video_mode_internal(windowNum, vga_res);
|
||||||
} else {
|
} else if (getGameType() == GType_SIMON1) {
|
||||||
if (windowNum == 16) {
|
if (windowNum == 16) {
|
||||||
_copyPartialMode = 2;
|
_copyPartialMode = 2;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue