[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.147,2.148 gfx.h,1.41,1.42 object.cpp,1.116,1.117 scummvm.cpp,2.217,2.218 verbs.cpp,1.50,1.51
Pawel Kolodziejski
aquadran at users.sourceforge.net
Thu Jun 5 22:28:03 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv5211
Modified Files:
gfx.cpp gfx.h object.cpp scummvm.cpp verbs.cpp
Log Message:
fixed almost object drawing for v1 games, (ugly hack for drawBitmap)
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.147
retrieving revision 2.148
diff -u -d -r2.147 -r2.148
--- gfx.cpp 6 Jun 2003 00:16:33 -0000 2.147
+++ gfx.cpp 6 Jun 2003 05:27:44 -0000 2.148
@@ -776,6 +776,9 @@
for (int i = 0; i < num; i++)
setGfxUsageBit(s + i, USAGE_BIT_DIRTY);
+ if (_features & GF_AFTER_V1) {
+ gdi._C64ObjectMode = false;
+ }
gdi.drawBitmap(getResourceAddress(rtRoom, _roomResource) + _IM00_offs,
&virtscr[0], s, 0, _roomWidth, virtscr[0].height, s, num, 0, _roomStrips);
}
@@ -1123,7 +1126,10 @@
bgbak_ptr = backbuff_ptr;
if (_vm->_features & GF_AFTER_V1) {
- drawStripC64Background(bgbak_ptr, stripnr, height);
+ if (_C64ObjectMode)
+ drawStripC64Object(bgbak_ptr, stripnr, width, height);
+ else
+ drawStripC64Background(bgbak_ptr, stripnr, height);
} else if (!(_vm->_features & GF_AFTER_V2)) {
if (_vm->_features & GF_16COLOR) {
decodeStripEGA(bgbak_ptr, smap_ptr + READ_LE_UINT16(smap_ptr + stripnr * 2 + 2), height);
@@ -1343,6 +1349,22 @@
}
}
+void Gdi::drawStripC64Object(byte *dst, int stripnr, int width, int height) {
+ int y, i, j;
+ height >>= 3;
+ width >>= 3;
+ for (y = 0; y < height; y++) {
+ _C64Colors[3] = (_C64ObjectMap[y * width + stripnr] & 7);
+ for (i = 0; i < 8; i++) {
+ for (j = 7; j >= 0; j--) {
+ byte c = _C64CharMap[_C64ObjectMap[y * width + stripnr] * 8 + i] >> (j & 6);
+ dst[7 - j] = _C64Colors[c & 3];
+ }
+ dst += _vm->_screenWidth;
+ }
+ }
+}
+
void Gdi::drawStripC64Mask(byte *dst, int stripnr, int height) {
int y, i, j;
height >>= 3;
@@ -1357,7 +1379,7 @@
}
}
-void Gdi::decodeC64Gfx(byte *src, byte *dst, int size) {
+void Gdi::decodeC64Gfx(const byte *src, byte *dst, int size) {
int x, z;
byte color, run, common[4];
Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- gfx.h 5 Jun 2003 17:22:14 -0000 1.41
+++ gfx.h 6 Jun 2003 05:27:45 -0000 1.42
@@ -122,13 +122,15 @@
bool _zbufferDisabled;
- byte _C64Colors[4], _C64CharMap[256 * 8], _C64PicMap[4096], _C64ColorMap[4096];
+ byte _C64Colors[4], _C64CharMap[2048], _C64ObjectMap[2048], _C64PicMap[4096], _C64ColorMap[4096];
byte _C64MaskMap[4096], _C64MaskChar[4096];
+ bool _C64ObjectMode;
/* Bitmap decompressors */
bool decompressBitmap(byte *bgbak_ptr, const byte *src, int numLinesToProcess);
void decodeStripEGA(byte *dst, const byte *src, int height);
- void decodeC64Gfx(byte *src, byte *dst, int size);
+ void decodeC64Gfx(const byte *src, byte *dst, int size);
+ void drawStripC64Object(byte *dst, int stripnr, int width, int height);
void drawStripC64Background(byte *dst, int stripnr, int height);
void drawStripC64Mask(byte *dst, int stripnr, int height);
void unkDecodeA(byte *dst, const byte *src, int height);
Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -d -r1.116 -r1.117
--- object.cpp 1 Jun 2003 16:40:15 -0000 1.116
+++ object.cpp 6 Jun 2003 05:27:45 -0000 1.117
@@ -444,6 +444,10 @@
byte flags = Gdi::dbAllowMaskOr;
// Sam & Max needs this to fix object-layering problems with
// the inventory and conversation icons.
+ if (_features & GF_AFTER_V1) {
+ gdi._C64ObjectMode = true;
+ gdi.decodeC64Gfx(ptr, gdi._C64ObjectMap, width * (height >> 3));
+ }
if ((_features & GF_AFTER_V7 || _gameId == GID_SAMNMAX) && getClass(od->obj_nr, kObjectClassIgnoreBoxes))
flags |= Gdi::dbDrawMaskOnAll;
gdi.drawBitmap(ptr, &virtscr[0], x, ypos, width << 3, height, x - xpos, numstrip, flags);
Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.217
retrieving revision 2.218
diff -u -d -r2.217 -r2.218
--- scummvm.cpp 6 Jun 2003 04:20:41 -0000 2.217
+++ scummvm.cpp 6 Jun 2003 05:27:45 -0000 2.218
@@ -1426,11 +1426,12 @@
for(i = 0; i < 4; i++){
gdi._C64Colors[i] = roomptr[6 + i];
}
- gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64CharMap, 256 * 8);
+ gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64CharMap, 2048);
gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 12), gdi._C64PicMap, roomptr[4] * roomptr[5]);
gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 14), gdi._C64ColorMap, roomptr[4] * roomptr[5]);
gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 16), gdi._C64MaskMap, roomptr[4] * roomptr[5]);
gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 18), gdi._C64MaskChar, READ_LE_UINT16(roomptr + 18));
+ gdi._C64ObjectMode = true;
} else if (_features & GF_OLD_BUNDLE) {
_IM00_offs = READ_LE_UINT16(roomptr + 0x0A);
if (_features & GF_AFTER_V2)
Index: verbs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/verbs.cpp,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- verbs.cpp 30 May 2003 14:29:07 -0000 1.50
+++ verbs.cpp 6 Jun 2003 05:27:45 -0000 1.51
@@ -453,6 +453,9 @@
error("No image for verb %d", verb);
}
assert(imptr);
+ if (_features & GF_AFTER_V1) {
+ gdi._C64ObjectMode = true;
+ }
for (i = 0; i < imgw; i++) {
tmp = xstrip + i;
if (tmp < gdi._numStrips)
More information about the Scummvm-git-logs
mailing list