diff options
author | Tobias Gunkel | 2012-01-09 23:21:08 +0100 |
---|---|---|
committer | Tobias Gunkel | 2012-02-11 08:28:26 +0100 |
commit | b337823bab5994b78f639a7625ff763f061a1c0c (patch) | |
tree | f5521f8c799213c775d8eb580d0e8d6acef0bb85 /engines/scumm/script.cpp | |
parent | c16ef940a1f25846623903d6ce744374228ff104 (diff) | |
download | scummvm-rg350-b337823bab5994b78f639a7625ff763f061a1c0c.tar.gz scummvm-rg350-b337823bab5994b78f639a7625ff763f061a1c0c.tar.bz2 scummvm-rg350-b337823bab5994b78f639a7625ff763f061a1c0c.zip |
SCUMM: fix verb and script handling
- getVerbEntrypoint() should not handle walk-to differently (revert 0x0D handling back to original behavior)
- VAR_ACTIVE_ACTOR actually is VAR_ACTIVE_OBJECT2
- runSentenceScript(): "if (_cmdVerb == kVerbWalkTo)" must be "if (_cmdVerb != kVerbWalkTo)"
Diffstat (limited to 'engines/scumm/script.cpp')
-rw-r--r-- | engines/scumm/script.cpp | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 0864022c59..e34c81d0d4 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -196,12 +196,8 @@ int ScummEngine::getVerbEntrypoint(int obj, int entry) { } else if (_game.version <= 2) { do { const int kFallbackEntry = (_game.version == 0 ? 0x0F : 0xFF); - if (!*verbptr) { - if (_game.version == 0 && entry == kVerbWalkTo) - return 13; - else - return 0; - } + if (!*verbptr) + return 0; if (*verbptr == entry || *verbptr == kFallbackEntry) break; verbptr += 2; @@ -1160,8 +1156,6 @@ void ScummEngine_v0::walkToActorOrObject(int object) { } void ScummEngine_v0::checkAndRunSentenceScript() { - const ScriptSlot *ss; - if (_walkToObjectIdx) { ActorC64 *a = (ActorC64 *)derefActor(VAR(VAR_EGO), "checkAndRunSentenceScript"); if (a->_moving) @@ -1175,7 +1169,6 @@ void ScummEngine_v0::checkAndRunSentenceScript() { if (!_sentenceNum || _sentence[_sentenceNum - 1].freezeCount) return; - //_sentenceNum--; SentenceTab &st = _sentence[_sentenceNum - 1]; if (st.preposition && st.objectB == st.objectA) @@ -1232,30 +1225,27 @@ void ScummEngine_v0::checkAndRunSentenceScript() { void ScummEngine_v0::runSentenceScript() { int obj = OBJECT_V0(_cmdObjectNr, _cmdObjectType); - // FIXME: should it really ever return 0xD on WalkTo, seems wrong? if (getVerbEntrypoint(obj, _cmdVerb) != 0) { - if (_cmdVerb == kVerbRead && VAR(VAR_CURRENT_LIGHTS) == 0) { - //slot = 0xFF; - VAR(VAR_ACTIVE_VERB) = _cmdVerb; - runScript(3, 0, 0, 0); - return; - } else { - VAR(VAR_ACTIVE_ACTOR) = _cmdObject2Nr; + // do not read in the dark + if (!(_cmdVerb == kVerbRead && _currentLights == 0)) { + VAR(VAR_ACTIVE_OBJECT2) = _cmdObject2Nr; runObjectScript(obj, _cmdVerb, false, false, NULL); return; } } else { if (_cmdVerb == kVerbGive) { + // no "give to"-script: give to other kid or ignore if (_cmdObject2Nr < 8) setOwnerOf(obj, _cmdObject2Nr); return; - } else if (_cmdVerb == kVerbWalkTo) { - //slot = 0xFF; - VAR(VAR_ACTIVE_VERB) = _cmdVerb; - runScript(3, 0, 0, 0); - return; } } + + if (_cmdVerb != kVerbWalkTo) { + // perform verb's fallback action + VAR(VAR_ACTIVE_VERB) = _cmdVerb; + runScript(3, 0, 0, 0); + } } void ScummEngine_v2::runInputScript(int clickArea, int val, int mode) { |