aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorsluicebox2019-10-31 04:30:09 -0700
committersluicebox2019-10-31 04:30:09 -0700
commitcdf9954eb569060184c937a48217f7cd2a6f03f9 (patch)
treea2217a318a00ee8d978437a374ad6e688a41f2d1 /engines
parent6c367c54151bfd4e32a8407fc1e0c36d95755036 (diff)
downloadscummvm-rg350-cdf9954eb569060184c937a48217f7cd2a6f03f9.tar.gz
scummvm-rg350-cdf9954eb569060184c937a48217f7cd2a6f03f9.tar.bz2
scummvm-rg350-cdf9954eb569060184c937a48217f7cd2a6f03f9.zip
SCI32: Add HOYLE5 kFileIOReadString workaround
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/kernel_tables.h2
-rw-r--r--engines/sci/engine/workarounds.cpp6
-rw-r--r--engines/sci/engine/workarounds.h1
3 files changed, 8 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 0149f0ef8a..49a5168119 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -315,7 +315,7 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
{ SIG_SCIALL, 2, MAP_CALL(FileIOReadRaw), "iri", NULL },
{ SIG_SCIALL, 3, MAP_CALL(FileIOWriteRaw), "iri", NULL },
{ SIG_SCIALL, 4, MAP_CALL(FileIOUnlink), "r", NULL },
- { SIG_SCIALL, 5, MAP_CALL(FileIOReadString), "rii", NULL },
+ { SIG_SCIALL, 5, MAP_CALL(FileIOReadString), "rii", kFileIOReadString_workarounds },
{ SIG_SCIALL, 6, MAP_CALL(FileIOWriteString), "ir", NULL },
{ SIG_SCIALL, 7, MAP_CALL(FileIOSeek), "iii", NULL },
{ SIG_SCIALL, 8, MAP_CALL(FileIOFindFirst), "rri", NULL },
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index c0713839ed..ddd6faf008 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -778,6 +778,12 @@ const SciWorkaroundEntry kFileIOCheckFreeSpace_workarounds[] = {
SCI_WORKAROUNDENTRY_TERMINATOR
};
+// gameID, room,script,lvl, object-name, method-name, local-call-signature, index-range, workaround
+const SciWorkaroundEntry kFileIOReadString_workarounds[] = {
+ { GID_HOYLE5, -1, 64993, 0, "version", "readString", NULL, 0, 0, { WORKAROUND_IGNORE, 0 } }, // Zero passed as string when game initializes and VERSION file is present, which only Mac includes. Result is unused
+ SCI_WORKAROUNDENTRY_TERMINATOR
+};
+
// gameID, room,script,lvl, object-name, method-name, local-call-signature, index-range, workaround
const SciWorkaroundEntry kFindKey_workarounds[] = {
{ GID_ECOQUEST2, 100, 999, 0, "myList", "contains", NULL, 0, 0, { WORKAROUND_FAKE, 0 } }, // When Noah Greene gives Adam the Ecorder, and just before the game gives a demonstration, a null reference to a list is passed - bug #4987
diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h
index 528fa93ac3..3e626e6d35 100644
--- a/engines/sci/engine/workarounds.h
+++ b/engines/sci/engine/workarounds.h
@@ -75,6 +75,7 @@ extern const SciWorkaroundEntry kDoSoundPlay_workarounds[];
extern const SciWorkaroundEntry kDoSoundFade_workarounds[];
extern const SciWorkaroundEntry kFileIOOpen_workarounds[];
extern const SciWorkaroundEntry kFileIOCheckFreeSpace_workarounds[];
+extern const SciWorkaroundEntry kFileIOReadString_workarounds[];
extern const SciWorkaroundEntry kFindKey_workarounds[];
extern const SciWorkaroundEntry kFrameOut_workarounds[];
extern const SciWorkaroundEntry kDeleteKey_workarounds[];