diff options
author | athrxx | 2012-02-23 21:36:14 +0100 |
---|---|---|
committer | athrxx | 2012-02-24 18:09:37 +0100 |
commit | ecd1a9f9435c5fc5d502d75dd256394b5f3283f3 (patch) | |
tree | 273d3539e296960e617380c0648826e5332e77ca /engines/kyra | |
parent | 14e6a5f8f7c7e3ac0d70ca4d59032954353fc823 (diff) | |
download | scummvm-rg350-ecd1a9f9435c5fc5d502d75dd256394b5f3283f3.tar.gz scummvm-rg350-ecd1a9f9435c5fc5d502d75dd256394b5f3283f3.tar.bz2 scummvm-rg350-ecd1a9f9435c5fc5d502d75dd256394b5f3283f3.zip |
KYRA: (EOB) - cleanup CGA/EGA code a bit
Diffstat (limited to 'engines/kyra')
-rw-r--r-- | engines/kyra/chargen.cpp | 10 | ||||
-rw-r--r-- | engines/kyra/detection.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/eobcommon.cpp | 18 | ||||
-rw-r--r-- | engines/kyra/eobcommon.h | 2 | ||||
-rw-r--r-- | engines/kyra/gui_eob.cpp | 10 | ||||
-rw-r--r-- | engines/kyra/kyra_hof.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/kyra_lok.cpp | 6 | ||||
-rw-r--r-- | engines/kyra/kyra_mr.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/kyra_rpg.cpp | 6 | ||||
-rw-r--r-- | engines/kyra/kyra_v1.cpp | 15 | ||||
-rw-r--r-- | engines/kyra/kyra_v1.h | 2 | ||||
-rw-r--r-- | engines/kyra/lol.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/magic_eob.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/saveload_eob.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/screen.cpp | 23 | ||||
-rw-r--r-- | engines/kyra/screen.h | 7 | ||||
-rw-r--r-- | engines/kyra/screen_eob.cpp | 22 | ||||
-rw-r--r-- | engines/kyra/screen_eob.h | 2 |
18 files changed, 64 insertions, 71 deletions
diff --git a/engines/kyra/chargen.cpp b/engines/kyra/chargen.cpp index 73f5fccb92..54e1abcc2c 100644 --- a/engines/kyra/chargen.cpp +++ b/engines/kyra/chargen.cpp @@ -1496,7 +1496,7 @@ TransferPartyWiz::~TransferPartyWiz() { } bool TransferPartyWiz::start() { - _screen->copyPage(0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12); + _screen->copyPage(0, _vm->_useHiResDithering ? 1 : 12); if (!selectAndLoadTransferFile()) return false; @@ -1536,7 +1536,7 @@ bool TransferPartyWiz::start() { bool TransferPartyWiz::selectAndLoadTransferFile() { do { - _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0); + _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0); if (transferFileDialogue(_vm->_savegameFilename)) break; } while (_vm->_gui->confirmDialogue2(15, 68, 1)); @@ -1566,7 +1566,7 @@ bool TransferPartyWiz::selectAndLoadTransferFile() { return false; Common::String target = _vm->_gui->transferTargetMenu(eobTargets); - _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0); + _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0); if (target.empty()) return true; @@ -1579,10 +1579,10 @@ bool TransferPartyWiz::selectAndLoadTransferFile() { return true; } - _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0); + _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0); bool result = _vm->_gui->transferFileMenu(target, dest); - _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0); + _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0); return result; } diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp index 1a4fd3bd9d..46dfec84ff 100644 --- a/engines/kyra/detection.cpp +++ b/engines/kyra/detection.cpp @@ -140,6 +140,8 @@ bool KyraMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGame *engine = new Kyra::EoBEngine(syst, flags); break; case Kyra::GI_EOB2: + if (Common::parseRenderMode(ConfMan.get("render_mode")) == Common::kRenderEGA) + flags.useHiRes = true; *engine = new Kyra::DarkMoonEngine(syst, flags); break; #endif // ENABLE_EOB diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp index ff53ba8b0a..1489e4f1f5 100644 --- a/engines/kyra/eobcommon.cpp +++ b/engines/kyra/eobcommon.cpp @@ -57,6 +57,8 @@ EoBCoreEngine::EoBCoreEngine(OSystem *system, const GameFlags &flags) _configMouse = true; _loading = false; + _useHiResDithering = false; + _envAudioTimer = 0; _flashShapeTimer = 0; _drawSceneTimer = 0; @@ -369,9 +371,11 @@ Common::Error EoBCoreEngine::init() { if (ConfMan.hasKey("render_mode")) _configRenderMode = Common::parseRenderMode(ConfMan.get("render_mode")); + _useHiResDithering = (_configRenderMode == Common::kRenderEGA && _flags.useHiRes); + _screen = new Screen_EoB(this, _system); assert(_screen); - _screen->setResolution(_flags.useHiResOverlay || (_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA)); + _screen->setResolution(); //MidiDriverType midiDriver = MidiDriver::detectDevice(MDT_PCSPK | MDT_ADLIB); _sound = new SoundAdLibPC(this, _mixer); @@ -390,7 +394,7 @@ Common::Error EoBCoreEngine::init() { if (!_staticres->init()) error("_staticres->init() failed"); - if (!_screen->init(_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA)) + if (!_screen->init()) error("screen()->init() failed"); if (ConfMan.hasKey("save_slot")) { @@ -413,6 +417,12 @@ Common::Error EoBCoreEngine::init() { _screen->loadFont(Screen::FID_6_FNT, "FONT6.FNT"); _screen->loadFont(Screen::FID_8_FNT, "FONT8.FNT"); + if (_useHiResDithering) { + _vcnBlockWidth <<= 1; + _vcnBlockHeight <<= 1; + SWAP(_vcnFlip0, _vcnFlip1); + } + Common::Error err = KyraRpgEngine::init(); if (err.getCode() != Common::kNoError) return err; @@ -1738,7 +1748,7 @@ void EoBCoreEngine::seq_portal() { bool EoBCoreEngine::checkPassword() { char answ[20]; Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); - _screen->copyPage(0, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10); + _screen->copyPage(0, _useHiResDithering ? 4 : 10); _screen->setScreenDim(13); gui_drawBox(_screen->_curDim->sx << 3, _screen->_curDim->sy, _screen->_curDim->w << 3, _screen->_curDim->h, guiSettings()->colors.frame1, guiSettings()->colors.frame2, -1); @@ -1765,7 +1775,7 @@ bool EoBCoreEngine::checkPassword() { _screen->modifyScreenDim(13, _screen->_curDim->sx - 1, _screen->_curDim->sy - 2, _screen->_curDim->w + 2, _screen->_curDim->h + 16); _screen->setFont(of); - _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 4 : 10, 0); + _screen->copyPage(_useHiResDithering ? 4 : 10, 0); return true; } diff --git a/engines/kyra/eobcommon.h b/engines/kyra/eobcommon.h index 38be2a64e8..050fe2b794 100644 --- a/engines/kyra/eobcommon.h +++ b/engines/kyra/eobcommon.h @@ -845,6 +845,8 @@ protected: const uint8 *_cgaMappingLevel[5]; const uint8 *_cgaLevelMappingIndex; + bool _useHiResDithering; + // Default parameters will import all present original save files and push them to the top of the save dialog. bool importOriginalSaveFile(int destSlot, const char *sourceFile = 0); Common::String readOriginalSaveFile(Common::String &file); diff --git a/engines/kyra/gui_eob.cpp b/engines/kyra/gui_eob.cpp index eadfd10d1e..ec9b674885 100644 --- a/engines/kyra/gui_eob.cpp +++ b/engines/kyra/gui_eob.cpp @@ -777,11 +777,11 @@ int EoBCoreEngine::clickedCamp(Button *button) { } _screen->copyPage(0, 7); - _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK); + _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK); _gui->runCampMenu(); - _screen->copyRegion(0, 0, 0, 120, 176, 24, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 2, Screen::CR_NO_P_CHECK); + _screen->copyRegion(0, 0, 0, 120, 176, 24, _useHiResDithering ? 1 : 12, 2, Screen::CR_NO_P_CHECK); _screen->setScreenDim(cd); drawScene(0); @@ -1170,7 +1170,7 @@ int EoBCoreEngine::clickedSceneSpecial(Button *button) { int EoBCoreEngine::clickedSpellbookAbort(Button *button) { _updateFlags = 0; - _screen->copyRegion(0, 0, 64, 121, 112, 56, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10, 0, Screen::CR_NO_P_CHECK); + _screen->copyRegion(0, 0, 64, 121, 112, 56, _useHiResDithering ? 4 : 10, 0, Screen::CR_NO_P_CHECK); _screen->updateScreen(); gui_drawCompass(true); gui_toggleButtons(); @@ -2172,7 +2172,7 @@ void GUI_EoB::runCampMenu() { if (cnt > 4) { _vm->dropCharacter(selectCharacterDialogue(53)); _vm->gui_drawPlayField(false); - _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK); + _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _vm->_useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK); _screen->setFont(Screen::FID_6_FNT); _vm->gui_drawAllCharPortraitsWithStats(); _screen->setFont(Screen::FID_8_FNT); @@ -2607,7 +2607,7 @@ Common::String GUI_EoB::transferTargetMenu(Common::Array<Common::String> &target break; } while (_saveSlotIdTemp[slot] == -1); - _screen->copyRegion(72, 14, 72, 14, 176, 144, (_screen->getPageScaleFactor(0) == 2) ? 7 : 12, 0, Screen::CR_NO_P_CHECK); + _screen->copyRegion(72, 14, 72, 14, 176, 144, _vm->_useHiResDithering ? 7 : 12, 0, Screen::CR_NO_P_CHECK); _screen->modifyScreenDim(11, xo, yo, dm->w, dm->h); return (slot < 6) ? _savegameList[_savegameOffset + slot] : Common::String(); diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index b07e3a4965..0ba173d9d0 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -221,7 +221,7 @@ void KyraEngine_HoF::pauseEngineIntern(bool pause) { Common::Error KyraEngine_HoF::init() { _screen = new Screen_HoF(this, _system); assert(_screen); - _screen->setResolution(_flags.useHiResOverlay); + _screen->setResolution(); _debugger = new Debugger_HoF(this); assert(_debugger); diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp index e8a2c02e6e..1dd53901e8 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -167,12 +167,12 @@ KyraEngine_LoK::~KyraEngine_LoK() { } Common::Error KyraEngine_LoK::init() { - if (_flags.platform == Common::kPlatformPC98 && _flags.useHiResOverlay && ConfMan.getBool("16_color")) + if (_flags.platform == Common::kPlatformPC98 && _flags.useHiRes && ConfMan.getBool("16_color")) _screen = new Screen_LoK_16(this, _system); else _screen = new Screen_LoK(this, _system); assert(_screen); - _screen->setResolution(_flags.useHiResOverlay); + _screen->setResolution(); _debugger = new Debugger_LoK(this); assert(_debugger); @@ -961,7 +961,7 @@ void KyraEngine_LoK::registerDefaultSettings() { // specific to the Kyra engine. ConfMan.registerDefault("walkspeed", 2); - if (_flags.platform == Common::kPlatformPC98 && _flags.useHiResOverlay) + if (_flags.platform == Common::kPlatformPC98 && _flags.useHiRes) ConfMan.registerDefault("16_color", false); } diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp index 38f473a619..39ed0d038a 100644 --- a/engines/kyra/kyra_mr.cpp +++ b/engines/kyra/kyra_mr.cpp @@ -203,7 +203,7 @@ KyraEngine_MR::~KyraEngine_MR() { Common::Error KyraEngine_MR::init() { _screen = new Screen_MR(this, _system); assert(_screen); - _screen->setResolution(_flags.useHiResOverlay); + _screen->setResolution(); _debugger = new Debugger_v2(this); assert(_debugger); diff --git a/engines/kyra/kyra_rpg.cpp b/engines/kyra/kyra_rpg.cpp index 121731e394..8857f64f7e 100644 --- a/engines/kyra/kyra_rpg.cpp +++ b/engines/kyra/kyra_rpg.cpp @@ -171,12 +171,6 @@ Common::Error KyraRpgEngine::init() { _wllWallFlags = new uint8[256]; memset(_wllWallFlags, 0, 256); - if (_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA) { - _vcnBlockWidth <<= 1; - _vcnBlockHeight <<= 1; - SWAP(_vcnFlip0, _vcnFlip1); - } - _blockDrawingBuffer = new uint16[1320]; memset(_blockDrawingBuffer, 0, 1320 * sizeof(uint16)); uint32 swbSize = 22 * _vcnBlockWidth * 2 * 15 * _vcnBlockHeight; diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp index 7c67af2f13..2672618c67 100644 --- a/engines/kyra/kyra_v1.cpp +++ b/engines/kyra/kyra_v1.cpp @@ -233,19 +233,16 @@ KyraEngine_v1::~KyraEngine_v1() { Common::Point KyraEngine_v1::getMousePos() { Common::Point mouse = _eventMan->getMousePos(); - if (_flags.useHiResOverlay) { + if (_flags.useHiRes) { mouse.x >>= 1; mouse.y >>= 1; } - mouse.x /= screen()->getPageScaleFactor(0); - mouse.y /= screen()->getPageScaleFactor(0); - return mouse; } void KyraEngine_v1::setMousePos(int x, int y) { - if (_flags.useHiResOverlay) { + if (_flags.useHiRes) { x <<= 1; y <<= 1; } @@ -312,12 +309,10 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag) case Common::EVENT_LBUTTONUP: { _mouseX = event.mouse.x; _mouseY = event.mouse.y; - if (_flags.useHiResOverlay) { + if (_flags.useHiRes) { _mouseX >>= 1; _mouseY >>= 1; } - _mouseX /= screen()->getPageScaleFactor(0); - _mouseY /= screen()->getPageScaleFactor(0); keys = (event.type == Common::EVENT_LBUTTONDOWN ? 199 : (200 | 0x800)); breakLoop = true; } break; @@ -326,12 +321,10 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag) case Common::EVENT_RBUTTONUP: { _mouseX = event.mouse.x; _mouseY = event.mouse.y; - if (_flags.useHiResOverlay) { + if (_flags.useHiRes) { _mouseX >>= 1; _mouseY >>= 1; } - _mouseX /= screen()->getPageScaleFactor(0); - _mouseY /= screen()->getPageScaleFactor(0); keys = (event.type == Common::EVENT_RBUTTONDOWN ? 201 : (202 | 0x800)); breakLoop = true; } break; diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h index 95d58d4ab2..499f575a0c 100644 --- a/engines/kyra/kyra_v1.h +++ b/engines/kyra/kyra_v1.h @@ -118,7 +118,7 @@ struct GameFlags { bool useAltShapeHeader : 1; // alternative shape header (uses 2 bytes more, those are unused though) bool isTalkie : 1; bool isOldFloppy : 1; - bool useHiResOverlay : 1; + bool useHiRes : 1; bool use16ColorMode : 1; bool useDigSound : 1; bool useInstallerPackage : 1; diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 022a878e0a..38e9d33259 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -364,7 +364,7 @@ GUI *LoLEngine::gui() const { Common::Error LoLEngine::init() { _screen = new Screen_LoL(this, _system); assert(_screen); - _screen->setResolution(_flags.useHiResOverlay); + _screen->setResolution(); _debugger = new Debugger_LoL(this); assert(_debugger); diff --git a/engines/kyra/magic_eob.cpp b/engines/kyra/magic_eob.cpp index b2949ce1d5..985286854b 100644 --- a/engines/kyra/magic_eob.cpp +++ b/engines/kyra/magic_eob.cpp @@ -60,7 +60,7 @@ void EoBCoreEngine::useMagicBookOrSymbol(int charIndex, int type) { } if (!_updateFlags) - _screen->copyRegion(64, 121, 0, 0, 112, 56, 0, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10, Screen::CR_NO_P_CHECK); + _screen->copyRegion(64, 121, 0, 0, 112, 56, 0, _useHiResDithering ? 4 : 10, Screen::CR_NO_P_CHECK); _updateFlags = 1; gui_setPlayFieldButtons(); gui_drawSpellbook(); diff --git a/engines/kyra/saveload_eob.cpp b/engines/kyra/saveload_eob.cpp index 4a446aa3f3..f7d7d95b57 100644 --- a/engines/kyra/saveload_eob.cpp +++ b/engines/kyra/saveload_eob.cpp @@ -298,7 +298,7 @@ Common::Error EoBCoreEngine::loadGameState(int slot) { useMagicBookOrSymbol(_openBookChar, _openBookType); } - _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK); + _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK); gui_toggleButtons(); setHandItem(_itemInHand); diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index ef6333b350..d3b4d6f943 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -106,8 +106,9 @@ bool Screen::init() { memset(_fonts, 0, sizeof(_fonts)); - if (_vm->gameFlags().useHiResOverlay) { - _useOverlays = true; + _useOverlays = (_vm->gameFlags().useHiRes && _renderMode != Common::kRenderEGA); + + if (_useOverlays) { _useSJIS = (_vm->gameFlags().lang == Common::JA_JPN); _sjisInvisibleColor = (_vm->game() == GI_KYRA1) ? 0x80 : 0xF6; @@ -226,7 +227,7 @@ bool Screen::enableScreenDebug(bool enable) { if (_debugEnabled != enable) { _debugEnabled = enable; - setResolution(_vm->gameFlags().useHiResOverlay); + setResolution(); _forceFullUpdate = true; updateScreen(); } @@ -234,14 +235,14 @@ bool Screen::enableScreenDebug(bool enable) { return temp; } -void Screen::setResolution(bool hiRes) { +void Screen::setResolution() { byte palette[3*256]; _system->getPaletteManager()->grabPalette(palette, 0, 256); int width = 320, height = 200; bool defaultTo1xScaler = false; - if (hiRes) { + if (_vm->gameFlags().useHiRes) { defaultTo1xScaler = true; height = 400; @@ -466,11 +467,6 @@ const uint8 *Screen::getCPagePtr(int pageNum) const { return _pagePtrs[pageNum]; } -int Screen::getPageScaleFactor(int pageNum) { - assert(pageNum < SCREEN_PAGE_NUM); - return _pageScaleFactor[pageNum]; -} - uint8 *Screen::getPageRect(int pageNum, int x, int y, int w, int h) { assert(pageNum < SCREEN_PAGE_NUM); if (pageNum == 0 || pageNum == 1) @@ -1226,7 +1222,7 @@ bool Screen::loadFont(FontId fontId, const char *filename) { fnt = new AMIGAFont(); #ifdef ENABLE_EOB else if (_vm->game() == GI_EOB1 || _vm->game() == GI_EOB2) - fnt = new OldDOSFont(_renderMode, (_vm->game() == GI_EOB2) && (_renderMode == Common::kRenderEGA)); + fnt = new OldDOSFont(_renderMode, _vm->gameFlags().useHiRes); #endif // ENABLE_EOB else fnt = new DOSFont(); @@ -2896,21 +2892,20 @@ void Screen::setMouseCursor(int x, int y, const byte *shape) { if (_vm->gameFlags().useAltShapeHeader) shape -= 2; - if (_vm->gameFlags().useHiResOverlay) { + if (_vm->gameFlags().useHiRes) { x <<= 1; y <<= 1; mouseWidth <<= 1; mouseHeight <<= 1; } - uint8 *cursor = new uint8[mouseHeight * mouseWidth]; fillRect(0, 0, mouseWidth, mouseHeight, _cursorColorKey, 8); drawShape(8, shape, 0, 0, 0, 0); int xOffset = 0; - if (_vm->gameFlags().useHiResOverlay) { + if (_vm->gameFlags().useHiRes) { xOffset = mouseWidth; scale2x(getPagePtr(8) + mouseWidth, SCREEN_W, getPagePtr(8), SCREEN_W, mouseWidth, mouseHeight); postProcessCursor(getPagePtr(8) + mouseWidth, mouseWidth, mouseHeight, SCREEN_W); diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h index 18c0aa90f7..4f7f6d49ed 100644 --- a/engines/kyra/screen.h +++ b/engines/kyra/screen.h @@ -168,6 +168,7 @@ private: Common::RenderMode _renderMode; bool _useHiResEGADithering; + bool _useLoResEGA; static uint16 *_cgaDitheringTable; static int _numRef; @@ -398,7 +399,7 @@ public: // init virtual bool init(); - virtual void setResolution(bool hiRes = false); + virtual void setResolution(); void updateScreen(); @@ -433,8 +434,6 @@ public: virtual void setPagePixel(int pageNum, int x, int y, uint8 color); const uint8 *getCPagePtr(int pageNum) const; - int getPageScaleFactor(int pageNum); - uint8 *getPageRect(int pageNum, int x, int y, int w, int h); // palette handling @@ -580,6 +579,8 @@ protected: bool _useOverlays; bool _useSJIS; bool _use16ColorMode; + bool _useHiResEGADithering; + bool _useLoResEGA; bool _isAmiga; Common::RenderMode _renderMode; diff --git a/engines/kyra/screen_eob.cpp b/engines/kyra/screen_eob.cpp index 38521d757c..dc53e8aca5 100644 --- a/engines/kyra/screen_eob.cpp +++ b/engines/kyra/screen_eob.cpp @@ -55,7 +55,7 @@ Screen_EoB::Screen_EoB(EoBCoreEngine *vm, OSystem *system) : Screen(vm, system, _egaPixelValueTable = 0; _cgaMappingDefault = 0; _cgaDitheringTables[0] = _cgaDitheringTables[1] = 0; - _useHiResEGADithering = false; + _useLoResEGA = _useHiResEGADithering = false; } Screen_EoB::~Screen_EoB() { @@ -69,12 +69,8 @@ Screen_EoB::~Screen_EoB() { } bool Screen_EoB::init() { - return init(false); -} - -bool Screen_EoB::init(bool useHiResEGADithering) { // Define hi-res pages for EGA mode in EOB II - if (useHiResEGADithering) { + if (_vm->gameFlags().useHiRes) { for (int i = 0; i < 8; i++) _pageScaleFactor[i] = 2; } @@ -99,15 +95,16 @@ bool Screen_EoB::init(bool useHiResEGADithering) { _dsTempPage = new uint8[12000]; - if (_renderMode == Common::kRenderEGA) { - _useHiResEGADithering = useHiResEGADithering; + if (_vm->gameFlags().useHiRes && _renderMode == Common::kRenderEGA) { + _useHiResEGADithering = true; _egaDitheringTable = new uint8[256]; _egaPixelValueTable = new uint8[256]; for (int i = 0; i < 256; i++) { _egaDitheringTable[i] = i & 0x0f; _egaPixelValueTable[i] = i & 0x0f; } - + } else if (_renderMode == Common::kRenderEGA) { + _useLoResEGA = true; } else if (_renderMode == Common::kRenderCGA) { _cgaMappingDefault = _vm->staticres()->loadRawData(kEoB1CgaMappingDefault, temp); _cgaDitheringTables[0] = new uint16[256]; @@ -432,7 +429,7 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco uint8 *srcLineStart = getPagePtr(_curPage | 1) + y * 320 + (x << 3); uint8 *src = srcLineStart; - if (_renderMode == Common::kRenderEGA && !_useHiResEGADithering) + if (_useLoResEGA) encode8bit = false; if (_renderMode == Common::kRenderCGA) { @@ -556,7 +553,7 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco *dst++ = (w & 0xff); *dst++ = (h & 0xff); - if (_renderMode == Common::kRenderEGA && !_useHiResEGADithering) { + if (_useLoResEGA) { for (int i = 0; i < 16; i++) dst[i] = i; } else { @@ -1538,6 +1535,7 @@ OldDOSFont::OldDOSFont(Common::RenderMode mode, bool useHiResEGADithering) : _re _data = 0; _width = _height = _numGlyphs = 0; _bitmapOffsets = 0; + _useLoResEGA = (_renderMode == Common::kRenderEGA && !_useHiResEGADithering); _numRef++; if (!_cgaDitheringTable && _numRef == 1) { @@ -1664,7 +1662,7 @@ void OldDOSFont::drawChar(uint16 c, byte *dst, int pitch) const { uint16 cgaMask1 = cgaColorMask[color1 & 3]; uint16 cgaMask2 = cgaColorMask[color2 & 3]; - if (_renderMode == Common::kRenderCGA || (_renderMode == Common::kRenderEGA && !_useHiResEGADithering)) { + if (_renderMode == Common::kRenderCGA || _useLoResEGA) { color1 &= 0x0f; color2 &= 0x0f; } diff --git a/engines/kyra/screen_eob.h b/engines/kyra/screen_eob.h index 2bcfbd8f60..92de5c8b38 100644 --- a/engines/kyra/screen_eob.h +++ b/engines/kyra/screen_eob.h @@ -36,7 +36,6 @@ public: virtual ~Screen_EoB(); bool init(); - bool init(bool useHiResEGADithering); void setClearScreenDim(int dim); void clearCurDim(); @@ -116,7 +115,6 @@ private: uint8 *_egaDitheringTable; uint8 *_egaPixelValueTable; - bool _useHiResEGADithering; static const uint8 _egaMatchTable[]; static const ScreenDim _screenDimTable[]; |