aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/workarounds.h
diff options
context:
space:
mode:
authorMax Horn2010-07-21 14:54:06 +0000
committerMax Horn2010-07-21 14:54:06 +0000
commit175d6e297d5d50a96f1af6ddc2e37c7c56f84763 (patch)
tree2fb46d548c652019a27e160beedcaffd54f43e7a /engines/sci/engine/workarounds.h
parent2ed45d3719a9d75f35aff7cc80b23468e1ceac3e (diff)
downloadscummvm-rg350-175d6e297d5d50a96f1af6ddc2e37c7c56f84763.tar.gz
scummvm-rg350-175d6e297d5d50a96f1af6ddc2e37c7c56f84763.tar.bz2
scummvm-rg350-175d6e297d5d50a96f1af6ddc2e37c7c56f84763.zip
SCI: More rest of the workaround defs to workarounds.h
svn-id: r51090
Diffstat (limited to 'engines/sci/engine/workarounds.h')
-rw-r--r--engines/sci/engine/workarounds.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h
index be066d5fc7..9f38ab13ee 100644
--- a/engines/sci/engine/workarounds.h
+++ b/engines/sci/engine/workarounds.h
@@ -26,8 +26,37 @@
#ifndef SCI_ENGINE_WORKAROUNDS_H
#define SCI_ENGINE_WORKAROUNDS_H
+#include "sci/engine/vm_types.h"
+#include "sci/sci.h"
+
namespace Sci {
+enum SciWorkaroundType {
+ WORKAROUND_NONE, // only used by terminator or when no workaround was found
+ WORKAROUND_IGNORE, // ignore kernel call
+ WORKAROUND_STILLCALL, // still do kernel call
+ WORKAROUND_FAKE // fake kernel call / replace temp value / fake opcode
+};
+
+struct SciWorkaroundSolution {
+ SciWorkaroundType type;
+ uint16 value;
+};
+
+struct SciWorkaroundEntry {
+ SciGameId gameId;
+ int roomNr;
+ int scriptNr;
+ int16 inheritanceLevel;
+ const char *objectName;
+ const char *methodName;
+ int localCallOffset;
+ int index;
+ SciWorkaroundSolution newValue;
+};
+
+#define SCI_WORKAROUNDENTRY_TERMINATOR { (SciGameId)0, -1, -1, 0, NULL, NULL, -1, 0, { WORKAROUND_NONE, 0 } }
+
// gameID, room,script,lvl, object-name, method-name, call,index, workaround
static const SciWorkaroundEntry opcodeDivWorkarounds[] = {
{ GID_QFG1VGA, 301, 928, 0, "Blink", "init", -1, 0, { WORKAROUND_FAKE, 0 } }, // when entering inn, gets called with 1 parameter, but 2nd parameter is used for div which happens to be an object
@@ -159,6 +188,8 @@ static const SciWorkaroundEntry kStrCpy_workarounds[] = {
SCI_WORKAROUNDENTRY_TERMINATOR
};
+#undef FAKE
+
} // End of namespace Sci
#endif // SCI_ENGINE_WORKAROUNDS_H