[Scummvm-cvs-logs] SF.net SVN: scummvm: [20809] scummvm/trunk/engines/scumm/he/wiz_he.cpp
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Tue Feb 21 14:00:11 CET 2006
Revision: 20809
Author: kirben
Date: 2006-02-21 13:59:37 -0800 (Tue, 21 Feb 2006)
ViewCVS: http://svn.sourceforge.net/scummvm?rev=20809&view=rev
Log Message:
-----------
Cleanup decompressWizImage() 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-02-21 16:16:56 UTC (rev 20808)
+++ scummvm/trunk/engines/scumm/he/wiz_he.cpp 2006-02-21 21:59:37 UTC (rev 20809)
@@ -480,94 +480,81 @@
while (h--) {
xoff = srcRect.left;
- off = READ_LE_UINT16(dataPtr);
- w = srcRect.right - srcRect.left;
- dstPtrNext = dstPitch + dstPtr;
- dataPtrNext = off + 2 + dataPtr;
- dataPtr += 2;
- if (off == 0)
- goto dec_next;
-
- // Skip over the leftmost 'srcRect->left' pixels.
- // TODO: This code could be merged (at a loss of efficency) with the
- // loop below which does the actual drawing.
- while (xoff > 0) {
- code = *dataPtr++;
- databit = code & 1;
- code >>= 1;
- if (databit) {
- xoff -= code;
- if (xoff < 0) {
- code = -xoff;
- goto dec_sub1;
- }
- } else {
+ w = srcRect.width();
+ off = READ_LE_UINT16(dataPtr); dataPtr += 2;
+ dstPtrNext = dstPtr + dstPitch;
+ dataPtrNext = dataPtr + off;
+ if (off != 0) {
+ while (w > 0) {
+ code = *dataPtr++;
databit = code & 1;
- code = (code >> 1) + 1;
+ code >>= 1;
if (databit) {
- ++dataPtr;
- xoff -= code;
- if (xoff < 0) {
+ if (xoff > 0) {
+ xoff -= code;
+ if (xoff >= 0)
+ continue;
+
code = -xoff;
- --dataPtr;
- goto dec_sub2;
}
+
+ dstPtr += code;
+ w -= code;
} else {
- dataPtr += code;
- xoff -= code;
- if (xoff < 0) {
- dataPtr += xoff;
- code = -xoff;
- goto dec_sub3;
- }
- }
- }
- }
+ databit = code & 1;
+ code = (code >> 1) + 1;
- while (w > 0) {
- code = *dataPtr++;
- databit = code & 1;
- code >>= 1;
- if (databit) {
-dec_sub1: dstPtr += code;
- w -= code;
- } else {
- databit = code & 1;
- code = (code >> 1) + 1;
- if (databit) {
-dec_sub2: w -= code;
- if (w < 0) {
- code += w;
- }
- while (code--) {
- if (xmapPtr) {
- *dstPtr = xmapPtr[palPtr[*dataPtr] * 256 + *dstPtr];
- dstPtr++;
+ if (xoff > 0) {
+ xoff -= code;
+ if (databit) {
+ ++dataPtr;
+ if (xoff >= 0)
+ continue;
+
+ code = -xoff;
+ --dataPtr;
} else {
- *dstPtr++ = palPtr[*dataPtr];
+ dataPtr += code;
+ if (xoff >= 0)
+ continue;
+
+ code = -xoff;
+ dataPtr += xoff;
}
}
- dataPtr++;
- } else {
-dec_sub3: w -= code;
+
+ w -= code;
if (w < 0) {
code += w;
}
- while (code--) {
- if (xmapPtr) {
- *dstPtr = xmapPtr[palPtr[*dataPtr++] * 256 + *dstPtr];
- dstPtr++;
- } else {
- *dstPtr++ = palPtr[*dataPtr++];
+
+ if (databit) {
+ while (code--) {
+ if (xmapPtr) {
+ *dstPtr = xmapPtr[palPtr[*dataPtr] * 256 + *dstPtr];
+ dstPtr++;
+ } else {
+ *dstPtr++ = palPtr[*dataPtr];
+ }
}
+ dataPtr++;
+ } else {
+ while (code--) {
+ if (xmapPtr) {
+ *dstPtr = xmapPtr[palPtr[*dataPtr++] * 256 + *dstPtr];
+ dstPtr++;
+ } else {
+ *dstPtr++ = palPtr[*dataPtr++];
+ }
+ }
}
}
}
}
-dec_next:
dataPtr = dataPtrNext;
dstPtr = dstPtrNext;
}
+
}
int Wiz::isWizPixelNonTransparent(const uint8 *data, int x, int y, int w, int h) {
More information about the Scummvm-git-logs
mailing list