aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/kernel.cpp')
-rw-r--r--engines/sci/engine/kernel.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index 7a2e34a207..586c552770 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -206,6 +206,12 @@ static const char *s_defaultKernelNames[] = {
// i* -> optional multiple integers
// .* -> any parameters afterwards (or none)
+// gameID, scriptNr,lvl, object-name, method-name, call,index,replace
+static const SciWorkaroundEntry kDisposeScript_workarounds[] = {
+ { GID_QFG1, 64, 0, "rm64", "dispose", -1, 0, { 1, 0 } }, // parameter 0 is an object when leaving graveyard
+ SCI_WORKAROUNDENTRY_TERMINATOR
+};
+
struct SciKernelMapEntry {
const char *name;
KernelFunc *function;
@@ -216,7 +222,7 @@ struct SciKernelMapEntry {
const char *signature;
const char *subSignatures; // placeholder
- const char *workarounds; // placeholder
+ const SciWorkaroundEntry *workarounds;
};
#define SIG_SCIALL SCI_VERSION_NONE, SCI_VERSION_NONE
@@ -243,7 +249,7 @@ static SciKernelMapEntry s_kernelMap[] = {
{ MAP_CALL(UnLoad), SIG_EVERYWHERE, "i.*", NULL, NULL },
// ^^ FIXME - Work around SQ1 bug, when exiting the Ulence flats bar
{ MAP_CALL(ScriptID), SIG_EVERYWHERE, "Ioi*", NULL, NULL },
- { MAP_CALL(DisposeScript), SIG_EVERYWHERE, "Oii*", NULL, NULL },
+ { MAP_CALL(DisposeScript), SIG_EVERYWHERE, "ii*", NULL, kDisposeScript_workarounds },
// ^^ FIXME - Work around QfG1 bug
{ MAP_CALL(Clone), SIG_EVERYWHERE, "o", NULL, NULL },
{ MAP_CALL(DisposeClone), SIG_EVERYWHERE, "o", NULL, NULL },
@@ -664,6 +670,7 @@ void Kernel::mapFunctions() {
if (kernelMap->function) {
_kernelFuncs[functNr].func = kernelMap->function;
_kernelFuncs[functNr].signature = compileKernelSignature(kernelMap->signature);
+ _kernelFuncs[functNr].workarounds = kernelMap->workarounds;
_kernelFuncs[functNr].isDummy = false;
++mapped;
} else {