cleanup & check for sentence overflows

svn-id: r23736
This commit is contained in:
Max Horn 2006-08-21 10:04:04 +00:00
parent 0616d4931a
commit 2c0967e7bb
2 changed files with 15 additions and 17 deletions

View file

@ -1049,7 +1049,7 @@ void ScummEngine::doSentence(int verb, int objectA, int objectB) {
if (objectA == objectB) if (objectA == objectB)
return; return;
if (_sentenceNum) { if (_sentenceNum > 0) {
st = &_sentence[_sentenceNum - 1]; st = &_sentence[_sentenceNum - 1];
// Check if this doSentence request is identical to the previous one; // 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 = &_sentence[_sentenceNum++];
st->verb = verb; st->verb = verb;
@ -1074,6 +1075,7 @@ void ScummEngine::checkAndRunSentenceScript() {
int localParamList[24]; int localParamList[24];
const ScriptSlot *ss; const ScriptSlot *ss;
int sentenceScript; int sentenceScript;
if (_game.version <= 2) if (_game.version <= 2)
sentenceScript = 2; sentenceScript = 2;
else else
@ -1091,20 +1093,21 @@ void ScummEngine::checkAndRunSentenceScript() {
return; return;
_sentenceNum--; _sentenceNum--;
SentenceTab &st = _sentence[_sentenceNum];
if (_game.version < 7) if (_game.version < 7)
if (_sentence[_sentenceNum].preposition && _sentence[_sentenceNum].objectB == _sentence[_sentenceNum].objectA) if (st.preposition && st.objectB == st.objectA)
return; return;
if (_game.version <= 2) { if (_game.version <= 2) {
VAR(VAR_ACTIVE_VERB) = _sentence[_sentenceNum].verb; VAR(VAR_ACTIVE_VERB) = st.verb;
VAR(VAR_ACTIVE_OBJECT1) = _sentence[_sentenceNum].objectA; VAR(VAR_ACTIVE_OBJECT1) = st.objectA;
VAR(VAR_ACTIVE_OBJECT2) = _sentence[_sentenceNum].objectB; VAR(VAR_ACTIVE_OBJECT2) = st.objectB;
VAR(VAR_VERB_ALLOWED) = (0 != getVerbEntrypoint(_sentence[_sentenceNum].objectA, _sentence[_sentenceNum].verb)); VAR(VAR_VERB_ALLOWED) = (0 != getVerbEntrypoint(st.objectA, st.verb));
} else { } else {
localParamList[0] = _sentence[_sentenceNum].verb; localParamList[0] = st.verb;
localParamList[1] = _sentence[_sentenceNum].objectA; localParamList[1] = st.objectA;
localParamList[2] = _sentence[_sentenceNum].objectB; localParamList[2] = st.objectB;
if (_game.id == GID_FT && !isValidActor(localParamList[1]) && !isValidActor(localParamList[2])) { if (_game.id == GID_FT && !isValidActor(localParamList[1]) && !isValidActor(localParamList[2])) {

View file

@ -746,7 +746,6 @@ void ScummEngine_v5::o5_divide() {
void ScummEngine_v5::o5_doSentence() { void ScummEngine_v5::o5_doSentence() {
int verb; int verb;
SentenceTab *st;
verb = getVarOrDirectByte(PARAM_1); verb = getVarOrDirectByte(PARAM_1);
if (verb == 0xFE) { if (verb == 0xFE) {
@ -756,13 +755,9 @@ void ScummEngine_v5::o5_doSentence() {
return; return;
} }
st = &_sentence[_sentenceNum++]; int objectA = getVarOrDirectWord(PARAM_2);
int objectB = getVarOrDirectWord(PARAM_3);
st->verb = verb; doSentence(verb, objectA, objectB);
st->objectA = getVarOrDirectWord(PARAM_2);
st->objectB = getVarOrDirectWord(PARAM_3);
st->preposition = (st->objectB != 0);
st->freezeCount = 0;
} }
void ScummEngine_v5::o5_drawBox() { void ScummEngine_v5::o5_drawBox() {