[Scummvm-cvs-logs] SF.net SVN: scummvm: [24860] scummvm/trunk/engines/scumm/he/wiz_he.cpp
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Sun Dec 17 11:17:43 CET 2006
Revision: 24860
http://scummvm.svn.sourceforge.net/scummvm/?rev=24860&view=rev
Author: kirben
Date: 2006-12-17 02:17:13 -0800 (Sun, 17 Dec 2006)
Log Message:
-----------
Add cyx's patch for horizontal and vertical flipping of wiz images type 1, in HE games.
Modified Paths:
--------------
scummvm/trunk/engines/scumm/he/wiz_he.cpp
Modified: scummvm/trunk/engines/scumm/he/wiz_he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/wiz_he.cpp 2006-12-16 05:28:01 UTC (rev 24859)
+++ scummvm/trunk/engines/scumm/he/wiz_he.cpp 2006-12-17 10:17:13 UTC (rev 24860)
@@ -354,6 +354,14 @@
Common::Rect r1, r2;
if (calcClipRects(dstw, dsth, srcx, srcy, srcw, srch, rect, r1, r2)) {
dst += r2.left + r2.top * dstw;
+ if (flags & kWIFFlipY) {
+ const int dy = (srcy < 0) ? srcy : (srch - r1.height());
+ r1.translate(0, dy);
+ }
+ if (flags & kWIFFlipX) {
+ const int dx = (srcx < 0) ? srcx : (srcw - r1.width());
+ r1.translate(dx, 0);
+ }
decompressWizImage(dst, dstw, r2, src, r1, flags, palPtr, xmapPtr);
}
}
@@ -487,18 +495,9 @@
// HACK: Skip every second bit for now
Common::Rect r1, r2;
if (calcClipRects(dstw, dsth, srcx, srcy, srcw, srch, rect, r1, r2)) {
- if (flags & kWIFFlipX) {
- int l = r1.left;
- int r = r1.right;
- r1.left = srcw - r;
- r1.right = srcw - l;
+ if (flags & (kWIFFlipY | kWIFFlipX)) {
+ warning("Unhandled Wiz flags (kWIFFlipY | kWIFFlipX)");
}
- if (flags & kWIFFlipY) {
- int t = r1.top;
- int b = r1.bottom;
- r1.top = srch - b;
- r1.bottom = srch - t;
- }
byte imagePal[256];
if (!palPtr) {
for (int i = 0; i < 256; i++) {
@@ -506,20 +505,16 @@
}
palPtr = imagePal;
}
-
int h = r1.height();
int w = r1.width();
src += r1.left + r1.top * srcw * 2;
dst += r2.left + r2.top * dstw;
-
while (h--) {
- const uint8 *p = src;
for (int i = 0; i < w; ++i) {
- uint8 col = *p;
+ uint8 col = src[2 * i];
if (transColor == -1 || transColor != col) {
dst[i] = palPtr[col];
}
- p += 2;
}
src += srcw * 2;
dst += dstw;
@@ -531,18 +526,9 @@
void Wiz::copyRawWizImage(uint8 *dst, const uint8 *src, int dstw, int dsth, int srcx, int srcy, int srcw, int srch, const Common::Rect *rect, int flags, const uint8 *palPtr, int transColor) {
Common::Rect r1, r2;
if (calcClipRects(dstw, dsth, srcx, srcy, srcw, srch, rect, r1, r2)) {
- if (flags & kWIFFlipX) {
- int l = r1.left;
- int r = r1.right;
- r1.left = srcw - r;
- r1.right = srcw - l;
+ if (flags & (kWIFFlipY | kWIFFlipX)) {
+ warning("Unhandled Wiz flags (kWIFFlipY | kWIFFlipX)");
}
- if (flags & kWIFFlipY) {
- int t = r1.top;
- int b = r1.bottom;
- r1.top = srch - b;
- r1.bottom = srch - t;
- }
byte imagePal[256];
if (!palPtr) {
for (int i = 0; i < 256; i++) {
@@ -555,9 +541,8 @@
src += r1.left + r1.top * srcw;
dst += r2.left + r2.top * dstw;
while (h--) {
- const uint8 *p = src;
for (int i = 0; i < w; ++i) {
- uint8 col = *p++;
+ uint8 col = src[i];
if (transColor == -1 || transColor != col) {
dst[i] = palPtr[col];
}
@@ -569,16 +554,9 @@
}
void Wiz::decompressWizImage(uint8 *dst, int dstPitch, const Common::Rect &dstRect, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr) {
- if (flags & kWIFFlipX) {
- debug(1, "decompressWizImage: Unhandled flag kWIFFlipX");
- }
- if (flags & kWIFFlipY) {
- debug(1, "decompressWizImage: Unhandled flag kWIFFlipY");
- }
-
const uint8 *dataPtr, *dataPtrNext;
uint8 code, *dstPtr, *dstPtrNext;
- int h, w, xoff;
+ int h, w, xoff, dstInc;
uint16 off;
byte imagePal[256];
@@ -602,6 +580,16 @@
if (h <= 0 || w <= 0)
return;
+ if (flags & kWIFFlipY) {
+ dstPtr += (h - 1) * dstPitch;
+ dstPitch = -dstPitch;
+ }
+ dstInc = 1;
+ if (flags & kWIFFlipX) {
+ dstPtr += w - 1;
+ dstInc = -1;
+ }
+
while (h--) {
xoff = srcRect.left;
w = srcRect.width();
@@ -620,8 +608,7 @@
code = -xoff;
}
-
- dstPtr += code;
+ dstPtr += dstInc * code;
w -= code;
} else if (code & 2) {
code = (code >> 2) + 1;
@@ -641,10 +628,10 @@
while (code--) {
if (xmapPtr) {
*dstPtr = xmapPtr[palPtr[*dataPtr] * 256 + *dstPtr];
- dstPtr++;
} else {
- *dstPtr++ = palPtr[*dataPtr];
+ *dstPtr = palPtr[*dataPtr];
}
+ dstPtr += dstInc;
}
dataPtr++;
} else {
@@ -665,10 +652,10 @@
while (code--) {
if (xmapPtr) {
*dstPtr = xmapPtr[palPtr[*dataPtr++] * 256 + *dstPtr];
- dstPtr++;
} else {
- *dstPtr++ = palPtr[*dataPtr++];
+ *dstPtr = palPtr[*dataPtr++];
}
+ dstPtr += dstInc;
}
}
}
@@ -676,7 +663,6 @@
dataPtr = dataPtrNext;
dstPtr = dstPtrNext;
}
-
}
int Wiz::isWizPixelNonTransparent(const uint8 *data, int x, int y, int w, int h) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list