aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/motion.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2014-05-24 10:11:08 +0300
committerEugene Sandulenko2014-05-24 11:17:03 +0300
commitc4f3f77d74adb7a513819c7542dd1eed67badb95 (patch)
treec0e8d243a1503194f7ae6bcde03b8d792783f077 /engines/fullpipe/motion.cpp
parent2e02e1c9387a62d2be0ffbce2bdb03bde01b9697 (diff)
downloadscummvm-rg350-c4f3f77d74adb7a513819c7542dd1eed67badb95.tar.gz
scummvm-rg350-c4f3f77d74adb7a513819c7542dd1eed67badb95.tar.bz2
scummvm-rg350-c4f3f77d74adb7a513819c7542dd1eed67badb95.zip
FULLPIPE: Further work on MovGraph::method50()
Diffstat (limited to 'engines/fullpipe/motion.cpp')
-rw-r--r--engines/fullpipe/motion.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index ccd246ff8b..cc248e131e 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -738,7 +738,7 @@ bool MovGraph::method44(StaticANIObject *ani, int x, int y) {
int cnt = (*movarr)[0]->_movStepCount;
if (cnt > 0) {
- if ((*movarr)[0]->_movSteps[cnt - 1].link->_flags & 0x4000000)
+ if ((*movarr)[0]->_movSteps[cnt - 1]->link->_flags & 0x4000000)
return true;
}
}
@@ -851,13 +851,13 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
for (int i = 0; i < movarr->_movStepCount; i++) {
while (i < movarr->_movStepCount - 1) {
- if (movarr->_movSteps[i ].link->_dwordArray1[movarr->_movSteps[i - 1].sfield_0 + _field_44] !=
- movarr->_movSteps[i + 1].link->_dwordArray1[movarr->_movSteps[i ].sfield_0 + _field_44])
+ if (movarr->_movSteps[i ]->link->_dwordArray1[movarr->_movSteps[i - 1]->sfield_0 + _field_44] !=
+ movarr->_movSteps[i + 1]->link->_dwordArray1[movarr->_movSteps[i ]->sfield_0 + _field_44])
break;
i++;
}
- MovStep *st = &movarr->_movSteps[i];
+ MovStep *st = movarr->_movSteps[i];
ani->getMovementById(st->link->_dwordArray1[_field_44 + st->sfield_0]);
@@ -865,7 +865,7 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
id2 = staticsId;
} else {
if (i < movarr->_movStepCount - 1)
- id2 = ani->getMovementById(movarr->_movSteps[i + 1].link->_dwordArray1[_field_44 + st->sfield_0])->_staticsObj1->_staticsId;
+ id2 = ani->getMovementById(movarr->_movSteps[i + 1]->link->_dwordArray1[_field_44 + st->sfield_0])->_staticsObj1->_staticsId;
else
id2 = st->link->_dwordArray2[_field_44 + st->sfield_0];
}
@@ -955,18 +955,19 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *
}
}
- v11 = this->_items;
- v12 = idx << 6;
- v13 = (*(MovItem **)((char *)&v11->movitems + v12))[movidx].movarr;
- if ( *(MovArr **)((char *)&v11->movarr + v12) )
- CObjectFree(*(void **)((char *)&v11->movarr + v12));
- memcpy((char *)&this->_items->movarr + v12, v13, 0x20u);
- *(MovArr **)((char *)&this->_items->movarr + v12) = (MovArr *)operator new(8 * v13->_movStepCount);
- memcpy(*(void **)((char *)&this->_items->movarr + v12), v13->_movSteps, 8 * v13->_movStepCount);
- *(int *)((char *)&this->_items->field_10 + v12) = -1;
- *(int *)((char *)&this->_items->field_14 + v12) = 0;
+ if (_items[idx]->movarr)
+ delete _items[idx]->movarr;
+
+ _items[idx]->movarr = _items[idx]->movitems[movidx].movarr;
+
+ _items[idx]->movarr->_movSteps.clear();
+ _items[idx]->movarr->_movSteps = _items[idx]->movitems[movidx].movarr->_movSteps;
+
+ _items[idx]->field_10 = -1;
+ _items[idx]->field_14 = 0;
+
+ MessageQueue *mq = fillMGMinfo(_items[idx]->ani, _items[idx]->movarr, 0);
- MessageQueue *mq = fillMGMinfo(*(StaticANIObject **)((char *)&this->_items->ani + v12), (MovArr *)((char *)&this->_items->movarr + v12), 0);
if (!mq)
return 0;