diff options
author | athrxx | 2019-03-26 22:37:50 +0100 |
---|---|---|
committer | athrxx | 2019-04-13 18:55:01 +0200 |
commit | 69f2e0caaa3b7257318f2e9943d233da45bfab80 (patch) | |
tree | 4fbd19a73fd00d6bac849185388f76b32ab986fe /engines/kyra/engine | |
parent | cbe81aa021bab1082ee6a652cbd15fe323ea2069 (diff) | |
download | scummvm-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.cpp | 3 | ||||
-rw-r--r-- | engines/kyra/engine/eobcommon.cpp | 17 | ||||
-rw-r--r-- | engines/kyra/engine/scene_eob.cpp | 10 | ||||
-rw-r--r-- | engines/kyra/engine/scene_rpg.cpp | 12 | ||||
-rw-r--r-- | engines/kyra/engine/sprites_eob.cpp | 3 |
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); |