[Scummvm-cvs-logs] scummvm master -> b04a0697820d3dfff1fa09831c1bb362a641c49c
bluegr
md5 at scummvm.org
Fri Oct 14 13:16:08 CEST 2011
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d39cdd8e1c SCI: More work on the vertical plane offset for SCI32. Still WIP.
b04a069782 SCI: More work on kBitmap (still WIP)
Commit: d39cdd8e1cfdcf9992f03f6ef72138dbdc3f6bbb
https://github.com/scummvm/scummvm/commit/d39cdd8e1cfdcf9992f03f6ef72138dbdc3f6bbb
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-10-14T04:07:00-07:00
Commit Message:
SCI: More work on the vertical plane offset for SCI32. Still WIP.
Vertical clipping is still not finished. This fixes the display in the
Torin demo (which uses a scene with loads of items with a vertical
offset).
Changed paths:
engines/sci/graphics/frameout.cpp
engines/sci/graphics/frameout.h
engines/sci/graphics/picture.cpp
engines/sci/graphics/picture.h
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index 9d15c82..9a44f07 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -90,6 +90,7 @@ void GfxFrameout::kernelAddPlane(reg_t object) {
newPlane.priority = readSelectorValue(_segMan, object, SELECTOR(priority));
newPlane.lastPriority = 0xFFFF; // hidden
newPlane.planeOffsetX = 0;
+ newPlane.planeOffsetY = 0;
newPlane.pictureId = 0xFFFF;
newPlane.planePictureMirrored = false;
newPlane.planeBack = 0;
@@ -132,9 +133,14 @@ void GfxFrameout::kernelUpdatePlane(reg_t object) {
} else {
it->planeOffsetX = 0;
}
-
- if (it->planeRect.top < 0)
+
+ if (it->planeRect.top < 0) {
+ it->planeOffsetY = -it->planeRect.top;
it->planeRect.top = 0;
+ } else {
+ it->planeOffsetY = 0;
+ }
+
// We get bad plane-bottom in sq6
if (it->planeRect.right > _screen->getWidth())
it->planeRect.right = _screen->getWidth();
@@ -447,7 +453,14 @@ void GfxFrameout::kernelFrameout() {
continue;
// Out of view vertically (sanity checks)
- // TODO
+ int16 pictureCelStartY = itemEntry->picStartY + itemEntry->y;
+ int16 pictureCelEndY = pictureCelStartY + itemEntry->picture->getSci32celHeight(itemEntry->celNo);
+ int16 planeStartY = it->planeOffsetY;
+ int16 planeEndY = planeStartY + it->planeRect.height();
+ if (pictureCelEndY < planeStartY)
+ continue;
+ if (pictureCelStartY > planeEndY)
+ continue;
int16 pictureOffsetX = it->planeOffsetX;
int16 pictureX = itemEntry->x;
@@ -460,8 +473,18 @@ void GfxFrameout::kernelFrameout() {
}
}
- // TODO: pictureOffsetY
- itemEntry->picture->drawSci32Vga(itemEntry->celNo, pictureX, itemEntry->y, pictureOffsetX, it->planePictureMirrored);
+ int16 pictureOffsetY = it->planeOffsetY;
+ int16 pictureY = itemEntry->y;
+ if ((it->planeOffsetY) || (itemEntry->picStartY)) {
+ if (it->planeOffsetY <= itemEntry->picStartY) {
+ pictureY += itemEntry->picStartY - it->planeOffsetY;
+ pictureOffsetY = 0;
+ } else {
+ pictureOffsetY = it->planeOffsetY - itemEntry->picStartY;
+ }
+ }
+
+ itemEntry->picture->drawSci32Vga(itemEntry->celNo, pictureX, itemEntry->y, pictureOffsetX, pictureOffsetY, it->planePictureMirrored);
// warning("picture cel %d %d", itemEntry->celNo, itemEntry->priority);
} else if (itemEntry->viewId != 0xFFFF) {
@@ -482,6 +505,7 @@ void GfxFrameout::kernelFrameout() {
// Adjust according to current scroll position
itemEntry->x -= it->planeOffsetX;
+ itemEntry->y -= it->planeOffsetY;
uint16 useInsetRect = readSelectorValue(_segMan, itemEntry->object, SELECTOR(useInsetRect));
if (useInsetRect) {
@@ -504,7 +528,7 @@ void GfxFrameout::kernelFrameout() {
Common::Rect nsRect = itemEntry->celRect;
// Translate back to actual coordinate within scrollable plane
- nsRect.translate(it->planeOffsetX, 0);
+ nsRect.translate(it->planeOffsetX, it->planeOffsetY);
if (view->isSci2Hires()) {
view->adjustBackUpscaledCoordinates(nsRect.top, nsRect.left);
diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h
index 3176db2..160c343 100644
--- a/engines/sci/graphics/frameout.h
+++ b/engines/sci/graphics/frameout.h
@@ -32,6 +32,7 @@ struct PlaneEntry {
uint16 priority;
uint16 lastPriority;
int16 planeOffsetX;
+ int16 planeOffsetY;
GuiResourceId pictureId;
Common::Rect planeRect;
Common::Rect planeClipRect;
diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp
index dad2b77..1c85ecd 100644
--- a/engines/sci/graphics/picture.cpp
+++ b/engines/sci/graphics/picture.cpp
@@ -132,7 +132,7 @@ void GfxPicture::drawSci11Vga() {
_palette->createFromData(inbuffer + palette_data_ptr, size - palette_data_ptr, &palette);
_palette->set(&palette, true);
- drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, 0, 0, 0);
+ drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, 0, 0, 0, 0);
}
// process vector data
@@ -148,18 +148,18 @@ int16 GfxPicture::getSci32celCount() {
return inbuffer[2];
}
-int16 GfxPicture::getSci32celY(int16 celNo) {
+int16 GfxPicture::getSci32celX(int16 celNo) {
byte *inbuffer = _resource->data;
int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 40);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 38);
}
-int16 GfxPicture::getSci32celX(int16 celNo) {
+int16 GfxPicture::getSci32celY(int16 celNo) {
byte *inbuffer = _resource->data;
int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 38);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 40);
}
int16 GfxPicture::getSci32celWidth(int16 celNo) {
@@ -169,6 +169,14 @@ int16 GfxPicture::getSci32celWidth(int16 celNo) {
return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 0);
}
+int16 GfxPicture::getSci32celHeight(int16 celNo) {
+ byte *inbuffer = _resource->data;
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
+ int cel_headerPos = header_size + 42 * celNo;
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 2);
+}
+
+
int16 GfxPicture::getSci32celPriority(int16 celNo) {
byte *inbuffer = _resource->data;
int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
@@ -176,7 +184,7 @@ int16 GfxPicture::getSci32celPriority(int16 celNo) {
return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 36);
}
-void GfxPicture::drawSci32Vga(int16 celNo, int16 drawX, int16 drawY, int16 pictureX, bool mirrored) {
+void GfxPicture::drawSci32Vga(int16 celNo, int16 drawX, int16 drawY, int16 pictureX, int16 pictureY, bool mirrored) {
byte *inbuffer = _resource->data;
int size = _resource->size;
int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
@@ -216,14 +224,14 @@ void GfxPicture::drawSci32Vga(int16 celNo, int16 drawX, int16 drawY, int16 pictu
cel_RlePos = READ_SCI11ENDIAN_UINT32(inbuffer + cel_headerPos + 24);
cel_LiteralPos = READ_SCI11ENDIAN_UINT32(inbuffer + cel_headerPos + 28);
- drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, drawX, drawY, pictureX);
+ drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, drawX, drawY, pictureX, pictureY);
cel_headerPos += 42;
}
#endif
extern void unpackCelData(byte *inBuffer, byte *celBitmap, byte clearColor, int pixelCount, int rlePos, int literalPos, ViewType viewType, uint16 width, bool isMacSci11ViewData);
-void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos, int literalPos, int16 drawX, int16 drawY, int16 pictureX) {
+void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos, int literalPos, int16 drawX, int16 drawY, int16 pictureX, int16 pictureY) {
byte *celBitmap = NULL;
byte *ptr = NULL;
byte *headerPtr = inbuffer + headerPos;
@@ -300,10 +308,11 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
Common::Rect displayArea = _coordAdjuster->pictureGetDisplayArea();
+ // Horizontal clipping
uint16 skipCelBitmapPixels = 0;
int16 displayWidth = width;
if (pictureX) {
- // scroll position for picture active, we need to adjust drawX accordingly
+ // horizontal scroll position for picture active, we need to adjust drawX accordingly
drawX -= pictureX;
if (drawX < 0) {
skipCelBitmapPixels = -drawX;
@@ -312,7 +321,21 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
}
}
- if (displayWidth > 0) {
+ // Vertical clipping
+ uint16 skipCelBitmapLines = 0;
+ int16 displayHeight = height;
+ if (pictureY) {
+ // vertical scroll position for picture active, we need to adjust drawY accordingly
+ // TODO: Finish this
+ /*drawY -= pictureY;
+ if (drawY < 0) {
+ skipCelBitmapLines = -drawY;
+ displayHeight -= skipCelBitmapLines;
+ drawY = 0;
+ }*/
+ }
+
+ if (displayWidth > 0 && displayHeight > 0) {
y = displayArea.top + drawY;
lastY = MIN<int16>(height + y, displayArea.bottom);
leftX = displayArea.left + drawX;
@@ -334,6 +357,7 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
ptr = celBitmap;
ptr += skipCelBitmapPixels;
+ ptr += skipCelBitmapLines * width;
if (!_mirroredFlag) {
// Draw bitmap to screen
x = leftX;
@@ -714,7 +738,7 @@ void GfxPicture::drawVectorData(byte *data, int dataSize) {
vectorGetAbsCoordsNoMirror(data, curPos, x, y);
size = READ_LE_UINT16(data + curPos); curPos += 2;
_priority = pic_priority; // set global priority so the cel gets drawn using current priority as well
- drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y, 0);
+ drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y, 0, 0);
curPos += size;
break;
case PIC_OPX_EGA_SET_PRIORITY_TABLE:
@@ -757,7 +781,7 @@ void GfxPicture::drawVectorData(byte *data, int dataSize) {
vectorGetAbsCoordsNoMirror(data, curPos, x, y);
size = READ_LE_UINT16(data + curPos); curPos += 2;
_priority = pic_priority; // set global priority so the cel gets drawn using current priority as well
- drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y, 0);
+ drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y, 0, 0);
curPos += size;
break;
case PIC_OPX_VGA_PRIORITY_TABLE_EQDIST:
diff --git a/engines/sci/graphics/picture.h b/engines/sci/graphics/picture.h
index 78623d5..4f075a6 100644
--- a/engines/sci/graphics/picture.h
+++ b/engines/sci/graphics/picture.h
@@ -56,15 +56,16 @@ public:
int16 getSci32celY(int16 celNo);
int16 getSci32celX(int16 celNo);
int16 getSci32celWidth(int16 celNo);
+ int16 getSci32celHeight(int16 celNo);
int16 getSci32celPriority(int16 celNo);
- void drawSci32Vga(int16 celNo, int16 callerX, int16 callerY, int16 pictureX, bool mirrored);
+ void drawSci32Vga(int16 celNo, int16 callerX, int16 callerY, int16 pictureX, int16 pictureY, bool mirrored);
#endif
private:
void initData(GuiResourceId resourceId);
void reset();
void drawSci11Vga();
- void drawCelData(byte *inbuffer, int size, int headerPos, int rlePos, int literalPos, int16 drawX, int16 drawY, int16 pictureX);
+ void drawCelData(byte *inbuffer, int size, int headerPos, int rlePos, int literalPos, int16 drawX, int16 drawY, int16 pictureX, int16 pictureY);
void drawVectorData(byte *data, int size);
bool vectorIsNonOpcode(byte pixel);
void vectorGetAbsCoords(byte *data, int &curPos, int16 &x, int16 &y);
Commit: b04a0697820d3dfff1fa09831c1bb362a641c49c
https://github.com/scummvm/scummvm/commit/b04a0697820d3dfff1fa09831c1bb362a641c49c
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-10-14T04:07:01-07:00
Commit Message:
SCI: More work on kBitmap (still WIP)
Changed paths:
engines/sci/engine/kgraphics.cpp
engines/sci/graphics/text32.cpp
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 5ea5132..0d5b586 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -49,6 +49,7 @@
#include "sci/graphics/text16.h"
#include "sci/graphics/view.h"
#ifdef ENABLE_SCI32
+#include "sci/graphics/font.h" // TODO: remove once kBitmap is moved in a separate class
#include "sci/graphics/text32.h"
#include "sci/graphics/frameout.h"
#endif
@@ -1637,6 +1638,11 @@ reg_t kFont(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
+// TODO: Eventually, all of the kBitmap operations should be put
+// in a separate class
+
+#define BITMAP_HEADER_SIZE 46
+
reg_t kBitmap(EngineState *s, int argc, reg_t *argv) {
// Used for bitmap operations in SCI2.1 and SCI3.
// This is the SCI2.1 version, the functionality seems to have changed in SCI3.
@@ -1648,17 +1654,23 @@ reg_t kBitmap(EngineState *s, int argc, reg_t *argv) {
// script 64890 and TransView::init() in script 64884
uint16 width = argv[1].toUint16();
uint16 height = argv[2].toUint16();
- //uint16 skip = argv[3].toUint16();
- uint16 back = argv[4].toUint16();
- //uint16 width2 = (argc >= 6) ? argv[5].toUint16() : 0;
- //uint16 height2 = (argc >= 7) ? argv[6].toUint16() : 0;
- //uint16 transparentFlag = (argc >= 8) ? argv[7].toUint16() : 0;
+ uint16 skip = argv[3].toUint16();
+ uint16 back = argv[4].toUint16(); // usually equals skip
+ uint16 width2 = (argc >= 6) ? argv[5].toUint16() : 0;
+ uint16 height2 = (argc >= 7) ? argv[6].toUint16() : 0;
+ uint16 transparentFlag = (argc >= 8) ? argv[7].toUint16() : 0;
// TODO: skip, width2, height2, transparentFlag
- int entrySize = width * height;
- reg_t memoryId = s->_segMan->allocateHunkEntry("TextBitmap()", entrySize);
+ // (used for transparent bitmaps)
+ int entrySize = width * height + BITMAP_HEADER_SIZE;
+ reg_t memoryId = s->_segMan->allocateHunkEntry("Bitmap()", entrySize);
byte *memoryPtr = s->_segMan->getHunkPointer(memoryId);
- memset(memoryPtr, back, entrySize);
+ memset(memoryPtr, 0, BITMAP_HEADER_SIZE); // zero out the bitmap header
+ memset(memoryPtr + BITMAP_HEADER_SIZE, back, width * height);
+ // Save totalWidth, totalHeight
+ // TODO: Save the whole bitmap header, like SSCI does
+ WRITE_LE_UINT16((void *)memoryPtr, width);
+ WRITE_LE_UINT16((void *)(memoryPtr + 2), height);
return memoryId;
}
break;
@@ -1682,40 +1694,77 @@ reg_t kBitmap(EngineState *s, int argc, reg_t *argv) {
uint16 x = argv[5].toUint16();
uint16 y = argv[6].toUint16();
- byte *bitmap = s->_segMan->getHunkPointer(hunkId);
+ byte *memoryPtr = s->_segMan->getHunkPointer(hunkId);
+ // Get totalWidth, totalHeight
+ uint16 totalWidth = READ_LE_UINT16((void *)memoryPtr);
+ uint16 totalHeight = READ_LE_UINT16((void *)(memoryPtr + 2));
+ byte *bitmap = memoryPtr + BITMAP_HEADER_SIZE;
GfxView *view = g_sci->_gfxCache->getView(viewNum);
- uint16 width = view->getWidth(loop, cel);
- uint16 height = view->getHeight(loop, cel);
- const byte *viewBitmap = view->getBitmap(loop, cel);
- uint32 curPixel = 0;
-
- for (uint16 curY = y; curY < y + height; curY++) {
- for (uint16 curX = x; curX < x + width; curX++) {
- bitmap[curY + curX] = viewBitmap[curPixel++];
+ uint16 tileWidth = view->getWidth(loop, cel);
+ uint16 tileHeight = view->getHeight(loop, cel);
+ const byte *tileBitmap = view->getBitmap(loop, cel);
+ uint16 width = MIN<uint16>(totalWidth - x, tileWidth);
+ uint16 height = MIN<uint16>(totalHeight - y, tileHeight);
+
+ for (uint16 curY = 0; curY < height; curY++) {
+ for (uint16 curX = 0; curX < width; curX++) {
+ bitmap[(curY + y) * totalWidth + (curX + x)] = tileBitmap[curY * tileWidth + curX];
}
}
}
break;
- case 4: // process text
+ case 4: // add text to bitmap
{
// 13 params, called e.g. from TextButton::createBitmap() in Torin's Passage,
// script 64894
- reg_t bitmapPtr = argv[1]; // obtained from kBitmap(0)
+ reg_t hunkId = argv[1]; // obtained from kBitmap(0)
Common::String text = s->_segMan->getString(argv[2]);
- // unk3
- // unk4
- // unk5
- // unk6
- // skip?
- // back?
- uint16 font = argv[9].toUint16();
- uint16 mode = argv[10].toUint16();
- // unk
+ uint16 textX = argv[3].toUint16();
+ uint16 textY = argv[4].toUint16();
+ //reg_t unk5 = argv[5];
+ //reg_t unk6 = argv[6];
+ //reg_t unk7 = argv[7]; // skip?
+ //reg_t unk8 = argv[8]; // back?
+ //reg_t unk9 = argv[9];
+ uint16 fontId = argv[10].toUint16();
+ //uint16 mode = argv[11].toUint16();
uint16 dimmed = argv[12].toUint16();
- warning("kBitmap(4): bitmap ptr %04x:%04x, font %d, mode %d, dimmed %d - text: \"%s\"",
- PRINT_REG(bitmapPtr), font, mode, dimmed, text.c_str());
+ //warning("kBitmap(4): bitmap ptr %04x:%04x, font %d, mode %d, dimmed %d - text: \"%s\"",
+ // PRINT_REG(bitmapPtr), font, mode, dimmed, text.c_str());
+ uint16 foreColor = 255; // TODO
+
+ byte *memoryPtr = s->_segMan->getHunkPointer(hunkId);
+ // Get totalWidth, totalHeight
+ uint16 totalWidth = READ_LE_UINT16((void *)memoryPtr);
+ uint16 totalHeight = READ_LE_UINT16((void *)(memoryPtr + 2));
+ byte *bitmap = memoryPtr + BITMAP_HEADER_SIZE;
+
+ GfxFont *font = g_sci->_gfxCache->getFont(fontId);
+
+ int16 charCount = 0;
+ uint16 curX = textX, curY = textY;
+ const char *txt = text.c_str();
+
+ while (*txt) {
+ charCount = g_sci->_gfxText32->GetLongest(txt, totalWidth, font);
+ if (charCount == 0)
+ break;
+
+ for (int i = 0; i < charCount; i++) {
+ unsigned char curChar = txt[i];
+ font->drawToBuffer(curChar, curY, curX, foreColor, dimmed, bitmap, totalWidth, totalHeight);
+ curX += font->getCharWidth(curChar);
+ }
+
+ curX = textX;
+ curY += font->getHeight();
+ txt += charCount;
+ while (*txt == ' ')
+ txt++; // skip over breaking spaces
+ }
+
}
break;
case 5: // fill with color
@@ -1725,15 +1774,21 @@ reg_t kBitmap(EngineState *s, int argc, reg_t *argv) {
reg_t hunkId = argv[1]; // obtained from kBitmap(0)
uint16 x = argv[2].toUint16();
uint16 y = argv[3].toUint16();
- uint16 width = argv[4].toUint16(); // width - 1
- uint16 height = argv[5].toUint16(); // height - 1
+ uint16 fillWidth = argv[4].toUint16(); // width - 1
+ uint16 fillHeight = argv[5].toUint16(); // height - 1
uint16 back = argv[6].toUint16();
- byte *bitmap = s->_segMan->getHunkPointer(hunkId);
-
- for (uint16 curY = y; curY < y + height; curY++) {
- for (uint16 curX = x; curX < x + width; curX++) {
- bitmap[curY + curX] = back;
+ byte *memoryPtr = s->_segMan->getHunkPointer(hunkId);
+ // Get totalWidth, totalHeight
+ uint16 totalWidth = READ_LE_UINT16((void *)memoryPtr);
+ uint16 totalHeight = READ_LE_UINT16((void *)(memoryPtr + 2));
+ uint16 width = MIN<uint16>(totalWidth - x, fillWidth);
+ uint16 height = MIN<uint16>(totalHeight - y, fillHeight);
+ byte *bitmap = memoryPtr + BITMAP_HEADER_SIZE;
+
+ for (uint16 curY = 0; curY < height; curY++) {
+ for (uint16 curX = 0; curX < width; curX++) {
+ bitmap[(curY + y) * totalWidth + (curX + x)] = back;
}
}
diff --git a/engines/sci/graphics/text32.cpp b/engines/sci/graphics/text32.cpp
index 52124fd..0d4f8de 100644
--- a/engines/sci/graphics/text32.cpp
+++ b/engines/sci/graphics/text32.cpp
@@ -104,6 +104,8 @@ void GfxText32::disposeTextBitmap(reg_t hunkId) {
_segMan->freeHunkEntry(hunkId);
}
+#define BITMAP_HEADER_SIZE 46
+
void GfxText32::drawTextBitmap(reg_t textObject) {
reg_t hunkId = readSelector(_segMan, textObject, SELECTOR(bitmap));
byte *surface = _segMan->getHunkPointer(hunkId);
@@ -111,6 +113,10 @@ void GfxText32::drawTextBitmap(reg_t textObject) {
if (!surface)
error("Attempt to draw an invalid text bitmap");
+ // Skip the bitmap header in SCI21 - SCI3
+ if (getSciVersion() >= SCI_VERSION_2_1)
+ surface += BITMAP_HEADER_SIZE;
+
int curByte = 0;
Common::Rect nsRect = getNSRect(textObject);
Common::Rect planeRect = getPlaneRect(textObject);
More information about the Scummvm-git-logs
mailing list