diff options
-rw-r--r-- | engines/kyra/kyra3.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/kyra3.h | 2 | ||||
-rw-r--r-- | engines/kyra/screen.cpp | 14 | ||||
-rw-r--r-- | engines/kyra/screen.h | 7 |
4 files changed, 22 insertions, 9 deletions
diff --git a/engines/kyra/kyra3.cpp b/engines/kyra/kyra3.cpp index 0738c1dc94..234ae9f74d 100644 --- a/engines/kyra/kyra3.cpp +++ b/engines/kyra/kyra3.cpp @@ -456,13 +456,13 @@ void KyraEngine_v3::updateTableBuffer(uint8 *buf) { _tableBuffer2 = _tableBuffer1 = buf; } -int KyraEngine_v3::addShapeToTable(uint8 *buf, int id, int shapeNum) { +int KyraEngine_v3::addShapeToTable(const uint8 *buf, int id, int shapeNum) { debugC(9, kDebugLevelMain, "KyraEngine::addShapeToTable(%p, %d, %d)", (void*)buf, id, shapeNum); if (!buf) return 0; - uint8 *shapePtr = _screen->getPtrToShape(buf, shapeNum); + const uint8 *shapePtr = _screen->getPtrToShape(buf, shapeNum); if (!shapePtr) return 0; @@ -636,13 +636,13 @@ void KyraEngine_v3::initItems() { _screen->loadBitmap("ITEMS.CSH", 3, 3, 0); for (int i = 248; i <= 319; ++i) { - addShapeToTable(_screen->getPagePtr(3), i, i-248); + addShapeToTable(_screen->getCPagePtr(3), i, i-248); } _screen->loadBitmap("ITEMS2.CSH", 3, 3, 0); for (int i = 320; i <= 397; ++i) { - addShapeToTable(_screen->getPagePtr(3), i, i-320); + addShapeToTable(_screen->getCPagePtr(3), i, i-320); } uint32 size = 0; diff --git a/engines/kyra/kyra3.h b/engines/kyra/kyra3.h index 6663e0dccd..06a772b726 100644 --- a/engines/kyra/kyra3.h +++ b/engines/kyra/kyra3.h @@ -129,7 +129,7 @@ private: uint8 *allocTableSpace(uint8 *buf, int size, int id); uint8 *findIdInTable(uint8 *buf, int id); - int addShapeToTable(uint8 *buf, int id, int shapeNum); + int addShapeToTable(const uint8 *buf, int id, int shapeNum); uint8 *findShapeInTable(int id); // resource specific diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index 5d74e0e97b..3491be528c 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -2242,6 +2242,18 @@ void Screen::loadBitmap(const char *filename, int tempPage, int dstPage, uint8 * // kyra3 specific +const uint8 *Screen::getPtrToShape(const uint8 *shpFile, int shape) { + debugC(9, kDebugLevelScreen, "KyraEngine::getPtrToShape(%p, %d)", (void *)shpFile, shape); + uint16 shapes = READ_LE_UINT16(shpFile); + + if (shapes <= shape) + return 0; + + uint32 offset = READ_LE_UINT32(shpFile + (shape << 2) + 2); + + return shpFile + offset + 2; +} + uint8 *Screen::getPtrToShape(uint8 *shpFile, int shape) { debugC(9, kDebugLevelScreen, "KyraEngine::getPtrToShape(%p, %d)", (void *)shpFile, shape); uint16 shapes = READ_LE_UINT16(shpFile); @@ -2254,7 +2266,7 @@ uint8 *Screen::getPtrToShape(uint8 *shpFile, int shape) { return shpFile + offset + 2; } -uint16 Screen::getShapeSize(uint8 *shp) { +uint16 Screen::getShapeSize(const uint8 *shp) { debugC(9, kDebugLevelScreen, "KyraEngine::getShapeSize(%p)", (void *)shp); return READ_LE_UINT16(shp+6); diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h index 48deaf8400..f678c3f1f9 100644 --- a/engines/kyra/screen.h +++ b/engines/kyra/screen.h @@ -192,12 +192,13 @@ public: static const int _screenDimTableCountK3; uint8 *getPtrToShape(uint8 *shpFile, int shape); + const uint8 *getPtrToShape(const uint8 *shpFile, int shape); - uint16 getShapeSize(uint8 *shp); + uint16 getShapeSize(const uint8 *shp); - // only needed for Kyra3! - uint8 *getPagePtr(int pageNum); private: + uint8 *getPagePtr(int pageNum); + int16 encodeShapeAndCalculateSize(uint8 *from, uint8 *to, int size); void restoreMouseRect(); void copyMouseToScreen(); |