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

View file

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

View file

@ -600,7 +600,7 @@ void LilliputScript::sub185ED(byte index, byte subIndex) {
if (_vm->_arr18560[index]._field0 != 1)
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) {
@ -1724,9 +1724,9 @@ void LilliputScript::OC_sub1847F() {
int var3 = _currScript->readUint16LE();
if (_byte16F08 != 1) {
warning("TODO: OC_sub1847F - Display Function 5");
_vm->displayFunction5();
warning("TODO: OC_sub1847F - sub_18BE6");
warning("TODO: OC_sub1847F - Display Function 4");
_vm->displayFunction4();
}
}