From 743082ac8c9aa295db25bdcd47242913d7f6c02a Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Sun, 24 Sep 2017 22:27:02 -0500 Subject: SCI32: Disable all SCI32 Mac code This code is currently untestable and is almost certainly at least partly based on guesswork & not actual reverse-engineering (as was the case for all other pre-2015 SCI32 code), so future developers interested in adding SCI32 Mac support should use it only as an intermediate reference rather than as known good code. --- engines/sci/engine/kernel.cpp | 8 +++- engines/sci/engine/kernel.h | 2 + engines/sci/engine/kmisc.cpp | 4 +- engines/sci/engine/ksound.cpp | 2 +- engines/sci/engine/message.cpp | 4 +- engines/sci/graphics/cursor32.cpp | 89 ++++++++++++++++++++------------------ engines/sci/graphics/cursor32.h | 2 + engines/sci/graphics/palette32.cpp | 4 ++ engines/sci/resource.cpp | 2 + 9 files changed, 70 insertions(+), 47 deletions(-) (limited to 'engines') diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index 72c074ffed..fd64198bb7 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -122,10 +122,14 @@ void Kernel::loadSelectorNames() { Resource *r = _resMan->findResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SELECTORS), 0); bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); +#ifdef ENABLE_SCI32_MAC // Starting with KQ7, Mac versions have a BE name table. GK1 Mac and earlier (and all // other platforms) always use LE. - bool isBE = (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY + const bool isBE = (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY && g_sci->getGameId() != GID_GK1); +#else + const bool isBE = false; +#endif if (!r) { // No such resource? // Check if we have a table for this game @@ -610,7 +614,7 @@ void Kernel::mapFunctions() { continue; } -#ifdef ENABLE_SCI32 +#ifdef ENABLE_SCI32_MAC // HACK: Phantasmagoria Mac uses a modified kDoSound (which *nothing* // else seems to use)! if (g_sci->getPlatform() == Common::kPlatformMacintosh && g_sci->getGameId() == GID_PHANTASMAGORIA && kernelName == "DoSound") { diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 7e576f5b98..69a86ae9d5 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -650,8 +650,10 @@ reg_t kAddLine(EngineState *s, int argc, reg_t *argv); reg_t kUpdateLine(EngineState *s, int argc, reg_t *argv); reg_t kDeleteLine(EngineState *s, int argc, reg_t *argv); +#ifdef ENABLE_SCI32_MAC // Phantasmagoria Mac Special Kernel Function reg_t kDoSoundPhantasmagoriaMac(EngineState *s, int argc, reg_t *argv); +#endif // SCI3 Kernel functions reg_t kPlayDuck(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index 62dc2b22ef..49d2d9fa08 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -529,7 +529,7 @@ reg_t kMacPlatform(EngineState *s, int argc, reg_t *argv) { // In SCI1, its usage is still unknown // In SCI1.1, it's NOP // In SCI32, it's used for remapping cursor ID's -#ifdef ENABLE_SCI32 +#ifdef ENABLE_SCI32_MAC if (getSciVersion() >= SCI_VERSION_2_1_EARLY) // Set Mac cursor remap g_sci->_gfxCursor32->setMacCursorRemapList(argc - 1, argv + 1); else @@ -643,10 +643,12 @@ reg_t kPlatform32(EngineState *s, int argc, reg_t *argv) { case Common::kPlatformWindows: return make_reg(0, kSciPlatformWindows); case Common::kPlatformMacintosh: +#ifdef ENABLE_SCI32_MAC // For Mac versions, kPlatform(0) with other args has more functionality if (argc > 1) return kMacPlatform(s, argc - 1, argv + 1); else +#endif return make_reg(0, kSciPlatformMacintosh); default: error("Unknown platform %d", g_sci->getPlatform()); diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp index ee4f8efd9a..bbfadf1c53 100644 --- a/engines/sci/engine/ksound.cpp +++ b/engines/sci/engine/ksound.cpp @@ -70,7 +70,7 @@ CREATE_DOSOUND_FORWARD(DoSoundSetVolume) CREATE_DOSOUND_FORWARD(DoSoundSetPriority) CREATE_DOSOUND_FORWARD(DoSoundSetLoop) -#ifdef ENABLE_SCI32 +#ifdef ENABLE_SCI32_MAC reg_t kDoSoundPhantasmagoriaMac(EngineState *s, int argc, reg_t *argv) { // Phantasmagoria Mac (and seemingly no other game (!)) uses this // cutdown version of kDoSound. diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp index baa926166a..d8e2d48367 100644 --- a/engines/sci/engine/message.cpp +++ b/engines/sci/engine/message.cpp @@ -149,7 +149,7 @@ public: } }; -#ifdef ENABLE_SCI32 +#ifdef ENABLE_SCI32_MAC // SCI32 Mac decided to add an extra byte (currently unknown in meaning) between // the talker and the string... class MessageReaderV4_MacSCI32 : public MessageReader { @@ -202,6 +202,8 @@ bool MessageState::getRecord(CursorStack &stack, bool recurse, MessageRecord &re case 4: #ifdef ENABLE_SCI32 case 5: // v5 seems to be compatible with v4 +#endif +#ifdef ENABLE_SCI32_MAC // SCI32 Mac is different than SCI32 DOS/Win here if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_2_1_EARLY) reader = new MessageReaderV4_MacSCI32(*res); diff --git a/engines/sci/graphics/cursor32.cpp b/engines/sci/graphics/cursor32.cpp index 6eb708531f..74fbafa2f0 100644 --- a/engines/sci/graphics/cursor32.cpp +++ b/engines/sci/graphics/cursor32.cpp @@ -184,48 +184,8 @@ void GfxCursor32::setView(const GuiResourceId viewId, const int16 loopNo, const _cursorInfo.loopNo = loopNo; _cursorInfo.celNo = celNo; - if (_macCursorRemap.empty() && viewId != -1) { - CelObjView view(viewId, loopNo, celNo); - - _hotSpot = view._origin; - _width = view._width; - _height = view._height; - - // SSCI never increased the size of cursors, but some of the cursors - // in early SCI32 games were designed for low-resolution display mode - // and so are kind of hard to pick out when running in high-resolution - // mode. - // To address this, we make some slight adjustments to cursor display - // in these early games: - // GK1: All the cursors are increased in size since they all appear to - // be designed for low-res display. - // PQ4: We only make the cursors bigger if they are above a set - // threshold size because inventory items usually have a - // high-resolution cursor representation. - bool pixelDouble = false; - if (g_sci->_gfxFrameout->_isHiRes && - (g_sci->getGameId() == GID_GK1 || - (g_sci->getGameId() == GID_PQ4 && _width <= 22 && _height <= 22))) { - - _width *= 2; - _height *= 2; - _hotSpot.x *= 2; - _hotSpot.y *= 2; - pixelDouble = true; - } - - _cursor.data = (byte *)realloc(_cursor.data, _width * _height); - _cursor.rect = Common::Rect(_width, _height); - memset(_cursor.data, 255, _width * _height); - _cursor.skipColor = 255; - - Buffer target(_width, _height, _cursor.data); - if (pixelDouble) { - view.draw(target, _cursor.rect, Common::Point(0, 0), false, 2, 2); - } else { - view.draw(target, _cursor.rect, Common::Point(0, 0), false); - } - } else if (!_macCursorRemap.empty() && viewId != -1) { +#ifdef ENABLE_SCI32_MAC + if (!_macCursorRemap.empty() && viewId != -1) { // Mac cursor handling GuiResourceId viewNum = viewId; @@ -269,6 +229,49 @@ void GfxCursor32::setView(const GuiResourceId viewId, const int16 loopNo, const // The cursor will be drawn on next refresh delete macCursor; + } else +#endif + if (viewId != -1) { + CelObjView view(viewId, loopNo, celNo); + + _hotSpot = view._origin; + _width = view._width; + _height = view._height; + + // SSCI never increased the size of cursors, but some of the cursors + // in early SCI32 games were designed for low-resolution display mode + // and so are kind of hard to pick out when running in high-resolution + // mode. + // To address this, we make some slight adjustments to cursor display + // in these early games: + // GK1: All the cursors are increased in size since they all appear to + // be designed for low-res display. + // PQ4: We only make the cursors bigger if they are above a set + // threshold size because inventory items usually have a + // high-resolution cursor representation. + bool pixelDouble = false; + if (g_sci->_gfxFrameout->_isHiRes && + (g_sci->getGameId() == GID_GK1 || + (g_sci->getGameId() == GID_PQ4 && _width <= 22 && _height <= 22))) { + + _width *= 2; + _height *= 2; + _hotSpot.x *= 2; + _hotSpot.y *= 2; + pixelDouble = true; + } + + _cursor.data = (byte *)realloc(_cursor.data, _width * _height); + _cursor.rect = Common::Rect(_width, _height); + memset(_cursor.data, 255, _width * _height); + _cursor.skipColor = 255; + + Buffer target(_width, _height, _cursor.data); + if (pixelDouble) { + view.draw(target, _cursor.rect, Common::Point(0, 0), false, 2, 2); + } else { + view.draw(target, _cursor.rect, Common::Point(0, 0), false); + } } else { _hotSpot = Common::Point(0, 0); _width = _height = 1; @@ -462,9 +465,11 @@ void GfxCursor32::move() { } } +#ifdef ENABLE_SCI32_MAC void GfxCursor32::setMacCursorRemapList(int cursorCount, reg_t *cursors) { for (int i = 0; i < cursorCount; i++) _macCursorRemap.push_back(cursors[i].toUint16()); } +#endif } // End of namespace Sci diff --git a/engines/sci/graphics/cursor32.h b/engines/sci/graphics/cursor32.h index 5872744aec..562a2c50de 100644 --- a/engines/sci/graphics/cursor32.h +++ b/engines/sci/graphics/cursor32.h @@ -109,7 +109,9 @@ public: */ void clearRestrictedArea(); +#ifdef ENABLE_SCI32_MAC void setMacCursorRemapList(int cursorCount, reg_t *cursors); +#endif virtual void saveLoadWithSerializer(Common::Serializer &ser); diff --git a/engines/sci/graphics/palette32.cpp b/engines/sci/graphics/palette32.cpp index d878b8554f..9a2fa2c36c 100644 --- a/engines/sci/graphics/palette32.cpp +++ b/engines/sci/graphics/palette32.cpp @@ -530,12 +530,16 @@ void GfxPalette32::updateHardware() { memset(bpal + (maxIndex + 1) * 3, 0, (255 - maxIndex - 1) * 3); #endif +#ifdef ENABLE_SCI32_MAC if (g_sci->getPlatform() != Common::kPlatformMacintosh) { // The last color must always be white bpal[255 * 3 ] = 255; bpal[255 * 3 + 1] = 255; bpal[255 * 3 + 2] = 255; } else { +#else + { +#endif bpal[255 * 3 ] = 0; bpal[255 * 3 + 1] = 0; bpal[255 * 3 + 2] = 0; diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 8d2723153d..ad6415daea 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -476,12 +476,14 @@ void MacResourceForkResourceSource::decompressResource(Common::SeekableReadStrea bool canBeCompressed = !(g_sci && g_sci->getGameId() == GID_KQ6) && isCompressableResource(resource->_id.getType()); uint32 uncompressedSize = 0; +#ifdef ENABLE_SCI32_MAC // GK2 Mac is crazy. In its Patches resource fork, picture 2315 is not // compressed and it is hardcoded in the executable to say that it's // not compressed. Why didn't they just add four zeroes to the end of // the resource? (Checked with PPC disasm) if (g_sci && g_sci->getGameId() == GID_GK2 && resource->_id.getType() == kResourceTypePic && resource->_id.getNumber() == 2315) canBeCompressed = false; +#endif // Get the uncompressed size from the end of the resource if (canBeCompressed && stream->size() > 4) { -- cgit v1.2.3