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

phcoder noreply at scummvm.org
Wed Dec 21 13:58:20 UTC 2022


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

Summary:
e1698de9ca SAGA: Replace Usage of color literals with consts
045cdb4e8f SAGA: Don't overwrite palette above actually present one
fe298487b9 SAGA: Load extra palette for ECS
8b3aaa3351 SAGA: Use colors from ECS-palettes when needed
48fe6b038f SAGA: Use ECS colors for speech colors when needed
1750e0880c SAGA: Switch palette at line 137 when running ECS version
fcf31d2593 SAGA: Fix displayinfo for ECS ITE
73f04a31ab SAGA: Support masked blit for sprites
8b2019707d SAGA: Fix placard color in ITE ECS
291e397698 SAGA: Fix offset in debug messages
b2987256b8 SAGA: Remove dead code
63a39b6471 SAGA: Remove suffix _CD from detection_tables.h
097fd8765e SAGA: Add ITE ECS floppies
4ed51f9005 SAGA: Add AGA demo floppy release


Commit: e1698de9ca26b988a7ea5c40c85af622c4c5297d
    https://github.com/scummvm/scummvm/commit/e1698de9ca26b988a7ea5c40c85af622c4c5297d
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Replace Usage of color literals with consts

Changed paths:
    engines/saga/displayinfo.h
    engines/saga/saga.cpp
    engines/saga/saga.h
    engines/saga/sfuncs.cpp


