[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