Skip to content

Commit

Permalink
KYRA: (EOB) - cleanup CGA/EGA code a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
athrxx committed Feb 24, 2012
1 parent 14e6a5f commit ecd1a9f
Show file tree
Hide file tree
Showing 18 changed files with 64 additions and 71 deletions.
10 changes: 5 additions & 5 deletions engines/kyra/chargen.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
2 changes: 2 additions & 0 deletions engines/kyra/detection.cpp
Expand Up @@ -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
Expand Down
18 changes: 14 additions & 4 deletions engines/kyra/eobcommon.cpp
Expand Up @@ -57,6 +57,8 @@ EoBCoreEngine::EoBCoreEngine(OSystem *system, const GameFlags &flags)
_configMouse = true;
_loading = false;

_useHiResDithering = false;

_envAudioTimer = 0;
_flashShapeTimer = 0;
_drawSceneTimer = 0;
Expand Down Expand Up @@ -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);
Expand All @@ -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")) {
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}

Expand Down
2 changes: 2 additions & 0 deletions engines/kyra/eobcommon.h
Expand Up @@ -845,6 +845,8 @@ friend class TransferPartyWiz;
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);
Expand Down
10 changes: 5 additions & 5 deletions engines/kyra/gui_eob.cpp
Expand Up @@ -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);

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/kyra_hof.cpp
Expand Up @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions engines/kyra/kyra_lok.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}

Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/kyra_mr.cpp
Expand Up @@ -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);
Expand Down
6 changes: 0 additions & 6 deletions engines/kyra/kyra_rpg.cpp
Expand Up @@ -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;
Expand Down
15 changes: 4 additions & 11 deletions engines/kyra/kyra_v1.cpp
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/kyra_v1.h
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/lol.cpp
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/magic_eob.cpp
Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion engines/kyra/saveload_eob.cpp
Expand Up @@ -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);
Expand Down
23 changes: 9 additions & 14 deletions engines/kyra/screen.cpp
Expand Up @@ -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;

Expand Down Expand Up @@ -226,22 +227,22 @@ bool Screen::enableScreenDebug(bool enable) {

if (_debugEnabled != enable) {
_debugEnabled = enable;
setResolution(_vm->gameFlags().useHiResOverlay);
setResolution();
_forceFullUpdate = true;
updateScreen();
}

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;

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit ecd1a9f

Please sign in to comment.