diff --git a/engines/saga/displayinfo.h b/engines/saga/displayinfo.h
index 736c77bb1b9..3031d6e7e77 100644
--- a/engines/saga/displayinfo.h
+++ b/engines/saga/displayinfo.h
@@ -263,8 +263,8 @@ static const GameDisplayInfo ITE_DisplayInfo = {
 	320,			// status width
 	11,				// status height
 	2,				// status text y offset
-	186,			// status text color
-	15,				// status BG color
+	kITEColorGreen,		// status text color
+	kITEColorBlack,		// status BG color
 	308,137,		// save reminder pos
 	12,12,			// save reminder w & h
 	6,				// save reminder first sprite number
diff --git a/engines/saga/saga.cpp b/engines/saga/saga.cpp
index 6317d5e4139..96955d02636 100644
--- a/engines/saga/saga.cpp
+++ b/engines/saga/saga.cpp
@@ -736,7 +736,7 @@ ColorId SagaEngine::KnownColor2ColorId(KnownColor knownColor) {
 			colorId = kITEColorBlack;
 			break;
 		case (kKnownColorVerbTextActive):
-			colorId = (ColorId)96;
+			colorId = kITEColorYellow60;
 			break;
 
 		default:
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 0e33e8354b5..488081f5ace 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -336,6 +336,7 @@ enum ColorId {
 	kITEColorDarkGrey = 0x0b,
 	kITEColorDarkGrey0C = 0x0C,
 	kITEColorBlack = 0x0f,
+	kITEColorYellow60 = 0x60,
 	kITEColorRed = 0x65,
 	kITEColorDarkBlue8a = 0x8a,
 	kITEColorBlue89 = 0x89,
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index db156766a4b..be299de4f98 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -1086,7 +1086,7 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
 	event.type = kEvTOneshot;
 	event.code = kGraphicsEvent;
 	event.op = kEventFillRect;
-	event.param = 138;
+	event.param = kITEColorDarkBlue8a;
 	event.param2 = 0;
 	event.param3 = _vm->_scene->getHeight();
 	event.param4 = 0;


Commit: 045cdb4e8f37037c25200e275893490eadee2868
    https://github.com/scummvm/scummvm/commit/045cdb4e8f37037c25200e275893490eadee2868
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Don't overwrite palette above actually present one

Changed paths:
    engines/saga/gfx.cpp


diff --git a/engines/saga/gfx.cpp b/engines/saga/gfx.cpp
index ea05381b4e5..8b3d945ecb9 100644
--- a/engines/saga/gfx.cpp
+++ b/engines/saga/gfx.cpp
@@ -199,7 +199,7 @@ void Gfx::setPalette(const PalEntry *pal, bool full) {
 
 	if (_vm->getGameId() == GID_ITE || full) {
 		from = 0;
-		numcolors = PAL_ENTRIES;
+		numcolors = _vm->getPalNumEntries();
 	} else {
 		from = 0;
 		numcolors = 248;
@@ -268,7 +268,7 @@ void Gfx::palToBlack(PalEntry *srcPal, double percent) {
 
 	if (_vm->getGameId() == GID_ITE) {
 		from = 0;
-		numcolors = PAL_ENTRIES;
+		numcolors = _vm->getPalNumEntries();
 	} else {
 		from = 0;
 		numcolors = 248;
@@ -284,7 +284,7 @@ void Gfx::palToBlack(PalEntry *srcPal, double percent) {
 	fpercent = 1.0 - fpercent;
 
 	// Use the correct percentage change per frame for each palette entry
-	for (i = 0, ppal = _currentPal; i < PAL_ENTRIES; i++, ppal += 3) {
+	for (i = 0, ppal = _currentPal; i < (int) _vm->getPalNumEntries(); i++, ppal += 3) {
 		if (i < from || i >= from + numcolors)
 			palE = &_globalPalette[i];
 		else
@@ -336,7 +336,7 @@ void Gfx::blackToPal(PalEntry *srcPal, double percent) {
 
 	if (_vm->getGameId() == GID_ITE) {
 		from = 0;
-		numcolors = PAL_ENTRIES;
+		numcolors = _vm->getPalNumEntries();
 	} else {
 		from = 0;
 		numcolors = 248;
@@ -350,7 +350,7 @@ void Gfx::blackToPal(PalEntry *srcPal, double percent) {
 	fpercent = percent * percent;
 
 	// Use the correct percentage change per frame for each palette entry
-	for (i = 0, ppal = _currentPal; i < PAL_ENTRIES; i++, ppal += 3) {
+	for (i = 0, ppal = _currentPal; i < (int) _vm->getPalNumEntries(); i++, ppal += 3) {
 		if (i < from || i >= from + numcolors)
 			palE = &_globalPalette[i];
 		else


Commit: fe298487b9830c6633709b6d6133c441e690585b
    https://github.com/scummvm/scummvm/commit/fe298487b9830c6633709b6d6133c441e690585b
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Load extra palette for ECS

Amiga ITE switches palette after line 137.
Additionally options uses a separate palette.
Rather than jungling with 3 palettes we just load
all 3 palettes.

Changed paths:
    engines/saga/gfx.cpp
    engines/saga/gfx.h


diff --git a/engines/saga/gfx.cpp b/engines/saga/gfx.cpp
index 8b3d945ecb9..b184f949d9d 100644
--- a/engines/saga/gfx.cpp
+++ b/engines/saga/gfx.cpp
@@ -192,6 +192,97 @@ void Gfx::initPalette() {
 	setPalette(_globalPalette, true);
 }
 
+void Gfx::loadECSExtraPalettes() {
+	if (!_vm->isECS())
+		return;
+
+	static const PalEntry ecsExtraPal[64] = {
+		// Bottom palette
+		{ 0x00, 0x00, 0x00 },
+		{ 0x00, 0x00, 0x00 },
+		{ 0x33, 0x11, 0x11 },
+		{ 0x00, 0x44, 0x33 },
+		{ 0x55, 0x33, 0x22 },
+		{ 0x33, 0xdd, 0x44 },
+		{ 0x44, 0x00, 0x66 },
+		{ 0x77, 0x22, 0x00 },
+		{ 0x22, 0x55, 0xaa },
+		{ 0x77, 0x55, 0x44 },
+		{ 0x66, 0x11, 0x88 },
+		{ 0xBB, 0x55, 0x22 },
+		{ 0x88, 0x88, 0x66 },
+		{ 0xEE, 0x77, 0x33 },
+		{ 0xCC, 0xBB, 0x66 },
+		{ 0xFF, 0xFF, 0xFF },
+		{ 0x00, 0x00, 0x00 },
+		{ 0x33, 0x00, 0x44 },
+		{ 0x33, 0x33, 0x55 },
+		{ 0x22, 0x00, 0x77 },
+		{ 0x00, 0x33, 0x77 },
+		{ 0x00, 0x44, 0x99 },
+		{ 0x66, 0x66, 0x88 },
+		{ 0x00, 0x55, 0xBB },
+		{ 0x44, 0x77, 0xBB },
+		{ 0x00, 0x77, 0xDD },
+		{ 0x55, 0x99, 0xCC },
+		{ 0x55, 0x99, 0xCC },
+		{ 0xDD, 0x99, 0x66 },
+		{ 0xCC, 0xBB, 0x99 },
+		{ 0xAA, 0xCC, 0xCC },
+		{ 0xBB, 0xCC, 0xCC },
+
+		// Options palette
+		{ 0x00, 0x00, 0x00 },
+		{ 0x00, 0x33, 0x77 },
+		{ 0x00, 0x55, 0xbb },
+		{ 0x00, 0x44, 0x33 },
+		{ 0x44, 0x77, 0xbb },
+		{ 0x00, 0x66, 0x44 },
+		{ 0x44, 0x00, 0x66 },
+		{ 0x77, 0x22, 0x00 },
+		{ 0x00, 0x33, 0x77 },
+		{ 0x55, 0x99, 0xcc },
+		{ 0x66, 0x11, 0x88 },
+		{ 0xbb, 0x55, 0x22 },
+		{ 0x55, 0x99, 0xcc },
+		{ 0xee, 0x77, 0x33 },
+		{ 0xcc, 0xbb, 0x66 },
+		{ 0xff, 0xff, 0xff },
+		{ 0x00, 0x00, 0x00 },
+		{ 0x22, 0x22, 0x44 },
+		{ 0x33, 0x33, 0x55 },
+		{ 0x22, 0x00, 0x77 },
+		{ 0x00, 0x33, 0x77 },
+		{ 0x00, 0x44, 0x99 },
+		{ 0x44, 0x11, 0x99 },
+		{ 0x00, 0x55, 0xbb },
+		{ 0x22, 0x66, 0xbb },
+		{ 0x44, 0x77, 0xbb },
+		{ 0x00, 0x77, 0xdd },
+		{ 0x55, 0x99, 0xcc },
+		{ 0x77, 0xaa, 0xdd },
+		{ 0x88, 0xbb, 0xdd },
+		{ 0xbb, 0xc3, 0xcf },
+		{ 0xcc, 0xee, 0xff },
+
+		// Here you can add more colors if it simplifies the code
+	};
+
+	int i;
+
+	for (i = 0; i < ARRAYSIZE(ecsExtraPal); i++) {
+		_currentPal[(i + 32) * 3] = _globalPalette[i + 32].red = ecsExtraPal[i].red;
+		_currentPal[(i + 32) * 3 + 1] = _globalPalette[i + 32].green = ecsExtraPal[i].green;
+		_currentPal[(i + 32) * 3 + 2] = _globalPalette[i + 32].blue = ecsExtraPal[i].blue;
+	}
+
+	for (i += 32; i < PAL_ENTRIES; i++) {
+		_currentPal[i * 3] = _globalPalette[i].red = 0;
+		_currentPal[i * 3 + 1] = _globalPalette[i].green = 0;
+		_currentPal[i * 3 + 2] = _globalPalette[i].blue = 0;
+	}
+}
+
 void Gfx::setPalette(const PalEntry *pal, bool full) {
 	int i;
 	byte *ppal;
@@ -211,6 +302,10 @@ void Gfx::setPalette(const PalEntry *pal, bool full) {
 		ppal[2] = _globalPalette[i].blue = pal[i].blue;
 	}
 
+	if (_vm->isECS()) {
+		loadECSExtraPalettes();
+	}
+
 	// Color 0 should always be black in IHNM
 	if (_vm->getGameId() == GID_IHNM)
 		memset(&_currentPal[0 * 3], 0, 3);
diff --git a/engines/saga/gfx.h b/engines/saga/gfx.h
index b481460cee1..7fa485213b0 100644
--- a/engines/saga/gfx.h
+++ b/engines/saga/gfx.h
@@ -145,6 +145,7 @@ public:
 
 	void initPalette();
 	void setPalette(const PalEntry *pal, bool full = false);
+	void loadECSExtraPalettes();
 	void setPaletteColor(int n, int r, int g, int b);
 	void getCurrentPal(PalEntry *src_pal);
 	void savePalette() { getCurrentPal(_savedPalette); }


Commit: 8b3aaa335177b142586f90b3051ca186087e6dce
    https://github.com/scummvm/scummvm/commit/8b3aaa335177b142586f90b3051ca186087e6dce
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Use colors from ECS-palettes when needed

Changed paths:
    engines/saga/displayinfo.h
    engines/saga/events.cpp
    engines/saga/gfx.cpp
    engines/saga/interface.cpp
    engines/saga/puzzle.cpp
    engines/saga/saga.cpp
    engines/saga/saga.h
    engines/saga/script.cpp
    engines/saga/sfuncs.cpp


diff --git a/engines/saga/displayinfo.h b/engines/saga/displayinfo.h
index 3031d6e7e77..8bdfe819104 100644
--- a/engines/saga/displayinfo.h
+++ b/engines/saga/displayinfo.h
@@ -263,8 +263,8 @@ static const GameDisplayInfo ITE_DisplayInfo = {
 	320,			// status width
 	11,				// status height
 	2,				// status text y offset
-	kITEColorGreen,		// status text color
-	kITEColorBlack,		// status BG color
+	kITEDOSColorGreen,		// status text color
+	kITEDOSColorBlack,		// status BG color
 	308,137,		// save reminder pos
 	12,12,			// save reminder w & h
 	6,				// save reminder first sprite number
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index b38673bf080..988227a2d17 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -303,6 +303,7 @@ int Events::handleOneShot(Event *event) {
 		{
 			Surface *backGroundSurface = _vm->_render->getBackGroundSurface();
 			BGInfo bgInfo;
+			byte black = _vm->iteColorBlack();
 
 			if (!(_vm->_scene->getFlags() & kSceneFlagISO)) {
 				_vm->_scene->getBGInfo(bgInfo);
@@ -320,10 +321,10 @@ int Events::handleOneShot(Event *event) {
 					rect3.moveTo(bgInfo.bounds.right, bgInfo.bounds.top - 2);
 					rect4.moveTo(bgInfo.bounds.left - 2, bgInfo.bounds.bottom);
 
-					backGroundSurface->drawRect(rect1, kITEColorBlack);
-					backGroundSurface->drawRect(rect2, kITEColorBlack);
-					backGroundSurface->drawRect(rect3, kITEColorBlack);
-					backGroundSurface->drawRect(rect4, kITEColorBlack);
+					backGroundSurface->drawRect(rect1, black);
+					backGroundSurface->drawRect(rect2, black);
+					backGroundSurface->drawRect(rect3, black);
+					backGroundSurface->drawRect(rect4, black);
 				}
 
 				if (event->param == kEvPSetPalette) {
diff --git a/engines/saga/gfx.cpp b/engines/saga/gfx.cpp
index b184f949d9d..e25e6c261cb 100644
--- a/engines/saga/gfx.cpp
+++ b/engines/saga/gfx.cpp
@@ -562,8 +562,8 @@ void Gfx::showCursor(bool state) {
 void Gfx::setCursor(CursorType cursorType) {
 	if (_vm->getGameId() == GID_ITE) {
 		// Set up the mouse cursor
-		const byte A = kITEColorLightGrey;
-		const byte B = kITEColorWhite;
+		const byte A = _vm->isECS() ? kITEECSColorWhite : kITEDOSColorLightGrey;
+		const byte B = _vm->isECS() ? kITEECSColorTransBlack : kITEDOSColorWhite;
 
 		const byte cursor_img_default[CURSOR_W * CURSOR_H] = {
 			0, 0, 0, A, 0, 0, 0,
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index ce075bc799a..8efa9d0e5c9 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -237,7 +237,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
 		memcpy(n.getBuffer(), _mainPanel.image.getBuffer() + kSkipLines * _mainPanel.imageWidth, _mainPanel.imageHeight * _mainPanel.imageWidth);
 		// Fill button panel with blue to remove western button outlies. No idea why it was done in the code rather than resource itself
 		for (unsigned y = 0; y < 43; y++)
-			memset(n.getBuffer() + y * _mainPanel.imageWidth + 53, kITEColorBlue89, 114);
+			memset(n.getBuffer() + y * _mainPanel.imageWidth + 53, _vm->isECS() ? kITEECSBottomColorBlue : kITEDOSColorBlue89, 114);
 		_mainPanel.image = n;
 	}
 
@@ -976,7 +976,7 @@ void Interface::drawOption() {
 
 	if (_optionSaveRectTop.height() > 0) {
 		if (_vm->getGameId() == GID_ITE)
-			_vm->_gfx->drawRect(_optionSaveRectTop, kITEColorDarkGrey);
+			_vm->_gfx->drawRect(_optionSaveRectTop, _vm->iteColorOptionsDarkGrey());
 	}
 
 	if (_vm->getGameId() == GID_ITE) {
@@ -990,7 +990,7 @@ void Interface::drawOption() {
 	}
 
 	if (_optionSaveRectBottom.height() > 0) {
-		_vm->_gfx->drawRect(_optionSaveRectBottom, kITEColorDarkGrey);
+		_vm->_gfx->drawRect(_optionSaveRectBottom, _vm->iteColorOptionsDarkGrey());
 	}
 
 	_optionPanel.calcPanelButtonRect(_optionSaveFilePanel, rect);
@@ -999,10 +999,10 @@ void Interface::drawOption() {
 	fontHeight = _vm->_font->getHeight(kKnownFontSmall);
 	for (uint j = 0; j < _vm->getDisplayInfo().optionSaveFileVisible; j++) {
 		if (_vm->getGameId() == GID_ITE)
-			bgColor = kITEColorDarkGrey0C;
+			bgColor = _vm->iteColorOptionsDarkGrey0C();
 		else
 			bgColor = _vm->KnownColor2ColorId(kKnownColorBlack);
-		fgColor = kITEColorBrightWhite;
+		fgColor = _vm->iteColorOptionsBrightWhite();
 
 		idx = j + _optionSaveFileTop;
 		if (idx == _optionSaveFileTitleNumber) {
@@ -2166,7 +2166,7 @@ void Interface::drawInventory() {
 		_mainPanel.calcPanelButtonRect(&_mainPanel.buttons[i], rect);
 
 		if (_vm->getGameId() == GID_ITE)
-			_vm->_gfx->drawRect(rect, kITEColorDarkGrey);
+			_vm->_gfx->drawRect(rect, _vm->isECS() ? kITEECSBottomColorDarkGrey : kITEDOSColorDarkGrey);
 		else
 			_vm->_gfx->drawRect(rect, _vm->KnownColor2ColorId(kKnownColorBlack));
 
@@ -2200,19 +2200,19 @@ void Interface::drawButtonBox(const Rect& rect, ButtonKind kind, bool down) {
 	case kSlider:
 		cornerColor = 0x8b;
 		frameColor = _vm->KnownColor2ColorId(kKnownColorBlack);
-		fillColor = kITEColorLightBlue96;
-		odl = kITEColorDarkBlue8a;
-		our = kITEColorLightBlue92;
+		fillColor = _vm->iteColorOptionsLightBlue96();
+		odl = _vm->iteColorOptionsDarkBlue8a();
+		our = _vm->iteColorOptionsLightBlue92();
 		idl = 0x89;
 		iur = 0x94;
-		solidColor = down ? kITEColorLightBlue94 : kITEColorLightBlue96;
+		solidColor = down ? _vm->iteColorOptionsLightBlue94() : _vm->iteColorOptionsLightBlue96();
 		break;
 	case kEdit:
 		if (_vm->getGameId() == GID_ITE) {
-			cornerColor = frameColor = fillColor = kITEColorLightBlue96;
-			our = kITEColorDarkBlue8a;
-			odl = kITEColorLightBlue94;
-			solidColor = down ? kITEColorBlue : kITEColorDarkGrey0C;
+			cornerColor = frameColor = fillColor = _vm->iteColorOptionsLightBlue96();
+			our = _vm->iteColorOptionsDarkBlue8a();
+			odl = _vm->iteColorOptionsLightBlue94();
+			solidColor = down ? _vm->iteColorOptionsBlue() : _vm->iteColorOptionsDarkGrey0C();
 		} else {
 			cornerColor = frameColor = fillColor = _vm->KnownColor2ColorId(kKnownColorBlack);
 			our = odl = solidColor = _vm->KnownColor2ColorId(kKnownColorBlack);
@@ -2223,9 +2223,9 @@ void Interface::drawButtonBox(const Rect& rect, ButtonKind kind, bool down) {
 	default:
 		cornerColor = 0x8b;
 		frameColor = _vm->KnownColor2ColorId(kKnownColorBlack);
-		solidColor = fillColor = kITEColorLightBlue96;
-		odl = kITEColorDarkBlue8a;
-		our = kITEColorLightBlue94;
+		solidColor = fillColor = _vm->iteColorOptionsLightBlue96();
+		odl = _vm->iteColorOptionsDarkBlue8a();
+		our = _vm->iteColorOptionsLightBlue94();
 		idl = 0x97;
 		iur = 0x95;
 		if (down) {
@@ -2590,15 +2590,15 @@ void Interface::converseDisplayTextLines() {
 	Point textPoint;
 
 	if (_vm->getGameId() == GID_ITE) {
-		bulletForegnd = kITEColorGreen;
-		bulletBackgnd = kITEColorBlack;
+		bulletForegnd = _vm->iteColorBottomGreen();
 	} else {
 		bulletForegnd = _vm->KnownColor2ColorId(kKnownColorBrightWhite);
-		bulletBackgnd = _vm->KnownColor2ColorId(kKnownColorBlack);
 	}
 
+	bulletBackgnd = _vm->KnownColor2ColorId(kKnownColorBlack);
+
 	if (_vm->getGameId() == GID_ITE)
-		_vm->_gfx->drawRect(rect, kITEColorDarkGrey);	// fill bullet place
+		_vm->_gfx->drawRect(rect, _vm->iteColorBottomDarkGrey());	// fill bullet place
 	else if (_vm->getGameId() == GID_IHNM)
 		// TODO: Add these to IHNM_DisplayInfo?
 		_vm->_gfx->drawRect(Common::Rect(118, 345, 603, 463), _vm->KnownColor2ColorId(kKnownColorBlack));	// fill converse rect
@@ -2612,16 +2612,16 @@ void Interface::converseDisplayTextLines() {
 
 		if (_conversePos >= 0 && _converseText[_conversePos].stringNum == _converseText[relPos].stringNum) {
 			if (_vm->getGameId() == GID_ITE) {
-				foregnd = kITEColorBrightWhite;
-				backgnd = (!_vm->leftMouseButtonPressed()) ? kITEColorDarkGrey : kITEColorGrey;
+				foregnd = _vm->iteColorBottomBrightWhite();
+				backgnd = (!_vm->leftMouseButtonPressed()) ? _vm->iteColorBottomDarkGrey() : _vm->iteColorBottomGrey();
 			} else {
 				foregnd = _vm->KnownColor2ColorId(kKnownColorVerbTextActive);
 				backgnd = _vm->KnownColor2ColorId(kKnownColorVerbTextActive);
 			}
 		} else {
 			if (_vm->getGameId() == GID_ITE) {
-				foregnd = kITEColorBlue;
-				backgnd = kITEColorDarkGrey;
+				foregnd = _vm->iteColorBottomBlue();
+				backgnd = _vm->iteColorBottomDarkGrey();
 			} else {
 				foregnd = _vm->KnownColor2ColorId(kKnownColorBrightWhite);
 				backgnd = _vm->KnownColor2ColorId(kKnownColorBlack);
@@ -2652,7 +2652,8 @@ void Interface::converseDisplayTextLines() {
 			textPoint.x = rect.right - _vm->_font->getStringWidth(kKnownFontSmall, str, strlen(str), kFontNormal) - 1;
 		textPoint.y = rect.top;
 		if (_vm->getGameId() == GID_ITE)
-			_vm->_font->textDraw(kKnownFontSmall, str, textPoint, foregnd, kITEColorBlack, _vm->getPlatform() == Common::kPlatformPC98 ?  kFontNormal : kFontShadow);
+			_vm->_font->textDraw(kKnownFontSmall, str, textPoint, foregnd, _vm->KnownColor2ColorId(kKnownColorBlack),
+					     _vm->getPlatform() == Common::kPlatformPC98 ?  kFontNormal : kFontShadow);
 		else
 			_vm->_font->textDraw(kKnownFontVerb, str, textPoint, foregnd, _vm->KnownColor2ColorId(kKnownColorBlack), kFontShadow);
 	}
diff --git a/engines/saga/puzzle.cpp b/engines/saga/puzzle.cpp
index d69fbf5c3ca..7c61a0b0528 100644
--- a/engines/saga/puzzle.cpp
+++ b/engines/saga/puzzle.cpp
@@ -402,7 +402,7 @@ void Puzzle::solicitHint() {
 	// precautions to avoid race conditions.
 	int i;
 
-	_vm->_actor->setSpeechColor(1, kITEColorBlack);
+	_vm->_actor->setSpeechColor(1, _vm->iteColorBlack());
 
 	_vm->getTimerManager()->removeTimerProc(&hintTimerCallback);
 
@@ -534,7 +534,7 @@ void Puzzle::giveHint() {
 	if (_hintCount == 2 && total > 3)
 		_hintCount++;
 
-	_vm->_actor->setSpeechColor(1, kITEColorBlack);
+	_vm->_actor->setSpeechColor(1, _vm->iteColorBlack());
 
 	if (_hintCount < 3) {
 		_vm->_actor->nonActorSpeech(_hintBox, &hintStr[_lang][_hintCount], 1, PUZZLE_HINT_SOUNDS + _hintCount * 3 + _hintSpeaker, 0);
diff --git a/engines/saga/saga.cpp b/engines/saga/saga.cpp
index 96955d02636..dfbc309cee5 100644
--- a/engines/saga/saga.cpp
+++ b/engines/saga/saga.cpp
@@ -707,36 +707,36 @@ void SagaEngine::getExcuseInfo(int verb, const char *&textString, int &soundReso
 }
 
 ColorId SagaEngine::KnownColor2ColorId(KnownColor knownColor) {
-	ColorId colorId = kITEColorTransBlack;
+	ColorId colorId = kITEDOSColorTransBlack;
 
 	if (getGameId() == GID_ITE) {
 		switch (knownColor) {
 		case(kKnownColorTransparent):
-			colorId = kITEColorTransBlack;
+			colorId = iteColorTransBlack();
 			break;
 		case (kKnownColorBrightWhite):
-			colorId = kITEColorBrightWhite;
+			colorId = iteColorBrightWhite();
 			break;
 		case (kKnownColorWhite):
-			colorId = kITEColorWhite;
+			colorId = iteColorWhite();
 			break;
 		case (kKnownColorBlack):
-			colorId = kITEColorBlack;
+			colorId = iteColorBlack();
 			break;
 		case (kKnownColorSubtitleTextColor):
-			colorId = (ColorId)255;
+			colorId = isECS() ? kITEECSColorWhite : (ColorId)255;
 			break;
 		case (kKnownColorSubtitleEffectColorPC98):
 			colorId = (ColorId)210;
 			break;
 		case (kKnownColorVerbText):
-			colorId = kITEColorBlue;
+			colorId = isECS() ? kITEECSBottomColorBlue : kITEDOSColorBlue;
 			break;
 		case (kKnownColorVerbTextShadow):
-			colorId = kITEColorBlack;
+			colorId = isECS() ? kITEECSColorBlack : kITEDOSColorBlack;
 			break;
 		case (kKnownColorVerbTextActive):
-			colorId = kITEColorYellow60;
+			colorId = isECS() ? kITEECSBottomColorYellow60 : kITEDOSColorYellow60;
 			break;
 
 		default:
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 488081f5ace..63c57c57c4e 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -328,23 +328,53 @@ struct StringsTable {
 typedef Common::Array<Point> PointList;
 
 enum ColorId {
-	kITEColorTransBlack = 0x00,
-	kITEColorBrightWhite = 0x01,
-	kITEColorWhite = 0x02,
-	kITEColorLightGrey = 0x04,
-	kITEColorGrey = 0x0a,
-	kITEColorDarkGrey = 0x0b,
-	kITEColorDarkGrey0C = 0x0C,
-	kITEColorBlack = 0x0f,
-	kITEColorYellow60 = 0x60,
-	kITEColorRed = 0x65,
-	kITEColorDarkBlue8a = 0x8a,
-	kITEColorBlue89 = 0x89,
-	kITEColorLightBlue92 = 0x92,
-	kITEColorBlue = 0x93,
-	kITEColorLightBlue94 = 0x94,
-	kITEColorLightBlue96 = 0x96,
-	kITEColorGreen = 0xba
+	// DOS and AGA palettes
+	kITEDOSColorTransBlack = 0x00,
+	kITEDOSColorBrightWhite = 0x01,
+	kITEDOSColorWhite = 0x02,
+	kITEDOSColorLightGrey = 0x04,
+	kITEDOSColorGrey = 0x0a,
+	kITEDOSColorDarkGrey = 0x0b,
+	kITEDOSColorDarkGrey0C = 0x0C,
+	kITEDOSColorBlack = 0x0f,
+	kITEDOSColorYellow60 = 0x60,
+	kITEDOSColorRed = 0x65,
+	kITEDOSColorDarkBlue8a = 0x8a,
+	kITEDOSColorBlue89 = 0x89,
+	kITEDOSColorLightBlue92 = 0x92,
+	kITEDOSColorBlue = 0x93,
+	kITEDOSColorLightBlue94 = 0x94,
+	kITEDOSColorLightBlue96 = 0x96,
+	kITEDOSColorGreen = 0xba,
+
+        // ECS palette
+
+	// Constant colors
+	kITEECSColorTransBlack = 0x00,
+	kITEECSColorBrightWhite = 0x4f,
+	kITEECSColorWhite = kITEECSColorBrightWhite,
+	kITEECSColorBlack = 0x50,
+
+	// ECS palette after the palette switch
+	kITEECSBottomColorGreen = 0x25,
+	kITEECSBottomColorLightBlue96 = 0x28,
+	kITEECSBottomColorWhite = 0x2f,
+	kITEECSBottomColorBrightWhite = 0x2f,
+	kITEECSBottomColorDarkGrey = 0x32,
+	kITEECSBottomColorGrey = 0x36,
+	kITEECSBottomColorBlue = 0x3b,
+	kITEECSBottomColorYellow60 = 0x3e,
+
+	// ECS palette for options
+	kITEECSOptionsColorLightBlue94 = 0x48,
+	kITEECSOptionsColorBlue = 0x48,
+	kITEECSOptionsColorDarkBlue8a = 0x48,
+	kITEECSOptionsColorLightBlue92 = 0x48,
+	kITEECSOptionsColorLightBlue96 = 0x48,
+	kITEECSOptionsColorDarkGrey0C = 0x49,
+	kITEECSOptionsColorBlack = kITEECSColorBlack,
+	kITEECSOptionsColorBrightWhite = kITEECSColorBrightWhite,
+	kITEECSOptionsColorDarkGrey = 0x52,
 };
 
 enum KnownColor {
@@ -607,8 +637,40 @@ public:
 	ColorId KnownColor2ColorId(KnownColor knownColor);
 	void setTalkspeed(int talkspeed);
 	int getTalkspeed() const;
+
+#define ITE_COLOR_DISPATCHER_TYPE(NAME, TYPE)				\
+	ColorId iteColor ## TYPE ## NAME() const { return isECS() ? kITEECS ## TYPE ## Color ## NAME : kITEDOSColor ## NAME; }
+#define ITE_COLOR_DISPATCHER_BOTTOM(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, Bottom)
+#define ITE_COLOR_DISPATCHER_OPTIONS(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, Options)
+#define ITE_COLOR_DISPATCHER(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, )
+
+	ITE_COLOR_DISPATCHER(Black)
+	ITE_COLOR_DISPATCHER(TransBlack)
+	ITE_COLOR_DISPATCHER(BrightWhite)
+	ITE_COLOR_DISPATCHER(White)
+
+	ITE_COLOR_DISPATCHER_BOTTOM(DarkGrey)
+	ITE_COLOR_DISPATCHER_BOTTOM(Blue)
+	ITE_COLOR_DISPATCHER_BOTTOM(Grey)
+	ITE_COLOR_DISPATCHER_BOTTOM(White)
+	ITE_COLOR_DISPATCHER_BOTTOM(BrightWhite)
+	ITE_COLOR_DISPATCHER_BOTTOM(Green)
+
+	ITE_COLOR_DISPATCHER_OPTIONS(DarkGrey)
+	ITE_COLOR_DISPATCHER_OPTIONS(LightBlue92)
+	ITE_COLOR_DISPATCHER_OPTIONS(LightBlue94)
+	ITE_COLOR_DISPATCHER_OPTIONS(LightBlue96)
+	ITE_COLOR_DISPATCHER_OPTIONS(DarkBlue8a)
+	ITE_COLOR_DISPATCHER_OPTIONS(DarkGrey0C)
+	ITE_COLOR_DISPATCHER_OPTIONS(Blue)
+	ITE_COLOR_DISPATCHER_OPTIONS(BrightWhite)
+#undef ITE_COLOR_DISPATCHER
+#undef ITE_COLOR_DISPATCHER_BOTTOM
+#undef ITE_COLOR_DISPATCHER_OPTIONS
+#undef ITE_COLOR_DISPATCHER_TYPE
 };
 
+
 } // End of namespace Saga
 
 #endif
diff --git a/engines/saga/script.cpp b/engines/saga/script.cpp
index e2215a3f3a4..7032e02d19f 100644
--- a/engines/saga/script.cpp
+++ b/engines/saga/script.cpp
@@ -1296,7 +1296,7 @@ void Script::hitObject(bool leftButton) {
 
 				_leftButtonVerb = verb;
 				if (_pendingVerb > getVerbType(kVerbNone))
-					showVerb(kITEColorBrightWhite);
+					showVerb(_vm->iteColorBrightWhite());
 				else
 					showVerb();
 
@@ -1330,7 +1330,7 @@ void Script::hitObject(bool leftButton) {
 
 		_leftButtonVerb = verb;
 		if (_pendingVerb > getVerbType(kVerbNone))
-			showVerb(kITEColorBrightWhite);
+			showVerb(_vm->iteColorBrightWhite());
 		else
 			showVerb();
 	}
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index be299de4f98..980d5b8d2ad 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -1086,7 +1086,7 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
 	event.type = kEvTOneshot;
 	event.code = kGraphicsEvent;
 	event.op = kEventFillRect;
-	event.param = kITEColorDarkBlue8a;
+	event.param = kITEDOSColorDarkBlue8a;
 	event.param2 = 0;
 	event.param3 = _vm->_scene->getHeight();
 	event.param4 = 0;


Commit: 48fe6b038fcafd5fc8895245c5452bea78a05042
    https://github.com/scummvm/scummvm/commit/48fe6b038fcafd5fc8895245c5452bea78a05042
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Use ECS colors for speech colors when needed

Changed paths:
    engines/saga/actor.cpp
    engines/saga/itedata.cpp
    engines/saga/itedata.h


diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp
index 29d1c4b7eed..194ead0b574 100644
--- a/engines/saga/actor.cpp
+++ b/engines/saga/actor.cpp
@@ -262,7 +262,7 @@ Actor::Actor(SagaEngine *vm) : _vm(vm) {
 			actor->_scriptEntrypointNumber = ITE_ActorTable[i].scriptEntrypointNumber;
 			actor->_spriteListResourceId = ITE_ActorTable[i].spriteListResourceId;
 			actor->_frameListResourceId = ITE_ActorTable[i].frameListResourceId;
-			actor->_speechColor = ITE_ActorTable[i].speechColor;
+			actor->_speechColor = _vm->isECS() ? ITE_ActorECSSpeechColor[i] : ITE_ActorTable[i].speechColor;
 			actor->_sceneNumber = ITE_ActorTable[i].sceneIndex;
 			actor->_flags = ITE_ActorTable[i].flags;
 			actor->_currentAction = ITE_ActorTable[i].currentAction;
diff --git a/engines/saga/itedata.cpp b/engines/saga/itedata.cpp
index f66d13a1774..43a24408840 100644
--- a/engines/saga/itedata.cpp
+++ b/engines/saga/itedata.cpp
@@ -220,6 +220,189 @@ ActorTableData ITE_ActorTable[ITE_ACTORCOUNT] = {
 	{ 0,             9,  74,  -20,  -20,   0,  51, 145,  0,   5,  0, 0, 0}	// sundial rat
 };
 
+byte ITE_ActorECSSpeechColor[ITE_ACTORCOUNT] = {
+	kITEECSColorBrightWhite,
+	8,
+	5,
+	0xc,
+	0xf,
+	5,
+	0xf,
+	0xf,
+	0xf,
+	0xf,
+	5,
+	0xa,
+	0,
+	0,
+	8,
+	0xe,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0xe,
+	0xc,
+	0xe,
+	0xd,
+	0,
+	0,
+	0,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	8,
+	8,
+	8,
+	8,
+	0xe,
+	0xe,
+	0xe,
+	0xe,
+	0xc,
+	0xc,
+	0xc,
+	0,
+	0,
+	8,
+	8,
+	8,
+	0xc,
+	0,
+	0xa,
+	0xe,
+	0xa,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0xb,
+	0x9,
+	0x9,
+	8,
+	0xa,
+	0xc,
+	0xf,
+	0x9,
+	0xa,
+	0xa,
+	0xc,
+	0xf,
+	0xf,
+	0xa,
+	8,
+	0xa,
+	0x5,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0x5,
+	0xc,
+	0xc,
+	0x9,
+	0xc,
+	0x9,
+	0xc,
+	0xc,
+	0,
+	0,
+	0,
+	0xc,
+	0x5,
+	0xe,
+	0xa,
+	0,
+	0,
+	0,
+	0,
+	0xe,
+	0xa,
+	kITEECSColorBrightWhite,
+	0xc,
+	0xf,
+	0xf,
+	0x9,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	0x9,
+	0x9,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0xe,
+	0xc,
+	0xc,
+	0xe,
+	0x5,
+	kITEECSColorBrightWhite,
+	kITEECSColorBrightWhite,
+	0xe,
+	0xe,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0xc,
+	0,
+	0xc,
+	kITEECSColorBrightWhite,
+	8,
+	5,
+	0x8,
+	0,
+	0xf,
+	5,
+	0xe,
+	0xa,
+	0xc,
+	0xc,
+	0xa,
+	0xe,
+	0xd,
+	0xd,
+	0xe,
+	0xe,
+	8,
+	8,
+	8,
+	8,
+	8,
+	8,
+	0,
+	0xe,
+	0xc,
+	0x9,
+	0xc,
+};
 
 ObjectTableData ITE_ObjectTable[ITE_OBJECTCOUNT] = {
 	{  8,  49, 1256,  760,  0,  9,  5, kObjNotFlat }, // Magic Hat
diff --git a/engines/saga/itedata.h b/engines/saga/itedata.h
index 103890b67b8..e91617ae9b4 100644
--- a/engines/saga/itedata.h
+++ b/engines/saga/itedata.h
@@ -56,6 +56,7 @@ struct ActorTableData {
 #define ITE_ACTORCOUNT 181
 
 extern ActorTableData ITE_ActorTable[ITE_ACTORCOUNT];
+extern byte ITE_ActorECSSpeechColor[ITE_ACTORCOUNT];
 
 enum {
 	kObjUseWith = 0x01,


Commit: 1750e0880c647fa6e027dae85244d49af3799c43
    https://github.com/scummvm/scummvm/commit/1750e0880c647fa6e027dae85244d49af3799c43
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Switch palette at line 137 when running ECS version

Similar to what original does

Changed paths:
    engines/saga/interface.cpp
    engines/saga/render.cpp
    engines/saga/render.h


diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index 8efa9d0e5c9..0d58836a9a1 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -784,8 +784,14 @@ void Interface::draw() {
 	Point rightPortraitPoint;
 	Rect rect;
 
-	if (_vm->_scene->isInIntro() || _fadeMode == kFadeOut)
+	if (_fadeMode == kFadeOut) {
 		return;
+	}
+
+	_vm->_render->setSplitScreen(!_vm->_scene->isInIntro());
+	if (_vm->_scene->isInIntro()) {
+		return;
+	}
 
 	drawStatusBar();
 
diff --git a/engines/saga/render.cpp b/engines/saga/render.cpp
index bf10535c3e4..a9511d46c75 100644
--- a/engines/saga/render.cpp
+++ b/engines/saga/render.cpp
@@ -46,6 +46,7 @@ Render::Render(SagaEngine *vm, OSystem *system) {
 	_system = system;
 	_initialized = false;
 	_fullRefresh = true;
+	_splitScreen = false;
 	_dualSurface = (vm->getLanguage() == Common::JA_JPN);
 
 #ifdef SAGA_DEBUG
@@ -253,7 +254,24 @@ void Render::addDirtyRect(Common::Rect r) {
 	} else \
 		_system->copyRectToScreen(_vm->_gfx->getBackBufferPixels(), _vm->_gfx->getBackBufferWidth(), x, y, w, h)
 
+void Render::maskSplitScreen() {
+	if (!_vm->isECS())
+		return;
+	uint8 *start = _vm->_gfx->getBackBufferPixels() + 137 * _vm->_gfx->getBackBufferWidth();
+	uint8 *end = _vm->_gfx->getBackBufferPixels() + _vm->_gfx->getBackBufferHeight() * _vm->_gfx->getBackBufferWidth();
+	if (_splitScreen) {
+		for (uint8 *ptr = start; ptr < end; ptr++)
+			if (!(*ptr & 0xc0))
+				*ptr |= 0x20;
+	} else {
+		for (uint8 *ptr = start; ptr < end; ptr++)
+			if (!(*ptr & 0xc0))
+				*ptr &= ~0x20;
+	}
+}
+
 void Render::restoreChangedRects() {
+	maskSplitScreen();
 	if (!_fullRefresh) {
 		for (Common::List<Common::Rect>::const_iterator it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
 			//_backGroundSurface.frameRect(*it, 1);		// DEBUG
@@ -266,6 +284,7 @@ void Render::restoreChangedRects() {
 }
 
 void Render::drawDirtyRects() {
+	maskSplitScreen();
 	if (!_fullRefresh) {
 		for (Common::List<Common::Rect>::const_iterator it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
 			//_backGroundSurface.frameRect(*it, 2);		// DEBUG
diff --git a/engines/saga/render.h b/engines/saga/render.h
index dc433281ac4..bdcc3d5629f 100644
--- a/engines/saga/render.h
+++ b/engines/saga/render.h
@@ -89,6 +89,16 @@ public:
 		return _fullRefresh;
 	}
 
+	/**
+	 * ECS has only 32-color palette. ITE switches palette
+	 * after line 137 on most screens but not on intro. Set
+	 * whether to change palette after line 137.
+	 */
+	void setSplitScreen(bool flag) {
+		_splitScreen = flag;
+	}
+
+	void maskSplitScreen();
 	void drawDirtyRects();
 	void scale2xAndMergeOverlay(int x, int y, int w, int h);
 	void restoreChangedRects();
@@ -107,6 +117,7 @@ private:
 	Common::List<Common::Rect> _dirtyRects;
 	bool _fullRefresh;
 	bool _dualSurface;
+	bool _splitScreen;
 
 	// Module data
 	Surface _backGroundSurface;


Commit: fcf31d2593ba0d336accda3ed96cc0dd7969f4da
    https://github.com/scummvm/scummvm/commit/fcf31d2593ba0d336accda3ed96cc0dd7969f4da
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Fix displayinfo for ECS ITE

Changed paths:
    engines/saga/metaengine.cpp


diff --git a/engines/saga/metaengine.cpp b/engines/saga/metaengine.cpp
index 0b791b4d4ea..93e8ffeb295 100644
--- a/engines/saga/metaengine.cpp
+++ b/engines/saga/metaengine.cpp
@@ -257,6 +257,15 @@ const GameDisplayInfo &SagaEngine::getDisplayInfo() {
 		case GID_ITE:
 			if (getLanguage() == Common::ZH_TWN)
 				return ITE_DisplayInfo_ZH;
+			if (isECS()) {
+				static GameDisplayInfo ITE_DisplayInfo_ECS;
+				if (!ITE_DisplayInfo_ECS.width) {
+					ITE_DisplayInfo_ECS = ITE_DisplayInfo;
+					ITE_DisplayInfo_ECS.statusTextColor = kITEECSBottomColorGreen;
+					ITE_DisplayInfo_ECS.statusBGColor = kITEECSColorBlack;
+				}
+				return ITE_DisplayInfo_ECS;
+			}
 			return ITE_DisplayInfo;
 #ifdef ENABLE_IHNM
 		case GID_IHNM:


Commit: 73f04a31ab793caced0f1e140eb21616b0ddf17e
    https://github.com/scummvm/scummvm/commit/73f04a31ab793caced0f1e140eb21616b0ddf17e
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Support masked blit for sprites

ECS version does it in original for verb buttons, let's do the same

Changed paths:
    engines/saga/interface.cpp
    engines/saga/sprite.cpp
    engines/saga/sprite.h


diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index 0d58836a9a1..18699817c49 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -207,7 +207,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
 #endif
 
 	// Main panel sprites
-	_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites);
+	_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites, _vm->isECS() ? 0x10 : 0);
 	if (!_vm->_script->isNonInteractiveDemo()) {
 		// Option panel sprites
 		_vm->_sprite->loadList(_vm->getResourceDescription()->optionPanelSpritesResourceId, _optionPanel.sprites);
diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp
index f0e451fe257..c8b231872db 100644
--- a/engines/saga/sprite.cpp
+++ b/engines/saga/sprite.cpp
@@ -146,7 +146,7 @@ Sprite::~Sprite() {
 	debug(8, "Shutting down sprite subsystem...");
 }
 
-void Sprite::loadList(int resourceId, SpriteList &spriteList) {
+void Sprite::loadList(int resourceId, SpriteList &spriteList, byte keepMask) {
 	ByteArray spriteListData;
 	_vm->_resource->loadResource(_spriteContext, resourceId, spriteListData);
 
@@ -220,6 +220,7 @@ void Sprite::loadList(int resourceId, SpriteList &spriteList) {
 					blitAmigaSprite<4, 8>(&_decodeBuf.front(), spriteInfo->width, spriteDataPointer, inputLength, spriteInfo->width, spriteInfo->height);
 			} else
 				decodeRLEBuffer(spriteDataPointer, inputLength, outputLength);
+			spriteInfo->keepMask = keepMask;
 			byte *dst = &spriteInfo->decodedBuffer.front();
 #ifdef ENABLE_IHNM
 			// IHNM sprites are upside-down, for reasons which i can only
@@ -273,7 +274,7 @@ void Sprite::getScaledSpriteBuffer(SpriteList &spriteList, uint spriteNumber, in
 	}
 }
 
-void Sprite::drawClip(const Point &spritePointer, int width, int height, const byte *spriteBuffer, bool clipToScene) {
+void Sprite::drawClip(const Point &spritePointer, int width, int height, const byte *spriteBuffer, bool clipToScene, byte keepMask) {
 	Common::Rect clipRect = clipToScene ? _vm->_scene->getSceneClip() : _vm->getDisplayClip();
 
 	int xDstOffset, yDstOffset, xSrcOffset, ySrcOffset, xDiff, yDiff, cWidth, cHeight;
@@ -332,25 +333,48 @@ void Sprite::drawClip(const Point &spritePointer, int width, int height, const b
 	assert(((const byte *)spriteBuffer + (width * height)) >= (const byte *)(srcRowPointer + width * (cHeight - 1) + cWidth));
 
 	const byte *srcPointerFinish2 = srcRowPointer + width * cHeight;
-	for (;;) {
-		srcPointer = srcRowPointer;
-		bufPointer = bufRowPointer;
-		const byte *srcPointerFinish = srcRowPointer + cWidth;
+	if (keepMask) {
 		for (;;) {
-			if (*srcPointer != 0) {
-				*bufPointer = *srcPointer;
+			srcPointer = srcRowPointer;
+			bufPointer = bufRowPointer;
+			const byte *srcPointerFinish = srcRowPointer + cWidth;
+			for (;;) {
+				if (*srcPointer != 0) {
+					*bufPointer = *srcPointer | (*bufPointer & keepMask);
+				}
+				srcPointer++;
+				bufPointer++;
+				if (srcPointer == srcPointerFinish) {
+					break;
+				}
 			}
-			srcPointer++;
-			bufPointer++;
-			if (srcPointer == srcPointerFinish) {
+			srcRowPointer += width;
+			if (srcRowPointer == srcPointerFinish2) {
 				break;
 			}
+			bufRowPointer += backBufferPitch;
 		}
-		srcRowPointer += width;
-		if (srcRowPointer == srcPointerFinish2) {
-			break;
+	} else {
+		for (;;) {
+			srcPointer = srcRowPointer;
+			bufPointer = bufRowPointer;
+			const byte *srcPointerFinish = srcRowPointer + cWidth;
+			for (;;) {
+				if (*srcPointer != 0) {
+					*bufPointer = *srcPointer;
+				}
+				srcPointer++;
+				bufPointer++;
+				if (srcPointer == srcPointerFinish) {
+					break;
+				}
+			}
+			srcRowPointer += width;
+			if (srcRowPointer == srcPointerFinish2) {
+				break;
+			}
+			bufRowPointer += backBufferPitch;
 		}
-		bufRowPointer += backBufferPitch;
 	}
 
 	_vm->_render->addDirtyRect(Common::Rect(xDstOffset, yDstOffset, xDstOffset + cWidth, yDstOffset + cHeight));
@@ -369,7 +393,7 @@ void Sprite::draw(SpriteList &spriteList, uint spriteNumber, const Point &screen
 	spritePointer.x = screenCoord.x + xAlign;
 	spritePointer.y = screenCoord.y + yAlign;
 
-	drawClip(spritePointer, width, height, spriteBuffer, clipToScene);
+	drawClip(spritePointer, width, height, spriteBuffer, clipToScene, spriteList[spriteNumber].keepMask);
 }
 
 void Sprite::draw(SpriteList &spriteList, uint spriteNumber, const Rect &screenRect, int scale, bool clipToScene) {
@@ -393,7 +417,7 @@ void Sprite::draw(SpriteList &spriteList, uint spriteNumber, const Rect &screenR
 	}
 	spritePointer.x = screenRect.left + xAlign + spw;
 	spritePointer.y = screenRect.top + yAlign + sph;
-	drawClip(spritePointer, width, height, spriteBuffer, clipToScene);
+	drawClip(spritePointer, width, height, spriteBuffer, clipToScene, spriteList[spriteNumber].keepMask);
 }
 
 bool Sprite::hitTest(SpriteList &spriteList, uint spriteNumber, const Point &screenCoord, int scale, const Point &testPoint) {
diff --git a/engines/saga/sprite.h b/engines/saga/sprite.h
index 18cf9963a59..5a24cb41ea0 100644
--- a/engines/saga/sprite.h
+++ b/engines/saga/sprite.h
@@ -35,8 +35,9 @@ struct SpriteInfo {
 	int height;
 	int xAlign;
 	int yAlign;
+	byte keepMask;
 
-	SpriteInfo() : width(0), height(0), xAlign(0), yAlign(0) {
+	SpriteInfo() : width(0), height(0), xAlign(0), yAlign(0), keepMask(0) {
 	}
 };
 
@@ -59,11 +60,11 @@ public:
 	void draw(SpriteList &spriteList, uint spriteNumber, const Point &screenCoord, int scale, bool clipToScene = false);
 
 	// main function
-	void drawClip(const Point &spritePointer, int width, int height, const byte *spriteBuffer, bool clipToScene = false);
+	void drawClip(const Point &spritePointer, int width, int height, const byte *spriteBuffer, bool clipToScene = false, byte keepMask = 0);
 
 	void draw(SpriteList &spriteList, uint spriteNumber, const Rect &screenRect, int scale, bool clipToScene = false);
 
-	void loadList(int resourceId, SpriteList &spriteList); // load or append spriteList
+	void loadList(int resourceId, SpriteList &spriteList, byte keepMask = 0); // load or append spriteList
 	bool hitTest(SpriteList &spriteList, uint spriteNumber, const Point &screenCoord, int scale, const Point &testPoint);
 	void getScaledSpriteBuffer(SpriteList &spriteList, uint spriteNumber, int scale, int &width, int &height, int &xAlign, int &yAlign, const byte *&buffer);
 


Commit: 8b2019707d05df80b4182684f053bcbefeaf4361
    https://github.com/scummvm/scummvm/commit/8b2019707d05df80b4182684f053bcbefeaf4361
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Fix placard color in ITE ECS

Changed paths:
    engines/saga/sfuncs.cpp


diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index 980d5b8d2ad..dc8b4d11dd3 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -1086,7 +1086,7 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
 	event.type = kEvTOneshot;
 	event.code = kGraphicsEvent;
 	event.op = kEventFillRect;
-	event.param = kITEDOSColorDarkBlue8a;
+	event.param = _vm->isECS() ? 31 : kITEDOSColorDarkBlue8a;
 	event.param2 = 0;
 	event.param3 = _vm->_scene->getHeight();
 	event.param4 = 0;
@@ -1123,6 +1123,11 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
 	event.op = kEventBlackToPal;
 	event.time = 0;
 	event.duration = kNormalFadeDuration;
+	if (_vm->isECS()) {
+		pal[31].red = 0;
+		pal[31].green = 0x4b;
+		pal[31].blue = 0x97;
+	}
 	event.data = pal;
 	_vm->_events->chain(eventColumns, event);
 


Commit: 291e397698c663c81ca86c05d0e528eabba7a418
    https://github.com/scummvm/scummvm/commit/291e397698c663c81ca86c05d0e528eabba7a418
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Fix offset in debug messages

Changed paths:
    engines/saga/sprite.cpp


diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp
index c8b231872db..9f977addad9 100644
--- a/engines/saga/sprite.cpp
+++ b/engines/saga/sprite.cpp
@@ -41,7 +41,6 @@ bool blitAmigaSprite(byte *outBuf, int outPitch, const byte *inputBuffer, size_t
 	int c;
 	int widthAligned = (width + 15) & ~15;
 
-	Common::MemoryReadStream readS(inputBuffer, inLength);
 	const byte *ptr = inputBuffer, *end = inputBuffer + inLength;
 
 	for (int bitOut = 0; bitOut < bitsPerPixel; bitOut++)
@@ -57,7 +56,7 @@ bool blitAmigaSprite(byte *outBuf, int outPitch, const byte *inputBuffer, size_t
 
 				if (y > height) {
 					warning("Sprite height overrun in transparent run: coord=%d+%dx%d, size=%dx%d, pos=%d",
-						x, bitOut, y, width, height, (int)readS.pos());
+						x, bitOut, y, width, height, (int)(ptr - inputBuffer));
 					return true;
 				}
 
@@ -75,7 +74,7 @@ bool blitAmigaSprite(byte *outBuf, int outPitch, const byte *inputBuffer, size_t
 					ptr += bitsPerEntry / 8;
 					if (y >= height) {
 						warning("Sprite height overrun in opaque run: coord=%d+%dx%d, size=%dx%d, pos=%d",
-							x, bitOut, y, width, height, (int)readS.pos());
+							x, bitOut, y, width, height, (int)(ptr - inputBuffer));
 						return false;
 					}
 					for (int bitIn = 0; bitIn < bitsPerEntry; bitIn++) {
@@ -101,7 +100,7 @@ bool blitAmigaSprite(byte *outBuf, int outPitch, const byte *inputBuffer, size_t
 				}
 				if (fg_runcount == 0 && bg_runcount == 0) {
 					warning("Sprite zero-sized run: coord=%d+%dx%d, size=%dx%d, pos=%d",
-						x, bitOut, y, width, height, (int)readS.pos());
+						x, bitOut, y, width, height, (int)(ptr - inputBuffer));
 					return false;
 				}
 			}


Commit: b2987256b8e596c9cd3adbb16f36181a85e39ad8
    https://github.com/scummvm/scummvm/commit/b2987256b8e596c9cd3adbb16f36181a85e39ad8
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Remove dead code

Changed paths:
    engines/saga/sprite.cpp


diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp
index 9f977addad9..e265a04091a 100644
--- a/engines/saga/sprite.cpp
+++ b/engines/saga/sprite.cpp
@@ -86,18 +86,6 @@ bool blitAmigaSprite(byte *outBuf, int outPitch, const byte *inputBuffer, size_t
 							(outPointer[y * outPitch + realX] & ~(1 << bitOut)) | (((val >> bitIn) & 1) << bitOut);
 					}
 				}
-				if (bitsPerEntry < 8) {
-					byte mask = (byte) ~(0xff << bitsPerEntry);
-					for (c = 0, y -= fg_runcount; c < fg_runcount; c++, y++) {
-						for (int z = 0; z < bitsPerEntry; z++) {
-							int realX = x + z;
-							if (realX >= width) {
-								continue;
-							}
-							outPointer[y * outPitch + realX] &= mask;
-						}
-					}
-				}
 				if (fg_runcount == 0 && bg_runcount == 0) {
 					warning("Sprite zero-sized run: coord=%d+%dx%d, size=%dx%d, pos=%d",
 						x, bitOut, y, width, height, (int)(ptr - inputBuffer));


Commit: 63a39b6471537e1979cba98a30f3426af6982c42
    https://github.com/scummvm/scummvm/commit/63a39b6471537e1979cba98a30f3426af6982c42
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Remove suffix _CD from detection_tables.h

Floppy versions use the same tables

Changed paths:
    engines/saga/detection.h
    engines/saga/detection_tables.h


diff --git a/engines/saga/detection.h b/engines/saga/detection.h
index 4b5b50fd8df..17f7634221f 100644
--- a/engines/saga/detection.h
+++ b/engines/saga/detection.h
@@ -66,9 +66,9 @@ enum GameFileTypes {
 enum GameResourceList : uint8 {
 	RESOURCELIST_NONE = 0,
 	RESOURCELIST_ITE,
-	RESOURCELIST_ITE_ENGLISH_ECS_CD,
-	RESOURCELIST_ITE_GERMAN_AGA_CD,
-	RESOURCELIST_ITE_GERMAN_ECS_CD,
+	RESOURCELIST_ITE_ENGLISH_ECS,
+	RESOURCELIST_ITE_GERMAN_AGA,
+	RESOURCELIST_ITE_GERMAN_ECS,
 	RESOURCELIST_ITE_DEMO,
 	RESOURCELIST_IHNM,
 	RESOURCELIST_IHNM_DEMO,
@@ -99,7 +99,7 @@ enum GamePatchList : uint8 {
 enum GameIntroList : uint8 {
 	INTROLIST_NONE = 0,
 	INTROLIST_ITE_DEFAULT,
-	INTROLIST_ITE_AMIGA_ENGLISH_ECS_CD,
+	INTROLIST_ITE_AMIGA_ENGLISH_ECS,
 	INTROLIST_ITE_AMIGA_GERMAN_AGA,
 	INTROLIST_ITE_AMIGA_GERMAN_ECS,
 	INTROLIST_ITE_DOS_DEMO,
diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index b653c704248..e49bf2af7c4 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -191,7 +191,7 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_EXTRA_ITE_CREDITS | GF_AGA_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_GERMAN_AGA_CD,
+		RESOURCELIST_ITE_GERMAN_AGA,
 		FONTLIST_NONE,
 		PATCHLIST_ITE,
 		INTROLIST_ITE_AMIGA_GERMAN_AGA,
@@ -214,7 +214,7 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_GERMAN_ECS_CD,
+		RESOURCELIST_ITE_GERMAN_ECS,
 		FONTLIST_NONE,
 		PATCHLIST_ITE,
 		INTROLIST_ITE_AMIGA_GERMAN_ECS,
@@ -1048,7 +1048,7 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_EXTRA_ITE_CREDITS | GF_AGA_GRAPHICS,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_GERMAN_AGA_CD,
+		RESOURCELIST_ITE_GERMAN_AGA,
 		FONTLIST_ITE,
 		PATCHLIST_ITE,
 		INTROLIST_ITE_AMIGA_GERMAN_AGA,
@@ -1075,7 +1075,7 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_GERMAN_ECS_CD,
+		RESOURCELIST_ITE_GERMAN_ECS,
 		FONTLIST_ITE,
 		PATCHLIST_ITE,
 		INTROLIST_ITE_AMIGA_GERMAN_ECS,
@@ -1127,10 +1127,10 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_ENGLISH_ECS_CD,
+		RESOURCELIST_ITE_ENGLISH_ECS,
 		FONTLIST_ITE,
 		PATCHLIST_ITE,
-		INTROLIST_ITE_AMIGA_ENGLISH_ECS_CD,
+		INTROLIST_ITE_AMIGA_ENGLISH_ECS,
 		{},
 	},
 
@@ -1153,7 +1153,7 @@ static const SAGAGameDescription gameDescriptions[] = {
 		GID_ITE,
 		GF_ITE_FLOPPY | GF_AGA_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
 		ITE_DEFAULT_SCENE,
-		RESOURCELIST_ITE_GERMAN_AGA_CD,
+		RESOURCELIST_ITE_GERMAN_AGA,
 		FONTLIST_NONE,
 		PATCHLIST_NONE,
 		INTROLIST_ITE_AMIGA_GERMAN_AGA,


Commit: 097fd8765eb83f5a4b072d4db6ed9c830d88885c
    https://github.com/scummvm/scummvm/commit/097fd8765eb83f5a4b072d4db6ed9c830d88885c
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Add ITE ECS floppies

Changed paths:
    engines/saga/detection_tables.h


diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index e49bf2af7c4..aab154cd856 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -173,7 +173,6 @@ static const SAGAGameDescription gameDescriptions[] = {
 	},
 
 
-	// TODO: Add Amiga floppy demos here (not supported yet)
 	{
 		{
 			"ite",
@@ -220,6 +219,30 @@ static const SAGAGameDescription gameDescriptions[] = {
 		INTROLIST_ITE_AMIGA_GERMAN_ECS,
 		{},
 	},
+	{
+		{
+			"ite",
+			"ECS Demo Floppy",
+			{
+				{"ite.rtn",		GAME_RESOURCEFILE,	"1e77154f045358ef3f09fbdb00ea92a4", 18624},
+				{"ite01.adf",                           0,      "fc6ba8bae7d86038efa2fba30ebf5e77", 901120},
+				{"ite02.adf",                           0,      "8f8cc806fc19066480b868c43e12343a", 901120},
+				AD_LISTEND
+			},
+			Common::DE_DEU,
+			Common::kPlatformAmiga,
+			ADGF_NO_FLAGS,
+			GUIO0()
+		},
+		GID_ITE,
+		GF_ITE_FLOPPY | GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
+		ITE_DEFAULT_SCENE,
+		RESOURCELIST_ITE_GERMAN_ECS,
+		FONTLIST_NONE,
+		PATCHLIST_ITE,
+		INTROLIST_ITE_AMIGA_GERMAN_ECS,
+		{},
+	},
 
 
 	// ITE Mac versions ///////////////////////////////////////////////////////////////////////////////////////
@@ -1159,8 +1182,55 @@ static const SAGAGameDescription gameDescriptions[] = {
 		INTROLIST_ITE_AMIGA_GERMAN_AGA,
 		{},
 	},
+	{
+		{
+			"ite",
+			"ECS Floppy",
+			{
+				{"ite.rtn",		GAME_RESOURCEFILE,	"733a15d1816b76ed10fbb02668ae1f93", 18624},
+				{"ite01.adf",		0,					"49352821102fc03d1653e0fda13fb15f", 901120},
+				{"ite02.adf",	0,					"160189cce6ecec4bfb4e045bf9be3218", 901120},
+				AD_LISTEND
+			},
+			Common::DE_DEU,
+			Common::kPlatformAmiga,
+			ADGF_NO_FLAGS,
+			GUIO1(GUIO_NOSPEECH)
+		},
+		GID_ITE,
+		GF_ITE_FLOPPY | GF_ECS_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
+		ITE_DEFAULT_SCENE,
+		RESOURCELIST_ITE_GERMAN_ECS,
+		FONTLIST_NONE,
+		PATCHLIST_NONE,
+		INTROLIST_ITE_AMIGA_GERMAN_ECS,
+		{},
+	},
+	{
+		{
+			"ite",
+			"ECS Floppy",
+			{
+				{"ite.rtn",		GAME_RESOURCEFILE,	"9d0c6b31ac86b4bd9237e304e4bfb73a", 18624},
+				{"ite01.adf",		0,					"532973f8422f46f73db5b8a161681d40", 901120},
+				{"ite02.adf",	0,					"794f525b9b81f765a5df18bfae8364ec", 901120},
+				AD_LISTEND
+			},
+			Common::EN_ANY,
+			Common::kPlatformAmiga,
+			ADGF_NO_FLAGS,
+			GUIO1(GUIO_NOSPEECH)
+		},
+		GID_ITE,
+		GF_ITE_FLOPPY | GF_ECS_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
+		ITE_DEFAULT_SCENE,
+		RESOURCELIST_ITE_GERMAN_ECS, // Uses German resource list for some reason
+		FONTLIST_NONE,
+		PATCHLIST_NONE,
+		INTROLIST_ITE_AMIGA_GERMAN_ECS, // Uses German intro list for some reason
+		{},
+	},
 
-	// TODO: Add other Amiga floppy versions
 	// IHNM Section ///////////////////////////////////////////////////////////////////////////////////////////
 
 	// I Have No Mouth And I Must Scream - Demo version


Commit: 4ed51f900518dec97668d01e7ec1aca1428c4a26
    https://github.com/scummvm/scummvm/commit/4ed51f900518dec97668d01e7ec1aca1428c4a26
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-12-21T14:58:09+01:00

Commit Message:
SAGA: Add AGA demo floppy release

Changed paths:
    engines/saga/detection_tables.h


diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index aab154cd856..4e92a784ea5 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -196,6 +196,30 @@ static const SAGAGameDescription gameDescriptions[] = {
 		INTROLIST_ITE_AMIGA_GERMAN_AGA,
 		{},
 	},
+	{
+		{
+			"ite",
+			"AGA Demo Floppy",
+			{
+				{"ite.rtn",		GAME_RESOURCEFILE,	"634d36f78ac151b14dbeed274e169def", 18564},
+				{"ite01.adf", 0, "82877f62357c39cb3a9f892dfce713e2", 901120},
+				{"ite02.adf", 0, "ed7bff9c17aacce17a9b5743d39149e7", 901120},
+				AD_LISTEND
+			},
+			Common::DE_DEU,
+			Common::kPlatformAmiga,
+			ADGF_CD,
+			GUIO0()
+		},
+		GID_ITE,
+		GF_ITE_FLOPPY|GF_EXTRA_ITE_CREDITS | GF_AGA_GRAPHICS | GF_EMBED_FONT | GF_POWERPACK_GFX,
+		ITE_DEFAULT_SCENE,
+		RESOURCELIST_ITE_GERMAN_AGA,
+		FONTLIST_NONE,
+		PATCHLIST_ITE,
+		INTROLIST_ITE_AMIGA_GERMAN_AGA,
+		{},
+	},
 	{
 		{
 			"ite",




More information about the Scummvm-git-logs mailing list