[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.266,2.267 gfx.h,1.59,1.60
Eugene Sandulenko
sev at users.sourceforge.net
Mon Feb 23 21:00:03 CET 2004
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14654
Modified Files:
gfx.cpp gfx.h
Log Message:
Graphics decoders for 3DO HE titles. Preliminary implementation, don't
blame me :) After testing I'll convert it to C.
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.266
retrieving revision 2.267
diff -u -d -r2.266 -r2.267
--- gfx.cpp 14 Feb 2004 10:43:55 -0000 2.266
+++ gfx.cpp 24 Feb 2004 04:45:49 -0000 2.267
@@ -1485,11 +1485,16 @@
case 7:
unkDecode11(bgbak_ptr, src, numLinesToProcess); /* Ender - Zak256/Indy256 */
break;
- // FIXME implement these codecs...
+
// 8/9 used in 3do version of puttputt joins the parade maybe others
case 8:
+ unkDecode12(bgbak_ptr, src, numLinesToProcess);
+ break;
+
case 9:
- error("decompressBitmap: Graphics codec %d not yet supported\n", code);
+ unkDecode13(bgbak_ptr, src, numLinesToProcess);
+ break;
+
// used in amiga version of Monkey Island
case 10:
decodeStripEGA(bgbak_ptr, src, numLinesToProcess);
@@ -2125,6 +2130,163 @@
} while (--x);
}
+
+// TODO: C'ify it
+void Gdi::unkDecode12(byte *dst, const byte *src, int height) {
+ int var_8, di, var_6;
+ const byte *bx;
+ byte si, var_4;
+
+ var_8 = 0;
+
+ di = height << 3;
+
+ if (!height)
+ return;
+
+ _cont1:
+ bx = src;
+ src++;
+ si = *bx;
+
+ if (!(si & 1)) {
+ si >>= 1;
+ si++;
+ di -= si;
+ if (di < 0)
+ si += di;
+
+ var_6 = di;
+ di = var_8;
+
+ do {
+ bx = src;
+ src++;
+
+ if (*bx != _transparentColor)
+ *dst = *bx;
+
+ dst++;
+ di++;
+ if (!(di & 7))
+ dst += 312;
+
+ si--;
+ } while (si);
+ var_8 = di;
+ if (var_6 > 0) {
+ di = var_6;
+ goto _cont1;
+ }
+ return;
+ } else {
+ si >>= 1;
+ bx = src;
+ src++;
+ var_4 = *bx;
+ si++;
+ di -= si;
+ if (di < 0)
+ si += di;
+ var_6 = di;
+ di = var_8;
+
+ do {
+ if (var_4 != _transparentColor)
+ *dst = var_4;
+ dst++;
+ di++;
+ if (!(di & 7))
+ dst += 312;
+ si--;
+ } while (si);
+ var_8 = di;
+ if (var_6 > 0) {
+ di = var_6;
+ goto _cont1;
+ }
+ return;
+ }
+}
+
+
+// TODO: C'ify it
+void Gdi::unkDecode13(byte *dst, const byte *src, int height) {
+ int var_8, di, var_6;
+ const byte *bx;
+ byte si, var_4;
+
+ var_8 = 0;
+
+ di = height << 3;
+
+ if (!height)
+ return;
+
+ _cont1:
+ bx = src;
+ src++;
+ si = *bx;
+
+ if (!(si & 1)) {
+ si >>= 1;
+ si++;
+ di -= si;
+ if (di < 0)
+ si += di;
+
+ var_6 = di;
+ di = var_8;
+
+ do {
+ bx = src;
+ src++;
+
+ *dst = *bx;
+
+ dst++;
+ di++;
+ if (!(di & 7))
+ dst += 312;
+
+ si--;
+ } while (si);
+ var_8 = di;
+ if (var_6 > 0) {
+ di = var_6;
+ goto _cont1;
+ }
+ return;
+ } else {
+ si >>= 1;
+ bx = src;
+ src++;
+ var_4 = *bx;
+ si++;
+ di -= si;
+ if (di < 0)
+ si += di;
+ var_6 = di;
+ di = var_8;
+
+ do {
+ *dst = var_4;
+ dst++;
+ di++;
+ if (!(di & 7))
+ dst += 312;
+ si--;
+ } while (si);
+ var_8 = di;
+ if (var_6 > 0) {
+ di = var_6;
+ goto _cont1;
+ }
+ return;
+ }
+}
+
+
#undef NEXT_ROW
#undef READ_256BIT
Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- gfx.h 8 Jan 2004 21:21:40 -0000 1.59
+++ gfx.h 24 Feb 2004 04:45:50 -0000 1.60
@@ -248,6 +248,8 @@
void unkDecode9(byte *dst, const byte *src, int height);
void unkDecode10(byte *dst, const byte *src, int height);
void unkDecode11(byte *dst, const byte *src, int height);
+ void unkDecode12(byte *dst, const byte *src, int height);
+ void unkDecode13(byte *dst, const byte *src, int height);
void draw8ColWithMasking(byte *dst, const byte *src, int height, byte *mask);
void draw8Col(byte *dst, const byte *src, int height);
More information about the Scummvm-git-logs
mailing list