diff options
Diffstat (limited to 'engines/sherlock/objects.cpp')
-rw-r--r-- | engines/sherlock/objects.cpp | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp index 270ddc8ec4..0d330370e7 100644 --- a/engines/sherlock/objects.cpp +++ b/engines/sherlock/objects.cpp @@ -290,26 +290,39 @@ void BaseObject::checkObject() { } else { v -= 128; - // 68-99 is a squence code + // 68-99 is a sequence code if (v > SEQ_TO_CODE) { - byte *p = &_sequences[_frameNumber]; - v -= SEQ_TO_CODE; // # from 1-32 - _seqTo = v; - *p = *(p - 1); - - if (*p > 128) - // If the high bit is set, convert to a real frame - *p -= (byte)(SEQ_TO_CODE - 128); - - if (*p > _seqTo) - *p -= 1; - else - *p += 1; - - // Will be incremented below to return back to original value - --_frameNumber; - v = 0; - + if (IS_ROSE_TATTOO) { + ++_frameNumber; + byte *p = &_sequences[_frameNumber]; + _seqTo = *p; + *p = *(p - 2); + + if (*p > _seqTo) + *p -= 1; + else + *p += 1; + + --_frameNumber; + } else { + byte *p = &_sequences[_frameNumber]; + v -= SEQ_TO_CODE; // # from 1-32 + _seqTo = v; + *p = *(p - 1); + + if (*p > 128) + // If the high bit is set, convert to a real frame + *p -= (byte)(SEQ_TO_CODE - 128); + + if (*p > _seqTo) + *p -= 1; + else + *p += 1; + + // 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]), |