[Scummvm-cvs-logs] CVS: scummvm/sword2/driver d_draw.cpp,1.45,1.46 driver96.h,1.63,1.64 sprite.cpp,1.34,1.35

Torbj?rn Andersson eriktorbjorn at users.sourceforge.net
Wed Dec 10 00:03:00 CET 2003


Update of /cvsroot/scummvm/scummvm/sword2/driver
In directory sc8-pr-cvs1:/tmp/cvs-serv8164/driver

Modified Files:
	d_draw.cpp driver96.h sprite.cpp 
Log Message:
Sprite surfaces (as opposed to standard sprites) are always display
aligned, never flipped and never RLE16-compressed. Simplified the code
accordingly. (Displaying the restore dialog when specifying an unused save
slot from the command-line works again now.)

Plus some minor cleanups.


Index: d_draw.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/driver/d_draw.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- d_draw.cpp	16 Nov 2003 14:18:29 -0000	1.45
+++ d_draw.cpp	10 Dec 2003 08:01:58 -0000	1.46
@@ -145,7 +145,7 @@
 		msgSprite.y = RDMENU_MENUDEEP / 2 - frame->height / 2;
 		msgSprite.w = frame->width;
 		msgSprite.h = frame->height;
-		msgSprite.type = RDSPR_DISPLAYALIGN | RDSPR_NOCOMPRESSION | RDSPR_TRANS;
+		msgSprite.type = RDSPR_NOCOMPRESSION;
 		msgSprite.data = data->ad + sizeof(_frameHeader);
 
 		_vm->_graphics->createSurface(&msgSprite, &msgSurface);

Index: driver96.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/driver/driver96.h,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- driver96.h	25 Nov 2003 07:35:52 -0000	1.63
+++ driver96.h	10 Dec 2003 08:01:58 -0000	1.64
@@ -97,9 +97,8 @@
 	RDSPR_NOCOMPRESSION		= 0x0040,
 	RDSPR_EDGEBLEND			= 0x0080,	// Unused
 
-	// This is the high byte part of the sprite type which defines what
-	// type of compression is used, as long as RDSPR_NOCOMPRESSION is not
-	//  defined.
+	// This defines what type of compression is used, as long as
+	// RDSPR_NOCOMPRESSION is not defined.
 
 	RDSPR_RLE16			= 0x0000,
 	RDSPR_RLE256			= 0x0100,

Index: sprite.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/driver/sprite.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- sprite.cpp	9 Dec 2003 08:09:18 -0000	1.34
+++ sprite.cpp	10 Dec 2003 08:01:58 -0000	1.35
@@ -243,37 +243,18 @@
  */
 
 int32 Graphics::createSurface(_spriteInfo *s, uint8 **sprite) {
-	uint8 *newSprite;
-
 	*sprite = (uint8 *) malloc(s->w * s->h);
 	if (!*sprite)
 		return RDERR_OUTOFMEMORY;
 
+	// Surfaces are either uncompressed or RLE256-compressed. No need to
+	// test for anything else.
+
 	if (s->type & RDSPR_NOCOMPRESSION) {
 		memcpy(*sprite, s->data, s->w * s->h);
-	} else {
-		if ((s->type >> 8) == (RDSPR_RLE16 >> 8)) {
-			if (decompressRLE16(*sprite, s->data, s->w * s->h, s->colourTable)) {
-				free(*sprite);
-				return RDERR_DECOMPRESSION;
-			}
-		} else {
-			if (decompressRLE256(*sprite, s->data, s->w * s->h)) {
-				free(*sprite);
-				return RDERR_DECOMPRESSION;
-			}
-		}
-
-		if (s->type & RDSPR_FLIP) {
-			newSprite = (uint8 *) malloc(s->w * s->h);
-			if (!newSprite) {
-				free(*sprite);
-				return RDERR_OUTOFMEMORY;
-			}
-			mirrorSprite(newSprite, *sprite, s->w, s->h);
-			free(*sprite);
-			*sprite = newSprite;
-		}
+	} else if (decompressRLE256(*sprite, s->data, s->w * s->h)) {
+		free(*sprite);
+		return RDERR_DECOMPRESSION;
 	}
 
 	return RD_OK;
@@ -288,7 +269,7 @@
 
 void Graphics::drawSurface(_spriteInfo *s, uint8 *surface, Common::Rect *clipRect) {
 	Common::Rect rd, rs;
-	uint16 x, y, srcPitch;
+	uint16 x, y;
 	uint8 *src, *dst;
 
 	rs.left = 0;
@@ -296,17 +277,9 @@
 	rs.top = 0;
 	rs.bottom = s->h;
 
-	srcPitch = s->w;
-
-	if (s->type & RDSPR_DISPLAYALIGN) {
-		rd.top = s->y;
-		rd.left = s->x;
-	} else {
-		rd.top = s->y - _scrollY;
-		rd.left = s->x - _scrollX;
-	}
-
+	rd.left = s->x;
 	rd.right = rd.left + rs.right;
+	rd.top = s->y;
 	rd.bottom = rd.top + rs.bottom;
 
 	if (clipRect) {
@@ -332,7 +305,7 @@
 			return;
 	}
 
-	src = surface + rs.top * srcPitch + rs.left;
+	src = surface + rs.top * s->w + rs.left;
 	dst = _buffer + _screenWide * rd.top + rd.left;
 
 	// Surfaces are always transparent.
@@ -342,7 +315,7 @@
 			if (src[x])
 				dst[x] = src[x];
 		}
-		src += srcPitch;
+		src += s->w;
 		dst += _screenWide;
 	}
 
@@ -401,7 +374,7 @@
 		freeSprite = true;
 		if (!sprite)
 			return RDERR_OUTOFMEMORY;
-		if ((s->type >> 8) == (RDSPR_RLE16 >> 8)) {
+		if ((s->type & 0xff00) == RDSPR_RLE16) {
 			if (decompressRLE16(sprite, s->data, s->w * s->h, s->colourTable)) {
 				free(sprite);
 				return RDERR_DECOMPRESSION;





More information about the Scummvm-git-logs mailing list