aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/engine
diff options
context:
space:
mode:
authorathrxx2019-03-26 22:37:50 +0100
committerathrxx2019-04-13 18:55:01 +0200
commit69f2e0caaa3b7257318f2e9943d233da45bfab80 (patch)
tree4fbd19a73fd00d6bac849185388f76b32ab986fe /engines/kyra/engine
parentcbe81aa021bab1082ee6a652cbd15fe323ea2069 (diff)
downloadscummvm-rg350-69f2e0caaa3b7257318f2e9943d233da45bfab80.tar.gz
scummvm-rg350-69f2e0caaa3b7257318f2e9943d233da45bfab80.tar.bz2
scummvm-rg350-69f2e0caaa3b7257318f2e9943d233da45bfab80.zip
KYRA: (EOB2/Amiga) - fix ingame colors
Diffstat (limited to 'engines/kyra/engine')
-rw-r--r--engines/kyra/engine/darkmoon.cpp3
-rw-r--r--engines/kyra/engine/eobcommon.cpp17
-rw-r--r--engines/kyra/engine/scene_eob.cpp10
-rw-r--r--engines/kyra/engine/scene_rpg.cpp12
-rw-r--r--engines/kyra/engine/sprites_eob.cpp3
5 files changed, 32 insertions, 13 deletions
diff --git a/engines/kyra/engine/darkmoon.cpp b/engines/kyra/engine/darkmoon.cpp
index c7a91c7fd5..8d621b9bc9 100644
--- a/engines/kyra/engine/darkmoon.cpp
+++ b/engines/kyra/engine/darkmoon.cpp
@@ -153,6 +153,9 @@ void DarkMoonEngine::updateUsedCharacterHandItem(int charIndex, int slot) {
}
void DarkMoonEngine::generateMonsterPalettes(const char *file, int16 monsterIndex) {
+ if (_flags.platform == Common::kPlatformAmiga)
+ return;
+
int cp = _screen->setCurPage(2);
_screen->loadShapeSetBitmap(file, 3, 3);
uint8 tmpPal[16];
diff --git a/engines/kyra/engine/eobcommon.cpp b/engines/kyra/engine/eobcommon.cpp
index 1c75c78d70..798bfb6a93 100644
--- a/engines/kyra/engine/eobcommon.cpp
+++ b/engines/kyra/engine/eobcommon.cpp
@@ -1639,12 +1639,15 @@ void EoBCoreEngine::drawSequenceBitmap(const char *file, int destRect, int x1, i
static const uint8 frameH[] = { 96, 121 };
int page = ((flags & 2) || destRect) ? 0 : 6;
+ int amigaPalIndex = (x1 ? 1 : 0) + (y1 ? 2 : 0) + 1;
if (scumm_stricmp(_dialogueLastBitmap, file)) {
_screen->clearPage(2);
if (!destRect) {
if (!(flags & 1)) {
_screen->loadEoBBitmap("BORDER", 0, 3, 3, 2);
+ if (_flags.platform == Common::kPlatformAmiga)
+ _screen->copyRegion(0, 0, 0, 0, 320, 122, 2, 0, Screen::CR_NO_P_CHECK);
_screen->copyRegion(0, 0, 0, 0, 184, 121, 2, page, Screen::CR_NO_P_CHECK);
} else {
_screen->copyRegion(0, 0, 0, 0, 184, 121, 0, page, Screen::CR_NO_P_CHECK);
@@ -1658,13 +1661,25 @@ void EoBCoreEngine::drawSequenceBitmap(const char *file, int destRect, int x1, i
strcpy(_dialogueLastBitmap, file);
}
+ if (_flags.platform == Common::kPlatformAmiga) {
+ int cp = _screen->setCurPage(0);
+ if (!_dialogueFieldAmiga)
+ gui_drawDialogueBox();
+ _screen->drawClippedLine(0, 120, 319, 120, 9);
+ _screen->drawClippedLine(0, 121, 319, 121, guiSettings()->colors.fill);
+ _screen->setPagePixel(0, 319, 121, 9);
+ _screen->setCurPage(cp);
+ _screen->setupDualPalettesSplitScreen(_screen->getPalette(amigaPalIndex), _screen->getPalette(7));
+ _dialogueFieldAmiga = true;
+ }
+
if (flags & 2)
_screen->crossFadeRegion(x1 << 3, y1, frameX[destRect] << 3, frameY[destRect], frameW[destRect] << 3, frameH[destRect], 2, page);
else
_screen->copyRegion(x1 << 3, y1, frameX[destRect] << 3, frameY[destRect], frameW[destRect] << 3, frameH[destRect], 2, page, Screen::CR_NO_P_CHECK);
if (page == 6)
- _screen->copyRegion(0, 0, 0, 0, 184, 121, 6, 0, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 0, 0, 0, 184, (_flags.platform == Common::kPlatformAmiga) ? 110 : 121, 6, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
}
diff --git a/engines/kyra/engine/scene_eob.cpp b/engines/kyra/engine/scene_eob.cpp
index 9a2f4e2f93..7f3c464939 100644
--- a/engines/kyra/engine/scene_eob.cpp
+++ b/engines/kyra/engine/scene_eob.cpp
@@ -96,7 +96,7 @@ void EoBCoreEngine::loadLevel(int level, int sub) {
loadVcnData(gfxFile.c_str(), (_flags.gameID == GI_EOB1 && _flags.platform == Common::kPlatformDOS) ? _cgaMappingLevel[_cgaLevelMappingIndex[level - 1]] : 0);
_screen->loadEoBBitmap("INVENT", _cgaMappingInv, 5, 3, 2);
- if (_flags.platform == Common::kPlatformAmiga)
+ if (_flags.platform == Common::kPlatformAmiga && _flags.gameID == GI_EOB1)
_screen->getPalette(0).copy(_screen->getPalette(1), 1, 5, 1);
delayUntil(end);
@@ -190,8 +190,8 @@ Common::String EoBCoreEngine::initLevelData(int sub) {
_screen->enableShapeBackgroundFading(false);
}
- if (_flags.platform != Common::kPlatformAmiga && (_flags.gameID == GI_EOB2 || _configRenderMode != Common::kRenderEGA))
- _screen->loadPalette(tmpStr.c_str(), _screen->getPalette(0));
+ if (_flags.gameID == GI_EOB2 || (_flags.platform != Common::kPlatformAmiga && _configRenderMode != Common::kRenderCGA && _configRenderMode != Common::kRenderEGA))
+ _screen->loadPalette(tmpStr.c_str(), _screen->getPalette(_flags.platform == Common::kPlatformAmiga ? 6 : 0));
if (_flags.platform == Common::kPlatformFMTowns) {
uint16 *src = (uint16*)_screen->getPalette(0).getData();
@@ -368,7 +368,7 @@ void EoBCoreEngine::loadVcnData(const char *file, const uint8 *cgaMapping) {
}
}
} else {
- if (!(_flags.gameID == GI_EOB1 && _configRenderMode == Common::kRenderEGA))
+ if (_flags.platform != Common::kPlatformAmiga && !(_flags.gameID == GI_EOB1 && _configRenderMode == Common::kRenderEGA))
memcpy(_vcnColTable, colMap, 32);
memcpy(_vcnBlocks, pos, vcnSize);
@@ -546,7 +546,7 @@ void EoBCoreEngine::drawScene(int refresh) {
if (_sceneDrawPage2) {
if (refresh)
- _screen->fillRect(0, 0, 176, 120, 12);
+ _screen->fillRect(0, 0, 176, 120, guiSettings()->colors.guiColorBlack);
if (!_loading)
_screen->setScreenPalette(_screen->getPalette(0));
diff --git a/engines/kyra/engine/scene_rpg.cpp b/engines/kyra/engine/scene_rpg.cpp
index 4c0a97e7c7..1bb777f51c 100644
--- a/engines/kyra/engine/scene_rpg.cpp
+++ b/engines/kyra/engine/scene_rpg.cpp
@@ -534,20 +534,20 @@ void KyraRpgEngine::vcnDraw_bw_trans_hiCol(uint8 *&dst, const uint8 *&src) {
void KyraRpgEngine::vcnDraw_fw_Amiga(uint8 *&dst, const uint8 *&src) {
for (int blockX = 0; blockX < 8; blockX++) {
- *dst = 0;
+ uint8 col = 0;
for (int i = 0; i < 5; ++i)
- *dst |= (((src[i] & (0x80 >> blockX)) >> (7 - blockX)) << i);
- dst++;
+ col |= (((src[i] & (0x80 >> blockX)) >> (7 - blockX)) << i);
+ *dst++ = col;
}
src += 5;
}
void KyraRpgEngine::vcnDraw_bw_Amiga(uint8 *&dst, const uint8 *&src) {
for (int blockX = 7; blockX >= 0; blockX--) {
- *dst = 0;
+ uint8 col = 0;
for (int i = 0; i < 5; ++i)
- *dst |= (((src[i] & (0x80 >> blockX)) >> (7 - blockX)) << i);
- dst++;
+ col |= (((src[i] & (0x80 >> blockX)) >> (7 - blockX)) << i);
+ *dst++ = col;
}
src += 5;
}
diff --git a/engines/kyra/engine/sprites_eob.cpp b/engines/kyra/engine/sprites_eob.cpp
index 5e2e58ea85..f7e65f2133 100644
--- a/engines/kyra/engine/sprites_eob.cpp
+++ b/engines/kyra/engine/sprites_eob.cpp
@@ -363,6 +363,7 @@ void EoBCoreEngine::drawBlockObject(int flipped, int page, const uint8 *shape, i
const ScreenDim *d = _screen->getScreenDim(sd);
if (_flags.gameID == GI_EOB1)
x &= ~1;
+
_screen->drawShape(page, shape, x - (d->sx << 3), y - d->sy, sd, flipped | (ovl ? 2 : 0), ovl);
}
@@ -373,7 +374,7 @@ void EoBCoreEngine::drawMonsterShape(const uint8 *shape, int x, int y, int flipp
ovl = _monsterFlashOverlay;
else if (_flags.gameID == GI_EOB2 && flags & 0x20)
ovl = _monsterStoneOverlay;
- else if (palIndex != -1)
+ else if (palIndex != -1 && _flags.platform != Common::kPlatformAmiga)
ovl = _monsterPalettes[palIndex];
drawBlockObject(flipped, 2, shape, x, y, 5, ovl);