aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-04-16 00:24:02 +0200
committerEugene Sandulenko2018-03-28 17:36:57 +0200
commite21bb143135698735fbb0f18c9a86ad33243f97b (patch)
tree62c1f211dddc309f53a82c52b213d70cb5d2351a
parent31d4f0750560585418441d659fa1828cfa35b6f2 (diff)
downloadscummvm-rg350-e21bb143135698735fbb0f18c9a86ad33243f97b.tar.gz
scummvm-rg350-e21bb143135698735fbb0f18c9a86ad33243f97b.tar.bz2
scummvm-rg350-e21bb143135698735fbb0f18c9a86ad33243f97b.zip
LILLIPUT: Fix bug in previous commit, implement one more display function
-rw-r--r--engines/lilliput/lilliput.cpp32
-rw-r--r--engines/lilliput/lilliput.h2
-rw-r--r--engines/lilliput/script.cpp6
3 files changed, 31 insertions, 9 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp
index 3b48d8a7ab..29d53fe4db 100644
--- a/engines/lilliput/lilliput.cpp
+++ b/engines/lilliput/lilliput.cpp
@@ -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) {
diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h
index ba865429ea..ed049591ad 100644
--- a/engines/lilliput/lilliput.h
+++ b/engines/lilliput/lilliput.h
@@ -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);
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp
index 77a9f7acd7..f979008093 100644
--- a/engines/lilliput/script.cpp
+++ b/engines/lilliput/script.cpp
@@ -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();
}
}