diff options
-rw-r--r-- | engines/lilliput/lilliput.cpp | 17 | ||||
-rw-r--r-- | engines/lilliput/lilliput.h | 4 | ||||
-rw-r--r-- | engines/lilliput/script.cpp | 30 | ||||
-rw-r--r-- | engines/lilliput/script.h | 2 |
4 files changed, 27 insertions, 26 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index a59e8004ec..350490c3f5 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -194,7 +194,7 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd) _characterPositionY[i] = -1; _characterPositionAltitude[i] = 0; _characterFrameArray[i] = 0; - _rulesBuffer2_5[i] = 0xFF; + _rulesBuffer2_5[i] = -1; _rulesBuffer2_6[i] = 4; _rulesBuffer2_7[i] = 0; _spriteSizeArray[i] = 20; @@ -692,10 +692,10 @@ void LilliputEngine::moveCharacters() { Common::Point _pos16213 = Common::Point(_scriptHandler->_viewportPos.x << 3, _scriptHandler->_viewportPos.y << 3); for (int i = index; i >= 0; i--) { - if (_rulesBuffer2_5[i] != 0xFF) { + if (_rulesBuffer2_5[i] != -1) { int index2 = _rulesBuffer2_5[i]; _characterPositionAltitude[i] = _characterPositionAltitude[index2] + _rulesBuffer2_7[i]; - int tmpVal = _rulesBuffer2_6[i]; + int8 tmpVal = _rulesBuffer2_6[i]; _characterDirectionArray[i] = _characterDirectionArray[index2]; int var3 = _characterPositionX[index2]; int var4 = _characterPositionY[index2]; @@ -1688,12 +1688,11 @@ void LilliputEngine::sub16626() { uint16 index2 = _scriptHandler->_array12811[index] + (index * 16); Common::Point var1 = _scriptHandler->_array12311[index2]; - int16 var2 = (var1.x >> 3); - var2 &= 0xFE; + int16 var2 = var1.x / 16; //warning(" step %d : var1 x:%d y:%d var:%d", _scriptHandler->_array12811[index], var1.x, var1.y, var2 / 2); - switch (var2 / 2) { + switch (var2) { case 0: result = sub16675_moveCharacter(index, var1); break; @@ -1729,7 +1728,7 @@ void LilliputEngine::sub16626() { result = sub166EA(index); break; default: - error("sub16626 - unexpected value %d", var2 / 2); + error("sub16626 - unexpected value %d", var2); break; } @@ -2442,8 +2441,8 @@ void LilliputEngine::loadRules() { _characterPositionAltitude[j] = (f.readUint16LE() & 0xFF); _characterFrameArray[j] = f.readUint16LE(); - _rulesBuffer2_5[j] = f.readByte(); - _rulesBuffer2_6[j] = f.readByte(); + _rulesBuffer2_5[j] = (int8)f.readByte(); + _rulesBuffer2_6[j] = (int8)f.readByte(); _rulesBuffer2_7[j] = f.readByte(); _spriteSizeArray[j] = f.readByte(); _characterDirectionArray[j] = f.readByte(); diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index 94b541bebb..5f856b2f31 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -160,8 +160,8 @@ public: int16 _characterPositionY[40]; int8 _characterPositionAltitude[40]; int16 _characterFrameArray[40]; - byte _rulesBuffer2_5[40]; - byte _rulesBuffer2_6[40]; + int8 _rulesBuffer2_5[40]; + int8 _rulesBuffer2_6[40]; byte _rulesBuffer2_7[40]; byte _spriteSizeArray[40]; byte _characterDirectionArray[40]; diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index b931b87cd7..67a974875b 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -1491,7 +1491,7 @@ byte LilliputScript::OC_compByte16F04() { byte LilliputScript::OC_sub174D8() { debugC(1, kDebugScript, "OC_sub174D8()"); - byte tmpVal = getValue1() & 0xFF; + int8 tmpVal = getValue1() & 0xFF; uint16 curWord = _currScript->readUint16LE(); if (curWord == 3000) { @@ -1646,9 +1646,9 @@ byte LilliputScript::OC_sub175C8() { byte LilliputScript::OC_sub17640() { debugC(1, kDebugScript, "OC_sub17640()"); - int var4 = _currScript->readUint16LE(); + uint16 var4 = _currScript->readUint16LE(); int index = _vm->_currentScriptCharacter * 40; - int tmpVal = _currScript->readUint16LE(); + uint16 tmpVal = _currScript->readUint16LE(); if (tmpVal < 2000) { _currScript->seek(_currScript->pos() - 2); @@ -1917,13 +1917,12 @@ byte LilliputScript::OC_CurrentCharacterVar2Equals1() { } byte LilliputScript::OC_sub178D2() { - debugC(1, kDebugScriptTBC, "OC_sub178D2()"); + debugC(1, kDebugScript, "OC_sub178D2()"); int index = getValue1(); assert (index < 40); byte curByte = (_currScript->readUint16LE() & 0xFF); - if (curByte == _vm->_rulesBuffer2_12[index]) return 1; @@ -1959,7 +1958,7 @@ byte LilliputScript::OC_sub1790F() { int index = getValue1(); assert(index < 40); - if (_vm->_rulesBuffer2_5[index] == 0xFF) + if (_vm->_rulesBuffer2_5[index] == -1) return 0; _word16F00 = _vm->_rulesBuffer2_5[index]; @@ -2433,15 +2432,18 @@ void LilliputScript::OC_sub17C0E() { void LilliputScript::OC_sub17C55() { debugC(1, kDebugScriptTBC, "OC_sub17C55()"); - int var1 = getValue1(); - int var2 = getValue1(); + byte var1 = ((uint16)getValue1()) & 0xFF; + int16 index = getValue1(); - int var3 = _currScript->readUint16LE(); - int var4 = _currScript->readUint16LE(); + int8 var3 = (_currScript->readUint16LE() & 0xFF); + byte var4 = (_currScript->readUint16LE() & 0xFF); + + assert((index >= 0) && (index < 40)); + _vm->_rulesBuffer2_5[index] = var1; + _vm->_rulesBuffer2_6[index] = var3; + _vm->_rulesBuffer2_7[index] = var4; - _vm->_rulesBuffer2_5[var2] = var1 & 0xFF; - _vm->_rulesBuffer2_6[var2] = var3 & 0xFF; - _vm->_rulesBuffer2_7[var2] = var4 & 0xFF; + warning("debug - OC_sub17C55 index %d, var1 0x%x var3 0x%x var4 0x%x", index, var1, var3, var4); } void LilliputScript::OC_sub17C76() { @@ -2553,7 +2555,7 @@ void LilliputScript::OC_sub17D23() { void LilliputScript::OC_sub17E6D() { debugC(1, kDebugScriptTBC, "OC_sub17E6D()"); - int var1 = _currScript->readUint16LE(); + uint16 var1 = _currScript->readUint16LE(); _vm->_rulesBuffer2_12[_vm->_currentScriptCharacter] = (var1 - 2000) & 0xFF; } diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 722ae60f99..b5a9916dea 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -106,7 +106,7 @@ private: byte _byte18823; byte _speechDisplaySpeed; - int _word16F00; + int16 _word16F00; int _currentSpeechId; int _word18821; int _word129A3; |