aboutsummaryrefslogtreecommitdiff
path: root/engines/saga
diff options
context:
space:
mode:
authorFilippos Karapetis2012-11-11 23:31:25 +0200
committerFilippos Karapetis2012-11-11 23:31:25 +0200
commit1b5e96f42903b0cf3a5456e85a09c2c01eef0538 (patch)
treeb4a4a66b4a1d99963cb73b733187e90ab422759d /engines/saga
parent3e8758b810cb68ea9ead23b607a56c9c94221379 (diff)
downloadscummvm-rg350-1b5e96f42903b0cf3a5456e85a09c2c01eef0538.tar.gz
scummvm-rg350-1b5e96f42903b0cf3a5456e85a09c2c01eef0538.tar.bz2
scummvm-rg350-1b5e96f42903b0cf3a5456e85a09c2c01eef0538.zip
SAGA: Fix bug #3564919 - "SAGA: IHNM Spanish: Spiritual Barometer doesn't change"
The Spanish version uses different colors for portrait backgrounds. Also, portrait colors are now set correctly when loading games directly from the launcher.
Diffstat (limited to 'engines/saga')
-rw-r--r--engines/saga/events.cpp19
-rw-r--r--engines/saga/saga.h4
-rw-r--r--engines/saga/sfuncs_ihnm.cpp18
3 files changed, 28 insertions, 13 deletions
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index ec3ef2f6f9..d98cef0740 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -332,13 +332,22 @@ int Events::handleOneShot(Event *event) {
#ifdef ENABLE_IHNM
if (_vm->getGameId() == GID_IHNM) {
+ PalEntry portraitBgColor = _vm->_interface->_portraitBgColor;
+ byte portraitColor = (_vm->getLanguage() == Common::ES_ESP) ? 253 : 254;
+
+ // Set the portrait bg color, in case a saved state is restored from the
+ // launcher. In this case, sfSetPortraitBgColor is not called, thus the
+ // portrait color will always be 0 (black).
+ if (portraitBgColor.red == 0 && portraitBgColor.green == 0 && portraitBgColor.blue == 0)
+ portraitBgColor.green = 255;
+
if (_vm->_spiritualBarometer > 255)
- _vm->_gfx->setPaletteColor(kIHNMColorPortrait, 0xff, 0xff, 0xff);
+ _vm->_gfx->setPaletteColor(portraitColor, 0xff, 0xff, 0xff);
else
- _vm->_gfx->setPaletteColor(kIHNMColorPortrait,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.red / 256,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.green / 256,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.blue / 256);
+ _vm->_gfx->setPaletteColor(portraitColor,
+ _vm->_spiritualBarometer * portraitBgColor.red / 256,
+ _vm->_spiritualBarometer * portraitBgColor.green / 256,
+ _vm->_spiritualBarometer * portraitBgColor.blue / 256);
}
#endif
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 829425aeaf..01cab21f5d 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -395,9 +395,7 @@ enum ColorId {
kITEColorBlue = 0x93,
kITEColorLightBlue94 = 0x94,
kITEColorLightBlue96 = 0x96,
- kITEColorGreen = 0xba,
-
- kIHNMColorPortrait = 0xfe
+ kITEColorGreen = 0xba
};
enum KnownColor {
diff --git a/engines/saga/sfuncs_ihnm.cpp b/engines/saga/sfuncs_ihnm.cpp
index 3fbf3b6e67..fdfd0fdf2c 100644
--- a/engines/saga/sfuncs_ihnm.cpp
+++ b/engines/saga/sfuncs_ihnm.cpp
@@ -168,17 +168,25 @@ void Script::sfSetChapterPoints(SCRIPTFUNC_PARAMS) {
_vm->_ethicsPoints[chapter] = thread->pop();
int16 barometer = thread->pop();
static PalEntry cur_pal[PAL_ENTRIES];
+ PalEntry portraitBgColor = _vm->_interface->_portraitBgColor;
+ byte portraitColor = (_vm->getLanguage() == Common::ES_ESP) ? 253 : 254;
_vm->_spiritualBarometer = _vm->_ethicsPoints[chapter] * 256 / barometer;
_vm->_scene->setChapterPointsChanged(true); // don't save this music when saving in IHNM
+ // Set the portrait bg color, in case a saved state is restored from the
+ // launcher. In this case, sfSetPortraitBgColor is not called, thus the
+ // portrait color will always be 0 (black).
+ if (portraitBgColor.red == 0 && portraitBgColor.green == 0 && portraitBgColor.blue == 0)
+ portraitBgColor.green = 255;
+
if (_vm->_spiritualBarometer > 255)
- _vm->_gfx->setPaletteColor(kIHNMColorPortrait, 0xff, 0xff, 0xff);
+ _vm->_gfx->setPaletteColor(portraitColor, 0xff, 0xff, 0xff);
else
- _vm->_gfx->setPaletteColor(kIHNMColorPortrait,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.red / 256,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.green / 256,
- _vm->_spiritualBarometer * _vm->_interface->_portraitBgColor.blue / 256);
+ _vm->_gfx->setPaletteColor(portraitColor,
+ _vm->_spiritualBarometer * portraitBgColor.red / 256,
+ _vm->_spiritualBarometer * portraitBgColor.green / 256,
+ _vm->_spiritualBarometer * portraitBgColor.blue / 256);
_vm->_gfx->getCurrentPal(cur_pal);
_vm->_gfx->setPalette(cur_pal);