aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorMartin Kiewitz2010-07-29 21:12:16 +0000
committerMartin Kiewitz2010-07-29 21:12:16 +0000
commit1c24f2ca8fc333e5cf4df29dfbca83a9eb50bf3f (patch)
tree7c0c8e3393494449aab51368d99d163ad048bc34 /engines/sci/engine
parent630127bc077e56c619c816a89e1d577c38b5eafb (diff)
downloadscummvm-rg350-1c24f2ca8fc333e5cf4df29dfbca83a9eb50bf3f.tar.gz
scummvm-rg350-1c24f2ca8fc333e5cf4df29dfbca83a9eb50bf3f.tar.bz2
scummvm-rg350-1c24f2ca8fc333e5cf4df29dfbca83a9eb50bf3f.zip
SCI: midi hold behaviour fixed
we shouldnt react on hold midi data when no actual hold was called, fixes eq2/amulet problem (bug #3035392) svn-id: r51482
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/kernel.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index a7e5ab208a..70a0166b15 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -652,6 +652,14 @@ void Kernel::mapFunctions() {
bool Kernel::debugSetFunctionLogging(const char *kernelName, bool logging) {
if (strcmp(kernelName, "*")) {
+ const char *kernelSubName = strchr(kernelName, '(');
+ uint kernelSubNameLen = 0;
+ if (kernelSubName) {
+ kernelSubName++;
+ kernelSubNameLen = strlen(kernelSubName);
+ if ((!kernelSubNameLen) || (kernelSubName[kernelSubNameLen - 1] != ')'))
+ return false;
+ }
for (uint id = 0; id < _kernelFuncs.size(); id++) {
if (_kernelFuncs[id].name) {
if (!_kernelFuncs[id].subFunctions) {
@@ -662,7 +670,15 @@ bool Kernel::debugSetFunctionLogging(const char *kernelName, bool logging) {
}
} else {
// Sub-Functions available
- // TODO: do this
+ if (kernelSubName) {
+ KernelSubFunction *kernelSubCall = _kernelFuncs[id].subFunctions;
+ uint kernelSubCallCount = _kernelFuncs[id].subFunctionCount;
+ for (uint subId = 0; subId < kernelSubCallCount; subId++) {
+ if (kernelSubCall->function)
+ kernelSubCall->debugLogging = logging;
+ kernelSubCall++;
+ }
+ }
}
}
}