diff options
author | sylvaintv | 2012-04-24 00:31:34 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-03-28 17:36:57 +0200 |
commit | b348db605b07cd829ab275d921a5b3ce8d0ecf4c (patch) | |
tree | 5f4d430576219fd78e10cad75f86d55f26ce326d | |
parent | 1864f1e5189aa039a2f3c7e3aa7e9dc86927f5be (diff) | |
download | scummvm-rg350-b348db605b07cd829ab275d921a5b3ce8d0ecf4c.tar.gz scummvm-rg350-b348db605b07cd829ab275d921a5b3ce8d0ecf4c.tar.bz2 scummvm-rg350-b348db605b07cd829ab275d921a5b3ce8d0ecf4c.zip |
LILLIPUT: Implements character display on map
Draw and restore points
-rw-r--r-- | engines/lilliput/lilliput.cpp | 67 | ||||
-rw-r--r-- | engines/lilliput/lilliput.h | 4 | ||||
-rw-r--r-- | engines/lilliput/script.cpp | 10 | ||||
-rw-r--r-- | engines/lilliput/script.h | 6 |
4 files changed, 61 insertions, 26 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index 35261f35d8..e808f48ffc 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -436,7 +436,7 @@ void LilliputEngine::displayFunction7() { void LilliputEngine::displayFunction8() { debugC(2, kDebugEngine, "displayFunction8()"); - if (_scriptHandler->_byte16F08 == 1) + if (_scriptHandler->displayMap == 1) return; displayFunction5(); @@ -538,7 +538,7 @@ void LilliputEngine::displayFunction13(byte *buf, int var1, int var2, int var3) void LilliputEngine::displayFunction14() { debugC(2, kDebugEngine, "displayFunction14()"); - if (_scriptHandler->_byte16F08 == 1) + if (_scriptHandler->displayMap == 1) return; if (_mouseDisplayX > 48) @@ -557,6 +557,37 @@ void LilliputEngine::displayFunction14() { displayFunction4(); }; +void LilliputEngine::restoreMapPoints() { + displayFunction5(); + + byte* buf = (byte*)_mainSurface->getPixels(); + for (int index = 0; index < _word10807_ERULES; index++) { + buf[_word15E5D[index]] = _byte15E35[index]; + } + + displayFunction4(); +} + +void LilliputEngine::displayCharactersOnMap() { + sub16217(); + displayFunction5(); + + byte* buf = (byte*)_mainSurface->getPixels(); + for( int index = _word10807_ERULES - 1; index >=0; index--) { + if(_rulesBuffer2_11[index] & 2 == 0 && + _scriptHandler->_array1614B[index] != -1) { + int y = 3 * _scriptHandler->_array1614B[index] + 1; + int x = _scriptHandler->_array16123[index] * 4 + 1; + + _word15E5D[index] = y * 320 + x; + _byte15E35[index] = buf[y * 320 + x]; + buf[y * 320 + x] = _scriptHandler->_array128EF[index]; + + } + } + displayFunction4(); +} + void LilliputEngine::sub16217() { debugC(2, kDebugEngine, "sub16217()"); @@ -669,15 +700,15 @@ void LilliputEngine::displayFunction15() { void LilliputEngine::displayFunction16() { debugC(2, kDebugEngine, "displayFunction16()"); - if (_scriptHandler->_byte16F08 == 1) { + if (_scriptHandler->displayMap == 1) { warning("sub_15F31"); - warning("sub_15F0C"); + restoreMapPoints(); sub16626(); sub12F37(); sub16CA0(); sub16EBC(); sub171CF(); - warning("sub_15EAE"); + displayCharactersOnMap(); } else { sub1638C(); sub189DE(); @@ -701,7 +732,7 @@ int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) int dx = x2 - x1; int dy = y2 - y1; - int word16DCB = 0; + int word16DCB = 0; int word16DCD = 0; int word16DD1 = 0; int word16DCF = 0; @@ -740,7 +771,7 @@ int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) word16DCB += word16DCD; int var1 = byte16DD4; - int count = 0; + int count = 0; while ( *isoMap == 0xFF ) { if (var1 > 0) { @@ -750,7 +781,7 @@ int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) isoMap += word16DCF; var1 += byte16DD4; } - + count++; if (count == dy) { return 0; @@ -771,20 +802,20 @@ void LilliputEngine::sub16CA0() { for(int index2 = _word10807_ERULES - 1; index2 >= 0; index2--) { _byte16C9F = 0; - if ((index != index2 ) && + if ((index != index2 ) && (_rulesBuffer2_5[index] != index2) && (_rulesBuffer2_5[index2] != index) && (_rulesBuffer2_11[index2] & 2) == 0) { int d1 = _scriptHandler->_array16123[index2]; int d2 = _scriptHandler->_array1614B[index2]; - + if (d1 != 0xFF) { int x = c1 - d1; if ((x > -6) && (x < 6)) { int y = c2 - d2; if ((y > -6) && (y < 6)) { _byte16C9F = 1; - + if ((c1 == d1) && (c2 == d2)) { _byte16C9F = 4; } else if((_rulesBuffer2_11[index] & 4) != 0) { @@ -798,7 +829,7 @@ void LilliputEngine::sub16CA0() { _byte16C9F = 3; if (sub16DD5(c1, d1, c2, d2) != 0) - _byte16C9F = 1; + _byte16C9F = 1; } } else if (_rulesBuffer2_9[index] == 1) { if (d2 < c2) { @@ -808,7 +839,7 @@ void LilliputEngine::sub16CA0() { _byte16C9F = 3; if (sub16DD5(c1, d1, c2, d2) != 0) - _byte16C9F = 1; + _byte16C9F = 1; } } else if (_rulesBuffer2_9[index] == 2) { if (d2 > c2) { @@ -818,7 +849,7 @@ void LilliputEngine::sub16CA0() { _byte16C9F = 3; if (sub16DD5(c1, d1, c2, d2) != 0) - _byte16C9F = 1; + _byte16C9F = 1; } } else { if (d1 < c1) { @@ -828,7 +859,7 @@ void LilliputEngine::sub16CA0() { _byte16C9F = 3; if (sub16DD5(c1, d1, c2, d2) != 0) - _byte16C9F = 1; + _byte16C9F = 1; } } } @@ -843,7 +874,7 @@ void LilliputEngine::sub16CA0() { _scriptHandler->_array10B29[index] = 1; val = (val & 0xFF00) | _byte16C9F; } - _scriptHandler->_array10B51[index2 + index * 40] = val; + _scriptHandler->_array10B51[index2 + index * 40] = val; } @@ -1237,7 +1268,7 @@ void LilliputEngine::sub16626() { } int LilliputEngine::sub166DD(int index, int var1) { - + _rulesBuffer2_9[index] = (var1 >> 8) & 3; sub16685(index, var1 & 0xFF); return 0; @@ -1305,7 +1336,7 @@ void LilliputEngine::sub130EE() { if ((posX < 0) || (posX > 255)) return; - + if ((posY < 0) || (posY > 176)) return; diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index 6ddfb07481..948e05145a 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -132,6 +132,8 @@ public: int _word16550; int _displayStringIndex; int _word1289D; + short _word15E5D[40]; + byte _byte15E35[40]; int _array11D49[40]; int _array1289F[40]; @@ -245,6 +247,8 @@ public: void sub171CF(); void sub12FE5(); int sub16DD5(int x1, int y1, int x2, int y2); + void displayCharactersOnMap(); + void restoreMapPoints(); void displayHeroismIndicator(); void sub130EE(); void sub1305C(byte index, byte var2); diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 59180a042b..4de70635d5 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -30,7 +30,7 @@ namespace Lilliput { LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) { _byte129A0 = 0xFF; - _byte16F08 = 0; + displayMap = 0; _byte1855D = 0; _byte12A04 = 0; _byte10806 = 0; @@ -764,7 +764,7 @@ void LilliputScript::sub16C5C(int index, byte var3) { int LilliputScript::sub17D40(int var) { debugC(1, kDebugScript, "sub17D40(%d)", var); - if ((_byte16F08 != 1) && (_array16173[_vm->_rulesBuffer2PrevIndx] != 0xFF)) + if ((displayMap != 1) && (_array16173[_vm->_rulesBuffer2PrevIndx] != 0xFF)) return var; warning("sub17D40() - FIXME: Unexpected POP"); @@ -1340,7 +1340,7 @@ void LilliputScript::OC_sub17D57() { int curWord = _currScript->readUint16LE(); - if((_byte16F08 == 1) || (_array16173[_vm->_rulesBuffer2PrevIndx] == 0xFF)) + if((displayMap == 1) || (_array16173[_vm->_rulesBuffer2PrevIndx] == 0xFF)) return; _word1881B = _vm->_rulesBuffer2PrevIndx; @@ -1766,7 +1766,7 @@ void LilliputScript::OC_sub1847F() { int var2 = _currScript->readUint16LE(); int var4 = _currScript->readUint16LE(); - if (_byte16F08 != 1) { + if (displayMap != 1) { _vm->displayFunction5(); sub18BE6(var1 & 0xFF, var2, var4); _vm->displayFunction4(); @@ -1839,7 +1839,7 @@ void LilliputScript::OC_sub1853B() { debugC(1, kDebugScript, "OC_sub1853B()"); OC_PaletteFadeOut(); - _byte16F08 = 0; + displayMap = 0; _byte15FFA = 0; sub130B6(); diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 63a9aab805..e29c676ef1 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -32,7 +32,7 @@ namespace Lilliput { class LilliputEngine; class LilliputScript { public: - byte _byte16F08; + byte displayMap; byte _byte12A04; byte _byte15FFA; @@ -56,6 +56,8 @@ public: int _word15FFD; short _array12311[640]; + byte _array128EF[40]; + byte _array12839[40]; void sub130B6(); @@ -78,8 +80,6 @@ private: byte _byte12FE4; byte _byte16F02; - byte _array128EF[40]; - byte _array12839[40]; int _word16F00; int _word10804; |