aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorTobias Gunkel2012-01-09 23:21:08 +0100
committerTobias Gunkel2012-02-11 08:28:26 +0100
commitb337823bab5994b78f639a7625ff763f061a1c0c (patch)
treef5521f8c799213c775d8eb580d0e8d6acef0bb85 /engines
parentc16ef940a1f25846623903d6ce744374228ff104 (diff)
downloadscummvm-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')
-rw-r--r--engines/scumm/script.cpp34
-rw-r--r--engines/scumm/scumm.cpp2
-rw-r--r--engines/scumm/scumm_v0.h2
-rw-r--r--engines/scumm/vars.cpp2
4 files changed, 15 insertions, 25 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) {
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index e6ec2b0dab..2eda5cac80 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -726,7 +726,7 @@ ScummEngine_v0::ScummEngine_v0(OSystem *syst, const DetectorResult &dr)
_cmdObject2Nr = 0;
_cmdObject2Type = 0;
- VAR_ACTIVE_ACTOR = 0xFF;
+ VAR_ACTIVE_OBJECT2 = 0xFF;
VAR_IS_SOUND_RUNNING = 0xFF;
VAR_ACTIVE_VERB = 0xFF;
}
diff --git a/engines/scumm/scumm_v0.h b/engines/scumm/scumm_v0.h
index 031a73acf9..3335a15ad2 100644
--- a/engines/scumm/scumm_v0.h
+++ b/engines/scumm/scumm_v0.h
@@ -159,7 +159,7 @@ protected:
void o_beginOverride();
void o_setOwnerOf();
- byte VAR_ACTIVE_ACTOR;
+ byte VAR_ACTIVE_OBJECT2;
byte VAR_IS_SOUND_RUNNING;
byte VAR_ACTIVE_VERB;
};
diff --git a/engines/scumm/vars.cpp b/engines/scumm/vars.cpp
index 26a6a2f3b1..6365a728d2 100644
--- a/engines/scumm/vars.cpp
+++ b/engines/scumm/vars.cpp
@@ -115,7 +115,7 @@ void ScummEngine_v0::setupScummVars() {
VAR_CAMERA_POS_X = 2;
VAR_HAVE_MSG = 3;
VAR_ROOM = 4;
- VAR_ACTIVE_ACTOR = 5;
+ VAR_ACTIVE_OBJECT2 = 5;
VAR_OVERRIDE = 6;
VAR_IS_SOUND_RUNNING = 8;
VAR_ACTIVE_VERB = 9;