aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/script.cpp
diff options
context:
space:
mode:
authorMax Horn2006-08-21 10:04:04 +0000
committerMax Horn2006-08-21 10:04:04 +0000
commit2c0967e7bbceaba1bb248f6c07ed78e21795711b (patch)
tree80e9caf522cecf1ba98db003d6e9363c1a26adc9 /engines/scumm/script.cpp
parent0616d4931a7114b7da292bc8323bf20d28737b93 (diff)
downloadscummvm-rg350-2c0967e7bbceaba1bb248f6c07ed78e21795711b.tar.gz
scummvm-rg350-2c0967e7bbceaba1bb248f6c07ed78e21795711b.tar.bz2
scummvm-rg350-2c0967e7bbceaba1bb248f6c07ed78e21795711b.zip
cleanup & check for sentence overflows
svn-id: r23736
Diffstat (limited to 'engines/scumm/script.cpp')
-rw-r--r--engines/scumm/script.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index 1d0fca7b37..5d4b46ee3c 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1049,7 +1049,7 @@ void ScummEngine::doSentence(int verb, int objectA, int objectB) {
if (objectA == objectB)
return;
- if (_sentenceNum) {
+ if (_sentenceNum > 0) {
st = &_sentence[_sentenceNum - 1];
// Check if this doSentence request is identical to the previous one;
@@ -1060,6 +1060,7 @@ void ScummEngine::doSentence(int verb, int objectA, int objectB) {
}
+ assert(_sentenceNum < NUM_SENTENCE);
st = &_sentence[_sentenceNum++];
st->verb = verb;
@@ -1074,6 +1075,7 @@ void ScummEngine::checkAndRunSentenceScript() {
int localParamList[24];
const ScriptSlot *ss;
int sentenceScript;
+
if (_game.version <= 2)
sentenceScript = 2;
else
@@ -1091,20 +1093,21 @@ void ScummEngine::checkAndRunSentenceScript() {
return;
_sentenceNum--;
+ SentenceTab &st = _sentence[_sentenceNum];
if (_game.version < 7)
- if (_sentence[_sentenceNum].preposition && _sentence[_sentenceNum].objectB == _sentence[_sentenceNum].objectA)
+ if (st.preposition && st.objectB == st.objectA)
return;
if (_game.version <= 2) {
- VAR(VAR_ACTIVE_VERB) = _sentence[_sentenceNum].verb;
- VAR(VAR_ACTIVE_OBJECT1) = _sentence[_sentenceNum].objectA;
- VAR(VAR_ACTIVE_OBJECT2) = _sentence[_sentenceNum].objectB;
- VAR(VAR_VERB_ALLOWED) = (0 != getVerbEntrypoint(_sentence[_sentenceNum].objectA, _sentence[_sentenceNum].verb));
+ VAR(VAR_ACTIVE_VERB) = st.verb;
+ VAR(VAR_ACTIVE_OBJECT1) = st.objectA;
+ VAR(VAR_ACTIVE_OBJECT2) = st.objectB;
+ VAR(VAR_VERB_ALLOWED) = (0 != getVerbEntrypoint(st.objectA, st.verb));
} else {
- localParamList[0] = _sentence[_sentenceNum].verb;
- localParamList[1] = _sentence[_sentenceNum].objectA;
- localParamList[2] = _sentence[_sentenceNum].objectB;
+ localParamList[0] = st.verb;
+ localParamList[1] = st.objectA;
+ localParamList[2] = st.objectB;
if (_game.id == GID_FT && !isValidActor(localParamList[1]) && !isValidActor(localParamList[2])) {