aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-06-15 23:34:17 +0200
committerEugene Sandulenko2018-03-28 17:36:57 +0200
commit686b59e53e6f2c39647e2967b7398d5d41ad6e41 (patch)
treeb774d48e0942f8552f4e8c2070df6fd3f399342f
parentfe906b9dad83896ba856412c5e6a0d6242aaed57 (diff)
downloadscummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.tar.gz
scummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.tar.bz2
scummvm-rg350-686b59e53e6f2c39647e2967b7398d5d41ad6e41.zip
LILLIPUT: Implement OC_sub18260
-rw-r--r--engines/lilliput/script.cpp32
-rw-r--r--engines/lilliput/script.h1
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];