cleanup & check for sentence overflows
svn-id: r23736
This commit is contained in:
parent
0616d4931a
commit
2c0967e7bb
2 changed files with 15 additions and 17 deletions
|
@ -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])) {
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue