aboutsummaryrefslogtreecommitdiff
path: root/scumm/scumm.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2005-02-20 00:17:22 +0000
committerEugene Sandulenko2005-02-20 00:17:22 +0000
commit27469a1896f08c6d32df1778dc7e9cce28c2bec4 (patch)
tree173e32cafae393fd7bcf2d7eb4e81932c5cd2b95 /scumm/scumm.cpp
parent3184c2de34c89a1b380fffa9f9ac83f53dc062d7 (diff)
downloadscummvm-rg350-27469a1896f08c6d32df1778dc7e9cce28c2bec4.tar.gz
scummvm-rg350-27469a1896f08c6d32df1778dc7e9cce28c2bec4.tar.bz2
scummvm-rg350-27469a1896f08c6d32df1778dc7e9cce28c2bec4.zip
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
Diffstat (limited to 'scumm/scumm.cpp')
-rw-r--r--scumm/scumm.cpp43
1 files changed, 42 insertions, 1 deletions
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();
}