diff options
-rw-r--r-- | engines/fullpipe/interaction.cpp | 73 | ||||
-rw-r--r-- | engines/fullpipe/statics.cpp | 3 |
2 files changed, 38 insertions, 38 deletions
diff --git a/engines/fullpipe/interaction.cpp b/engines/fullpipe/interaction.cpp index 08c8c8fe47..38ca73b539 100644 --- a/engines/fullpipe/interaction.cpp +++ b/engines/fullpipe/interaction.cpp @@ -168,50 +168,51 @@ bool InteractionController::handleInteraction(StaticANIObject *subj, GameObject return false; if (!inter->_objectId2) { - if (obj->_objtype != kObjTypeStaticANIObject) - return false; - - StaticANIObject *ani = static_cast<StaticANIObject *>(obj); - - if (!ani->isIdle()) - return false; + if (obj->_objtype == kObjTypeStaticANIObject) { + StaticANIObject *ani = static_cast<StaticANIObject *>(obj); - if (ani->_flags & 0x100) - return false; + if (inter->_flags & 1) { + if (!ani->isIdle()) + return false; - if (!inter->_staticsId1 || !(inter->_flags & 1)) - goto LABEL_38; + if (ani->_flags & 0x100) + return false; + } else if (inter->_staticsId1 != 0) { + if (ani->_movement || ani->_statics == 0 || ani->_statics->_staticsId != inter->_staticsId1) { + mq = ani->changeStatics1(inter->_staticsId1); + if (!mq) + return false; - if (ani->_movement || ani->_statics == 0 || ani->_statics->_staticsId != inter->_staticsId1) { - mq = ani->changeStatics1(inter->_staticsId1); - if (!mq) - return false; + ex = new ExCommand((subj ? subj->_id : 0), 55, 0, 0, 0, 0, 1, 0, 0, 0); + ex->_x = obj->_id; + ex->_y = obj->_odelay; + ex->_param = subj ? subj->_odelay : 0; + ex->_excFlags = 3; + ex->_field_14 = (obj->_objtype != kObjTypePictureObject); + ex->_field_20 = invId; + mq->addExCommandToEnd(ex); - ex = new ExCommand((subj ? subj->_id : 0), 55, 0, 0, 0, 0, 1, 0, 0, 0); - ex->_x = obj->_id; - ex->_y = obj->_odelay; - ex->_param = subj ? subj->_odelay : 0; - ex->_excFlags = 3; - ex->_field_14 = (obj->_objtype != kObjTypePictureObject); - ex->_field_20 = invId; - mq->addExCommandToEnd(ex); + if (mq->_isFinished) { + mq->_isFinished = 0; + ani->queueMessageQueue(mq); + } - if (mq->_isFinished) { - mq->_isFinished = 0; - ani->queueMessageQueue(mq); + return true; + } else { + if (ani->getMessageQueue()) + ani->queueMessageQueue(0); + } } - } else { - if (ani->getMessageQueue()) - ani->queueMessageQueue(0); -LABEL_38: - if (inter->_messageQueue) { - mq = new MessageQueue(inter->_messageQueue, 0, 1); - mq->changeParam28ForObjectId(ani->_id, -1, ani->_odelay); + } - if (!mq->chain(0)) - return false; - } + if (inter->_messageQueue) { + mq = new MessageQueue(inter->_messageQueue, 0, 1); + mq->changeParam28ForObjectId(obj->_id, -1, obj->_odelay); + + if (!mq->chain(0)) + return false; } + return true; } diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 524eeff5d9..a1252a75af 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -348,8 +348,7 @@ void StaticANIObject::startMQIfIdle(int qId, int flag) { } bool StaticANIObject::isIdle() { - if (_objtype != kObjTypeStaticANIObject) - return true; + assert(_objtype == kObjTypeStaticANIObject); if (_messageQueueId) { MessageQueue *m = g_fp->_globalMessageQueueList->getMessageQueueById(_messageQueueId); |