diff options
author | Paul Gilbert | 2015-06-03 18:42:32 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-06-03 18:42:32 -0400 |
commit | 3dac0c66462fa50e577d29e504d99fdb0a796866 (patch) | |
tree | d45c095491857e7d946a1a1ffaae9d6c7e9b9451 /engines/sherlock/objects.cpp | |
parent | 2cec902479ba77dc411f42be2ec51e3a9795a340 (diff) | |
download | scummvm-rg350-3dac0c66462fa50e577d29e504d99fdb0a796866.tar.gz scummvm-rg350-3dac0c66462fa50e577d29e504d99fdb0a796866.tar.bz2 scummvm-rg350-3dac0c66462fa50e577d29e504d99fdb0a796866.zip |
SHERLOCK: Implement changes for checkObject
Diffstat (limited to 'engines/sherlock/objects.cpp')
-rw-r--r-- | engines/sherlock/objects.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp index 4527c4e92a..124e7c5c1c 100644 --- a/engines/sherlock/objects.cpp +++ b/engines/sherlock/objects.cpp @@ -648,9 +648,18 @@ void Object::checkObject() { codeFound = true; int v = _sequences[_frameNumber]; - if (v >= 228) { + // Check for a Talk or Listen Sequence + if (IS_ROSE_TATTOO && v == ALLOW_TALK_CODE) { + if (_gotoSeq) { + setObjTalkSequence(_gotoSeq); + } else { + ++_frameNumber; + } + } else if (IS_ROSE_TATTOO && (v == TALK_SEQ_CODE || v == TALK_LISTEN_CODE)) { + error("TODO"); + } else if (v >= GOTO_CODE) { // Goto code found - v -= 228; + v -= GOTO_CODE; _seqCounter2 = _seqCounter; _seqStack = _frameNumber + 1; setObjSequence(v, false); @@ -686,6 +695,12 @@ void Object::checkObject() { default: break; } + } else if (IS_ROSE_TATTOO && v == TELEPORT_CODE) { + error("TODO"); + } else if (IS_ROSE_TATTOO && v == CALL_TALK_CODE) { + error("TODO"); + } else if (IS_ROSE_TATTOO && v == HIDE_CODE) { + error("TODO"); } else { v -= 128; @@ -708,6 +723,14 @@ void Object::checkObject() { // Will be incremented below to return back to original value --_frameNumber; v = 0; + + } else if (IS_ROSE_TATTOO && v == 10) { + // Set delta for objects + _delta = Common::Point(READ_LE_UINT16(&_sequences[_frameNumber + 1]), + READ_LE_UINT16(&_sequences[_frameNumber + 3])); + _noShapeSize = Common::Point(0, 0); + _frameNumber += 4; + } else if (v == 10) { // Set delta for objects Common::Point pt(_sequences[_frameNumber + 1], _sequences[_frameNumber + 2]); @@ -723,6 +746,7 @@ void Object::checkObject() { _delta = pt; _frameNumber += 2; + } else if (v < USE_COUNT) { for (int idx = 0; idx < NAMES_COUNT; ++idx) { checkNameForCodes(_use[v]._names[idx], nullptr); @@ -863,6 +887,10 @@ void Object::setObjSequence(int seq, bool wait) { } } +void Object::setObjTalkSequence(int seq) { + error("TODO: setObjTalkSequence"); +} + int Object::checkNameForCodes(const Common::String &name, const char *const messages[]) { Map &map = *_vm->_map; People &people = *_vm->_people; |