[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.38,2.39 gfx.h,1.22,1.23
Pawel Kolodziejski
aquadran at users.sourceforge.net
Wed Apr 9 12:15:05 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv24761
Modified Files:
gfx.cpp gfx.h
Log Message:
a little improved ega support
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.38
retrieving revision 2.39
diff -u -d -r2.38 -r2.39
--- gfx.cpp 8 Apr 2003 19:05:39 -0000 2.38
+++ gfx.cpp 9 Apr 2003 19:14:01 -0000 2.39
@@ -529,12 +529,22 @@
} else if (_features & GF_SMALL_HEADER) {
int off;
ptr = findResourceData(MKID('SMAP'), room);
- off = READ_LE_UINT32(ptr);
gdi._numZBuffer = 0;
- for (i = 0; off && (i < 4); i++) {
- gdi._numZBuffer++;
- ptr += off;
- off = READ_LE_UINT16(ptr);
+ if (_gameId == GID_MONKEY_EGA) {
+ for (i = 0; i < 4; i++) {
+ off = READ_LE_UINT16(ptr);
+ if (off) {
+ gdi._numZBuffer++;
+ ptr += off;
+ }
+ }
+ } else {
+ off = READ_LE_UINT32(ptr);
+ for (i = 0; off && (i < 4); i++) {
+ gdi._numZBuffer++;
+ ptr += off;
+ off = READ_LE_UINT16(ptr);
+ }
}
} else if (_features & GF_AFTER_V8) {
// in V8 there is no RMIH and num z buffers is in RMHD
@@ -927,10 +937,15 @@
_mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + (y * _numStrips + x);
- if (_vm->_features & GF_SMALL_HEADER)
- useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 4), h);
- else
+ if (_vm->_features & GF_SMALL_HEADER) {
+ if (_vm->_gameId == GID_MONKEY_EGA) {
+ useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT16(smap_ptr + stripnr * 2 + 2), h);
+ } else {
+ useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 4), h);
+ }
+ } else {
useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 8), h);
+ }
CHECK_HEAP;
if (vs->alloctwobuffers) {
@@ -1021,11 +1036,56 @@
}
+void Gdi::decodeStripEGA(byte *dst, byte *src, int height) {
+ byte data, color, color2;
+ int run = 1;
+ byte *t_dst = dst;
+ int t_height = height;
+
+ for (int x = 0; x < 4; x++) {
+ height = t_height;
+ dst = t_dst + x * 2;
+ do {
+ if (run == 0) {
+ data = *src++;
+ if (data & 0x80) {
+ run = data & 0x3f;
+ if (data & 0x40) {
+ data = *src++;
+ color = _vm->_shadowPalette[data >> 4];
+ color2 = _vm->_shadowPalette[data & 0x0f];
+ } else {
+ color = 0xff;
+ }
+ } else {
+ run = data >> 4;
+ color = _vm->_shadowPalette[data & 0x0f];
+ color2 = color;
+ }
+ if (run == 0) {
+ run = *src++;
+ }
+ }
+ if (color != 0xff) {
+ *dst++ = color;
+ *(dst + 1) = color2;
+ dst += _vm->_realWidth;
+ }
+ } while (--height);
+ dst = t_dst;
+ }
+}
+
bool Gdi::decompressBitmap(byte *bgbak_ptr, byte *smap_ptr, int numLinesToProcess) {
byte code = *smap_ptr++;
assert(numLinesToProcess);
- if ((_vm->_features & GF_AMIGA) || (_vm->_features & GF_16COLOR))
+ if ((_vm->_gameId == GID_MONKEY_EGA) || (_vm->_gameId == GID_LOOM)) {
+ decodeStripEGA(bgbak_ptr, smap_ptr, numLinesToProcess);
+ return false;
+ }
+
+ if (_vm->_features & GF_AMIGA)
_palette_mod = 16;
else
_palette_mod = 0;
Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- gfx.h 6 Mar 2003 21:45:59 -0000 1.22
+++ gfx.h 9 Apr 2003 19:14:05 -0000 1.23
@@ -134,6 +134,7 @@
/* Bitmap decompressors */
bool decompressBitmap(byte *bgbak_ptr, byte *smap_ptr, int numLinesToProcess);
+ void decodeStripEGA(byte *dst, byte *src, int height);
void unkDecodeA(byte *dst, byte *src, int height);
void unkDecodeA_trans(byte *dst, byte *src, int height);
void unkDecodeB(byte *dst, byte *src, int height);
More information about the Scummvm-git-logs
mailing list