diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/lilliput/script.cpp | 55 | ||||
-rw-r--r-- | engines/lilliput/script.h | 2 |
2 files changed, 53 insertions, 4 deletions
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 3716338da4..4c90c34406 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -56,6 +56,9 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) _array122FD[i] = 0; } + for (int i = 0; i < 32; i++) + _array1813B[i] = 0; + for (int i = 0; i < 40; i++) { _array10B29[i] = 1; _array128EF[i] = 15; @@ -1015,7 +1018,7 @@ byte LilliputScript::OC_compareCoords_1() { int var4 = _vm->_rulesBuffer12_2[index]; int var1 = _vm->_word16EFA; - if (((var1 >> 8) < (var3 >> 8)) || ((var1 >> 8) > (var3 & 0xFF)) || ((var1 & 0xFF) < (var3 >> 8)) || ((var1 & 0xFF) > (var3 & 0xFF))) + if (((var1 >> 8) < (var3 >> 8)) || ((var1 >> 8) > (var3 & 0xFF)) || ((var1 & 0xFF) < (var4 >> 8)) || ((var1 & 0xFF) > (var4 & 0xFF))) return 0; return 1; @@ -1087,8 +1090,54 @@ byte LilliputScript::OC_sub175C8() { return 0; } byte LilliputScript::OC_sub17640() { - warning("OC_sub17640"); - return 0; + debugC(1, kDebugScript, "OC_sub176C4()"); + + int var4 = _currScript->readUint16LE(); + int index = _vm->_rulesBuffer2PrevIndx * 40; + int subIndex = 0xFFFF; + + int tmpVal = _currScript->readUint16LE(); + + if (tmpVal >= 2000) { + int var1 = tmpVal; + + if (var1 == 3000) { + subIndex = 0; + for (int i = 0; i < _vm->_word10807_ERULES; i++) { + tmpVal = _array10B51[index + i]; + byte v1 = tmpVal & 0xFF; + byte v2 = tmpVal >> 8; + if ((v1 >= (var4 & 0xFF)) && (v2 < (var4 & 0xFF))) { + _word16F00 = subIndex; + return 1; + } + } + return 0; + } else { + var1 -= 2000; + var4 &= ((var1 & 0xFF) << 8); + for (int i = 0; i < _vm->_word10807_ERULES; i++) { + tmpVal = _array10B51[index + i]; + byte v1 = tmpVal & 0xFF; + byte v2 = tmpVal >> 8; + if ((v1 >= (var4 & 0xFF)) && (v2 < (var4 & 0xFF)) && (_vm->_rulesBuffer2_12[subIndex] != (var4 >> 8))) { + _word16F00 = subIndex; + return 1; + } + } + return 0; + } + } else { + _currScript->seek(_currScript->pos() - 2); + subIndex = getValue1(); + tmpVal = _array10B51[index + subIndex]; + byte v1 = tmpVal & 0xFF; + byte v2 = tmpVal >> 8; + if ((v1 < (var4 & 0xFF)) || (v2 >= (var4 & 0xFF))) + return 0; + _word16F00 = subIndex; + return 1; + } } byte LilliputScript::OC_sub176C4() { diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 23ff23ebe8..d631d4875e 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -57,9 +57,9 @@ public: int _heroismBarBottomY; short _array12311[640]; - short _array1813B[40]; byte _array128EF[40]; byte _array12839[40]; + int _array1813B[32]; void sub130B6(); |