diff options
author | Strangerke | 2012-06-15 23:34:17 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-03-28 17:36:57 +0200 |
commit | 686b59e53e6f2c39647e2967b7398d5d41ad6e41 (patch) | |
tree | b774d48e0942f8552f4e8c2070df6fd3f399342f | |
parent | fe906b9dad83896ba856412c5e6a0d6242aaed57 (diff) | |
download | scummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.tar.gz scummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.tar.bz2 scummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.zip |
LILLIPUT: Implement OC_sub18260
-rw-r--r-- | engines/lilliput/script.cpp | 32 | ||||
-rw-r--r-- | engines/lilliput/script.h | 1 |
2 files changed, 32 insertions, 1 deletions
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 5020f3cc82..2b54e205af 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -49,6 +49,7 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) _array129A5[2] = 2; _array129A5[3] = 3; _savedBuffer215Ptr = NULL; + _word1825E = Common::Point(0, 0); for (int i = 0; i < 20; i++) { _interfaceHotspotStatus[i] = kHotspotOff; @@ -2940,7 +2941,36 @@ void LilliputScript::OC_sub18252() { } void LilliputScript::OC_sub18260() { - warning("OC_sub18260()"); + debugC(1, kDebugScriptTBC, "OC_sub18260()"); + + int index = getValue1(); + Common::Point var4 = getPosFromScript(); + + Common::Point pt = var4 + _viewportPos; + byte *isoMapBuf = getMapPtr(pt); + + if (isoMapBuf[1] != 0xFF) { + int byte1825D = 255; + for (int var2 = 7; var2 >= 0; var2--) { + for (int var3 = 7; var3 >= 0; var3--) { + Common::Point(_viewportPos.x + var2, _viewportPos.y + var3); + isoMapBuf = getMapPtr(pt); + + if (isoMapBuf[1] == 0xFF) { + int x = abs(var2 - var4.x); + int y = abs(var3 - var4.y); + if (x + y < byte1825D) { + byte1825D = x + y; + _word1825E = Common::Point(var2, var3); + } + } + } + } + var4 = _word1825E; + } + + _vm->_characterPositionX[index] = (var4.x + _viewportPos.x) * 8; + _vm->_characterPositionY[index] = (var4.y + _viewportPos.y) * 8; } void LilliputScript::OC_CharacterVariableAddOrRemoveFlag() { diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index bc7fb15d70..96bd837d87 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -109,6 +109,7 @@ private: int _currentSpeechId; int _word18821; int _word129A3; + Common::Point _word1825E; char _array129A5[4]; |