diff options
-rw-r--r-- | engines/sci/engine/kernel.cpp | 1 | ||||
-rw-r--r-- | engines/sci/engine/kernel.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kernel32.cpp | 5 | ||||
-rw-r--r-- | engines/sci/engine/kpathing.cpp | 6 |
4 files changed, 13 insertions, 0 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index ad335c2cb8..43451728f4 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -356,6 +356,7 @@ SciKernelFunction kfunct_mappers[] = { DEFUN("ListAllTrue", kListAllTrue, "li.*"), DEFUN("ListIndexOf", kListIndexOf, "lo"), DEFUN("OnMe", kOnMe, "iio.*"), + DEFUN("InPolygon", kInPolygon, "iio"), // SCI2.1 Kernel Functions DEFUN("Save", kSave, ".*"), diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 2cc7ae8e57..520f7284a9 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -411,6 +411,7 @@ reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv); reg_t kListFirstTrue(EngineState *s, int argc, reg_t *argv); reg_t kListAllTrue(EngineState *s, int argc, reg_t *argv); reg_t kOnMe(EngineState *s, int argc, reg_t *argv); +reg_t kInPolygon(EngineState *s, int argc, reg_t *argv); // SCI2.1 Kernel Functions reg_t kSave(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp index d984bf4117..80f87a5ad2 100644 --- a/engines/sci/engine/kernel32.cpp +++ b/engines/sci/engine/kernel32.cpp @@ -791,6 +791,11 @@ reg_t kOnMe(EngineState *s, int argc, reg_t *argv) { return make_reg(0, nsRect.contains(x, y)); } +reg_t kInPolygon(EngineState *s, int argc, reg_t *argv) { + // kAvoidPath already implements this + return kAvoidPath(s, argc, argv); +} + } // End of namespace Sci #endif // ENABLE_SCI32 diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index 2895f4afb6..b19d6d7b8c 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -1285,6 +1285,12 @@ static Polygon *convert_polygon(EngineState *s, reg_t polygon) { reg_t points = GET_SEL32(segMan, polygon, points); int size = GET_SEL32(segMan, polygon, size).toUint16(); +#ifdef ENABLE_SCI32 + // SCI32 stores the actual points in the data property of points (in a new array) + if (segMan->isHeapObject(points)) + points = GET_SEL32(segMan, points, data); +#endif + if (size == 0) { // If the polygon has no vertices, we skip it return NULL; |