[Scummvm-git-logs] scummvm master -> 4377a0d995cd0486c809020e11625f86aff6259d

dreammaster paulfgilbert at gmail.com
Sat Aug 31 08:10:31 CEST 2019


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9213920ac1 XEEN: Cleanup of sprite drawer 3
4377a0d995 XEEN: Workaround black pixels when rendering transparent Shades


Commit: 9213920ac12198ab96dd804111b93d6b38e900c8
    https://github.com/scummvm/scummvm/commit/9213920ac12198ab96dd804111b93d6b38e900c8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2019-08-30T21:50:14-07:00

Commit Message:
XEEN: Cleanup of sprite drawer 3

Changed paths:
    engines/xeen/sprites.cpp


diff --git a/engines/xeen/sprites.cpp b/engines/xeen/sprites.cpp
index 25b6a04..76bd742 100644
--- a/engines/xeen/sprites.cpp
+++ b/engines/xeen/sprites.cpp
@@ -28,6 +28,8 @@
 #include "xeen/screen.h"
 #include "xeen/sprites.h"
 
+#include "graphics/palette.h"
+
 namespace Xeen {
 
 #define SCENE_CLIP_LEFT 8
@@ -438,7 +440,7 @@ void SpriteDrawer1::drawPixel(byte *dest, byte pixel) {
 
 /*------------------------------------------------------------------------*/
 
-const uint16 DRAWER3_MASK[4] = { 0xF01, 0xF03, 0xF07, 0xF0F };
+const uint16 DRAWER3_MASK[4] = { 1, 3, 7, 15 };
 const uint16 DRAWER3_OFFSET[4] = { 1, 2, 4, 8 };
 
 SpriteDrawer3::SpriteDrawer3(byte *data, size_t filesize, int index) : SpriteDrawer(data, filesize) {
@@ -447,10 +449,8 @@ SpriteDrawer3::SpriteDrawer3(byte *data, size_t filesize, int index) : SpriteDra
 }
 
 void SpriteDrawer3::drawPixel(byte *dest, byte pixel) {
-	uint16 val = (int)*dest << 8 | pixel;
-	val = (val & _mask) - _offset;
+	byte level = (pixel & _mask) - _offset + (*dest & 0xf);
 
-	byte level = (val & 0xff) + (val >> 8);
 	if (level >= 0x80) {
 		*dest &= 0xf0;
 	} else if (level <= 0xf) {


Commit: 4377a0d995cd0486c809020e11625f86aff6259d
    https://github.com/scummvm/scummvm/commit/4377a0d995cd0486c809020e11625f86aff6259d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2019-08-30T23:10:26-07:00

Commit Message:
XEEN: Workaround black pixels when rendering transparent Shades

Changed paths:
    engines/xeen/sprites.cpp
    engines/xeen/sprites.h


diff --git a/engines/xeen/sprites.cpp b/engines/xeen/sprites.cpp
index 76bd742..4ac5383 100644
--- a/engines/xeen/sprites.cpp
+++ b/engines/xeen/sprites.cpp
@@ -446,17 +446,31 @@ const uint16 DRAWER3_OFFSET[4] = { 1, 2, 4, 8 };
 SpriteDrawer3::SpriteDrawer3(byte *data, size_t filesize, int index) : SpriteDrawer(data, filesize) {
 	_offset = DRAWER3_OFFSET[index];
 	_mask = DRAWER3_MASK[index];
+
+	g_system->getPaletteManager()->grabPalette(_palette, 0, PALETTE_COUNT);
+	_hasPalette = false;
+	for (byte *pal = _palette; pal < _palette + PALETTE_SIZE && !_hasPalette; ++pal)
+		_hasPalette = *pal != 0;
 }
 
 void SpriteDrawer3::drawPixel(byte *dest, byte pixel) {
-	byte level = (pixel & _mask) - _offset + (*dest & 0xf);
-
-	if (level >= 0x80) {
-		*dest &= 0xf0;
-	} else if (level <= 0xf) {
-		*dest = (*dest & 0xf0) | level;
-	} else {
-		*dest |= 0xf;
+	// WORKAROUND: This is slightly different then the original:
+	// 1) The original has bunches of black pixels appearing. This does index increments to avoid such pixels
+	// 2) It also prevents any pixels being drawn in the single initial frame until the palette is set
+	if (_hasPalette) {
+		byte level = (pixel & _mask) - _offset + (*dest & 0xf);
+
+		if (level >= 0x80) {
+			*dest &= 0xf0;
+		} else if (level <= 0xf) {
+			*dest = (*dest & 0xf0) | level;
+		} else {
+			*dest |= 0xf;
+		}
+
+		//
+		while (*dest < 0xff && !_palette[*dest * 3] && !_palette[*dest * 3 + 1] && !_palette[*dest * 3 + 2])
+			++*dest;
 	}
 }
 
diff --git a/engines/xeen/sprites.h b/engines/xeen/sprites.h
index f2619c8..5a24588 100644
--- a/engines/xeen/sprites.h
+++ b/engines/xeen/sprites.h
@@ -224,6 +224,8 @@ public:
 class SpriteDrawer3 : public SpriteDrawer {
 private:
 	uint16 _offset, _mask;
+	byte _palette[256 * 3];
+	bool _hasPalette;
 private:
 	/**
 	 * Output a pixel





More information about the Scummvm-git-logs mailing list