diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h
index 91ce678..b014899 100644
a
|
b
|
static const struct ADGameDescription SciGameDescriptions[] = {
|
1069 | 1069 | AD_LISTEND}, |
1070 | 1070 | Common::EN_ANY, Common::kPlatformMacintosh, 0, GUIO5(GUIO_NOSPEECH, GAMEOPTION_EGA_UNDITHER, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, |
1071 | 1071 | |
1072 | | #if 0 // TODO: unknown if these files are corrupt |
1073 | 1072 | // Hoyle 3 - English Amiga (from www.back2roots.org) |
1074 | 1073 | // Executable scanning reports "1.005.000" |
1075 | 1074 | // SCI interpreter version 1.000.510 |
… |
… |
static const struct ADGameDescription SciGameDescriptions[] = {
|
1079 | 1078 | {"resource.001", 0, "143df8aef214a2db34c2d48190742012", 632273}, |
1080 | 1079 | AD_LISTEND}, |
1081 | 1080 | Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, |
1082 | | #endif |
1083 | 1081 | |
1084 | 1082 | // Hoyle 3 - English DOS Non-Interactive Demo |
1085 | 1083 | // Executable scanning reports "x.yyy.zzz" |
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index 72c074f..8943d49 100644
a
|
b
|
Common::String Kernel::lookupText(reg_t address, int index) {
|
876 | 876 | if (address.getSegment()) |
877 | 877 | return _segMan->getString(address); |
878 | 878 | |
879 | | Resource *textres = _resMan->findResource(ResourceId(kResourceTypeText, address.getOffset()), false); |
| 879 | ResourceId resourceId = ResourceId(kResourceTypeText, address.getOffset()); |
| 880 | if (g_sci->getGameId() == GID_HOYLE3 && g_sci->getPlatform() == Common::kPlatformAmiga) { |
| 881 | // In the Amiga version of Hoyle 3, texts are stored as either text, font or palette |
| 882 | // types. Seems like the resource type bits are used as part of the resource numbers. |
| 883 | // I haven't found a reliable way of loading these correctly as text in the |
| 884 | // resource manager, so this is the least invasive way of loading them properly |
| 885 | resourceId = ResourceId(kResourceTypeText, address.getOffset() & 0x7FF); |
| 886 | if (!_resMan->testResource(resourceId)) |
| 887 | resourceId = ResourceId(kResourceTypeFont, address.getOffset() & 0x7FF); |
| 888 | if (!_resMan->testResource(resourceId)) |
| 889 | resourceId = ResourceId(kResourceTypePalette, address.getOffset() & 0x7FF); |
| 890 | } |
| 891 | |
| 892 | Resource *textres = _resMan->findResource(resourceId, false); |
880 | 893 | |
881 | 894 | if (!textres) { |
882 | 895 | error("text.%03d not found", address.getOffset()); |
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index 5a33023..41f7a61 100644
a
|
b
|
reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
|
269 | 269 | |
270 | 270 | Script *scr = s->_segMan->getScript(scriptSeg); |
271 | 271 | |
| 272 | // Avoid referencing invalid export 0 in script 601 in Hoyle 3 Amiga |
| 273 | if (g_sci->getGameId() == GID_HOYLE3 && g_sci->getPlatform() == Common::kPlatformAmiga && script == 601 && argc == 1) |
| 274 | return NULL_REG; |
| 275 | |
272 | 276 | if (!scr->getExportsNr()) { |
273 | 277 | // This is normal. Some scripts don't have a dispatch (exports) table, |
274 | 278 | // and this call is probably used to load them in memory, ignoring |