aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2014-01-04 14:23:55 +0200
committerEugene Sandulenko2014-01-04 14:23:55 +0200
commit37123c16333d6aa9c3dadc3bda4a6a11371a11b1 (patch)
treea88e480c1425399232974f97b2e7335db510d846
parent3ca8f8c3a245a08aebc1ae9d5ece4c916ee5f674 (diff)
downloadscummvm-rg350-37123c16333d6aa9c3dadc3bda4a6a11371a11b1.tar.gz
scummvm-rg350-37123c16333d6aa9c3dadc3bda4a6a11371a11b1.tar.bz2
scummvm-rg350-37123c16333d6aa9c3dadc3bda4a6a11371a11b1.zip
FULLPIPE: Complete MovGraph2::genMovement()
-rw-r--r--engines/fullpipe/motion.cpp100
-rw-r--r--engines/fullpipe/motion.h3
-rw-r--r--engines/fullpipe/statics.cpp6
-rw-r--r--engines/fullpipe/statics.h1
4 files changed, 65 insertions, 45 deletions
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 0e11d66322..570ab67e20 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -1380,21 +1380,20 @@ int MovGraph2::findLink(Common::Array<MovGraphLink *> *linkList, int idx, Common
}
MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
-#if 0
int mx1 = 0;
int my1 = 0;
- if (!(info->_flags & 2)) {
- mx1 = _items2[info->field_0]->_subItems[info->subIndex].walk[0].mx;
- my1 = _items2[info->field_0]->_subItems[info->subIndex].walk[0].my;
+ if (!(info->flags & 2)) {
+ mx1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mx;
+ my1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._my;
}
int mx2 = 0;
int my2 = 0;
- if (!(info->_flags & 4)) {
- mx2 = _items2[info->field_0]->_subItems[info->subIndex].walk[2].mx;
- my2 = _items2[info->field_0]->_subItems[info->subIndex].walk[2].my;
+ if (!(info->flags & 4)) {
+ mx2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mx;
+ my2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._my;
}
Common::Point point;
@@ -1402,8 +1401,9 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
int y = info->pt2.y - info->pt1.y - my2 - my1;
int x = info->pt2.x - info->pt1.x - mx2 - mx1;
int a2;
+ int mgmLen;
- _mgm->calcLength(&point, _items2[info->field_0].subItems[info->subIndex].walk[1].mov, x, y, &mgmLen, &a2, info->_flags & 1);
+ _mgm.calcLength(&point, _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov, x, y, &mgmLen, &a2, info->flags & 1);
int x1 = point.x;
int y1 = point.y;
@@ -1411,7 +1411,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
if (!(info->flags & 1)) {
if (info->subIndex == 1 || info->subIndex == 0) {
a2 = -1;
- x1 = mgmLen * _items2[info->field_0].subItems[info->subIndex].walk[1].mx;
+ x1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mx;
x = x1;
info->pt2.x = x1 + info->pt1.x + mx1 + mx2;
}
@@ -1420,7 +1420,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
if (!(info->flags & 1)) {
if (info->subIndex == 2 || info->subIndex == 3) {
a2 = -1;
- y1 = mgmLen * _items2[info->field_0].subItems[info->subIndex].walk[1].my;
+ y1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._my;
y = y1;
info->pt2.y = y1 + info->pt1.y + my1 + my2;
}
@@ -1430,23 +1430,23 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
int cntY = 0;
if (!(info->flags & 2)) {
- cntX = Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[0].mov, -1, 1);
- cntY = Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[0].mov, -1, 2);
+ cntX = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 1);
+ cntY = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 2);
}
if (mgmLen > 1) {
- cntX += (mgmLen - 1) * Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 1);
- cntY += (mgmLen - 1) * Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 2);
+ cntX += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 1);
+ cntY += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 2);
}
if (mgmLen > 0) {
- cntX += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 1);
- cntY += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 2);
+ cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 1);
+ cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 2);
}
if (!(info->flags & 4)) {
- cntX += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 1);
- cntY += Movement_countPhasesWithFlag(_items2[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 2);
+ cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 1);
+ cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 2);
}
int dx1 = x - x1;
@@ -1465,7 +1465,8 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
int v34 = dx1 - cntX * x1;
int v35 = dy1 - cntY * y1;
int v72;
- y2 = v34;
+ int x2;
+ int y2 = v34;
if (v34)
x2 = v34 / abs(v34);
@@ -1481,9 +1482,9 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
if (info->flags & 2) {
ex = new ExCommand(
- _items2[info->field_0].objectId,
+ _items2[info->field_0]->_objectId,
5,
- _items2[info->field_0].subItems[info->subIndex].walk[1].movementId,
+ _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._movementId,
info->pt1.x,
info->pt1.y,
0,
@@ -1494,14 +1495,14 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
ex->_field_14 = info->distance1;
- ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
ex->_field_24 = 1;
ex->_excFlags |= 2;
} else {
ex = new ExCommand(
- _items2[info->field_0].objectId,
+ _items2[info->field_0]->_objectId,
5,
- _items2[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].movementId,
+ _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._movementId,
info->pt1.x,
info->pt1.y,
0,
@@ -1512,26 +1513,26 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
ex->_field_14 = info->distance1;
- ex->_keyCode = _items2[info->field_0].obj->_oKeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
ex->_field_24 = 1;
ex->_excFlags |= 2;
mq->addExCommandToEnd(ex);
- ex = _mgm->buildExCommand2(
- _items2[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].mov,
- _items2[info->field_0].objectId,
+ ex = _mgm.buildExCommand2(
+ _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov,
+ _items2[info->field_0]->_objectId,
x1,
y1,
&x2,
&y2,
-1);
ex->_parId = mq->_id;
- ex->_keyCode = _items2[info->field_0]->_okeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
}
mq->addExCommandToEnd(ex);
- for (i = 0; i < mgmLen; ++i) {
+ for (int i = 0; i < mgmLen; ++i) {
int par;
if (i == mgmLen - 1)
@@ -1539,49 +1540,44 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
else
par = -1;
- ex = _mgm->buildExCommand2(
- _items2[info->field_0].subItems[info->subIndex].walk[1].mov,
- _items2[info->field_0].objectId,
+ ex = _mgm.buildExCommand2(
+ _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov,
+ _items2[info->field_0]->_objectId,
x1,
y1,
&x2,
&y2,
par);
ex->_parId = mq->_id;
- ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
mq->addExCommandToEnd(ex);
}
if (!(info->flags & 4)) {
- ex = _mgm->buildExCommand2(
- _items2[info->field_0].subItems[info->subIndex].walk[2].mov,
- _items2[info->field_0].objectId,
+ ex = _mgm.buildExCommand2(
+ _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov,
+ _items2[info->field_0]->_objectId,
x1,
y1,
&x2,
&y2,
-1);
ex->_parId = mq->_id;
- ex->_keyCode = _items2[info->field_0].obj->_okeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
mq->addExCommandToEnd(ex);
}
- ex = new ExCommand(_items2[info->field_0].objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
+ ex = new ExCommand(_items2[info->field_0]->_objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
ex->_field_14 = info->distance2;
- ex->_keyCode = _items[info->field_0].obj->_okeyCode;
+ ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
ex->_field_24 = 0;
ex->_excFlags |= 2;
mq->addExCommandToEnd(ex);
return mq;
-#endif
-
- warning("STUB: MovGraph2::genMovement()");
-
- return 0;
}
MovGraphLink *MovGraph2::findLink1(int x, int y, int idx, int fuzzyMatch) {
@@ -1904,6 +1900,20 @@ int MGM::recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop) {
return 0;
}
+Common::Point *MGM::calcLength(Common::Point *point, Movement *mov, int x, int y, int *x1, int *y1, int flag) {
+ warning("STUB: MGM::calcLength()");
+
+ return point;
+}
+
+ExCommand2 *MGM::buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len) {
+ ExCommand2 *ex2 = new ExCommand2;
+
+ warning("STUB: MGM::buildExCommand2()");
+
+ return ex2;
+}
+
MovGraphLink::MovGraphLink() {
_distance = 0;
_angle = 0;
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 1e813eec57..2d39a276df 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -30,6 +30,7 @@ class Movement;
class MctlConnectionPoint;
class MovGraphLink;
class MessageQueue;
+class ExCommand2;
int startWalkTo(int objId, int objKey, int x, int y, int a5);
int doSomeAnimation(int objId, int objKey, int a3);
@@ -174,6 +175,8 @@ public:
int getStaticsIndexById(int idx, int16 id);
void clearMovements2(int idx);
int recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop);
+ Common::Point *calcLength(Common::Point *point, Movement *mov, int x, int y, int *x1, int *y1, int flag);
+ ExCommand2 *buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len);
};
struct MctlLadderMovementVars {
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp
index 2af9cff743..e7bc2b9ba6 100644
--- a/engines/fullpipe/statics.cpp
+++ b/engines/fullpipe/statics.cpp
@@ -1528,6 +1528,12 @@ int Movement::calcDuration() {
return res;
}
+int Movement::countPhasesWithFlag(int maxidx, int flag) {
+ warning("STUB: Movement::countPhasesWithFlag()");
+
+ return 0;
+}
+
void Movement::setDynamicPhaseIndex(int index) {
debug(7, "Movement::setDynamicPhaseIndex(%d)", index);
while (_currDynamicPhaseIndex < index)
diff --git a/engines/fullpipe/statics.h b/engines/fullpipe/statics.h
index c8537dfa97..0e2e6db1b2 100644
--- a/engines/fullpipe/statics.h
+++ b/engines/fullpipe/statics.h
@@ -153,6 +153,7 @@ class Movement : public GameObject {
DynamicPhase *getDynamicPhaseByIndex(int idx);
int calcDuration();
+ int countPhasesWithFlag(int maxidx, int flag);
void removeFirstPhase();
bool gotoNextFrame(void (*_callback1)(int, Common::Point *point, int, int), void (*callback2)(int *));