[Scummvm-git-logs] scummvm master -> 4fc57179c8a847666cbf646370a85ec796692aec

neuromancer noreply at scummvm.org
Fri Jan 6 01:07:05 UTC 2023


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

Summary:
4fc57179c8 FREESCAPE: improved handling of colors in Driller for C64


Commit: 4fc57179c8a847666cbf646370a85ec796692aec
    https://github.com/scummvm/scummvm/commit/4fc57179c8a847666cbf646370a85ec796692aec
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-01-05T22:02:21-03:00

Commit Message:
FREESCAPE: improved handling of colors in Driller for C64

Changed paths:
    engines/freescape/games/driller.cpp
    engines/freescape/games/palettes.cpp
    engines/freescape/gfx.cpp
    engines/freescape/gfx.h


diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 7f4ede551a5..a54940d9b5a 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -734,7 +734,7 @@ void DrillerEngine::drawCPCUI(Graphics::Surface *surface) {
 	uint32 color = 1;
 	uint8 r, g, b;
 
-	_gfx->selectColorFromCPCPalette(color, r, g, b);
+	_gfx->selectColorFromFourColorPalette(color, r, g, b);
 	uint32 front = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
 
 	color = 0;
diff --git a/engines/freescape/games/palettes.cpp b/engines/freescape/games/palettes.cpp
index 1c586f9c2ce..1f4c8766fe6 100644
--- a/engines/freescape/games/palettes.cpp
+++ b/engines/freescape/games/palettes.cpp
@@ -44,21 +44,21 @@ byte dos_EGA_palette[16][3] = {
 
 byte kDrillerC64Palette[16][3] = {
 	{0x00, 0x00, 0x00},
-	{0xff, 0xff, 0xff},
-	{0x88, 0x00, 0x00},
-	{0xdd, 0x88, 0x55},
-	{0x00, 0xcc, 0x55},
-	{0xcc, 0x44, 0xcc},
-	{0x00, 0x00, 0xaa},
-	{0xee, 0xee, 0x77},
-	{0xaa, 0xff, 0xee},
-	{0x66, 0x44, 0x00},
-	{0xff, 0x77, 0x77},
-	{0x33, 0x33, 0x33},
-	{0x77, 0x77, 0x77},
-	{0xaa, 0xff, 0x66},
-	{0x00, 0x88, 0xff},
-	{0xbb, 0xbb, 0xbb}
+	{0xFF, 0xFF, 0xFF},
+	{0x68, 0x37, 0x2B},
+	{0x70, 0xA4, 0xB2},
+	{0x6F, 0x3D, 0x86},
+	{0x58, 0x8D, 0x43},
+	{0x35, 0x28, 0x79},
+	{0xB8, 0xC7, 0x6F},
+	{0x6F, 0x4F, 0x25},
+	{0x43, 0x39, 0x00},
+	{0x9A, 0x67, 0x59},
+	{0x44, 0x44, 0x44},
+	{0x6C, 0x6C, 0x6C},
+	{0x9A, 0xD2, 0x84},
+	{0x6C, 0x5E, 0xB5},
+	{0x95, 0x95, 0x95}
 };
 
 byte kDrillerZXPalette[9][3] = {
@@ -108,13 +108,6 @@ byte kDrillerCPCPalette[32][3] = {
 	{0x80, 0x80, 0xff}, // 31
 };
 
-byte kDrillerCPCPalette1[27][3] = {
-	{0x00, 0x00, 0x00},  // 0: black
-	{0xff, 0x80, 0x00},  // 1: orange
-	{0x00, 0xff, 0xff},  // 2: cyan
-	{0x00, 0x80, 0x00},  // 3: green
-};
-
 void FreescapeEngine::loadColorPalette() {
 	if (_renderMode == Common::kRenderEGA) {
 		_gfx->_palette = (byte *)&dos_EGA_palette;
@@ -165,7 +158,7 @@ void FreescapeEngine::loadPalettes(Common::SeekableReadStream *file, int offset)
 void FreescapeEngine::swapPalette(uint16 levelID) {
 	if (isAmiga() || isAtariST())
 		_gfx->_palette = _paletteByArea[levelID];
-	else if (isSpectrum() || isCPC()) {
+	else if (isSpectrum() || isCPC() || isC64()) {
 		_gfx->_inkColor = _areaMap[levelID]->_inkColor;
 		_gfx->_paperColor = _areaMap[levelID]->_paperColor;
 		_gfx->_underFireBackgroundColor = _areaMap[levelID]->_underFireBackgroundColor;
diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index 14580f0871c..17f6c16013d 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -93,16 +93,66 @@ bool Renderer::getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
 	return true;
 }
 
+
+void Renderer::extractC64Indexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2) {
+	if (cm1 == 0xaa && cm2 == 0x5a) {
+		i1 = 2;
+		i2 = 3;
+	} else if (cm1 == 0x4f && cm2 == 0x46) {
+		i1 = 0;
+		i2 = 2;
+	} else if (cm1 == 0x56 && cm2 == 0x45) {
+		i1 = 0;
+		i2 = 1;
+	} else if (cm1 == 0xa0 && cm2 == 0x55) {
+		i1 = 1;
+		i2 = 3;
+	} else if (cm1 == 0x4c && cm2 == 0x54) {
+		i1 = 1;
+		i2 = 2;
+	} else if (cm1 == 0x41 && cm2 == 0x52) {
+		i1 = 0;
+		i2 = 3;
+	} else if (cm1 == 0x5a && cm2 == 0xa5) {
+		i1 = 0;
+		i2 = 0;
+	} else if (cm1 == 0xbb && cm2 == 0xee) {
+		i1 = 0;
+		i2 = 0;
+	} else if (cm1 == 0x5f && cm2 == 0xaf) {
+		i1 = 0;
+		i2 = 0;
+	} else if (cm1 == 0xfb && cm2 == 0xfe) {
+		i1 = 0;
+		i2 = 0;
+	} else {
+		i1 = 0;
+		i2 = 0;
+	}
+}
+
+
 bool Renderer::getRGBAtC64(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2) {
 	if (index == _keyColor)
 		return false;
 
+	if (index <= 4) { // Solid colors
+		selectColorFromFourColorPalette(index - 1, r1, g1, b1);
+		r2 = r1;
+		g2 = g1;
+		b2 = b1;
+		return true;
+	}
+
+	uint8 i1, i2;
 	byte *entry = (*_colorMap)[index - 1];
-	byte be = *(entry);
-	readFromPalette(be >> 4, r1, g1, b1);
+	uint8 cm1 = *(entry);
 	entry++;
-	be = *(entry);
-	readFromPalette(be >> 4, r2, g2, b2);
+	uint8 cm2 = *(entry);
+
+	extractC64Indexes(cm1, cm2, i1, i2);
+	selectColorFromFourColorPalette(i1, r1, g1, b1);
+	selectColorFromFourColorPalette(i2, r2, g2, b2);
 	return true;
 }
 
@@ -170,7 +220,7 @@ void Renderer::extractCPCIndexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2) {
 		error("%x %x", cm1, cm2);
 }
 
-void Renderer::selectColorFromCPCPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1) {
+void Renderer::selectColorFromFourColorPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1) {
 	if (index == 0) {
 		r1 = 0;
 		g1 = 0;
@@ -191,7 +241,7 @@ bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
 
 	assert (_renderMode == Common::kRenderCPC);
 	if (index <= 4) { // Solid colors
-		selectColorFromCPCPalette(index - 1, r1, g1, b1);
+		selectColorFromFourColorPalette(index - 1, r1, g1, b1);
 		r2 = r1;
 		g2 = g1;
 		b2 = b1;
@@ -205,8 +255,8 @@ bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
 	uint8 cm2 = *(entry);
 
 	extractCPCIndexes(cm1, cm2, i1, i2);
-	selectColorFromCPCPalette(i1, r1, g1, b1);
-	selectColorFromCPCPalette(i2, r2, g2, b2);
+	selectColorFromFourColorPalette(i1, r1, g1, b1);
+	selectColorFromFourColorPalette(i2, r2, g2, b2);
 	return true;
 }
 
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index 3d43afc9094..a8b08b5cd66 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -105,7 +105,9 @@ public:
 	bool getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
 	bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
 	void extractCPCIndexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
-	void selectColorFromCPCPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1);
+	void extractC64Indexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
+
+	void selectColorFromFourColorPalette(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1);
 
 	virtual void setStippleData(byte *data) {};
 	virtual void useStipple(bool enabled) {};




More information about the Scummvm-git-logs mailing list