From 27469a1896f08c6d32df1778dc7e9cce28c2bec4 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 20 Feb 2005 00:17:22 +0000 Subject: Patch #1121337 (CGA rendering in early LEC titles). Differences against patch: o Updated documentation o Fixed text colors o Implemented Hercules dithering Ditherers are based on loom ega and monkey ega, so for zak and mm they're wrong, i.e. these games look better than with original ditherers. TODO: Proper ditherers for zak & MM EGA ditherers for VGA SCUMM v5 games svn-id: r16816 --- scumm/scumm.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'scumm/scumm.cpp') diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index 395ae16e89..8fac59868a 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -998,6 +998,32 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS } _confirmExit = ConfMan.getBool("confirm_exit"); + if (ConfMan.hasKey("render_mode")) { + _renderMode = Common::parseRenderMode(ConfMan.get("render_mode").c_str()); + } else { + _renderMode = Common::kRenderDefault; + } + + // Do some render mode restirctions + switch (_renderMode) { + case Common::kRenderHerc: + if (_version > 2 && _gameId != GID_MONKEY_EGA) + _renderMode = Common::kRenderDefault; + break; + + case Common::kRenderCGA: + if (!(_features & GF_16COLOR)) + _renderMode = Common::kRenderDefault; + break; + + case Common::kRenderEGA: + _renderMode = Common::kRenderDefault; + break; + + default: + break; + } + _hexdumpScripts = false; _showStack = false; @@ -1019,6 +1045,11 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS } else if (_features & GF_NES) { _screenWidth = 256; _screenHeight = 240; + } else if (_renderMode == Common::kRenderHerc) { + _system->setGraphicsMode("1x"); + _features |= GF_DEFAULT_TO_1X_SCALER; + _screenWidth = 320; + _screenHeight = 200; } else { _screenWidth = 320; _screenHeight = 200; @@ -1109,7 +1140,13 @@ int ScummEngine::init(GameDetector &detector) { // Initialize backend _system->beginGFXTransaction(); initCommonGFX(detector); - _system->initSize(_screenWidth, _screenHeight); + if (_renderMode == Common::kRenderHerc) { + _system->initSize(Common::kHercW, Common::kHercH); + _features |= GF_DEFAULT_TO_1X_SCALER; + _system->setGraphicsMode("1x"); + } else { + _system->initSize(_screenWidth, _screenHeight); + } // FIXME: All this seems a dirty hack to me. We already // have this check in constructor @@ -1268,6 +1305,10 @@ void ScummEngine::scummInit() { _shadowPalette[i] = i; if ((_features & GF_AMIGA) || (_features & GF_ATARI_ST)) setupAmigaPalette(); + else if (_renderMode == Common::kRenderHerc) + setupHercPalette(); + else if (_renderMode == Common::kRenderCGA) + setupCGAPalette(); else setupEGAPalette(); } -- cgit v1.2.3