diff options
author | Martin Kiewitz | 2010-07-20 14:27:30 +0000 |
---|---|---|
committer | Martin Kiewitz | 2010-07-20 14:27:30 +0000 |
commit | ef69fb1af5e30fa5f6450ea74837086ea3624d37 (patch) | |
tree | 37526c5feeef3558576cff72d48145d12f770469 /engines/sci | |
parent | 6ebcb5326585a3ec2e2708f8a943c86ce6c9d40f (diff) | |
download | scummvm-rg350-ef69fb1af5e30fa5f6450ea74837086ea3624d37.tar.gz scummvm-rg350-ef69fb1af5e30fa5f6450ea74837086ea3624d37.tar.bz2 scummvm-rg350-ef69fb1af5e30fa5f6450ea74837086ea3624d37.zip |
SCI: adding uninit workarounds for cnick games
longbow and king's quest
KQ has the same issues as hoyle 3
svn-id: r51063
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/kernel.cpp | 14 | ||||
-rw-r--r-- | engines/sci/engine/kernel.h | 2 | ||||
-rw-r--r-- | engines/sci/engine/vm.cpp | 4 |
3 files changed, 16 insertions, 4 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index bab6276228..27ece063ad 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -744,9 +744,17 @@ uint Kernel::getSelectorNamesSize() const { return _selectorNames.size(); } -const Common::String &Kernel::getSelectorName(uint selector) const { - if (selector >= _selectorNames.size()) - return _invalid; +const Common::String &Kernel::getSelectorName(uint selector) { + if (selector >= _selectorNames.size()) { + // This should only occur in games w/o a selector-table + // We need this for proper workaround tables + // TODO: maybe check, if there is a fixed selector-table and error() out in that case + for (uint loopSelector = _selectorNames.size(); loopSelector <= selector; loopSelector++) { + Common::String newSelectorName; + newSelectorName = newSelectorName.printf("<noname %d>", loopSelector); + _selectorNames.push_back(newSelectorName); + } + } return _selectorNames[selector]; } diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 53b0dcb68e..baae5d7cd8 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -160,7 +160,7 @@ public: ~Kernel(); uint getSelectorNamesSize() const; - const Common::String &getSelectorName(uint selector) const; + const Common::String &getSelectorName(uint selector); uint getKernelNamesSize() const; const Common::String &getKernelName(uint number) const; diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 9ec8842ab3..7effc13462 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -378,6 +378,10 @@ static reg_t arithmetic_lookForWorkaround(const byte opcode, const SciWorkaround // gameID, room,script,lvl, object-name, method-name, call, index, replace static const SciWorkaroundEntry uninitializedReadWorkarounds[] = { + { GID_CNICK_KQ, 200, 0, 1, "Character", "<noname 446>", -1, 504, { 0, 0 } }, // checkers, like in hoyle 3 + { GID_CNICK_KQ, 200, 0, 1, "Character", "<noname 446>", -1, 505, { 0, 0 } }, // checkers, like in hoyle 3 + { GID_CNICK_KQ, -1, 700, 0, "gcWindow", "<noname 183>", -1, -1, { 0, 0 } }, // when entering control menu, like in hoyle 3 + { GID_CNICK_LONGBOW, 0, 0, 0, "RH Budget", "<noname 110>", -1, 1, { 0, 0 } }, // when starting the game { GID_FREDDYPHARKAS, -1, 24, 0, "gcWin", "open", -1, 5, { 0, 0xf } }, // is used as priority for game menu { GID_FREDDYPHARKAS, -1, 31, 0, "quitWin", "open", -1, 5, { 0, 0xf } }, // is used as priority for game menu { GID_GK1, -1, 64950, 1, "Feature", "handleEvent", -1, 0, { 0, 0 } }, // sometimes when walk-clicking |