aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/interaction.cpp73
-rw-r--r--engines/fullpipe/statics.cpp3
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);