diff options
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/resource.cpp | 29 | ||||
-rw-r--r-- | engines/sci/resource.h | 2 | ||||
-rw-r--r-- | engines/sci/sci.cpp | 14 |
3 files changed, 41 insertions, 4 deletions
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index f620e1cb3f..d31a3656ef 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -1859,6 +1859,35 @@ void ResourceManager::detectSciVersion() { } } +bool ResourceManager::detectHires() { + // SCI 1.1 and prior is never hires + if (getSciVersion() <= SCI_VERSION_1_1) + return false; + +#ifdef ENABLE_SCI32 + for (int i = 0; i < 32768; i++) { + Resource *res = findResource(ResourceId(kResourceTypePic, i), 0); + + if (res) { + if (READ_LE_UINT16(res->data) == 0x0e) { + // SCI32 picture + uint16 width = READ_LE_UINT16(res->data + 14); + uint16 height = READ_LE_UINT16(res->data + 16); + if ((width == 320) && ((height == 190) || (height == 200))) + return false; + if ((width >= 600) || (height >= 400)) + return true; + } + } + } + + warning("resMan: Couldn't detect hires"); + return false; +#else + error("no sci32 support"); +#endif +} + // Functions below are based on PD code by Brian Provinciano (SCI Studio) bool ResourceManager::hasOldScriptHeader() { Resource *res = findResource(ResourceId(kResourceTypeScript, 0), 0); diff --git a/engines/sci/resource.h b/engines/sci/resource.h index e8e6bd832d..661b954256 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -284,6 +284,8 @@ public: */ void addNewGMPatch(Common::String gameId); + bool detectHires(); + protected: // Maximum number of bytes to allow being allocated for resources // Note: maxMemory will not be interpreted as a hard limit, only as a restriction diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 6977348c36..d6c2c0bf46 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -126,13 +126,19 @@ Common::Error SciEngine::run() { // Initialize graphics-related parts Screen *screen = 0; + bool isHires = _resMan->detectHires(); + #ifdef ENABLE_SCI32 - if (getSciVersion() >= SCI_VERSION_2_1) - screen = new Screen(_resMan, 640, 480, false); // invokes initGraphics() - else + // If SCI2.1+ games are lowres (e.g. qfg4/cd), switch to upscaled hires mode + if ((!isHires) && (getSciVersion() >= SCI_VERSION_2_1)) + upscaledHires = true; #endif - screen = new Screen(_resMan, 320, 200, upscaledHires); // invokes initGraphics() + // invokes initGraphics() + if (isHires) + screen = new Screen(_resMan, 640, 480, false); + else + screen = new Screen(_resMan, 320, 200, upscaledHires); SciPalette *palette = new SciPalette(_resMan, screen); Cursor *cursor = new Cursor(_resMan, palette, screen); |