diff options
-rw-r--r-- | engines/lilliput/lilliput.cpp | 106 | ||||
-rw-r--r-- | engines/lilliput/lilliput.h | 7 | ||||
-rw-r--r-- | engines/lilliput/script.cpp | 40 | ||||
-rw-r--r-- | engines/lilliput/script.h | 4 |
4 files changed, 117 insertions, 40 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index 50b19c299a..834eeb787a 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -125,6 +125,7 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd) _savedMousePosDivided = 0xFFFF; _skipDisplayFlag1 = 1; _skipDisplayFlag2 = 0; + _displayMap = 0; _scriptHandler = new LilliputScript(this); _soundHandler = new LilliputSound(this); @@ -450,7 +451,7 @@ void LilliputEngine::displayFunction7() { void LilliputEngine::displayFunction8() { debugC(2, kDebugEngine, "displayFunction8()"); - if (_scriptHandler->displayMap == 1) + if (_displayMap == 1) return; displayFunction5(); @@ -617,7 +618,7 @@ void LilliputEngine::displayFunction13(byte *buf, int var1, int var2, int var3) void LilliputEngine::displayFunction14() { debugC(2, kDebugEngine, "displayFunction14()"); - if (_scriptHandler->displayMap == 1) + if (_displayMap == 1) return; if (_mouseDisplayX > 48) @@ -778,8 +779,12 @@ void LilliputEngine::displayFunction15() { void LilliputEngine::displayFunction16() { debugC(2, kDebugEngine, "displayFunction16()"); - if (_scriptHandler->displayMap == 1) { - warning("sub_15F31"); + if (_displayMap == 1) { + bool forceReturnFl = false; + sub15F31(forceReturnFl); + if (forceReturnFl) + return; + restoreMapPoints(); sub16626(); sub12F37(); @@ -803,8 +808,46 @@ void LilliputEngine::displayFunction16() { } } -int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) -{ +void LilliputEngine::sub1863B() { + _arr18560[0]._field0 = 0; + _arr18560[1]._field0 = 0; + _arr18560[2]._field0 = 0; + _arr18560[3]._field0 = 0; + _scriptHandler->_word1855E = 0; +} + +void LilliputEngine::paletteFadeOut() { + debugC(2, kDebugEngine, "paletteFadeOut()"); + + sub1863B(); + byte palette[768]; + for (int fade = 256; fade >= 0; fade -= 8) { + for (int i = 0; i < 768; i++) { + palette[i] = (_curPalette[i] * fade) >> 8; + } + _system->getPaletteManager()->setPalette(palette, 0, 256); + _system->updateScreen(); + _system->delayMillis(20); + } +} + +void LilliputEngine::paletteFadeIn() { + debugC(2, kDebugEngine, "paletteFadeIn()"); + + byte palette[768]; + for (int fade = 8; fade <= 256; fade += 8) { + for (int i = 0; i < 768; i++) { + palette[i] = (_curPalette[i] * fade) >> 8; + } + _system->getPaletteManager()->setPalette(palette, 0, 256); + _system->updateScreen(); + _system->delayMillis(20); + } +} + +int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) { + debugC(2, kDebugEngine, "sub16DD5(%d, %d, %d, %d)", x1, y1, x2, y2); + byte *isoMap = _bufferIsoMap + (x1 << 8) + (y1 << 2) + 1; int dx = x2 - x1; @@ -868,6 +911,57 @@ int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) return 1; } +void LilliputEngine::sub15F75() { + debugC(2, kDebugEngine, "sub15F75()"); + + _byte129A0 = 0xFF; + _savedMousePosDivided = 0xFFFF; + byte newX = _mouseX >> 2; + byte newY = _mouseY / 3; + + if ((newX >= 64) || (newY >= 64)) + return; + + _savedMousePosDivided = (newX << 8) + newY; + _byte16F07_menuId = 5; +} + +void LilliputEngine::sub130B6() { + debugC(2, kDebugEngine, "sub130B6()"); + + for (int index = 0; index < _word12F68_ERULES; index++) { + if (_scriptHandler->_array122E9[index] == 3) + _scriptHandler->_array122E9[index] = 2; + } +} + +void LilliputEngine::sub15F31(bool &forceReturnFl) { + debugC(2, kDebugEngine, "sub15F31()"); + + forceReturnFl = false; + if (_displayMap != 1) + return; + + pollEvent(); + warning("sub15F31- TODO: Check keyboard"); + + if ((_mouseButton & 1) == 0) + return; + + _mouseButton = 0; + sub15F75(); + + _displayMap = 0; + paletteFadeOut(); + _word15AC2 = 0; + sub130B6(); + displayFunction12(); + _scriptHandler->_heroismLevel = 0; + sub16217(); + paletteFadeIn(); + forceReturnFl = true; +} + void LilliputEngine::sub16CA0() { debugC(2, kDebugEngine, "sub16CA0()"); diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index 756cc11604..e9b46953d0 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -123,6 +123,7 @@ public: bool _saveFlag; bool _int8installed; + byte _displayMap; int _word10800_ERULES; int _numCharacters; @@ -232,6 +233,11 @@ public: void displayFunction18(int index, int x, int y, int flags); void displayString(byte *buf, int var2, int var4); void displayChar(int index, int var1); + void sub130B6(); + void sub15F75(); + void sub1863B(); + void paletteFadeOut(); + void paletteFadeIn(); void sortCharacters(); void scrollToViewportCharacterTarget(); @@ -265,6 +271,7 @@ public: void sub1546F(byte displayX, byte displayY); void sub15498(byte x, byte y, int var2); void sub15A4C(int &vgaIndex, byte *srcBuf, int &bufIndex); + void sub15F31(bool &forceReturnFl); void initGame(const LilliputGameDescription *gd); byte *loadVGA(Common::String filename, bool loadPal); diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 9bcc8adf67..6b576930da 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -30,7 +30,6 @@ namespace Lilliput { LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) { _byte129A0 = 0xFF; - displayMap = 0; _byte1855D = 0; _byte12A04 = 0; _byte10806 = 0; @@ -764,14 +763,6 @@ void LilliputScript::runMenuScript(ScriptStream script) { _vm->update(); } -void LilliputScript::sub1863B() { - _vm->_arr18560[0]._field0 = 0; - _vm->_arr18560[1]._field0 = 0; - _vm->_arr18560[2]._field0 = 0; - _vm->_arr18560[3]._field0 = 0; - _word1855E = 0; -} - void LilliputScript::sub185ED(byte index, byte subIndex) { debugC(2, kDebugScript, "sub185ED"); if (_vm->_arr18560[index]._field0 != 1) @@ -929,7 +920,7 @@ void LilliputScript::sub17D40(bool &forceReturnFl) { debugC(1, kDebugScript, "sub17D40()"); forceReturnFl = false; - if ((displayMap != 1) && (_vm->_characterRelativePositionX[_vm->_rulesBuffer2PrevIndx] != 0xFF)) + if ((_vm->_displayMap != 1) && (_vm->_characterRelativePositionX[_vm->_rulesBuffer2PrevIndx] != 0xFF)) return; forceReturnFl = true; @@ -2472,30 +2463,17 @@ void LilliputScript::OC_sub182EC() { void LilliputScript::OC_PaletteFadeOut() { debugC(1, kDebugScript, "OC_PaletteFadeOut()"); - sub1863B(); - byte palette[768]; - for (int fade = 256; fade >= 0; fade -= 8) { - for (int i = 0; i < 768; i++) { - palette[i] = (_vm->_curPalette[i] * fade) >> 8; - } - _vm->_system->getPaletteManager()->setPalette(palette, 0, 256); - _vm->_system->updateScreen(); - _vm->_system->delayMillis(20); - } + _byte12A09 = 1; + _vm->paletteFadeOut(); + _byte12A09 = 0; } void LilliputScript::OC_PaletteFadeIn() { debugC(1, kDebugScript, "OC_PaletteFadeIn()"); - byte palette[768]; - for (int fade = 8; fade <= 256; fade += 8) { - for (int i = 0; i < 768; i++) { - palette[i] = (_vm->_curPalette[i] * fade) >> 8; - } - _vm->_system->getPaletteManager()->setPalette(palette, 0, 256); - _vm->_system->updateScreen(); - _vm->_system->delayMillis(20); - } + _byte12A09 = 1; + _vm->paletteFadeIn(); + _byte12A09 = 0; } void LilliputScript::OC_loadAndDisplayCUBESx_GFX() { @@ -2594,7 +2572,7 @@ void LilliputScript::OC_sub1847F() { int var2 = _currScript->readUint16LE(); int var4 = _currScript->readUint16LE(); - if (displayMap != 1) { + if (_vm->_displayMap != 1) { _vm->displayFunction5(); sub18BE6(var1 & 0xFF, var2, var4); _vm->displayFunction4(); @@ -2667,7 +2645,7 @@ void LilliputScript::OC_sub1853B() { debugC(1, kDebugScript, "OC_sub1853B()"); OC_PaletteFadeOut(); - displayMap = 0; + _vm->_displayMap = 0; _heroismLevel = 0; sub130B6(); diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 8356f92b1d..9cd0899be2 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -35,7 +35,6 @@ class LilliputEngine; class LilliputScript { public: - byte displayMap; byte _byte12A04; byte _heroismLevel; @@ -57,6 +56,7 @@ public: int _word1881B; int _heroismBarX; int _heroismBarBottomY; + int _word1855E; short _array12311[640]; byte _array128EF[40]; @@ -92,14 +92,12 @@ private: int _word16F00; int _word10804; - int _word1855E; int _word18776; int handleOpcode(ScriptStream *script); byte handleOpcodeType1(int curWord); void handleOpcodeType2(int curWord); - void sub1863B(); void sub185ED(byte index, byte subIndex); void sub185B4_display(); void sub1823E(byte var1, byte var2, byte *curBufPtr); |