From c1c9510ae8521691f19d5c187d9580e7d9803672 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 15 May 2003 17:57:52 +0000 Subject: fixed the evil, evil COMI crash on Mac OS X (and memory corrupter elsewhere, maybe?). The last part of this change is the crucial one, computing the correct value for right_strip svn-id: r7527 --- scumm/object.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scumm/object.cpp b/scumm/object.cpp index b9bb01ab0b..1034427b48 100644 --- a/scumm/object.cpp +++ b/scumm/object.cpp @@ -1328,27 +1328,29 @@ void Scumm::nukeFlObjects(int min, int max) { } void Scumm::enqueueObject(int objectNumber, int objectX, int objectY, int objectWidth, - int objectHeight, int scaleX, int scaleY, int image, int mode) { + int objectHeight, int scaleX, int scaleY, int image, int mode) { BlastObject *eo; ObjectData *od; - if (_blastObjectQueuePos == sizeof(_blastObjectQueue) / sizeof(_blastObjectQueue[0])) { + if (_blastObjectQueuePos >= (int)ARRAYSIZE(_blastObjectQueue)) { warning("enqueueObject: overflow"); return; } + + int idx = getObjectIndex(objectNumber); eo = &_blastObjectQueue[_blastObjectQueuePos++]; eo->number = objectNumber; eo->posX = objectX + (camera._cur.x & 7); eo->posY = objectY + (camera._cur.y - (_screenHeight / 2)); if (objectWidth == 0) { - od = &_objs[getObjectIndex(objectNumber)]; + od = &_objs[idx]; eo->width = od->width; } else { eo->width = objectWidth; } if (objectHeight == 0) { - od = &_objs[getObjectIndex(objectNumber)]; + od = &_objs[idx]; eo->height = od->height; } else { eo->height = objectHeight; @@ -1662,7 +1664,7 @@ void Scumm::removeBlastObject(BlastObject *eo) { right = vs->width; left_strip = left >> 3; - right_strip = (right >> 3) + 1; + right_strip = (right - 1) >> 3; if (left_strip < 0) left_strip = 0; -- cgit v1.2.3