LILLIPUT: Fix bug in previous commit, implement one more display function

This commit is contained in:
Strangerke 2012-04-16 00:24:02 +02:00 committed by Eugene Sandulenko
parent 31d4f07505
commit e21bb14313
3 changed files with 31 additions and 9 deletions

View file

@ -137,6 +137,7 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd)
_word1817B = 0; _word1817B = 0;
_word15BC8 = 0; _word15BC8 = 0;
_word15BCA = 0; _word15BCA = 0;
_word15AC2 = 0;
_saveFlag = false; _saveFlag = false;
_byte16F07_menuId = 0; _byte16F07_menuId = 0;
@ -181,7 +182,7 @@ Common::Platform LilliputEngine::getPlatform() const {
} }
void LilliputEngine::displayFunction1(byte *buf, int var1, int var2, int var4) { void LilliputEngine::displayFunction1(byte *buf, int var1, int var2, int var4) {
debugC(2, kDebugEngine, "displayFunction1a(buf, %d, %d, %d)", var1, var2, var4); debugC(2, kDebugEngine, "displayFunction1(buf, %d, %d, %d)", var1, var2, var4);
int index1 = ((var1 & 0xFF) << 8) + (var1 >> 8); int index1 = ((var1 & 0xFF) << 8) + (var1 >> 8);
byte *newBuf = &buf[index1]; byte *newBuf = &buf[index1];
@ -223,7 +224,7 @@ void LilliputEngine::displayFunction1(byte *buf, int var1, int var2, int var4) {
if (newBuf[15] != 0) if (newBuf[15] != 0)
((byte *)_mainSurface->getPixels())[index2 + 15] = newBuf[15]; ((byte *)_mainSurface->getPixels())[index2 + 15] = newBuf[15];
index2 += 304; index2 += 320;
newBuf = &newBuf[16]; newBuf = &newBuf[16];
} }
_system->copyRectToScreen((byte *)_mainSurface->getPixels(), 320, 0, 0, 320, 200); _system->copyRectToScreen((byte *)_mainSurface->getPixels(), 320, 0, 0, 320, 200);
@ -236,6 +237,24 @@ void LilliputEngine::displayFunction1a(byte *buf, int var2, int var4) {
displayFunction1(buf, 0, var2, var4); displayFunction1(buf, 0, var2, var4);
} }
void LilliputEngine::displayFunction4() {
debugC(2, kDebugEngine, "displayFunction4()");
if ((_skipDisplayFlag1 != 1) && (_skipDisplayFlag2 != 1)) {
_skipDisplayFlag2 = 1;
_word15BC8 = _mouseDisplayX;
_word15BCA = _mouseDisplayY;
warning("Display function 2");
displayFunction1(_bufferIdeogram, _word15AC2 + 80, _mouseDisplayX, _mouseDisplayY);
_skipDisplayFlag1 = 1;
_skipDisplayFlag2 = 0;
}
}
void LilliputEngine::displayFunction5() { void LilliputEngine::displayFunction5() {
debugC(2, kDebugEngine, "displayFunction5()"); debugC(2, kDebugEngine, "displayFunction5()");
@ -276,10 +295,10 @@ void LilliputEngine::pollEvent() {
_oldMouseX = _mouseX; _oldMouseX = _mouseX;
_oldMouseY = _mouseY; _oldMouseY = _mouseY;
if (_skipDisplayFlag1 != 0) { if (_skipDisplayFlag1 != 0) {
warning("Display function 5"); displayFunction5();
_mouseDisplayX = _mouseX; _mouseDisplayX = _mouseX;
_mouseDisplayY = _mouseY; _mouseDisplayY = _mouseY;
warning("Display function 4"); displayFunction4();
} else { } else {
_mouseDisplayX = _mouseX; _mouseDisplayX = _mouseX;
_mouseDisplayY = _mouseY; _mouseDisplayY = _mouseY;
@ -523,14 +542,15 @@ void LilliputEngine::loadRules() {
void LilliputEngine::displayVGAFile(Common::String fileName) { void LilliputEngine::displayVGAFile(Common::String fileName) {
debugC(1, kDebugEngine, "displayVGAFile(%s)", fileName.c_str()); debugC(1, kDebugEngine, "displayVGAFile(%s)", fileName.c_str());
warning("TODO: display function #4");
displayFunction4();
byte *buffer = loadVGA(fileName, true); byte *buffer = loadVGA(fileName, true);
memcpy(_mainSurface->getPixels(), buffer, 320*200); memcpy(_mainSurface->getPixels(), buffer, 320*200);
_system->copyRectToScreen((byte *)_mainSurface->getPixels(), 320, 0, 0, 320, 200); _system->copyRectToScreen((byte *)_mainSurface->getPixels(), 320, 0, 0, 320, 200);
_system->updateScreen(); _system->updateScreen();
warning("TODO: display function #5"); displayFunction5();
} }
void LilliputEngine::fixPaletteEntries(uint8 *palette, int num) { void LilliputEngine::fixPaletteEntries(uint8 *palette, int num) {

View file

@ -111,6 +111,7 @@ public:
int _word1817B; int _word1817B;
int _word15BC8; int _word15BC8;
int _word15BCA; int _word15BCA;
int _word15AC2;
int _array11D49[40]; int _array11D49[40];
@ -167,6 +168,7 @@ public:
void displayFunction1(byte *buf, int var1, int var2, int var4); void displayFunction1(byte *buf, int var1, int var2, int var4);
void displayFunction1a(byte *buf, int var2, int var4); void displayFunction1a(byte *buf, int var2, int var4);
void displayFunction4();
void displayFunction5(); void displayFunction5();
void initGame(const LilliputGameDescription *gd); void initGame(const LilliputGameDescription *gd);

View file

@ -600,7 +600,7 @@ void LilliputScript::sub185ED(byte index, byte subIndex) {
if (_vm->_arr18560[index]._field0 != 1) if (_vm->_arr18560[index]._field0 != 1)
return; return;
warning("TODO: display function #1"); _vm->displayFunction1(_vm->_bufferIdeogram, _vm->_arr18560[index]._field5[0], _vm->_arr18560[index]._field1, _vm->_arr18560[index]._field3);
} }
byte LilliputScript::compareValues(byte var1, int oper, int var2) { byte LilliputScript::compareValues(byte var1, int oper, int var2) {
@ -1724,9 +1724,9 @@ void LilliputScript::OC_sub1847F() {
int var3 = _currScript->readUint16LE(); int var3 = _currScript->readUint16LE();
if (_byte16F08 != 1) { if (_byte16F08 != 1) {
warning("TODO: OC_sub1847F - Display Function 5"); _vm->displayFunction5();
warning("TODO: OC_sub1847F - sub_18BE6"); warning("TODO: OC_sub1847F - sub_18BE6");
warning("TODO: OC_sub1847F - Display Function 4"); _vm->displayFunction4();
} }
} }