diff options
-rw-r--r-- | engines/scumm/intern.h | 4 | ||||
-rw-r--r-- | engines/scumm/room.cpp | 1 | ||||
-rw-r--r-- | engines/scumm/script_c64.cpp | 33 | ||||
-rw-r--r-- | engines/scumm/script_v2.cpp | 12 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 1 | ||||
-rw-r--r-- | engines/scumm/scumm.h | 1 | ||||
-rw-r--r-- | engines/scumm/verbs.cpp | 8 |
7 files changed, 27 insertions, 33 deletions
diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h index 77687c0d7e..47ba1123ae 100644 --- a/engines/scumm/intern.h +++ b/engines/scumm/intern.h @@ -293,7 +293,7 @@ protected: virtual void setStateCommon(byte type); virtual void clearStateCommon(byte type); - void resetSentence(); + virtual void resetSentence(); void setUserState(byte state); virtual void handleMouseOver(bool updateInventory); @@ -428,6 +428,8 @@ protected: virtual void setStateCommon(byte type); virtual void clearStateCommon(byte type); + virtual void resetSentence(); + int getObjectFlag(); /* Version C64 script opcodes */ diff --git a/engines/scumm/room.cpp b/engines/scumm/room.cpp index c3f97a3546..3d678696c3 100644 --- a/engines/scumm/room.cpp +++ b/engines/scumm/room.cpp @@ -120,7 +120,6 @@ void ScummEngine::startScene(int room, Actor *a, int objectNr) { res.increaseResourceCounter(); - _activeObject = 0; _currentRoom = room; VAR(VAR_ROOM) = room; diff --git a/engines/scumm/script_c64.cpp b/engines/scumm/script_c64.cpp index 7687a8c2f9..21c2073e65 100644 --- a/engines/scumm/script_c64.cpp +++ b/engines/scumm/script_c64.cpp @@ -491,8 +491,6 @@ void ScummEngine_c64::drawSentence() { } if (sentencePrep > 0 && sentencePrep <= 4) { - printf("sentencePrep is %d\n", sentencePrep); - // The prepositions, like the fonts, were hard code in the engine. Thus // we have to do that, too, and provde localized versions for all the // languages MM/Zak are available in. @@ -513,13 +511,13 @@ void ScummEngine_c64::drawSentence() { strcat(sentence, prepositions[lang][sentencePrep]); } - /* if (_activeObject2 > 0) { - temp = getObjOrActorName(_activeObject2); + if (_activeInventory > 0) { + temp = getObjOrActorName(_activeInventory); if (temp) { strcat(sentence, " "); strcat(sentence, (const char*)temp); } - } */ + } _string[2].charset = 1; _string[2].ypos = virtscr[kVerbVirtScreen].topline; @@ -586,13 +584,11 @@ void ScummEngine_c64::o_loadSound() { void ScummEngine_c64::o_lockSound() { int resid = fetchScriptByte(); res.lock(rtSound, resid); - debug(0, "o_lockSound (%d)", resid); } void ScummEngine_c64::o_unlockSound() { int resid = fetchScriptByte(); res.unlock(rtSound, resid); - debug(0, "o_unlockSound (%d)", resid); } void ScummEngine_c64::o_loadActor() { @@ -615,13 +611,11 @@ void ScummEngine_c64::o_loadScript() { void ScummEngine_c64::o_lockScript() { int resid = fetchScriptByte(); res.lock(rtScript, resid); - debug(0, "o_lockScript (%d)", resid); } void ScummEngine_c64::o_unlockScript() { int resid = fetchScriptByte(); res.unlock(rtScript, resid); - debug(0, "o_unlockScript (%d)", resid); } void ScummEngine_c64::o_loadRoom() { @@ -663,13 +657,11 @@ void ScummEngine_c64::o_loadRoomWithEgo() { void ScummEngine_c64::o_lockRoom() { int resid = fetchScriptByte(); res.lock(rtRoom, resid); - debug(0, "o_lockRoom (%d)", resid); } void ScummEngine_c64::o_unlockRoom() { int resid = fetchScriptByte(); res.unlock(rtRoom, resid); - debug(0, "o_unlockRoom (%d)", resid); } void ScummEngine_c64::o_cursorCommand() { @@ -843,21 +835,22 @@ void ScummEngine_c64::o_printEgo_c64() { } void ScummEngine_c64::o_doSentence() { - byte var1 = fetchScriptByte(); - byte var2 = fetchScriptByte(); - byte var3 = fetchScriptByte(); - warning("STUB: o_doSentence(%d, %d, %d)", var1, var2, var3); + byte entry = fetchScriptByte(); + byte obj = fetchScriptByte(); + fetchScriptByte(); + + runObjectScript(obj, entry, false, false, NULL); } void ScummEngine_c64::o_unknown2() { byte var1 = fetchScriptByte(); - warning("STUB: o_unknown2(%d)", var1); + error("STUB: o_unknown2(%d)", var1); } void ScummEngine_c64::o_ifActiveObject() { byte obj = fetchScriptByte(); - if (obj == _activeObject) + if (obj == _activeInventory) ScummEngine::fetchScriptWord(); else o_jumpRelative(); @@ -989,7 +982,11 @@ void ScummEngine_c64::o_jumpRelative() { _scriptPointer += offset; } - +void ScummEngine_c64::resetSentence() { + _activeVerb = 0; + _activeInventory = 0; + _activeObject = 0; +} #undef PARAM_1 #undef PARAM_2 diff --git a/engines/scumm/script_v2.cpp b/engines/scumm/script_v2.cpp index 3b82677138..d13b045ed8 100644 --- a/engines/scumm/script_v2.cpp +++ b/engines/scumm/script_v2.cpp @@ -1612,14 +1612,10 @@ void ScummEngine_v2::o2_switchCostumeSet() { } void ScummEngine_v2::resetSentence() { - if (_game.id == GID_MANIAC && _game.platform == Common::kPlatformC64) { - // TODO - } else { - VAR(VAR_SENTENCE_VERB) = VAR(VAR_BACKUP_VERB); - VAR(VAR_SENTENCE_OBJECT1) = 0; - VAR(VAR_SENTENCE_OBJECT2) = 0; - VAR(VAR_SENTENCE_PREPOSITION) = 0; - } + VAR(VAR_SENTENCE_VERB) = VAR(VAR_BACKUP_VERB); + VAR(VAR_SENTENCE_OBJECT1) = 0; + VAR(VAR_SENTENCE_OBJECT2) = 0; + VAR(VAR_SENTENCE_PREPOSITION) = 0; } void ScummEngine_v2::runInventoryScript(int i) { diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 0e7778a6bb..8ede576db3 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -545,6 +545,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS _numObjectsInRoom = 0; _userPut = 0; _userState = 0; + _activeInventory = 0; _activeObject = 0; _resourceHeaderSize = 8; _saveLoadFlag = 0; diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 5a90957092..1905ac523f 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -881,6 +881,7 @@ protected: int8 _userPut; uint16 _userState; + int _activeInventory; int _activeObject; virtual void handleMouseOver(bool updateInventory); diff --git a/engines/scumm/verbs.cpp b/engines/scumm/verbs.cpp index 6334075fe0..cdd47364e1 100644 --- a/engines/scumm/verbs.cpp +++ b/engines/scumm/verbs.cpp @@ -309,11 +309,8 @@ void ScummEngine_v2::checkV2Inventory(int x, int y) { object = findInventory(_scummVars[VAR_EGO], object + 1 + _inventoryOffset); if (_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC) { - // TODO - return; - } - - if (object > 0) { + _activeInventory = object; + } else if (object > 0) { runInputScript(3, object, 0); } } @@ -547,6 +544,7 @@ void ScummEngine_c64::checkExecVerbs() { runScript(3, 0, 0, 0); } } else { + _activeInventory = 0; _activeObject = 0; _activeVerb = 13; if (zone->number == kMainVirtScreen) { |