From 5684273ee11d973b1f1ed3a3a51571bb5e3dcaaa Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 20 Aug 2018 04:29:02 +0300 Subject: [PATCH] SCI: Add support for text loading in Hoyle 3 Amiga --- engines/sci/engine/kernel.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index fd64198bb77..e828db6f40a 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -880,7 +880,20 @@ Common::String Kernel::lookupText(reg_t address, int index) { if (address.getSegment()) return _segMan->getString(address); - Resource *textres = _resMan->findResource(ResourceId(kResourceTypeText, address.getOffset()), false); + ResourceId resourceId = ResourceId(kResourceTypeText, address.getOffset()); + if (g_sci->getGameId() == GID_HOYLE3 && g_sci->getPlatform() == Common::kPlatformAmiga) { + // WORKAROUND: In the Amiga version of Hoyle 3, texts are stored as + // either text, font or palette types. Seems like the resource type + // bits are used as part of the resource numbers. This is the same + // as the workaround used in GfxFontFromResource() + resourceId = ResourceId(kResourceTypeText, address.getOffset() & 0x7FF); + if (!_resMan->testResource(resourceId)) + resourceId = ResourceId(kResourceTypeFont, address.getOffset() & 0x7FF); + if (!_resMan->testResource(resourceId)) + resourceId = ResourceId(kResourceTypePalette, address.getOffset() & 0x7FF); + } + + Resource *textres = _resMan->findResource(resourceId, false); if (!textres) { error("text.%03d not found", address.getOffset());