aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/objects.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-06-03 18:42:32 -0400
committerPaul Gilbert2015-06-03 18:42:32 -0400
commit3dac0c66462fa50e577d29e504d99fdb0a796866 (patch)
treed45c095491857e7d946a1a1ffaae9d6c7e9b9451 /engines/sherlock/objects.cpp
parent2cec902479ba77dc411f42be2ec51e3a9795a340 (diff)
downloadscummvm-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.cpp32
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;